193 lines
5.0 KiB
TypeScript
193 lines
5.0 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
import {
|
|
CardElementManager,
|
|
CardHTMLElement,
|
|
} from '../../src/card-controller/card-element-manager';
|
|
import { createCardAPI } from '../test-utils';
|
|
import { mock } from 'vitest-mock-extended';
|
|
|
|
const createElement = (): CardHTMLElement => {
|
|
const element = document.createElement('div') as unknown as CardHTMLElement;
|
|
element.requestUpdate = vi.fn();
|
|
return element as CardHTMLElement;
|
|
};
|
|
|
|
// @vitest-environment jsdom
|
|
describe('CardElementManager', () => {
|
|
afterEach(() => {
|
|
vi.unstubAllGlobals();
|
|
global.window.location = mock<Location>();
|
|
});
|
|
|
|
it('should get element', () => {
|
|
const element = createElement();
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
expect(manager.getElement()).toBe(element);
|
|
});
|
|
|
|
it('should reset scroll', () => {
|
|
const callback = vi.fn();
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
createElement(),
|
|
callback,
|
|
() => undefined,
|
|
);
|
|
|
|
manager.scrollReset();
|
|
|
|
expect(callback).toBeCalled();
|
|
});
|
|
|
|
it('should toggle menu', () => {
|
|
const callback = vi.fn();
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
createElement(),
|
|
() => undefined,
|
|
callback,
|
|
);
|
|
|
|
manager.toggleMenu();
|
|
|
|
expect(callback).toBeCalled();
|
|
});
|
|
|
|
it('should update', () => {
|
|
const element = createElement();
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
manager.update();
|
|
expect(element.requestUpdate).toBeCalled();
|
|
});
|
|
|
|
it('should get hasUpdated', () => {
|
|
const element = createElement();
|
|
element.hasUpdated = true;
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
expect(manager.hasUpdated()).toBeTruthy();
|
|
});
|
|
|
|
it('should get height', () => {
|
|
const element = createElement();
|
|
element.getBoundingClientRect = vi.fn().mockReturnValue({
|
|
width: 200,
|
|
height: 800,
|
|
});
|
|
|
|
const manager = new CardElementManager(
|
|
createCardAPI(),
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
expect(manager.getCardHeight()).toBe(800);
|
|
});
|
|
|
|
it('should connect', () => {
|
|
const windowAddEventListener = vi.spyOn(global.window, 'addEventListener');
|
|
|
|
const addEventListener = vi.fn();
|
|
const element = createElement();
|
|
element.addEventListener = addEventListener;
|
|
|
|
const api = createCardAPI();
|
|
const manager = new CardElementManager(
|
|
api,
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
manager.elementConnected();
|
|
|
|
expect(element.getAttribute('panel')).toBeNull();
|
|
expect(api.getFullscreenManager().connect).toBeCalled();
|
|
|
|
expect(addEventListener).toBeCalledWith(
|
|
'mousemove',
|
|
api.getInteractionManager().reportInteraction,
|
|
);
|
|
expect(addEventListener).toBeCalledWith(
|
|
'll-custom',
|
|
api.getActionsManager().handleActionEvent,
|
|
);
|
|
expect(addEventListener).toBeCalledWith(
|
|
'@action',
|
|
api.getInteractionManager().reportInteraction,
|
|
);
|
|
expect(windowAddEventListener).toBeCalledWith('location-changed', expect.anything());
|
|
expect(windowAddEventListener).toBeCalledWith('popstate', expect.anything());
|
|
|
|
expect(api.getInteractionManager().initialize).toBeCalled();
|
|
expect(api.getFullscreenManager().initialize).toBeCalled();
|
|
expect(api.getExpandManager().initialize).toBeCalled();
|
|
expect(api.getMediaLoadedInfoManager().initialize).toBeCalled();
|
|
expect(api.getMicrophoneManager().initialize).toBeCalled();
|
|
});
|
|
|
|
it('should disconnect', () => {
|
|
const windowRemoveEventListener = vi.spyOn(global.window, 'removeEventListener');
|
|
|
|
const element = createElement();
|
|
element.setAttribute('panel', '');
|
|
|
|
const removeEventListener = vi.fn();
|
|
element.removeEventListener = removeEventListener;
|
|
|
|
const api = createCardAPI();
|
|
vi.mocked(api.getCameraManager().reset).mockResolvedValue();
|
|
|
|
const manager = new CardElementManager(
|
|
api,
|
|
element,
|
|
() => undefined,
|
|
() => undefined,
|
|
);
|
|
|
|
manager.elementDisconnected();
|
|
|
|
expect(element.getAttribute('panel')).toBeNull();
|
|
expect(api.getMediaLoadedInfoManager().clear).toBeCalled();
|
|
expect(api.getFullscreenManager().disconnect).toBeCalled();
|
|
|
|
expect(removeEventListener).toBeCalledWith(
|
|
'mousemove',
|
|
api.getInteractionManager().reportInteraction,
|
|
);
|
|
expect(removeEventListener).toBeCalledWith(
|
|
'll-custom',
|
|
api.getActionsManager().handleActionEvent,
|
|
);
|
|
expect(removeEventListener).toBeCalledWith(
|
|
'@action',
|
|
api.getInteractionManager().reportInteraction,
|
|
);
|
|
expect(windowRemoveEventListener).toBeCalledWith(
|
|
'location-changed',
|
|
expect.anything(),
|
|
);
|
|
expect(windowRemoveEventListener).toBeCalledWith('popstate', expect.anything());
|
|
|
|
expect(api.getCameraManager().reset).toBeCalled();
|
|
});
|
|
});
|