delete package versions action v1

This commit is contained in:
Trent Jones
2020-02-29 12:56:23 -06:00
parent 91c0d1036c
commit 4e192c30d8
19 changed files with 38087 additions and 336 deletions
+90
View File
@@ -0,0 +1,90 @@
import {Input, InputParams} from '../src/input'
import {deleteVersions, getVersionIds} from '../src/delete'
describe.skip('index tests -- call graphql', () => {
it('getVersionIds test -- get oldest version', done => {
const numVersions = 1
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
ids => {
expect(ids.length).toBe(numVersions)
done()
}
)
})
it('getVersionIds test -- get oldest 3 versions', done => {
const numVersions = 3
getVersionIds(getInput({numOldVersionsToDelete: numVersions})).subscribe(
ids => {
expect(ids.length).toBe(numVersions)
done()
}
)
})
it('getVersionIds test -- supplied package version id', done => {
const suppliedIds = [
'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
'BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB',
'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
]
getVersionIds(getInput({packageVersionIds: suppliedIds})).subscribe(ids => {
expect(ids).toBe(suppliedIds)
done()
})
})
it('deleteVersions test -- missing token', done => {
deleteVersions(getInput({token: ''})).subscribe({
error: err => {
expect(err).toBeTruthy()
done()
},
complete: async () => done.fail('no error thrown')
})
})
it('deleteVersions test -- missing packageName', done => {
deleteVersions(getInput({packageName: ''})).subscribe({
error: err => {
expect(err).toBeTruthy()
done()
},
complete: async () => done.fail('no error thrown')
})
})
it('deleteVersions test -- delete oldest version', done => {
deleteVersions(getInput({numOldVersionsToDelete: 1})).subscribe(
isSuccess => {
expect(isSuccess).toBe(true)
done()
}
)
})
it('deleteVersions test -- delete 3 oldest versions', done => {
deleteVersions(getInput({numOldVersionsToDelete: 3})).subscribe(
isSuccess => {
expect(isSuccess).toBe(true)
done()
}
)
})
})
const defaultInput: InputParams = {
packageVersionIds: [],
owner: 'trent-j',
repo: 'actions-testing',
packageName: 'com.github.trent-j.actions-test',
numOldVersionsToDelete: 1,
token: process.env.GITHUB_TOKEN as string
}
function getInput(params?: InputParams): Input {
return new Input({...defaultInput, ...params})
}
-27
View File
@@ -1,27 +0,0 @@
import {wait} from '../src/wait'
import * as process from 'process'
import * as cp from 'child_process'
import * as path from 'path'
test('throws invalid number', async () => {
const input = parseInt('foo', 10)
await expect(wait(input)).rejects.toThrow('milliseconds not a number')
})
test('wait 500 ms', async () => {
const start = new Date()
await wait(500)
const end = new Date()
var delta = Math.abs(end.getTime() - start.getTime())
expect(delta).toBeGreaterThan(450)
})
// shows how the runner will run a javascript action with env / stdout protocol
test('test runs', () => {
process.env['INPUT_MILLISECONDS'] = '500'
const ip = path.join(__dirname, '..', 'lib', 'main.js')
const options: cp.ExecSyncOptions = {
env: process.env
}
console.log(cp.execSync(`node ${ip}`, options).toString())
})
+25
View File
@@ -0,0 +1,25 @@
import {deletePackageVersion, deletePackageVersions} from '../../src/version'
const githubToken = process.env.GITHUB_TOKEN as string
describe.skip('delete tests', () => {
it('deletePackageVersion', async () => {
const response = await deletePackageVersion(
'MDE0OlBhY2thZ2VWZXJzaW9uNjg5OTU1',
githubToken
).toPromise()
expect(response).toBe(true)
})
it('deletePackageVersions', async () => {
const response = await deletePackageVersions(
[
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjc0',
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4Mjcx',
'MDE0OlBhY2thZ2VWZXJzaW9uNjk4MjY3'
],
githubToken
).toPromise()
expect(response).toBe(true)
})
})
+68
View File
@@ -0,0 +1,68 @@
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
import {mockOldestQueryResponse} from './graphql.mock'
import {
getOldestVersions as _getOldestVersions,
VersionInfo
} from '../../src/version'
import {Observable} from 'rxjs'
describe.skip('get versions tests -- call graphql', () => {
it('getOldestVersions -- succeeds', done => {
const numVersions = 1
getOldestVersions({numVersions}).subscribe(versions => {
expect(versions.length).toBe(numVersions)
done()
})
})
it('getOldestVersions -- fails for invalid repo', done => {
getOldestVersions({repo: 'actions-testin'}).subscribe({
error: err => {
expect(err).toBeTruthy()
done()
},
complete: async () => done.fail('no error thrown')
})
})
})
describe('get versions tests -- mock graphql', () => {
it('getOldestVersions -- success', done => {
const numVersions = 5
mockOldestQueryResponse(numVersions)
getOldestVersions({numVersions}).subscribe(versions => {
expect(versions.length).toBe(numVersions)
done()
})
})
})
interface Params {
owner?: string
repo?: string
packageName?: string
numVersions?: number
token?: string
}
const defaultParams = {
owner: 'trent-j',
repo: 'actions-testing',
packageName: 'com.github.trent-j.actions-test',
numVersions: 3,
token: process.env.GITHUB_TOKEN as string
}
function getOldestVersions(params?: Params): Observable<VersionInfo[]> {
const p: Required<Params> = {...defaultParams, ...params}
return _getOldestVersions(
p.owner,
p.repo,
p.packageName,
p.numVersions,
p.token
)
}
+56
View File
@@ -0,0 +1,56 @@
import {
GraphQlQueryResponseData,
RequestParameters
} from '@octokit/graphql/dist-types/types'
import * as Graphql from '@octokit/graphql'
import {GetVersionsQueryResponse} from '../../src/version'
import SpyInstance = jest.SpyInstance
export function mockGraphql(): SpyInstance<
Promise<GraphQlQueryResponseData>,
[string, (RequestParameters | undefined)?]
> {
return jest.spyOn(Graphql, 'graphql')
}
export function getMockedOldestQueryResponse(
numVersions: number
): GetVersionsQueryResponse {
const versions = []
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: {
edges: versions.reverse()
}
}
}
]
}
}
}
}
export function mockOldestQueryResponse(
numVersions: number
): ReturnType<typeof mockGraphql> {
return mockGraphql().mockResolvedValue(
getMockedOldestQueryResponse(numVersions)
)
}