kata-cli
Version:
Kata AI Command Line Tools
232 lines (204 loc) • 9.59 kB
text/typescript
import { IConfigReader, IConfig, Config } from "merapi";
import { suite, test } from "mocha-typescript";
import { spy, stub, assert } from "sinon";
import { IHelper } from "../../interfaces/main";
import { readFileSync } from "fs";
import { safeLoad } from "js-yaml";
import Helper from "../../components/scripts/helper";
import Zaun from "../../components/api/zaun";
import Api from "../../components/api/api";
import Team from "../../components/users/team";
class TeamTest {
private config: IConfig;
private helper: IHelper;
private api: any;
private session: any;
private team: any;
private userTokenObj = {
id: '84330d2b-f2f8-499c-adee-99d2c533e7d5',
type: 'user',
label: 'dashboard',
userId: '5c0a78c2-3a2c-447a-80d2-069761be3ef9',
teamId: <string>null,
botId: <string>null,
roleId: 'ccd9b640-93c4-43b6-8523-f324f89faad6',
expire: 1503789662
};
private teamTokenObj = {
id: 'ea43b3b6-3c7f-4bd8-98f3-e58ee699b5b3',
type: 'team',
label: <string>null,
userId: '8a62686d-695c-44f0-a57c-4ca19f5bf78b',
teamId: 'e563ec87-dae9-45f0-a2b3-515a069fb2b0',
botId: <string>null,
roleId: '81b179bc-fa56-4c27-92db-a1602abe48c2',
expire: 1506907823
};
private userObj = {
id: '9ad603b7-5c33-432c-9752-2f4816b6bd9f',
type: 'user2',
label: 'dashboard',
userId: '05c7f7a7-fba6-437a-8e6d-72c9f71c6352',
roleId: 'b3941608-1494-4983-9b64-af746b601190',
expire: 1506915325
}
private teamObj = {
id: 'e563ec87-dae9-45f0-a2b3-515a069fb2b0',
username: 'team1',
password: 'password',
type: 'team',
email: <string> null,
profile: <string> null,
roleId: '55f7d797-a938-4f59-9c6a-cf6cd8a01d08',
created_at: '2017-06-18T01:46:13.000Z',
updated_at: '2017-06-18T01:46:13.000Z'
}
constructor() {
let zaun = Zaun();
let configJson = safeLoad(readFileSync("./service.yml", "utf8"));
this.config = Config.create(configJson);
this.helper = new Helper(this.config);
this.api = new Api(this.helper, zaun);
this.team = new Team(this.helper, this.api);
}
async "function add member should add member successfully"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
let getUserInfoStub = stub(this.api.userApi, "usersUserIdGet");
let teamPostStub = stub(this.api.teamApi, "teamsTeamIdUsersUserIdPost");
let teamGetStub = stub(this.api.teamApi, "teamsTeamIdUsersGet");
getPropStub.withArgs("current_login").returns("team1");
getPropStub.withArgs("current_user_type").returns("team");
getUserInfoStub.withArgs("team1").callsFake((userId, callback) => {
callback(null, this.teamObj, { body: this.teamObj });
});
getUserInfoStub.withArgs("user2").callsFake((userId, callback) => {
callback(null, this.userObj, { body: this.userObj });
});
teamGetStub.callsFake((teamId, callback) => {
callback(null, null, {body: [{userId: "anotherUserId"}]});
});
teamPostStub.callsFake((teamId, userId, roleId, callback) => {
callback(null, null, {body: {team: this.teamObj}});
})
await this.team.addMember("user2", "roleId-test");
setPropStub.restore();
getPropStub.restore();
getUserInfoStub.restore();
teamGetStub.restore();
teamPostStub.restore();
consoleLogStub.restore();
assert.calledWith(consoleLogStub, "Success register user2 to team1");
}
async "function add member should throw error when current login is user"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
getPropStub.withArgs("current_login").returns("user1");
getPropStub.withArgs("current_user_type").returns("user");
await this.team.addMember("user2", "roleId-test");
setPropStub.restore();
getPropStub.restore();
consoleLogStub.restore();
assert.calledWith(consoleLogStub, "Must be on team to do this operation");
}
async "function add member should throw error when username is already in team"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
let getUserInfoStub = stub(this.api.userApi, "usersUserIdGet");
let teamGetStub = stub(this.api.teamApi, "teamsTeamIdUsersGet");
getPropStub.withArgs("current_login").returns("team1");
getPropStub.withArgs("current_user_type").returns("team");
getUserInfoStub.withArgs("team1").callsFake((userId, callback) => {
callback(null, this.teamObj, { body: this.teamObj });
});
getUserInfoStub.withArgs("user2").callsFake((userId, callback) => {
callback(null, this.userObj, { body: this.userObj });
});
teamGetStub.callsFake((teamId, callback) => {
callback(null, null, {body: [{userId: this.userObj.id}]});
});
await this.team.addMember("user2", "roleId-test");
setPropStub.restore();
getPropStub.restore();
getUserInfoStub.restore();
teamGetStub.restore();
consoleLogStub.restore();
assert.calledWith(consoleLogStub, "User user2 already on this team");
}
async "function remove member should remove member successfully"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
let getUserInfoStub = stub(this.api.userApi, "usersUserIdGet");
let teamDeleteStub = stub(this.api.teamApi, "teamsTeamIdUsersUserIdDelete");
let teamGetStub = stub(this.api.teamApi, "teamsTeamIdUsersGet");
let inquirerPromptStub = stub(this.helper, "inquirerPrompt").returns({ confirmation: true })
getPropStub.withArgs("current_login").returns("team1");
getPropStub.withArgs("current_user_type").returns("team");
getUserInfoStub.withArgs("team1").callsFake((userId, callback) => {
callback(null, this.teamObj, { body: this.teamObj });
});
getUserInfoStub.withArgs("user2").callsFake((userId, callback) => {
callback(null, this.userObj, { body: this.userObj });
});
teamGetStub.callsFake((teamId, callback) => {
callback(null, null, {body: [{userId: this.userObj.id}]});
});
teamDeleteStub.callsFake((teamId, userId, callback) => {
callback(null, null, {body: {team: this.teamObj}});
})
await this.team.removeMember("user2");
setPropStub.restore();
getPropStub.restore();
getUserInfoStub.restore();
teamGetStub.restore();
teamDeleteStub.restore();
consoleLogStub.restore();
inquirerPromptStub.restore();
assert.calledWith(consoleLogStub, "Success remove user2 from team1");
}
async "function remove member should throw error when current login is user"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
let inquirerPromptStub = stub(this.helper, "inquirerPrompt").returns({ confirmation: true })
getPropStub.withArgs("current_login").returns("user1");
getPropStub.withArgs("current_user_type").returns("user");
await this.team.removeMember("user2");
setPropStub.restore();
getPropStub.restore();
consoleLogStub.restore();
inquirerPromptStub.restore();
assert.calledWith(consoleLogStub, "Must be on team to do this operation");
}
async "function remove member should throw error when username is not member of the team"() {
let consoleLogStub = stub(console, "log");
let setPropStub = stub(this.helper, "setProp");
let getPropStub = stub(this.helper, "getProp");
let getUserInfoStub = stub(this.api.userApi, "usersUserIdGet");
let teamGetStub = stub(this.api.teamApi, "teamsTeamIdUsersGet");
let inquirerPromptStub = stub(this.helper, "inquirerPrompt").returns({ confirmation: true })
getPropStub.withArgs("current_login").returns("team1");
getPropStub.withArgs("current_user_type").returns("team");
getUserInfoStub.withArgs("team1").callsFake((userId, callback) => {
callback(null, this.teamObj, { body: this.teamObj });
});
getUserInfoStub.withArgs("user2").callsFake((userId, callback) => {
callback(null, this.userObj, { body: this.userObj });
});
teamGetStub.callsFake((teamId, callback) => {
callback(null, null, {body: [{userId: "anotherUserId"}]});
});
await this.team.removeMember("user2");
setPropStub.restore();
getPropStub.restore();
getUserInfoStub.restore();
teamGetStub.restore();
consoleLogStub.restore();
inquirerPromptStub.restore();
assert.calledWith(consoleLogStub, "User user2 not a member of this team");
}
}