add api UTs
This commit is contained in:
89
__tests__/version/delete-version.test.ts
Normal file
89
__tests__/version/delete-version.test.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
import {rest} from 'msw'
|
||||
import {setupServer} from 'msw/node'
|
||||
import {deletePackageVersion, deletePackageVersions} from '../../src/version'
|
||||
|
||||
describe('delete tests - mock rest', () => {
|
||||
let server = setupServer()
|
||||
|
||||
beforeEach(() => {
|
||||
server = setupServer()
|
||||
server.listen()
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
server.close()
|
||||
})
|
||||
|
||||
it('deletePackageVersion', done => {
|
||||
server.use(
|
||||
rest.delete(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions/123',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(204))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
deletePackageVersion(
|
||||
'123',
|
||||
'test-owner',
|
||||
'test-package',
|
||||
'npm',
|
||||
'test-token'
|
||||
).subscribe(result => {
|
||||
expect(result).toBe(true)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('deletePackageVersions', done => {
|
||||
server.use(
|
||||
rest.delete(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions/*',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(204))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
deletePackageVersions(
|
||||
['123', '456', '789'],
|
||||
'test-owner',
|
||||
'test-package',
|
||||
'npm',
|
||||
'test-token'
|
||||
)
|
||||
.subscribe(result => {
|
||||
expect(result).toBe(true)
|
||||
// done() is called in the finally block
|
||||
})
|
||||
.add(done)
|
||||
})
|
||||
|
||||
it('deletePackageVersion - API error', done => {
|
||||
server.use(
|
||||
rest.delete(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions/123',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(500))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
deletePackageVersion(
|
||||
'123',
|
||||
'test-owner',
|
||||
'test-package',
|
||||
'npm',
|
||||
'test-token'
|
||||
).subscribe(
|
||||
() => {
|
||||
done.fail('should not get here.')
|
||||
},
|
||||
err => {
|
||||
expect(err).toContain('delete version API failed.')
|
||||
done()
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
123
__tests__/version/get-version.test.ts
Normal file
123
__tests__/version/get-version.test.ts
Normal file
@@ -0,0 +1,123 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
import {rest} from 'msw'
|
||||
import {setupServer} from 'msw/node'
|
||||
import {
|
||||
getOldestVersions as _getOldestVersions,
|
||||
RestQueryInfo
|
||||
} from '../../src/version'
|
||||
import {Observable} from 'rxjs'
|
||||
import {getMockedVersionsResponse} from './rest.mock'
|
||||
|
||||
const RATE_LIMIT = 99
|
||||
|
||||
describe('get versions tests -- mock rest', () => {
|
||||
let server = setupServer()
|
||||
|
||||
beforeEach(() => {
|
||||
server = setupServer()
|
||||
server.listen()
|
||||
})
|
||||
|
||||
afterEach(() => {
|
||||
server.close()
|
||||
})
|
||||
|
||||
it('getOldestVersions -- success', done => {
|
||||
const numVersions = RATE_LIMIT
|
||||
const resp = getMockedVersionsResponse(numVersions)
|
||||
|
||||
server.use(
|
||||
rest.get(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(200), ctx.json(resp))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
getOldestVersions({numVersions}).subscribe(result => {
|
||||
expect(result.versions.length).toBe(numVersions)
|
||||
for (let i = 0; i < numVersions; i++) {
|
||||
expect(result.versions[i].id).toBe(resp[i].id)
|
||||
expect(result.versions[i].version).toBe(resp[i].name)
|
||||
expect(result.versions[i].created_at).toBe(resp[i].created_at)
|
||||
}
|
||||
expect(result.paginate).toBe(true)
|
||||
expect(result.totalCount).toBe(numVersions)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('getOldestVersions -- paginate is false when fetched versions is less than page size', done => {
|
||||
const numVersions = 5
|
||||
|
||||
server.use(
|
||||
rest.get(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions',
|
||||
(req, res, ctx) => {
|
||||
return res(
|
||||
ctx.status(200),
|
||||
ctx.json(getMockedVersionsResponse(numVersions))
|
||||
)
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
// In the call numVersions is set to RATE_LIMIT, but the response has only 5 versions.
|
||||
getOldestVersions().subscribe(result => {
|
||||
expect(result.paginate).toBe(false)
|
||||
done()
|
||||
})
|
||||
})
|
||||
|
||||
it('getOldestVersions -- API error', done => {
|
||||
server.use(
|
||||
rest.get(
|
||||
'https://api.github.com/users/test-owner/packages/npm/test-package/versions',
|
||||
(req, res, ctx) => {
|
||||
return res(ctx.status(500))
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
getOldestVersions().subscribe(
|
||||
() => {
|
||||
done.fail('should not get here.')
|
||||
},
|
||||
err => {
|
||||
expect(err).toContain('get versions API failed.')
|
||||
done()
|
||||
}
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
interface Params {
|
||||
owner?: string
|
||||
packageName?: string
|
||||
packageType?: string
|
||||
numVersions?: number
|
||||
page?: number
|
||||
token?: string
|
||||
}
|
||||
|
||||
const defaultParams = {
|
||||
owner: 'test-owner',
|
||||
packageName: 'test-package',
|
||||
packageType: 'npm',
|
||||
numVersions: RATE_LIMIT,
|
||||
page: 1,
|
||||
token: 'test-token'
|
||||
}
|
||||
|
||||
function getOldestVersions(params?: Params): Observable<RestQueryInfo> {
|
||||
const p: Required<Params> = {...defaultParams, ...params}
|
||||
return _getOldestVersions(
|
||||
p.owner,
|
||||
p.packageName,
|
||||
p.packageType,
|
||||
p.numVersions,
|
||||
p.page,
|
||||
p.token
|
||||
)
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
import {
|
||||
GraphQlQueryResponseData,
|
||||
RequestParameters
|
||||
} from '@octokit/graphql/dist-types/types'
|
||||
|
||||
import * as Graphql from '../../src/version/graphql'
|
||||
import {GetVersionsQueryResponse} from '../../src/version'
|
||||
|
||||
export function getMockedOldestQueryResponse(
|
||||
numVersions: number
|
||||
): GetVersionsQueryResponse {
|
||||
const versions = []
|
||||
numVersions = numVersions < 100 ? numVersions : numVersions
|
||||
for (let i = 1; i <= numVersions; ++i) {
|
||||
versions.push({
|
||||
node: {
|
||||
id: i.toString(),
|
||||
version: `${i}.0.0`
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
return {
|
||||
repository: {
|
||||
packages: {
|
||||
edges: [
|
||||
{
|
||||
node: {
|
||||
name: 'test',
|
||||
versions: {
|
||||
totalCount: 200,
|
||||
edges: versions.reverse(),
|
||||
pageInfo: {
|
||||
startCursor: 'AAA',
|
||||
hasPreviousPage: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function mockOldestQueryResponse(numVersions: number): void {
|
||||
const response = new Promise<GetVersionsQueryResponse>(resolve => {
|
||||
resolve(getMockedOldestQueryResponse(numVersions))
|
||||
}) as Promise<GraphQlQueryResponseData>
|
||||
jest
|
||||
.spyOn(Graphql, 'graphql')
|
||||
.mockImplementation(
|
||||
(token: string, query: string, parameters: RequestParameters) => response
|
||||
)
|
||||
}
|
||||
21
__tests__/version/rest.mock.ts
Normal file
21
__tests__/version/rest.mock.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
import {RestEndpointMethodTypes} from '@octokit/plugin-rest-endpoint-methods/dist-types/generated/parameters-and-response-types'
|
||||
|
||||
type GetVersionsResponseData = RestEndpointMethodTypes['packages']['getAllPackageVersionsForPackageOwnedByUser']['response']['data']
|
||||
|
||||
export function getMockedVersionsResponse(
|
||||
numVersions: number
|
||||
): GetVersionsResponseData {
|
||||
const versions: GetVersionsResponseData = []
|
||||
for (let i = 1; i <= numVersions; ++i) {
|
||||
versions.push({
|
||||
id: i,
|
||||
name: `v${i}.0.0`,
|
||||
created_at: new Date().toISOString(),
|
||||
url: '',
|
||||
package_html_url: '',
|
||||
updated_at: ''
|
||||
})
|
||||
}
|
||||
return versions
|
||||
}
|
||||
92
dist/index.js
vendored
92
dist/index.js
vendored
@@ -24643,6 +24643,51 @@ function noop() {
|
||||
module.exports = uniq;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 7493:
|
||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
const os = __nccwpck_require__(2087);
|
||||
|
||||
const nameMap = new Map([
|
||||
[21, ['Monterey', '12']],
|
||||
[20, ['Big Sur', '11']],
|
||||
[19, ['Catalina', '10.15']],
|
||||
[18, ['Mojave', '10.14']],
|
||||
[17, ['High Sierra', '10.13']],
|
||||
[16, ['Sierra', '10.12']],
|
||||
[15, ['El Capitan', '10.11']],
|
||||
[14, ['Yosemite', '10.10']],
|
||||
[13, ['Mavericks', '10.9']],
|
||||
[12, ['Mountain Lion', '10.8']],
|
||||
[11, ['Lion', '10.7']],
|
||||
[10, ['Snow Leopard', '10.6']],
|
||||
[9, ['Leopard', '10.5']],
|
||||
[8, ['Tiger', '10.4']],
|
||||
[7, ['Panther', '10.3']],
|
||||
[6, ['Jaguar', '10.2']],
|
||||
[5, ['Puma', '10.1']]
|
||||
]);
|
||||
|
||||
const macosRelease = release => {
|
||||
release = Number((release || os.release()).split('.')[0]);
|
||||
|
||||
const [name, version] = nameMap.get(release);
|
||||
|
||||
return {
|
||||
name,
|
||||
version
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = macosRelease;
|
||||
// TODO: remove this in the next major version
|
||||
module.exports.default = macosRelease;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 8560:
|
||||
@@ -26718,7 +26763,7 @@ function onceStrict (fn) {
|
||||
"use strict";
|
||||
|
||||
const os = __nccwpck_require__(2087);
|
||||
const macosRelease = __nccwpck_require__(9787);
|
||||
const macosRelease = __nccwpck_require__(7493);
|
||||
const winRelease = __nccwpck_require__(3515);
|
||||
|
||||
const osName = (platform, release) => {
|
||||
@@ -26764,51 +26809,6 @@ const osName = (platform, release) => {
|
||||
module.exports = osName;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 9787:
|
||||
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
|
||||
|
||||
"use strict";
|
||||
|
||||
const os = __nccwpck_require__(2087);
|
||||
|
||||
const nameMap = new Map([
|
||||
[21, ['Monterey', '12']],
|
||||
[20, ['Big Sur', '11']],
|
||||
[19, ['Catalina', '10.15']],
|
||||
[18, ['Mojave', '10.14']],
|
||||
[17, ['High Sierra', '10.13']],
|
||||
[16, ['Sierra', '10.12']],
|
||||
[15, ['El Capitan', '10.11']],
|
||||
[14, ['Yosemite', '10.10']],
|
||||
[13, ['Mavericks', '10.9']],
|
||||
[12, ['Mountain Lion', '10.8']],
|
||||
[11, ['Lion', '10.7']],
|
||||
[10, ['Snow Leopard', '10.6']],
|
||||
[9, ['Leopard', '10.5']],
|
||||
[8, ['Tiger', '10.4']],
|
||||
[7, ['Panther', '10.3']],
|
||||
[6, ['Jaguar', '10.2']],
|
||||
[5, ['Puma', '10.1']]
|
||||
]);
|
||||
|
||||
const macosRelease = release => {
|
||||
release = Number((release || os.release()).split('.')[0]);
|
||||
|
||||
const [name, version] = nameMap.get(release);
|
||||
|
||||
return {
|
||||
name,
|
||||
version
|
||||
};
|
||||
};
|
||||
|
||||
module.exports = macosRelease;
|
||||
// TODO: remove this in the next major version
|
||||
module.exports.default = macosRelease;
|
||||
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ 1330:
|
||||
|
||||
2436
package-lock.json
generated
2436
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -41,6 +41,7 @@
|
||||
"jest": "^27.3.1",
|
||||
"jest-circus": "^27.3.1",
|
||||
"js-yaml": "^3.13.1",
|
||||
"msw": "^0.49.2",
|
||||
"prettier": "^1.19.1",
|
||||
"ts-jest": "^27.0.7",
|
||||
"typescript": "^3.6.4"
|
||||
|
||||
Reference in New Issue
Block a user