68 lines
2.0 KiB
JavaScript
68 lines
2.0 KiB
JavaScript
import Joi from 'joi'
|
|
import { expect } from 'chai'
|
|
import sinon from 'sinon'
|
|
import { GithubAuthV3Service } from './github-auth-service.js'
|
|
import GithubApiProvider from './github-api-provider.js'
|
|
|
|
describe('GithubAuthV3Service', function () {
|
|
class DummyGithubAuthV3Service extends GithubAuthV3Service {
|
|
static category = 'build'
|
|
static route = { base: 'runs' }
|
|
|
|
async handle() {
|
|
const { requiredString } = await this._requestJson({
|
|
schema: Joi.object({
|
|
requiredString: Joi.string().required(),
|
|
}).required(),
|
|
url: '/repos/badges/shields/check-runs',
|
|
options: {
|
|
headers: {
|
|
Accept: 'application/vnd.github.antiope-preview+json',
|
|
},
|
|
},
|
|
})
|
|
return { message: requiredString }
|
|
}
|
|
}
|
|
|
|
it('forwards custom Accept header', async function () {
|
|
const requestFetcher = sinon.stub().returns(
|
|
Promise.resolve({
|
|
buffer: '{"requiredString": "some-string"}',
|
|
res: {
|
|
statusCode: 200,
|
|
headers: {
|
|
'x-ratelimit-limit': 12500,
|
|
'x-ratelimit-remaining': 7955,
|
|
'x-ratelimit-reset': 123456789,
|
|
},
|
|
},
|
|
}),
|
|
)
|
|
const githubApiProvider = new GithubApiProvider({
|
|
baseUrl: 'https://github-api.example.com',
|
|
authType: GithubApiProvider.AUTH_TYPES.TOKEN_POOL,
|
|
restApiVersion: '2022-11-28',
|
|
})
|
|
const mockToken = { update: sinon.mock(), invalidate: sinon.mock() }
|
|
sinon.stub(githubApiProvider.standardTokens, 'next').returns(mockToken)
|
|
|
|
DummyGithubAuthV3Service.invoke({
|
|
requestFetcher,
|
|
githubApiProvider,
|
|
})
|
|
|
|
expect(requestFetcher).to.have.been.calledOnceWith(
|
|
'https://github-api.example.com/repos/badges/shields/check-runs',
|
|
{
|
|
headers: {
|
|
'User-Agent': 'shields (self-hosted)/dev',
|
|
Accept: 'application/vnd.github.antiope-preview+json',
|
|
Authorization: 'token undefined',
|
|
'X-GitHub-Api-Version': '2022-11-28',
|
|
},
|
|
},
|
|
)
|
|
})
|
|
})
|