@codecovevienna/gittt-cli
Version:
Tracking time with CLI into a git repository
189 lines (159 loc) • 7.69 kB
text/typescript
import proxyquire from "proxyquire";
import sinon from "sinon";
import { assert, expect } from "chai";
import { parseProjectNameFromGitUrl, findTicketNumberInBranch, findTicketNumberInMessage } from "../../helper";
import { IProject } from "../../interfaces";
describe("Helper", function () {
it("should parse git url [with namespace]", function () {
const project: IProject = parseProjectNameFromGitUrl("ssh://git@github.com:443/test/mocked.git");
assert.isArray(project.records);
expect(project.name).to.eq("test_mocked");
expect(project.meta?.host).to.eq("github.com");
expect(project.meta?.port).to.eq(443);
expect(project.meta?.raw).to.eq("ssh://git@github.com:443/test/mocked.git");
});
it("should parse git url [without namespace]", function () {
const project: IProject = parseProjectNameFromGitUrl("ssh://git@github.com:443/mocked.git");
assert.isArray(project.records);
expect(project.name).to.eq("mocked");
expect(project.meta?.host).to.eq("github.com");
expect(project.meta?.port).to.eq(443);
expect(project.meta?.raw).to.eq("ssh://git@github.com:443/mocked.git");
});
it("should parse git url [with sub domain]", function () {
const project: IProject = parseProjectNameFromGitUrl("ssh://git@mock.github.com:443/test/mocked.git");
assert.isArray(project.records);
expect(project.name).to.eq("test_mocked");
expect(project.meta?.host).to.eq("mock.github.com");
expect(project.meta?.port).to.eq(443);
expect(project.meta?.raw).to.eq("ssh://git@mock.github.com:443/test/mocked.git");
});
it("should parse git url [with sub groups]", function () {
const project: IProject = parseProjectNameFromGitUrl("ssh://git@mock.github.com:443/group/subgroup/mocked.git");
assert.isArray(project.records);
expect(project.name).to.eq("group_subgroup_mocked");
expect(project.meta?.host).to.eq("mock.github.com");
expect(project.meta?.port).to.eq(443);
expect(project.meta?.raw).to.eq("ssh://git@mock.github.com:443/group/subgroup/mocked.git");
});
it("should fail to parse git url [no port]", function () {
try {
parseProjectNameFromGitUrl("ssh://git@mock.github.com/test/mocked.git");
} catch (err: any) {
assert.isDefined(err);
}
});
it("should fail to parse git url [no regex match]", function () {
try {
parseProjectNameFromGitUrl("ssh");
} catch (err: any) {
assert.isDefined(err);
}
});
describe("findTicketNumberInBranch", function () {
it("should get ticket number from branch", async function () {
const ticketNumber = findTicketNumberInBranch("1337-awesome-new-feature");
expect(ticketNumber).to.eq("1337");
})
it("should not get ticket number from branch [number not in the beginning]", async function () {
const ticketNumber = findTicketNumberInBranch("woot-1337-awesome-new-feature");
expect(ticketNumber).to.be.undefined;
})
it("should not get ticket number from branch [no ticket number]", async function () {
const ticketNumber = findTicketNumberInBranch("awesome-new-feature");
expect(ticketNumber).to.be.undefined;
})
it("should not get ticket number from branch [empty branch string]", async function () {
const ticketNumber = findTicketNumberInBranch("");
expect(ticketNumber).to.be.undefined;
})
})
describe("findTicketNumberInMessage", function () {
it("should find ticket number in message", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature (#1337)");
expect(ticketNumber).to.eq("1337");
})
it("should find ticket number in message with spaces", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature (# 1337)");
expect(ticketNumber).to.eq("1337");
})
it("should find ticket number in message with different braces", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature {#1337}");
expect(ticketNumber).to.eq("1337");
})
it("should find ticket number in message somewhere in the message", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented [#1337] awesome feature");
expect(ticketNumber).to.eq("1337");
})
it("should not find ticket number in message", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature [$1337]");
expect(ticketNumber).to.be.undefined;
})
it("should not find ticket number in message with spaces", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature [$ 1337]");
expect(ticketNumber).to.be.undefined;
})
it("should not find ticket number in message with text between # and numbers", async function () {
const ticketNumber = findTicketNumberInMessage("Implemented awesome feature [#woot1337]");
expect(ticketNumber).to.be.undefined;
})
})
describe("appendTicketNumber", function () {
before(function () {
proxyquire.noCallThru();
});
it("should append ticket number", async function () {
const proxy: any = proxyquire("../../helper", {
"./question": {
QuestionHelper: class {
public static confirmTicketNumber = sinon.stub().resolves(true);
}
}
});
const appendedMessage = await proxy.appendTicketNumber("initial message", "1337-awesome-feature");
expect(appendedMessage).to.eq("initial message [#1337]");
})
it("should append ticket number [favor ticket number from message]", async function () {
const proxy: any = proxyquire("../../helper", {
"./question": {
QuestionHelper: class {
public static confirmTicketNumber = sinon.stub().resolves(true);
}
}
});
const appendedMessage = await proxy.appendTicketNumber("initial message (#69)", "1337-awesome-feature");
expect(appendedMessage).to.eq("initial message (#69)");
})
it("should not append ticket number [no confirm]", async function () {
const proxy: any = proxyquire("../../helper", {
"./question": {
QuestionHelper: class {
public static confirmTicketNumber = sinon.stub().resolves(false);
}
}
});
const appendedMessage = await proxy.appendTicketNumber("initial message", "1337-awesome-feature");
expect(appendedMessage).to.eq("initial message");
})
it("should not append ticket number [no branch name]", async function () {
const proxy: any = proxyquire("../../helper", {});
const appendedMessage = await proxy.appendTicketNumber("initial message", undefined);
expect(appendedMessage).to.eq("initial message");
})
})
describe("toFixedLength", function () {
it("should return correct strings", async function () {
const proxy: any = proxyquire("../../helper", {});
expect(proxy.toFixedLength('test', 5)).to.eq("test ");
expect(proxy.toFixedLength('test', 4)).to.eq("test");
expect(proxy.toFixedLength('testtest', 4)).to.eq("t...");
expect(proxy.toFixedLength('testtest', 4, 5)).to.eq("....");
expect(proxy.toFixedLength('testtest', 6, 5)).to.eq("t.....");
expect(proxy.toFixedLength('testtest', 4, 0)).to.eq("test");
expect(proxy.toFixedLength('testtest', 4, -1)).to.eq("test");
expect(proxy.toFixedLength('testtest', -1, -1)).to.eq("");
expect(proxy.toFixedLength('testtest', -1, 4)).to.eq("");
expect(proxy.toFixedLength(undefined, 4)).to.eq(" ");
})
});
});