mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
567 lines (515 loc) • 19.9 kB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import assert from 'assert';
import deepFreezeAndThrowOnMutation from 'utils/deep_freeze';
import TestHelper from 'test/test_helper';
import * as Selectors from 'selectors/entities/teams';
import {General} from '../../constants';
describe('Selectors.Teams', () => {
TestHelper.initMockEntities();
const team1 = TestHelper.fakeTeamWithId();
const team2 = TestHelper.fakeTeamWithId();
const team3 = TestHelper.fakeTeamWithId();
const team4 = TestHelper.fakeTeamWithId();
const team5 = TestHelper.fakeTeamWithId();
const teams = {};
teams[team1.id] = team1;
teams[team2.id] = team2;
teams[team3.id] = team3;
teams[team4.id] = team4;
teams[team5.id] = team5;
team1.display_name = 'Marketeam';
team1.name = 'marketing_team';
team2.display_name = 'Core Team';
team3.allow_open_invite = true;
team4.allow_open_invite = true;
team3.display_name = 'Team AA';
team4.display_name = 'aa-team';
team5.delete_at = 10;
team5.allow_open_invite = true;
const user = TestHelper.fakeUserWithId();
const user2 = TestHelper.fakeUserWithId();
const user3 = TestHelper.fakeUserWithId();
const profiles = {};
profiles[user.id] = user;
profiles[user2.id] = user2;
profiles[user3.id] = user3;
const myMembers = {};
myMembers[team1.id] = {team_id: team1.id, user_id: user.id, roles: General.TEAM_USER_ROLE, mention_count: 1};
myMembers[team2.id] = {team_id: team2.id, user_id: user.id, roles: General.TEAM_USER_ROLE, mention_count: 3};
myMembers[team5.id] = {team_id: team5.id, user_id: user.id, roles: General.TEAM_USER_ROLE, mention_count: 0};
const membersInTeam = {};
membersInTeam[team1.id] = {};
membersInTeam[team1.id][user2.id] = {team_id: team1.id, user_id: user2.id, roles: General.TEAM_USER_ROLE};
membersInTeam[team1.id][user3.id] = {team_id: team1.id, user_id: user3.id, roles: General.TEAM_USER_ROLE};
const testState = deepFreezeAndThrowOnMutation({
entities: {
users: {
currentUserId: user.id,
profiles,
},
teams: {
currentTeamId: team1.id,
teams,
myMembers,
membersInTeam,
},
roles: {
roles: TestHelper.basicRoles,
},
general: {
serverVersion: '5.8.0',
},
},
});
it('getTeamsList', () => {
assert.deepEqual(Selectors.getTeamsList(testState), [team1, team2, team3, team4, team5]);
});
it('getMyTeams', () => {
assert.deepEqual(Selectors.getMyTeams(testState), [team1, team2]);
});
it('getMembersInCurrentTeam', () => {
assert.deepEqual(Selectors.getMembersInCurrentTeam(testState), membersInTeam[team1.id]);
});
it('getTeamMember', () => {
assert.deepEqual(Selectors.getTeamMember(testState, team1.id, user2.id), membersInTeam[team1.id][user2.id]);
});
it('getJoinableTeams', () => {
const openTeams = [team3, team4];
const joinableTeams = Selectors.getJoinableTeams(testState);
assert.strictEqual(joinableTeams[0], openTeams[0]);
assert.strictEqual(joinableTeams[1], openTeams[1]);
});
it('getSortedJoinableTeams', () => {
const openTeams = [team4, team3];
const joinableTeams = Selectors.getSortedJoinableTeams(testState);
assert.strictEqual(joinableTeams[0], openTeams[0]);
assert.strictEqual(joinableTeams[1], openTeams[1]);
});
it('getListableTeams', () => {
const openTeams = [team3, team4];
const listableTeams = Selectors.getListableTeams(testState);
assert.strictEqual(listableTeams[0], openTeams[0]);
assert.strictEqual(listableTeams[1], openTeams[1]);
});
it('getListedJoinableTeams', () => {
const openTeams = [team4, team3];
const joinableTeams = Selectors.getSortedListableTeams(testState);
assert.strictEqual(joinableTeams[0], openTeams[0]);
assert.strictEqual(joinableTeams[1], openTeams[1]);
});
it('getJoinableTeamsUsingPermissions', () => {
const privateTeams = [team1, team2];
const openTeams = [team3, team4];
let modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
...testState.entities.roles.roles.system_user,
permissions: ['join_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
let joinableTeams = Selectors.getJoinableTeams(modifiedState);
assert.strictEqual(joinableTeams[0], privateTeams[0]);
assert.strictEqual(joinableTeams[1], privateTeams[1]);
modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
permissions: ['join_public_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
joinableTeams = Selectors.getJoinableTeams(modifiedState);
assert.strictEqual(joinableTeams[0], openTeams[0]);
assert.strictEqual(joinableTeams[1], openTeams[1]);
modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
permissions: ['join_public_teams', 'join_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
joinableTeams = Selectors.getJoinableTeams(modifiedState);
assert.strictEqual(joinableTeams[0], privateTeams[0]);
assert.strictEqual(joinableTeams[1], privateTeams[1]);
assert.strictEqual(joinableTeams[2], openTeams[0]);
assert.strictEqual(joinableTeams[3], openTeams[1]);
});
it('getSortedJoinableTeamsUsingPermissions', () => {
const privateTeams = [team2, team1];
const openTeams = [team4, team3];
const modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
...testState.entities.roles.roles.system_user,
permissions: ['join_public_teams', 'join_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
const joinableTeams = Selectors.getSortedJoinableTeams(modifiedState);
assert.strictEqual(joinableTeams[0], openTeams[0]);
assert.strictEqual(joinableTeams[1], privateTeams[0]);
assert.strictEqual(joinableTeams[2], privateTeams[1]);
assert.strictEqual(joinableTeams[3], openTeams[1]);
});
it('getListableTeamsUsingPermissions', () => {
const privateTeams = [team1, team2];
const openTeams = [team3, team4];
let modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
...testState.entities.roles.roles.system_user,
permissions: ['list_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
let listableTeams = Selectors.getListableTeams(modifiedState);
assert.strictEqual(listableTeams[0], privateTeams[0]);
assert.strictEqual(listableTeams[1], privateTeams[1]);
modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
permissions: ['list_public_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
listableTeams = Selectors.getListableTeams(modifiedState);
assert.strictEqual(listableTeams[0], openTeams[0]);
assert.strictEqual(listableTeams[1], openTeams[1]);
modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
permissions: ['list_public_teams', 'list_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
listableTeams = Selectors.getListableTeams(modifiedState);
assert.strictEqual(listableTeams[0], privateTeams[0]);
assert.strictEqual(listableTeams[1], privateTeams[1]);
assert.strictEqual(listableTeams[2], openTeams[0]);
assert.strictEqual(listableTeams[3], openTeams[1]);
});
it('getSortedListableTeamsUsingPermissions', () => {
const privateTeams = [team2, team1];
const openTeams = [team4, team3];
const modifiedState = {
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {},
},
roles: {
roles: {
system_user: {
...testState.entities.roles.roles.system_user,
permissions: ['list_public_teams', 'list_private_teams'],
},
},
},
general: {
serverVersion: '5.10.0',
},
},
};
const listableTeams = Selectors.getSortedListableTeams(modifiedState);
assert.strictEqual(listableTeams[0], openTeams[0]);
assert.strictEqual(listableTeams[1], privateTeams[0]);
assert.strictEqual(listableTeams[2], privateTeams[1]);
assert.strictEqual(listableTeams[3], openTeams[1]);
});
it('isCurrentUserCurrentTeamAdmin', () => {
assert.deepEqual(Selectors.isCurrentUserCurrentTeamAdmin(testState), false);
});
it('getMyTeamMember', () => {
assert.deepEqual(Selectors.getMyTeamMember(testState, team1.id), myMembers[team1.id]);
});
it('getTeam', () => {
const modifiedState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
teams: {
...testState.entities.teams.teams,
[team3.id]: {
...team3,
allow_open_invite: false,
},
},
},
},
};
const fromOriginalState = Selectors.getTeam(testState, team1.id);
const fromModifiedState = Selectors.getTeam(modifiedState, team1.id);
assert.ok(fromOriginalState === fromModifiedState);
});
it('getJoinableTeamIds', () => {
const modifiedState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
teams: {
...testState.entities.teams.teams,
[team3.id]: {
...team3,
display_name: 'Welcome',
},
},
},
},
};
const fromOriginalState = Selectors.getJoinableTeamIds(testState);
const fromModifiedState = Selectors.getJoinableTeamIds(modifiedState);
assert.ok(fromOriginalState === fromModifiedState);
});
it('getMySortedTeamIds', () => {
const modifiedState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
teams: {
...testState.entities.teams.teams,
[team3.id]: {
...team3,
display_name: 'Welcome',
},
},
},
},
};
const updateState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
teams: {
...testState.entities.teams.teams,
[team2.id]: {
...team2,
display_name: 'Yankz',
},
},
},
},
};
const fromOriginalState = Selectors.getMySortedTeamIds(testState);
const fromModifiedState = Selectors.getMySortedTeamIds(modifiedState);
const fromUpdateState = Selectors.getMySortedTeamIds(updateState);
assert.ok(fromOriginalState === fromModifiedState);
assert.ok(fromModifiedState[0] === team2.id);
assert.ok(fromModifiedState !== fromUpdateState);
assert.ok(fromUpdateState[0] === team1.id);
});
it('getMyTeamsCount', () => {
const modifiedState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
teams: {
...testState.entities.teams.teams,
[team3.id]: {
...team3,
display_name: 'Welcome',
},
},
},
},
};
const updateState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
myMembers: {
...testState.entities.teams.myMembers,
[team3.id]: {team_id: team3.id, user_id: user.id, roles: General.TEAM_USER_ROLE},
},
},
},
};
const fromOriginalState = Selectors.getMyTeamsCount(testState);
const fromModifiedState = Selectors.getMyTeamsCount(modifiedState);
const fromUpdateState = Selectors.getMyTeamsCount(updateState);
assert.ok(fromOriginalState === fromModifiedState);
assert.ok(fromModifiedState === 2);
assert.ok(fromModifiedState !== fromUpdateState);
assert.ok(fromUpdateState === 3);
});
it('getChannelDrawerBadgeCount', () => {
const mentions = Selectors.getChannelDrawerBadgeCount(testState);
assert.ok(mentions === 3);
});
it('getTeamMentions', () => {
const factory1 = Selectors.makeGetBadgeCountForTeamId();
const factory2 = Selectors.makeGetBadgeCountForTeamId();
const factory3 = Selectors.makeGetBadgeCountForTeamId();
const mentions1 = factory1(testState, team1.id);
assert.ok(mentions1 === 1);
const mentions2 = factory2(testState, team2.id);
assert.ok(mentions2 === 3);
// Not a member of the team
const mentions3 = factory3(testState, team3.id);
assert.ok(mentions3 === 0);
});
it('getCurrentRelativeTeamUrl', () => {
assert.deepEqual(Selectors.getCurrentRelativeTeamUrl(testState), '/' + team1.name);
assert.deepEqual(Selectors.getCurrentRelativeTeamUrl({entities: {teams: {teams: {}}}}), '/');
});
it('getCurrentTeamUrl', () => {
const siteURL = 'http://localhost:8065';
const general = {
config: {SiteURL: siteURL},
credentials: {},
};
const withSiteURLState = {
...testState,
entities: {
...testState.entities,
general,
},
};
withSiteURLState.entities.general = general;
assert.deepEqual(Selectors.getCurrentTeamUrl(withSiteURLState), siteURL + '/' + team1.name);
const credentialURL = 'http://localhost';
const withCredentialURLState = {
...withSiteURLState,
entities: {
...withSiteURLState.entities,
general: {
...withSiteURLState.entities.general,
credentials: {url: credentialURL},
},
},
};
assert.deepEqual(Selectors.getCurrentTeamUrl(withCredentialURLState), credentialURL + '/' + team1.name);
});
it('getCurrentTeamUrl with falsy currentTeam', () => {
const siteURL = 'http://localhost:8065';
const general = {
config: {SiteURL: siteURL},
credentials: {},
};
const falsyCurrentTeamIds = ['', null, undefined];
falsyCurrentTeamIds.forEach((falsyCurrentTeamId) => {
const withSiteURLState = {
...testState,
entities: {
...testState.entities,
teams: {
...testState.entities.teams,
currentTeamId: falsyCurrentTeamId,
},
general,
},
};
withSiteURLState.entities.general = general;
assert.deepEqual(Selectors.getCurrentTeamUrl(withSiteURLState), siteURL);
const credentialURL = 'http://localhost';
const withCredentialURLState = {
...withSiteURLState,
entities: {
...withSiteURLState.entities,
general: {
...withSiteURLState.entities.general,
credentials: {url: credentialURL},
},
},
};
assert.deepEqual(Selectors.getCurrentTeamUrl(withCredentialURLState), credentialURL);
});
});
});