Skip to content

Commit

Permalink
test: Add some unit tests for useRetentionPolicy (#33196)
Browse files Browse the repository at this point in the history
  • Loading branch information
dougfabris committed Sep 2, 2024
1 parent 377b8bb commit 037128c
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 1 deletion.
87 changes: 87 additions & 0 deletions apps/meteor/client/views/room/hooks/useRetentionPolicy.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { mockAppRoot } from '@rocket.chat/mock-providers';
import { renderHook } from '@testing-library/react';

import { createFakeRoom } from '../../../../tests/mocks/data';
import { useRetentionPolicy } from './useRetentionPolicy';

const getGlobalSettings = ({
enabled = false,
filesOnly = false,
doNotPrunePinned = false,
ignoreThreads = false,
appliesToChannels = false,
appliesToGroups = false,
appliesToDMs = false,
}) => {
return mockAppRoot()
.withSetting('RetentionPolicy_Enabled', enabled)
.withSetting('RetentionPolicy_FilesOnly', filesOnly)
.withSetting('RetentionPolicy_DoNotPrunePinned', doNotPrunePinned)
.withSetting('RetentionPolicy_DoNotPruneThreads', ignoreThreads)
.withSetting('RetentionPolicy_AppliesToChannels', appliesToChannels)
.withSetting('RetentionPolicy_AppliesToGroups', appliesToGroups)
.withSetting('RetentionPolicy_AppliesToDMs', appliesToDMs);
};

const defaultValue = {
enabled: false,
isActive: false,
filesOnly: false,
excludePinned: false,
ignoreThreads: false,
};

const roomTypeConfig = {
c: { appliesToChannels: true },
p: { appliesToGroups: true },
d: { appliesToDMs: true },
};

const CHANNELS_TYPE = 'c';

it('should return the default value if global retention is not enabled', async () => {
const fakeRoom = createFakeRoom({ t: CHANNELS_TYPE });

const { result } = renderHook(() => useRetentionPolicy(fakeRoom), {
legacyRoot: true,
wrapper: getGlobalSettings({}).build(),
});

expect(result.current).toEqual(expect.objectContaining(defaultValue));
});

it('should return enabled true if global retention is enabled', async () => {
const fakeRoom = createFakeRoom({ t: CHANNELS_TYPE });

const { result } = renderHook(() => useRetentionPolicy(fakeRoom), {
legacyRoot: true,
wrapper: getGlobalSettings({ enabled: true }).build(),
});

expect(result.current).toEqual(expect.objectContaining({ ...defaultValue, enabled: true }));
});

it('should return enabled and active true global retention is active for rooms of the type', async () => {
const fakeRoom = createFakeRoom({ t: CHANNELS_TYPE });

const { result } = renderHook(() => useRetentionPolicy(fakeRoom), {
legacyRoot: true,
wrapper: getGlobalSettings({ enabled: true, ...roomTypeConfig[CHANNELS_TYPE] }).build(),
});

expect(result.current).toEqual(expect.objectContaining({ ...defaultValue, enabled: true, isActive: true }));
});

it.failing(
'should isActive be false if global retention is active for rooms of the type and room has retention.enabled false',
async () => {
const fakeRoom = createFakeRoom({ t: CHANNELS_TYPE, retention: { enabled: false } });

const { result } = renderHook(() => useRetentionPolicy(fakeRoom), {
legacyRoot: true,
wrapper: getGlobalSettings({ enabled: true, ...roomTypeConfig[CHANNELS_TYPE] }).build(),
});

expect(result.current?.isActive).toBe(false);
},
);
2 changes: 1 addition & 1 deletion apps/meteor/tests/mocks/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ export function createFakeUser(overrides?: Partial<IUser>): IUser {
};
}

export const createFakeRoom = (overrides?: Partial<IRoom>): IRoom => ({
export const createFakeRoom = (overrides?: Partial<IRoom & { retention?: { enabled: boolean } }>): IRoom => ({
_id: faker.database.mongodbObjectId(),
_updatedAt: faker.date.recent(),
t: faker.helpers.arrayElement(['c', 'p', 'd']),
Expand Down

0 comments on commit 037128c

Please sign in to comment.