Skip to content

Commit

Permalink
Introduce integration test helper to DRY up integration tests
Browse files Browse the repository at this point in the history
Previously, we'd manually return from blocks that were only ran in tests
marked as `integration` tests, denoted by files that end in
`*-integration.test.ts`.

This lead to a bunch of duplication, as each
block was still started, and we had to mark several blocks in those
files with a piece of code to return early in the case of integration
tests.

This introduces an `integration` helper, which conditionally skips the
entire suite based on wether or not the `INTEGRATION` env var is set.
  • Loading branch information
Jurre Stender committed Oct 26, 2021
1 parent 2eef128 commit 7a16c29
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 39 deletions.
9 changes: 2 additions & 7 deletions __tests__/container-service-integration.test.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import {PROXY_IMAGE_NAME, UPDATER_IMAGE_NAME} from '../src/main'
import {ContainerService} from '../src/container-service'
import {ImageService} from '../src/image-service'
import {removeDanglingUpdaterContainers} from './helpers'
import {removeDanglingUpdaterContainers, integration} from './helpers'
import Docker from 'dockerode'
import {Credential, JobDetails} from '../src/api-client'
import {ProxyBuilder} from '../src/proxy'
import path from 'path'
import fs from 'fs'
import {JobParameters} from '../src/inputs'

describe('ContainerService', () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

integration('ContainerService', () => {
const docker = new Docker()
const credentials: Credential[] = [
{
Expand Down
4 changes: 4 additions & 0 deletions __tests__/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,7 @@ export const eventFixturePath = (fixtureName: string): string => {
`${fixtureName}.json`
)
}

export const integration = process.env.SKIP_INTEGRATION_TESTS
? describe.skip
: describe
17 changes: 2 additions & 15 deletions __tests__/proxy-integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import {Credential} from '../src/api-client'
import {ImageService} from '../src/image-service'
import {PROXY_IMAGE_NAME} from '../src/main'
import {ProxyBuilder} from '../src/proxy'
import {removeDanglingUpdaterContainers} from './helpers'
import {integration, removeDanglingUpdaterContainers} from './helpers'
import {spawnSync} from 'child_process'
import fs from 'fs'
import path from 'path'

describe('ProxyBuilder', () => {
integration('ProxyBuilder', () => {
const docker = new Docker()
const jobId = 1
const credentials: Credential[] = [
Expand All @@ -23,10 +23,6 @@ describe('ProxyBuilder', () => {
const builder = new ProxyBuilder(docker, PROXY_IMAGE_NAME)

beforeAll(async () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}
await ImageService.pull(PROXY_IMAGE_NAME)
})

Expand All @@ -36,11 +32,6 @@ describe('ProxyBuilder', () => {

jest.setTimeout(20000)
it('should create a proxy container with the right details', async () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

const proxy = await builder.run(jobId, credentials)
await proxy.container.start()

Expand Down Expand Up @@ -77,10 +68,6 @@ describe('ProxyBuilder', () => {

jest.setTimeout(20000)
it('copies in a custom root CA if configured', async () => {
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

// make a tmp dir at the repo root unless it already exists
const tmpDir = path.join(__dirname, '../tmp')
if (!fs.existsSync(tmpDir)) {
Expand Down
23 changes: 6 additions & 17 deletions __tests__/updater-integration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,15 @@ import {JobParameters} from '../src/inputs'
import {UPDATER_IMAGE_NAME, PROXY_IMAGE_NAME} from '../src/main'
import {Updater} from '../src/updater'

import {removeDanglingUpdaterContainers, runFakeDependabotApi} from './helpers'
import {
integration,
removeDanglingUpdaterContainers,
runFakeDependabotApi
} from './helpers'

const FAKE_SERVER_PORT = 9000

describe('Updater', () => {
integration('Updater', () => {
let server: any

// Used from this action to get job details and credentials
Expand Down Expand Up @@ -40,11 +44,6 @@ describe('Updater', () => {
const apiClient = new ApiClient(client, params)

beforeAll(async () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

await ImageService.pull(UPDATER_IMAGE_NAME)
await ImageService.pull(PROXY_IMAGE_NAME)

Expand All @@ -54,23 +53,13 @@ describe('Updater', () => {
})

afterEach(async () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

server && server() // teardown server process
await removeDanglingUpdaterContainers()
fs.rmdirSync(workingDirectory, {recursive: true})
})

jest.setTimeout(120000)
it('should run the updater and create a pull request', async () => {
// Skip the test when we haven't preloaded the updater image
if (process.env.SKIP_INTEGRATION_TESTS) {
return
}

const details = await apiClient.getJobDetails()
const credentials = await apiClient.getCredentials()

Expand Down

0 comments on commit 7a16c29

Please sign in to comment.