150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			150 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | const expect = require('expect'); | ||
|  | const { Probot } = require('probot'); | ||
|  | const prOpened = require('./payloads/events/pullRequests.opened'); | ||
|  | const prExisting = require('./payloads/events/pullRequests.existing'); | ||
|  | const prUnrelated = require('./payloads/events/pullRequests.unrelated'); | ||
|  | const prClosed = require('./payloads/events/pullRequests.closed'); | ||
|  | const prOpenedFiles = require('./payloads/files/files.opened'); | ||
|  | const prExistingFiles = require('./payloads/files/files.existing'); | ||
|  | const prUnrelatedFiles = require('./payloads/files/files.unrelated'); | ||
|  | const probotPlugin = require('..'); | ||
|  | const { PRtest } = require('./utils/testmodels'); | ||
|  | // const mongoose = require('mongoose');
 | ||
|  | 
 | ||
|  | describe('Presolver', () => { | ||
|  |   let probot, github; | ||
|  | 
 | ||
|  |   afterEach(async (done) => { | ||
|  |     await PRtest.deleteMany({}).catch(err => console.log(err)); | ||
|  |     done(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   beforeEach( async() => { | ||
|  | 
 | ||
|  |     probot = new Probot({}); | ||
|  |     // Load our app into probot
 | ||
|  |     let app = await probot.load(probotPlugin); | ||
|  |     await PRtest.deleteMany({}).catch(err => console.log(err)); | ||
|  |     // This is an easy way to mock out the GitHub API
 | ||
|  |     // https://probot.github.io/docs/testing/
 | ||
|  |     github = { | ||
|  |       issues: { | ||
|  |         /* eslint-disable no-undef */ | ||
|  |         createComment: jest.fn().mockReturnValue(Promise.resolve({})), | ||
|  |         addLabels: jest.fn(), | ||
|  |         getLabel: jest.fn().mockImplementation(() => Promise.resolve([])), | ||
|  |         createLabel: jest.fn() | ||
|  |         /* eslint-enable no-undef */ | ||
|  |       }, | ||
|  |       repos: { | ||
|  |         getContent: () => | ||
|  |           Promise.resolve({ | ||
|  |             data: Buffer.from( | ||
|  |               `
 | ||
|  |           issueOpened: Message | ||
|  |           pullRequestOpened: Message | ||
|  |           `
 | ||
|  |             ).toString('base64') | ||
|  |           }) | ||
|  |       }, | ||
|  |       pullRequests: { | ||
|  |         // eslint-disable-next-line no-undef
 | ||
|  |         listFiles: jest.fn().mockImplementation((issue) => { | ||
|  |           const { number } = issue; | ||
|  |           let data; | ||
|  |           switch (number) { | ||
|  |             case 31525: | ||
|  |               data = prOpenedFiles; | ||
|  |               break; | ||
|  |             case 33363: | ||
|  |               data = prExistingFiles; | ||
|  |               break; | ||
|  |             case 34559: | ||
|  |               data = prUnrelatedFiles; | ||
|  |               break; | ||
|  |             default: | ||
|  |               data = prExistingFiles; | ||
|  |           } | ||
|  |           return { data }; | ||
|  |         }), | ||
|  |         // eslint-disable-next-line no-undef
 | ||
|  |         list: jest | ||
|  |           .fn() | ||
|  |           .mockImplementation(() => ({ data: [ | ||
|  |             prExisting.pull_request | ||
|  |           ] })) | ||
|  |       } | ||
|  |     }; | ||
|  |     app.auth = () => Promise.resolve(github); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test(`adds a label if a PR has changes to files targeted by an
 | ||
|  |     existing PR`, async () => {
 | ||
|  |     // Receive a webhook event
 | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.opened', | ||
|  |       payload: prOpened | ||
|  |     }); | ||
|  |     expect(github.issues.addLabels).toHaveBeenCalled(); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('does not add a label when files do not coincide', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.opened', | ||
|  |       payload: prUnrelated | ||
|  |     }); | ||
|  |     expect(github.issues.addLabels).toHaveBeenCalledTimes(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('db should update if the action is opened', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.opened', | ||
|  |       payload: prOpened | ||
|  |     }); | ||
|  |     const results = await PRtest.find({}).then(data => data); | ||
|  |     expect(results.length).toBeGreaterThan(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('db should update if the action is reopened', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.reopened', | ||
|  |       payload: prOpened | ||
|  |     }); | ||
|  |     const results = await PRtest.find({}).then(data => data); | ||
|  |     expect(results.length).toBeGreaterThan(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('db should update if the action is synchronize', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.synchronize', | ||
|  |       payload: prOpened | ||
|  |     }); | ||
|  |     const results = await PRtest.find({}).then(data => data); | ||
|  |     expect(results.length).toBeGreaterThan(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('db should update if the action is edited', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.edited', | ||
|  |       payload: prOpened | ||
|  |     }); | ||
|  |     const results = await PRtest.find({}).then(data => data); | ||
|  |     expect(results.length).toBeGreaterThan(0); | ||
|  |   }); | ||
|  | 
 | ||
|  |   test('db should have removed document if action is closed', async () => { | ||
|  |     await probot.receive({ | ||
|  |       name: 'pull_request.closed', | ||
|  |       payload: prClosed | ||
|  |     }); | ||
|  |     const result = await PRtest.findOne( | ||
|  |       { _id: prClosed.number }).then(doc => doc) | ||
|  |       .catch(err => console.log(err)); | ||
|  |     expect(result).toBe(null); | ||
|  | 
 | ||
|  |   }); | ||
|  | }); | ||
|  | 
 | ||
|  | // For more information about testing with Jest see:
 | ||
|  | // https://facebook.github.io/jest/
 |