import {DashboardsContext} from '@bthlabs/homehub-core'; import {RangoAppContext} from '@bthlabs/rango'; import {mount} from 'enzyme'; import React from 'react'; import { AddDashboardModal, Taskbar, WidgetSettingsModal, } from 'src/main/components'; import * as TaskbarContainer from 'src/main/containers/TaskbarContainer'; import {DashboardsContextFactory} from 'tests/__fixtures__/dashboardsContext'; import { FakeService, FakeServiceWithoutSettings, FakeWidget, } from 'tests/__fixtures__/services'; import {SettingsFactory} from 'tests/__fixtures__/settings'; describe('src/main/containers/TaskbarContainer', () => { describe('TaskbarContainer', () => { let fakeDashboardsContext = null; let fakeSettings = null; let fakeRangoAppContext = null; beforeEach(() => { fakeDashboardsContext = DashboardsContextFactory(); fakeSettings = SettingsFactory(); fakeRangoAppContext = {settings: fakeSettings}; }); it('configures the WidgetSettingsModal to show settings view for added service', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddService')(FakeService.kind); component.setProps({}); // Then const widgetSettingsModal = component.find(WidgetSettingsModal).at(0); expect(widgetSettingsModal.prop('settingsView')).toEqual( FakeWidget.settingsView ); expect(widgetSettingsModal.prop('settingsViewProps')).toEqual({ nextCharacteristics: FakeService.emptyCharacteristics(), settings: fakeSettings, setNextCharacteristics: jasmine.any(Function), }); expect(fakeDashboardsContext.addService).not.toHaveBeenCalled(); }); it('immediately adds a service that does not use settings view', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddService')( FakeServiceWithoutSettings.kind ); component.setProps({}); // Then expect(fakeDashboardsContext.addService).toHaveBeenCalledWith( FakeServiceWithoutSettings.kind, FakeServiceWithoutSettings.emptyCharacteristics() ); }); it('handles the WidgetSettingsModal being closed', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddService')(FakeService.kind); component.setProps({}); component.find(WidgetSettingsModal).at(0).invoke('onClose')(); component.setProps({}); // Then const widgetSettingsModal = component.find(WidgetSettingsModal).at(0); expect(widgetSettingsModal.prop('settingsView')).toBe(null); expect(widgetSettingsModal.prop('settingsViewProps')).toEqual({}); }); it('handles the WidgetSettingsModal save button click', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddService')(FakeService.kind); component.setProps({}); component.find(WidgetSettingsModal).at(0).invoke('onSaveButtonClick')(); component.setProps({}); // Then expect(fakeDashboardsContext.addService).toHaveBeenCalledWith( FakeService.kind, FakeService.emptyCharacteristics() ); }); it('displays the AddDashboardModal when add dashboard button is clicked', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddDashboard')(); // Then const addDashboardModal = component.find(AddDashboardModal).at(0); expect(addDashboardModal.prop('show')).toBe(true); }); it('hides the AddDashboardModal when it is closed', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onAddDashboard')(); component.find(AddDashboardModal).at(0).invoke('onClose')(); // Then const addDashboardModal = component.find(AddDashboardModal).at(0); expect(addDashboardModal.prop('show')).toBe(false); }); it('handles the AddDashboardModal save button click', () => { // Given const component = mount( ); // When component.find(AddDashboardModal).at(0).invoke('onSave')('Testing2'); // Then expect(fakeDashboardsContext.addDashboard).toHaveBeenCalledWith( 'Testing2' ); }); it('sets a selected dashboard as current', () => { // Given const component = mount( ); // When component.find(Taskbar).at(0).invoke('onSelectDashboard')('testing2'); // Then expect(fakeDashboardsContext.setCurrentDashboardId).toHaveBeenCalledWith( 'testing2' ); }); it('configures and renders the Taskbar', () => { // Given const component = mount( ); // When const taskbar = component.find(Taskbar).at(0); // Then expect(taskbar.exists()).toBe(true); expect(taskbar.prop('currentDashboardId')).toEqual( fakeDashboardsContext.currentDashboardId ); expect(taskbar.prop('dashboards')).toEqual( fakeDashboardsContext.dashboards ); expect(taskbar.prop('offlineMode')).toEqual(fakeSettings.OFFLINE_MODE); expect(taskbar.prop('savingState')).toEqual({ isSaving: false, lastSaveError: null, lastSaveTimestamp: null, }); expect(taskbar.prop('services')).toEqual(fakeSettings.SERVICES); expect(taskbar.prop('webSocketState')).toEqual({ isWebSocketConnected: false, }); expect(taskbar.prop('widgets')).toEqual(fakeSettings.WIDGETS); }); it('configures and renders the WidgetSettingsModal', () => { // Given const component = mount( ); // When const widgetSettingsModal = component.find(WidgetSettingsModal).at(0); // Then expect(widgetSettingsModal.exists()).toBe(true); expect(widgetSettingsModal.prop('show')).toBe(true); }); it('configures and renders the AddDashboardModal', () => { // Given const component = mount( ); // When const addDashboardModal = component.find(AddDashboardModal).at(0); // Then expect(addDashboardModal.exists()).toBe(true); }); }); });