Signal-Desktop/ts/test-both/state/ducks/badges_test.ts

115 lines
3.4 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import { getFakeBadge } from '../../helpers/getFakeBadge';
import { repeat, zipObject } from '../../../util/iterables';
import { BadgeImageTheme } from '../../../badges/BadgeImageTheme';
import type { BadgesStateType } from '../../../state/ducks/badges';
import { actions, reducer } from '../../../state/ducks/badges';
describe('both/state/ducks/badges', () => {
describe('badgeImageFileDownloaded', () => {
const { badgeImageFileDownloaded } = actions;
it("does nothing if the URL isn't in the list of badges", () => {
const state: BadgesStateType = {
byId: { foo: getFakeBadge({ id: 'foo' }) },
};
const action = badgeImageFileDownloaded(
'https://foo.example.com/image.svg',
'/path/to/file.svg'
);
const result = reducer(state, action);
assert.deepStrictEqual(result, state);
});
it('updates all badge image files with matching URLs', () => {
const state: BadgesStateType = {
byId: {
badge1: {
...getFakeBadge({ id: 'badge1' }),
images: [
...Array(3).fill(
zipObject(
Object.values(BadgeImageTheme),
repeat({ url: 'https://example.com/a.svg' })
)
),
{
[BadgeImageTheme.Transparent]: {
url: 'https://example.com/b.svg',
},
},
],
},
badge2: getFakeBadge({ id: 'badge2' }),
badge3: {
...getFakeBadge({ id: 'badge3' }),
images: Array(4).fill({
[BadgeImageTheme.Dark]: {
localPath: 'to be overridden',
url: 'https://example.com/a.svg',
},
[BadgeImageTheme.Light]: {
localPath: 'to be overridden',
url: 'https://example.com/a.svg',
},
[BadgeImageTheme.Transparent]: {
localPath: '/path/should/be/unchanged',
url: 'https://example.com/b.svg',
},
}),
},
},
};
const action = badgeImageFileDownloaded(
'https://example.com/a.svg',
'/path/to/file.svg'
);
const result = reducer(state, action);
assert.deepStrictEqual(result.byId.badge1?.images, [
...Array(3).fill(
zipObject(
Object.values(BadgeImageTheme),
repeat({
localPath: '/path/to/file.svg',
url: 'https://example.com/a.svg',
})
)
),
{
[BadgeImageTheme.Transparent]: {
url: 'https://example.com/b.svg',
},
},
]);
assert.deepStrictEqual(
result.byId.badge2,
getFakeBadge({ id: 'badge2' })
);
assert.deepStrictEqual(
result.byId.badge3?.images,
Array(4).fill({
[BadgeImageTheme.Dark]: {
localPath: '/path/to/file.svg',
url: 'https://example.com/a.svg',
},
[BadgeImageTheme.Light]: {
localPath: '/path/to/file.svg',
url: 'https://example.com/a.svg',
},
[BadgeImageTheme.Transparent]: {
localPath: '/path/should/be/unchanged',
url: 'https://example.com/b.svg',
},
})
);
});
});
});