* MM-24891 Allow permissions to have defaults set in case where roles not in state * MM-24891 Add tests for haveIPermission * MM-24891 Apply the defaults to more channel permission checks
183 lines
6.5 KiB
JavaScript
183 lines
6.5 KiB
JavaScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
import {makeMapStateToProps} from './index';
|
|
|
|
import {Permissions} from '@mm-redux/constants';
|
|
import * as channelSelectors from '@mm-redux/selectors/entities/channels';
|
|
import * as generalSelectors from '@mm-redux/selectors/entities/general';
|
|
import * as userSelectors from '@mm-redux/selectors/entities/users';
|
|
import * as commonSelectors from '@mm-redux/selectors/entities/common';
|
|
import * as teamSelectors from '@mm-redux/selectors/entities/teams';
|
|
import * as roleSelectors from '@mm-redux/selectors/entities/roles';
|
|
import * as deviceSelectors from 'app/selectors/device';
|
|
import * as preferencesSelectors from '@mm-redux/selectors/entities/preferences';
|
|
import {isMinimumServerVersion} from '@mm-redux/utils/helpers';
|
|
|
|
jest.mock('@mm-redux/utils/post_utils');
|
|
|
|
channelSelectors.getChannel = jest.fn();
|
|
channelSelectors.getCurrentChannelId = jest.fn();
|
|
generalSelectors.getConfig = jest.fn();
|
|
generalSelectors.getLicense = jest.fn();
|
|
generalSelectors.hasNewPermissions = jest.fn();
|
|
userSelectors.getCurrentUserId = jest.fn();
|
|
commonSelectors.getCurrentUserId = jest.fn();
|
|
commonSelectors.getCurrentChannelId = jest.fn();
|
|
teamSelectors.getCurrentTeamId = jest.fn();
|
|
teamSelectors.getCurrentTeamUrl = jest.fn();
|
|
deviceSelectors.getDimensions = jest.fn();
|
|
deviceSelectors.isLandscape = jest.fn();
|
|
preferencesSelectors.getTheme = jest.fn();
|
|
roleSelectors.haveIChannelPermission = jest.fn();
|
|
|
|
describe('makeMapStateToProps', () => {
|
|
const baseState = {
|
|
entities: {
|
|
posts: {
|
|
posts: {
|
|
post_id: {},
|
|
},
|
|
reactions: {
|
|
post_id: {},
|
|
},
|
|
},
|
|
general: {
|
|
serverVersion: '5.18',
|
|
},
|
|
channels: {myMembers: {}},
|
|
teams: {myMembers: {}},
|
|
roles: {roles: {}},
|
|
users: {profiles: {}},
|
|
},
|
|
};
|
|
|
|
const baseOwnProps = {
|
|
post: {
|
|
id: 'post_id',
|
|
},
|
|
};
|
|
|
|
test('canFlag is false for system messages', () => {
|
|
const ownProps = {
|
|
...baseOwnProps,
|
|
isSystemMessage: true,
|
|
};
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(baseState, ownProps);
|
|
expect(props.canFlag).toBe(false);
|
|
});
|
|
|
|
test('canFlag is true for non-system messages', () => {
|
|
const ownProps = {
|
|
...baseOwnProps,
|
|
isSystemMessage: false,
|
|
};
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(baseState, ownProps);
|
|
expect(props.canFlag).toBe(true);
|
|
});
|
|
|
|
test('canMarkAsUnread is true when isMinimumServerVersion is 5.18v and channel not archived', () => {
|
|
channelSelectors.getChannel = jest.fn().mockReturnValueOnce({
|
|
delete_at: 0,
|
|
});
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(baseState, baseOwnProps);
|
|
expect(isMinimumServerVersion(baseState.entities.general.serverVersion, 5, 18)).toBe(true);
|
|
expect(props.canMarkAsUnread).toBe(true);
|
|
});
|
|
|
|
test('canMarkAsUnread is false when isMinimumServerVersion is 5.18v and channel is archived', () => {
|
|
channelSelectors.getChannel = jest.fn().mockReturnValueOnce({
|
|
delete_at: 1,
|
|
});
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(baseState, baseOwnProps);
|
|
expect(isMinimumServerVersion(baseState.entities.general.serverVersion, 5, 18)).toBe(true);
|
|
expect(props.canMarkAsUnread).toBe(false);
|
|
});
|
|
|
|
test('canMarkAsUnread is false when isMinimumServerVersion is not 5.18v and channel is not archived', () => {
|
|
const state = {
|
|
entities: {
|
|
...baseState.entities,
|
|
general: {
|
|
serverVersion: '5.17',
|
|
},
|
|
},
|
|
};
|
|
|
|
channelSelectors.getChannel = jest.fn().mockReturnValueOnce({
|
|
delete_at: 0,
|
|
});
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(state, baseOwnProps);
|
|
expect(isMinimumServerVersion(state.entities.general.serverVersion, 5, 18)).toBe(false);
|
|
expect(props.canMarkAsUnread).toBe(false);
|
|
});
|
|
|
|
test('canMarkAsUnread is false when isMinimumServerVersion is not 5.18v and channel is archived', () => {
|
|
const state = {
|
|
entities: {
|
|
...baseState.entities,
|
|
general: {
|
|
serverVersion: '5.17',
|
|
},
|
|
},
|
|
};
|
|
|
|
channelSelectors.getChannel = jest.fn().mockReturnValueOnce({
|
|
delete_at: 1,
|
|
});
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
const props = mapStateToProps(state, baseOwnProps);
|
|
expect(isMinimumServerVersion(state.entities.general.serverVersion, 5, 18)).toBe(false);
|
|
expect(props.canMarkAsUnread).toBe(false);
|
|
});
|
|
|
|
test('haveIChannelPermission for canPost is not called when isMinimumServerVersion is not 5.22v', () => {
|
|
const state = {
|
|
entities: {
|
|
...baseState.entities,
|
|
general: {
|
|
serverVersion: '5.21',
|
|
},
|
|
},
|
|
};
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
mapStateToProps(state, baseOwnProps);
|
|
expect(isMinimumServerVersion(state.entities.general.serverVersion, 5, 22)).toBe(false);
|
|
expect(roleSelectors.haveIChannelPermission).not.toHaveBeenCalledWith(state, {
|
|
channel: undefined,
|
|
team: undefined,
|
|
permission: Permissions.CREATE_POST,
|
|
default: true,
|
|
});
|
|
});
|
|
|
|
test('haveIChannelPermission for canPost is called when isMinimumServerVersion is 5.22v', () => {
|
|
const state = {
|
|
entities: {
|
|
...baseState.entities,
|
|
general: {
|
|
serverVersion: '5.22',
|
|
},
|
|
},
|
|
};
|
|
|
|
const mapStateToProps = makeMapStateToProps();
|
|
mapStateToProps(state, baseOwnProps);
|
|
expect(isMinimumServerVersion(state.entities.general.serverVersion, 5, 22)).toBe(true);
|
|
expect(roleSelectors.haveIChannelPermission).toHaveBeenCalledWith(state, {
|
|
channel: undefined,
|
|
team: undefined,
|
|
permission: Permissions.CREATE_POST,
|
|
default: true,
|
|
});
|
|
});
|
|
});
|