/*
* Wire
* Copyright (C) 2020 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/
import {act, render} from '@testing-library/react';
import ko from 'knockout';
import {AccentColor} from '@wireapp/commons';
import {User} from 'src/script/entity/User';
import {AccentColorPicker, AccentColorPickerProps} from './AccentColorPicker';
describe('AccentColorPicker', () => {
it('shows expected accent colors', async () => {
const props: AccentColorPickerProps = {
doSetAccentColor: () => {},
user: {
accent_id: ko.observable(AccentColor.BRIGHT_ORANGE.id),
} as User,
};
const {container} = render();
expect(container.querySelectorAll('[data-uie-name="do-set-accent-color"]').length).toBe(
AccentColor.ACCENT_COLORS.length,
);
});
it('selects users current accent color', async () => {
const selectedAccentColorId = AccentColor.BRIGHT_ORANGE.id;
const props = {
doSetAccentColor: () => {},
user: {
accent_id: ko.observable(selectedAccentColorId),
} as User,
};
const {container} = render();
const input: HTMLInputElement = container.querySelector(
`[data-uie-name="do-set-accent-color"][data-uie-value="${selectedAccentColorId}"]`,
);
expect(input).not.toBe(null);
expect(input.checked).toBe(true);
});
it('updates users accent color on click', async () => {
const props = {
doSetAccentColor: jasmine.createSpy(),
user: {
accent_id: ko.observable(0),
} as User,
};
const {container} = render();
AccentColor.ACCENT_COLORS.forEach(accentColor => {
act(() => {
(
container.querySelector(
`[data-uie-name="do-set-accent-color"][data-uie-value="${accentColor.id}"]`,
) as HTMLInputElement
).click();
});
expect(props.doSetAccentColor).toHaveBeenCalledWith(accentColor.id);
});
});
it('selects color on remote user accent color update', async () => {
const props = {
doSetAccentColor: jasmine.createSpy(),
user: {
accent_id: ko.observable(0),
} as User,
};
const {container} = render();
AccentColor.ACCENT_COLORS.forEach(accentColor => {
act(() => {
props.user.accent_id(accentColor.id);
});
const input: HTMLInputElement = container.querySelector(
`[data-uie-name="do-set-accent-color"][data-uie-value="${accentColor.id}"]`,
);
expect(input).not.toBe(null);
expect(input.checked).toBe(true);
});
});
});