@ammar-ahmed/automation-app-bot
Version:
Automation made easy and fun OH Yeah!
120 lines (109 loc) • 5.09 kB
JavaScript
const nock = require('nock')
// Requiring our app implementation
const mergeable = require('../..')
const { Probot, ProbotOctokit } = require('probot')
const express = require('express')
const MockHelper = require('../../__fixtures__/e2e/helper')
// Requiring our PR payloads
const prPayload = require('../../__fixtures__/e2e/pr.payload.json')
describe('smoke tests', () => {
let probot
beforeEach(() => {
nock.disableNetConnect()
probot = new Probot({
githubToken: 'test',
// Disable thrttling & retrying requests for easier testing
Octokit: ProbotOctokit.defaults({
retry: { enabled: false },
throttle: { enabled: false }
})
})
mergeable(probot, { getRouter: () => { return express() } })
})
test('that mergeable run properly for an PR', async () => {
const config = `
mergeable:
pull_requests:
title:
and:
- begins_with:
match: 'begins_with_text'
- ends_with:
match: 'ends_with_text'
or:
- must_include:
regex: 'must_be_included_text'
- begins_with:
match: 'begins_with_text'
must_exclude:
regex: 'must_be_excluded_text'
must_include:
regex: 'must_be_included_text'
begins_with:
match: 'begins_with_text'
ends_with:
match: 'ends_with_text'
`
const createCheckOptions = {
expectedBody: {
status: 'in_progress',
output:
{
title: 'Mergeable is running.',
summary:
'Please be patient. We\'ll get you the results as soon as possible.'
},
name: 'Mergeable',
head_branch: 'test3',
head_sha: '9c66d957e026260fb6725c54b631991a54028672'
}
}
const updateCheckOptions = {
expectedBody: {
name: 'Mergeable',
status: 'completed',
output:
{
title: '1/1 Fail(s): TITLE',
summary:
'### Status: FAIL\n\n Here are some stats of the run:\n 1 validations were ran.\n 0 PASSED\n 1 FAILED\n ',
text:
'#### :x: Validator: TITLE\n * :heavy_check_mark: ***title must exclude \'must_be_excluded_text\'***\n Input : [WIP] Test3\n Settings : ```{"must_exclude":{"regex":"must_be_excluded_text"}}```\n * :x: ***title does not include "must_be_included_text"***\n Input : [WIP] Test3\n Settings : ```{"must_include":{"regex":"must_be_included_text"}}```\n * :x: ***title must begins with "begins_with_text"***\n Input : [WIP] Test3\n Settings : ```{"begins_with":{"match":"begins_with_text"}}```\n * :x: ***title must end with "ends_with_text"***\n Input : [WIP] Test3\n Settings : ```{"ends_with":{"match":"ends_with_text"}}```\n * :x: ***(title must begins with "begins_with_text" ***AND*** title must end with "ends_with_text")***\n Input : [WIP] Test3\n Settings : ```{"and":[{"begins_with":{"match":"begins_with_text"}},{"ends_with":{"match":"ends_with_text"}}]}```\n * :x: ***(title does not include "must_be_included_text" ***OR*** title must begins with "begins_with_text")***\n Input : [WIP] Test3\n Settings : ```{"or":[{"must_include":{"regex":"must_be_included_text"}},{"begins_with":{"match":"begins_with_text"}}]}```\n<!-- #mergeable-data {"id":4,"eventName":"pull_request","action":"edited"} #mergeable-data -->'
},
conclusion: 'failure'
}
}
const settings = `
version: 1
mergeable:
use_config_from_pull_request: true
use_config_cache: false
use_org_as_default_config: false
`
const Helper = new MockHelper({ payload: prPayload })
Helper.mockListReposAccessibleToInstallation()
Helper.mockListInstallation()
const updateCheckCall = Helper.mockCheckUpdateCall(updateCheckOptions)
const createCheckCall = Helper.mockCheckCreateCall(createCheckOptions)
const listFilesCall = Helper.mockPRListFileCall()
const listCommentsCall = Helper.mockIssueListCommentsCall()
const fetchConfigCall = Helper.mockFetchConfigCall({ config })
const fetchSettingsCall = Helper.mockFetchSettingsCall({ settings })
// Receive a webhook event
await probot.receive({ name: 'pull_request', payload: prPayload })
// check that all api were called
expect(updateCheckCall.isDone()).toBe(true)
expect(createCheckCall.isDone()).toBe(true)
expect(listFilesCall.isDone()).toBe(true)
expect(listCommentsCall.isDone()).toBe(true)
expect(fetchConfigCall.isDone()).toBe(true)
expect(fetchSettingsCall.isDone()).toBe(true)
// check that api calls were made with expect request body
expect(createCheckOptions.requestBody).toEqual(expect.objectContaining(createCheckOptions.expectedBody))
expect(updateCheckOptions.requestBody).toEqual(expect.objectContaining(updateCheckOptions.expectedBody))
})
afterEach(() => {
nock.cleanAll()
nock.enableNetConnect()
})
})