mirror of https://github.com/Squidex/squidex.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
205 lines
6.2 KiB
205 lines
6.2 KiB
/*
|
|
* Squidex Headless CMS
|
|
*
|
|
* @license
|
|
* Copyright (c) Squidex UG (haftungsbeschränkt). All rights reserved.
|
|
*/
|
|
|
|
import { IMock, It, Mock, Times } from 'typemoq';
|
|
import { DialogRequest, DialogService, Notification, Tooltip } from './dialog.service';
|
|
import { LocalStoreService } from './local-store.service';
|
|
|
|
describe('DialogService', () => {
|
|
let localStore: IMock<LocalStoreService>;
|
|
|
|
beforeEach(() => {
|
|
localStore = Mock.ofType<LocalStoreService>();
|
|
});
|
|
|
|
it('should instantiate', () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
expect(dialogService).toBeDefined();
|
|
});
|
|
|
|
it('should create error notification', () => {
|
|
const notification = Notification.error('MyError');
|
|
|
|
expect(notification.displayTime).toBe(10000);
|
|
expect(notification.message).toBe('MyError');
|
|
expect(notification.messageType).toBe('danger');
|
|
});
|
|
|
|
it('should create info notification', () => {
|
|
const notification = Notification.info('MyInfo');
|
|
|
|
expect(notification.displayTime).toBe(10000);
|
|
expect(notification.message).toBe('MyInfo');
|
|
expect(notification.messageType).toBe('primary');
|
|
});
|
|
|
|
[true, false].forEach(confirmed => {
|
|
it(`should confirm dialog with ${confirmed}`, () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
let isCompleted = false;
|
|
let isNext: boolean;
|
|
|
|
dialogService.dialogs.subscribe(dialog => {
|
|
dialog.complete(confirmed);
|
|
});
|
|
|
|
dialogService.confirm('MyTitle', 'MyText').subscribe({
|
|
next: result => {
|
|
isNext = result;
|
|
},
|
|
complete: () => {
|
|
isCompleted = true;
|
|
},
|
|
});
|
|
|
|
expect(isCompleted).toBeTruthy();
|
|
expect(isNext!).toEqual(confirmed);
|
|
|
|
localStore.verify(x => x.setInt(It.isAnyString(), It.isAnyNumber()), Times.never());
|
|
});
|
|
});
|
|
|
|
[true, false].forEach(confirmed => {
|
|
it(`should confirm dialog with '${confirmed}' but not remember`, () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
let isCompleted = false;
|
|
let isNext: boolean;
|
|
|
|
dialogService.dialogs.subscribe(dialog => {
|
|
dialog.complete(confirmed);
|
|
});
|
|
|
|
dialogService.confirm('MyTitle', 'MyText').subscribe({
|
|
next: result => {
|
|
isNext = result;
|
|
},
|
|
complete: () => {
|
|
isCompleted = true;
|
|
},
|
|
});
|
|
|
|
expect(isCompleted).toBeTruthy();
|
|
expect(isNext!).toEqual(confirmed);
|
|
|
|
localStore.verify(x => x.setInt(It.isAnyString(), It.isAnyNumber()), Times.never());
|
|
});
|
|
});
|
|
|
|
[
|
|
{ confirmed: true, saved: 1 },
|
|
{ confirmed: false, saved: 0 },
|
|
].forEach(({ confirmed, saved }) => {
|
|
it(`should confirm dialog with '${confirmed}' and remember if remembered and confirmed`, () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
let isCompleted = false;
|
|
let isNext: boolean;
|
|
|
|
dialogService.dialogs.subscribe(dialog => {
|
|
dialog.remember = true;
|
|
dialog.complete(confirmed);
|
|
});
|
|
|
|
dialogService.confirm('MyTitle', 'MyText', 'MyKey').subscribe({
|
|
next: result => {
|
|
isNext = result;
|
|
},
|
|
complete: () => {
|
|
isCompleted = true;
|
|
},
|
|
});
|
|
|
|
expect(isCompleted).toBeTruthy();
|
|
expect(isNext!).toEqual(confirmed);
|
|
|
|
localStore.verify(x => x.setBoolean('dialogs.confirm.MyKey', It.isAny()), Times.exactly(saved));
|
|
});
|
|
});
|
|
|
|
[
|
|
{ confirmed: true, saved: true, render: 0 },
|
|
{ confirmed: false, saved: false, render: 1 },
|
|
].forEach(({ confirmed, saved, render }) => {
|
|
it(`should confirm dialog with '${confirmed}' from local store if saved`, () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
localStore.setup(x => x.getBoolean('dialogs.confirm.MyKey'))
|
|
.returns(() => saved);
|
|
|
|
let requestCount = 0;
|
|
|
|
let isCompleted = false;
|
|
let isNext: boolean | undefined;
|
|
|
|
dialogService.dialogs.subscribe(_ => {
|
|
requestCount++;
|
|
});
|
|
|
|
dialogService.confirm('MyTitle', 'MyText', 'MyKey').subscribe({
|
|
next: result => {
|
|
isNext = result;
|
|
},
|
|
complete: () => {
|
|
isCompleted = true;
|
|
},
|
|
});
|
|
|
|
expect(isCompleted).toEqual(confirmed);
|
|
expect(isNext).toEqual(confirmed ? true : undefined);
|
|
expect(requestCount).toEqual(render);
|
|
});
|
|
});
|
|
|
|
it('should publish tooltip', () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
const tooltip = new Tooltip('target', 'text', 'left-center');
|
|
|
|
let publishedTooltip: Tooltip;
|
|
|
|
dialogService.tooltips.subscribe(result => {
|
|
publishedTooltip = result;
|
|
});
|
|
|
|
dialogService.tooltip(tooltip);
|
|
|
|
expect(publishedTooltip!).toBe(tooltip);
|
|
});
|
|
|
|
it('should publish notification', () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
const notification = Notification.error('Message');
|
|
|
|
let publishedNotification: Notification;
|
|
|
|
dialogService.notifications.subscribe(result => {
|
|
publishedNotification = result;
|
|
});
|
|
|
|
dialogService.notify(notification);
|
|
|
|
expect(publishedNotification!).toBe(notification);
|
|
});
|
|
|
|
it('should publish dialog request', () => {
|
|
const dialogService = new DialogService(localStore.object);
|
|
|
|
let pushedDialog: DialogRequest;
|
|
|
|
dialogService.dialogs.subscribe(result => {
|
|
pushedDialog = result;
|
|
});
|
|
|
|
dialogService.confirm('MyTitle', 'MyText');
|
|
|
|
expect(pushedDialog!).toBeDefined();
|
|
});
|
|
});
|
|
|