@codecovevienna/gittt-cli
Version:
Tracking time with CLI into a git repository
585 lines (510 loc) • 17.7 kB
text/typescript
import { expect } from "chai";
import proxyquire from "proxyquire";
import sinon from "sinon";
import { QuestionHelper } from "../../helper";
import { IJiraLink, IProject, IRecord } from "../../interfaces";
import { RECORD_TYPES } from "../../types";
import { IMultipieInputLink } from '../../interfaces/index';
import { emptyHelper } from "../helper";
describe("QuestionHelper", function () {
describe("Static", function () {
it("should filter jira endpoint", async function () {
expect(QuestionHelper.filterJiraEndpoint("http://test.com")).to.eq("http://test.com");
expect(QuestionHelper.filterJiraEndpoint("http://test.com/")).to.eq("http://test.com");
});
});
describe("Ask", function () {
it("should ask for year", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "2012",
}),
},
});
const choice: number = await proxy.QuestionHelper.askYear();
expect(choice).to.eq(2012);
});
it("should ask for month", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askMonth();
expect(choice).to.eq(1);
});
it("should ask for day", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askDay();
expect(choice).to.eq(1);
});
it("should ask for hour", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askHour();
expect(choice).to.eq(1);
});
it("should ask for minute", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askMinute();
expect(choice).to.eq(1);
});
it("should ask for amount", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askAmount();
expect(choice).to.eq(1);
});
it("should ask for amount [with old amount]", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "1",
}),
},
});
const choice: number = await proxy.QuestionHelper.askAmount(2);
expect(choice).to.eq(1);
});
it("should ask for message", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "message",
}),
},
});
const choice: string = await proxy.QuestionHelper.askMessage();
expect(choice).to.eq("message");
});
it("should ask for message and get undefined", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "",
}),
},
});
const choice: string = await proxy.QuestionHelper.askMessage();
expect(choice).to.be.undefined;
});
it("should ask for git url", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "ssh://git@github.com/company/project.git",
}),
},
});
const choice: string = await proxy.QuestionHelper.askGitUrl();
expect(choice).to.eq("ssh://git@github.com/company/project.git");
});
describe("Jira", function () {
it("should ask for jira link", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
host: "http://mocked.com",
key: "MOCKED",
password: "mocked",
username: "mocked",
}),
},
});
const choice: IJiraLink = await proxy.QuestionHelper.askJiraLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject);
expect(choice.host).to.eq("http://mocked.com");
expect(choice.endpoint).to.eq("/rest/gittt/latest/");
expect(choice.key).to.eq("MOCKED");
expect(choice.username).to.eq("mocked");
expect(choice.hash).to.eq("bW9ja2VkOm1vY2tlZA==");
expect(choice.linkType).to.eq("Jira");
expect(choice.projectName).to.eq("mocked_project_1");
});
it("should ask for jira link with issue", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
host: "http://mocked.com",
key: "MOCKED",
issue: "EPIC-1",
password: "mocked",
username: "mocked",
}),
},
});
const choice: IJiraLink = await proxy.QuestionHelper.askJiraLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject);
expect(choice.host).to.eq("http://mocked.com");
expect(choice.endpoint).to.eq("/rest/gittt/latest/");
expect(choice.key).to.eq("MOCKED");
expect(choice.issue).to.eq("EPIC-1");
expect(choice.username).to.eq("mocked");
expect(choice.hash).to.eq("bW9ja2VkOm1vY2tlZA==");
expect(choice.linkType).to.eq("Jira");
expect(choice.projectName).to.eq("mocked_project_1");
});
it("should ask for jira link with previous data", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
host: "http://mocked.com",
key: "MOCKED",
issue: "EPIC-1",
username: "mocked",
}),
},
});
const choice: IJiraLink = await proxy.QuestionHelper.askJiraLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject
, {
endpoint: "/rest/gittt/latest/",
hash: "bW9ja2VkOm1vY2tlZA==",
host: "http://mocked.com",
issue: "EPIC-1",
key: "MOCKED",
linkType: "Jira",
projectName: "mocked_project_1",
username: "mocked"
} as IJiraLink);
expect(choice.host).to.eq("http://mocked.com");
expect(choice.endpoint).to.eq("/rest/gittt/latest/");
expect(choice.key).to.eq("MOCKED");
expect(choice.issue).to.eq("EPIC-1");
expect(choice.username).to.eq("mocked");
expect(choice.hash).to.eq("bW9ja2VkOm1vY2tlZA==");
expect(choice.linkType).to.eq("Jira");
expect(choice.projectName).to.eq("mocked_project_1");
});
it("should ask for jira link [with endpoint version]", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
host: "http://mocked.com",
key: "MOCKED",
password: "mocked",
username: "mocked",
}),
},
});
const choice: IJiraLink = await proxy.QuestionHelper.askJiraLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject, undefined, "2.0.0");
expect(choice.host).to.eq("http://mocked.com");
expect(choice.endpoint).to.eq("/rest/gittt/2.0.0/");
expect(choice.key).to.eq("MOCKED");
expect(choice.username).to.eq("mocked");
expect(choice.hash).to.eq("bW9ja2VkOm1vY2tlZA==");
expect(choice.linkType).to.eq("Jira");
expect(choice.projectName).to.eq("mocked_project_1");
});
});
describe("Multipie", function () {
it("should ask for multipie link", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
endpoint: "http://mocked.com/v1/publish",
username: "mocked",
}),
},
});
const choice: IMultipieInputLink = await proxy.QuestionHelper.askMultipieLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject);
expect(choice.endpoint).to.eq("http://mocked.com/v1/publish");
expect(choice.username).to.eq("mocked");
expect(choice.linkType).to.eq("Multipie");
expect(choice.projectName).to.eq("mocked_project_1");
});
it("should ask for multipie link with previous data", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
endpoint: "http://mocked.com/v1/publish",
username: "mocked",
}),
},
});
const choice: IMultipieInputLink = await proxy.QuestionHelper.askMultipieLink({
meta: {
host: "mocked.com",
port: 443,
},
name: "mocked_project_1",
} as IProject
, {
endpoint: "http://mocked.com/v1/publish",
linkType: "Multipie",
projectName: "mocked_project_1",
username: "mocked"
} as IMultipieInputLink);
expect(choice.endpoint).to.eq("http://mocked.com/v1/publish");
expect(choice.username).to.eq("mocked");
expect(choice.linkType).to.eq("Multipie");
expect(choice.projectName).to.eq("mocked_project_1");
});
});
});
describe("Choose", function () {
it("should choose record", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "mocked-guid-one",
}),
},
});
const mockedRecords: IRecord[] = [
{
amount: 69,
created: 1234,
guid: "mocked-guid-one",
type: RECORD_TYPES.Time,
} as IRecord,
{
amount: 1337,
created: 1234,
guid: "mocked-guid-two",
type: RECORD_TYPES.Time,
} as IRecord,
];
const choice: string = await proxy.QuestionHelper.chooseRecord(mockedRecords);
expect(choice).to.deep.eq(mockedRecords[0]);
});
it("should choose type", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: RECORD_TYPES.Time,
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseType();
expect(choice).to.eq(RECORD_TYPES.Time);
});
it("should choose type [with old type]", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: RECORD_TYPES.Time,
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseType(RECORD_TYPES.Time);
expect(choice).to.eq(RECORD_TYPES.Time);
});
it("should choose role", async function () {
const mockedHelper: any = Object.assign({}, emptyHelper);
mockedHelper.MultipieHelper = class {
public getValidRoles = sinon.stub().resolves([{ name: '?', value: '?' }]);
}
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: '?',
}),
},
".": mockedHelper,
});
const choice: string = await proxy.QuestionHelper.chooseRole();
expect(choice).to.eq('?');
});
it("should choose role [with old role]", async function () {
const mockedHelper: any = Object.assign({}, emptyHelper);
mockedHelper.MultipieHelper = class {
public getValidRoles = sinon.stub().resolves([{ name: '?', value: '?' }]);
}
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: 'asdf',
}),
},
".": mockedHelper,
});
const choice: string = await proxy.QuestionHelper.chooseRole('asdf');
expect(choice).to.eq('asdf');
});
it("should choose integration", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "Jira",
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseIntegration();
expect(choice).to.eq("Jira");
});
it("should choose domain", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "github.com",
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseDomain([
"gitlab.com",
"github.com",
]);
expect(choice).to.eq("github.com");
});
it("should choose project file", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "gitlab_com_443/codecovevienna_gittt-cli.json",
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseProjectFile([
{
meta: {
host: "github.com",
port: 10022,
},
name: "codecovevienna_gittt-cli",
records: [],
} as IProject,
{
meta: {
host: "gitlab.com",
port: 443,
},
name: "codecovevienna_gittt-cli",
records: [],
} as IProject,
]);
expect(choice).to.eq("gitlab_com_443/codecovevienna_gittt-cli.json");
});
it("should choose override local changes", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: "0",
}),
},
});
const choice: string = await proxy.QuestionHelper.chooseOverrideLocalChanges();
expect(choice).to.eq(0);
});
});
describe("Confirm", function () {
it("should confirm migration", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmMigration();
expect(choice).to.eq(true);
});
it("should confirm jira link creation", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmLinkCreation();
expect(choice).to.eq(true);
});
it("should confirm pushing of local changes", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmPushLocalChanges();
expect(choice).to.eq(true);
});
it("should confirm setup", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmSetup();
expect(choice).to.eq(true);
});
it("should confirm init", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmInit();
expect(choice).to.eq(true);
});
it("should confirm ticket number", async function () {
const proxy: any = proxyquire("../../helper/question", {
inquirer: {
prompt: sinon.stub().resolves({
choice: true,
}),
},
});
const choice: string = await proxy.QuestionHelper.confirmTicketNumber("1337");
expect(choice).to.eq(true);
});
});
});