1
0
Fork 0
cautious-journey/test/sync/TestSyncIssues.ts

155 lines
3.5 KiB
TypeScript

import { NotImplementedError } from '@apextoaster/js-utils';
import { expect } from 'chai';
import { Container, NullLogger } from 'noicejs';
import sinon from 'sinon';
import { random } from '../../src/main.js';
import { GithubRemote } from '../../src/remote/github.js';
import { syncIssueLabels } from '../../src/sync.js';
const { stub } = sinon;
describe('issue sync', () => {
it('should resolve each issue', async () => {
const container = Container.from();
await container.configure();
const logger = NullLogger.global;
const remoteData = {
data: {},
dryrun: true,
logger,
type: '',
};
const remote = await container.create(GithubRemote, remoteData);
const listStub = stub(remote, 'listIssues').returns(Promise.resolve([{
issue: '',
labels: ['nope'],
name: '',
project: 'foo',
}]));
const updateStub = stub(remote, 'updateIssue').returns(Promise.resolve({
issue: '',
labels: [],
name: '',
project: '',
}));
await syncIssueLabels({
logger,
project: {
colors: [],
comment: false,
flags: [{
adds: [],
name: 'nope',
priority: 0,
removes: [],
requires: [{
name: 'yep',
}],
}],
initial: [],
name: 'foo',
remote: remoteData,
states: [],
},
random: random(),
remote,
});
expect(listStub).to.have.callCount(1);
expect(updateStub).to.have.callCount(1);
expect(updateStub).to.have.been.calledWithMatch({
project: 'foo',
});
});
it('should comment on updated issues', async () => {
const container = Container.from();
await container.configure();
const logger = NullLogger.global;
const remoteData = {
data: {},
dryrun: true,
logger,
type: '',
};
const remote = await container.create(GithubRemote, remoteData);
stub(remote, 'listIssues').resolves([{
issue: '',
labels: ['nope'],
name: '',
project: 'foo',
}]);
const commentStub = stub(remote, 'createComment');
await syncIssueLabels({
logger,
project: {
colors: [],
comment: true,
flags: [{
adds: [],
name: 'nope',
priority: 0,
removes: [],
requires: [{
name: 'yep',
}],
}],
initial: [],
name: 'foo',
remote: remoteData,
states: [],
},
random: random(),
remote,
});
expect(commentStub).to.have.callCount(1);
});
it('should handle errors from the remote', async () => {
const container = Container.from();
await container.configure();
const logger = NullLogger.global;
const remoteData = {
data: {},
dryrun: true,
logger,
type: '',
};
const remote = await container.create(GithubRemote, remoteData);
const listStub = stub(remote, 'listIssues').rejects(NotImplementedError);
const result = await syncIssueLabels({
logger,
project: {
colors: [],
comment: false,
flags: [{
adds: [],
name: 'nope',
priority: 0,
removes: [],
requires: [{
name: 'yep',
}],
}],
initial: [],
name: 'foo',
remote: remoteData,
states: [],
},
random: random(),
remote,
});
expect(listStub).to.have.callCount(1);
expect(result).to.equal(undefined);
});
});