Fixes #6 Add support for updating releases

This commit is contained in:
Nick Cipollo
2019-12-12 17:09:21 -05:00
parent de74298134
commit 7319d490c8
12 changed files with 297 additions and 51 deletions

View File

@@ -5,6 +5,8 @@ import { Releases } from "../src/Releases";
import { ArtifactUploader } from "../src/ArtifactUploader";
const createMock = jest.fn()
const getMock = jest.fn()
const updateMock = jest.fn()
const uploadMock = jest.fn()
const artifacts = [
@@ -14,9 +16,8 @@ const artifacts = [
const artifactData = Buffer.from('blob', 'utf-8')
const body = 'body'
const commit = 'commit'
const contentType = "raw"
const contentLength = 100
const draft = true
const id = 100
const name = 'name'
const tag = 'tag'
const token = 'token'
@@ -25,11 +26,13 @@ const url = 'http://api.example.com'
describe("Action", () => {
beforeEach(() => {
createMock.mockClear()
getMock.mockClear()
updateMock.mockClear()
uploadMock.mockClear()
})
it('creates release but does not upload if no artifact', async () => {
const action = createAction(false)
const action = createAction(false, false)
await action.perform()
@@ -38,12 +41,7 @@ describe("Action", () => {
})
it('creates release then uploads artifact', async () => {
const action = createAction(true)
createMock.mockResolvedValue({
data: {
upload_url: url
}
})
const action = createAction(false, true)
await action.perform()
@@ -52,7 +50,7 @@ describe("Action", () => {
})
it('throws error when create fails', async () => {
const action = createAction(true)
const action = createAction(false, true)
createMock.mockRejectedValue("error")
expect.hasAssertions()
@@ -66,13 +64,56 @@ describe("Action", () => {
expect(uploadMock).not.toBeCalled()
})
it('throws error when get fails', async () => {
const action = createAction(true, false)
const error = {
errors: [
{
code: 'already_exists'
}
]
}
createMock.mockRejectedValue(error)
getMock.mockRejectedValue("error")
expect.hasAssertions()
try {
await action.perform()
} catch (error) {
expect(error).toEqual("error")
}
expect(createMock).toBeCalledWith(tag, body, commit, draft, name)
expect(uploadMock).not.toBeCalled()
})
it('throws error when update fails', async () => {
const action = createAction(true, false)
const error = {
errors: [
{
code: 'already_exists'
}
]
}
createMock.mockRejectedValue(error)
updateMock.mockRejectedValue("error")
expect.hasAssertions()
try {
await action.perform()
} catch (error) {
expect(error).toEqual("error")
}
expect(createMock).toBeCalledWith(tag, body, commit, draft, name)
expect(uploadMock).not.toBeCalled()
})
it('throws error when upload fails', async () => {
const action = createAction(true)
createMock.mockResolvedValue({
data: {
upload_url: url
}
})
const action = createAction(false, true)
uploadMock.mockRejectedValue("error")
expect.hasAssertions()
@@ -86,7 +127,45 @@ describe("Action", () => {
expect(uploadMock).toBeCalledWith(artifacts, url)
})
function createAction(hasArtifact: boolean): Action {
it('updates release but does not upload if no artifact', async () => {
const action = createAction(true, false)
const error = {
errors: [
{
code: 'already_exists'
}
]
}
createMock.mockRejectedValue(error)
await action.perform()
expect(createMock).toBeCalledWith(tag, body, commit, draft, name)
expect(uploadMock).not.toBeCalled()
})
it('updates release then uploads artifact', async () => {
const action = createAction(true, true)
const error = {
errors: [
{
code: 'already_exists'
}
]
}
createMock.mockRejectedValue(error)
await action.perform()
expect(createMock).toBeCalledWith(tag, body, commit, draft, name)
expect(uploadMock).toBeCalledWith(artifacts, url)
})
function createAction(allowUpdates: boolean, hasArtifact: boolean): Action {
let inputArtifact: Artifact[]
if (hasArtifact) {
inputArtifact = artifacts
@@ -96,11 +175,32 @@ describe("Action", () => {
const MockReleases = jest.fn<Releases, any>(() => {
return {
create: createMock,
uploadArtifact: jest.fn()
getByTag: getMock,
update: updateMock,
uploadArtifact: uploadMock
}
})
createMock.mockResolvedValue({
data: {
upload_url: url
}
})
getMock.mockResolvedValue({
data: {
id: id
}
})
updateMock.mockResolvedValue({
data: {
upload_url: url
}
})
uploadMock.mockResolvedValue({})
const MockInputs = jest.fn<Inputs, any>(() => {
return {
allowUpdates: allowUpdates,
artifacts: inputArtifact,
body: body,
commit: commit,