155 lines
3.5 KiB
TypeScript
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);
|
|
});
|
|
});
|