import { DashboardsContext, ServiceContainer, ServiceState, } from '@bthlabs/homehub-core'; import {mount} from 'enzyme'; import React from 'react'; import {Dashboard, DashboardItem, DummyWidget} from 'src/main/components'; import * as DashboardContainer from 'src/main/containers/DashboardContainer'; import {DashboardsContextFactory} from 'tests/__fixtures__/dashboardsContext'; import {FakeWidget} from 'tests/__fixtures__/services'; import {SettingsFactory} from 'tests/__fixtures__/settings'; describe('src/main/containers/DashboardContainer', () => { describe('ControlledDashboardContainer', () => { let fakeDashboardsContext = null; let fakeSettings = null; beforeEach(() => { fakeDashboardsContext = DashboardsContextFactory(); fakeSettings = SettingsFactory(); }); it('handles grid layout change', () => { // Given const component = mount( ); // When const dashboard = component.find(Dashboard).at(0); dashboard.invoke('onGridLayoutChange')([ {i: 'fake_instance', x: 0, y: 0, w: 1, h: 1}, {i: 'other_fake_instance', x: 1, y: 1, w: 1, h: 1}, ]); // Then expect(fakeDashboardsContext.saveServiceLayout).toHaveBeenCalledWith( 'fake_instance', {x: 0, y: 0, w: 1, h: 1} ); expect(fakeDashboardsContext.saveServiceLayout).toHaveBeenCalledWith( 'other_fake_instance', {x: 1, y: 1, w: 1, h: 1} ); }); it('configures and renders the dashboard', () => { // Given const component = mount( ); const expectedLayout = [ {i: 'fake_instance', x: 0, y: 0, w: 1, h: 1, minW: 1, minH: 1}, {i: 'other_fake_instance', x: 0, y: 1, w: 1, h: 1}, ]; // When const dashboard = component.find(Dashboard).at(0); // Then expect(dashboard.exists()).toBe(true); expect(dashboard.prop('readOnly')).toBe(false); expect(dashboard.prop('layout')).toEqual(expectedLayout); }); it('configures and renders the dashboard as read-only', () => { // Given fakeSettings.READ_ONLY = true; const component = mount( ); // When const dashboard = component.find(Dashboard).at(0); // Then expect(dashboard.exists()).toBe(true); expect(dashboard.prop('readOnly')).toBe(true); }); it('configures and renders a ServiceContainer for services', () => { // Given const component = mount( ); // When const serviceContainers = component.find(ServiceContainer); // Then expect(serviceContainers.length).toEqual(2); const serviceContainer = serviceContainers.at(0); expect(serviceContainer.prop('instance')).toEqual( fakeDashboardsContext.dashboards[0].services[0].instance ); expect(serviceContainer.prop('kind')).toEqual( fakeDashboardsContext.dashboards[0].services[0].kind ); expect(serviceContainer.prop('readOnly')).toBe(false); }); it('configures and renders ServiceContainers as read-oniy', () => { // Given fakeSettings.READ_ONLY = true; const component = mount( ); // When const serviceContainers = component.find(ServiceContainer); const serviceContainer = serviceContainers.at(0); // Then expect(serviceContainer.prop('readOnly')).toBe(true); }); it('configures and renders a DashboardItem for services', () => { // Given const component = mount( ); // When const dashboardItems = component.find(DashboardItem); // Then expect(dashboardItems.length).toEqual(2); const dashboardItem = dashboardItems.at(0); expect(dashboardItem.prop('settingsView')).toEqual( FakeWidget.settingsView ); expect(dashboardItem.prop('settingsViewProps').settings).toEqual( fakeSettings ); expect(dashboardItems.at(1).prop('settingsView')).not.toBeDefined(); }); it('configures and renders a widget for services', () => { // Given const component = mount( ); // When const widget = component.find(FakeWidget).at(0); // Then expect(widget.exists()).toBe(true); expect(widget.prop('appearance')).toEqual( fakeDashboardsContext.dashboards[0].services[0].characteristics.appearance ); expect(widget.prop('service')).toEqual( fakeDashboardsContext.dashboards[0].services[0] ); expect(widget.prop('serviceState')).toBeInstanceOf(ServiceState); expect(widget.prop('setServiceState')).toBeDefined(); }); it('renders a DummyWidget for service with unknown widget', () => { // Given const component = mount( ); // When const widget = component.find(DummyWidget).at(0); // Then expect(widget.exists()).toBe(true); expect(widget.prop('service')).toEqual( fakeDashboardsContext.dashboards[0].services[1] ); }); }); });