From c313bd49738fb34d0d28e18b9718bcfcfe519834 Mon Sep 17 00:00:00 2001 From: Djuri Baars Date: Mon, 17 Jan 2022 18:04:35 +0100 Subject: [PATCH] Fixed tests --- src/app/app.component.spec.ts | 7 -- .../overview/overview.component.spec.ts | 12 ++- .../ring-only/ring-only.component.spec.ts | 11 ++- .../settings/settings.component.spec.ts | 14 +++- .../visual/visual.component.spec.ts | 12 ++- src/app/layout/base/base.component.spec.ts | 10 +-- .../navigation/navigation.component.spec.ts | 12 ++- .../edit-ring-order.component.spec.ts | 11 ++- .../file-exporter.component.spec.ts | 10 ++- .../node-connections.component.spec.ts | 11 ++- .../participant-table.component.spec.ts | 9 ++- .../reorder-participants.component.spec.ts | 11 ++- src/app/reducers/setting.reducer.spec.ts | 6 +- src/app/reducers/setting.reducer.ts | 4 +- src/app/services/ln-data.service.spec.ts | 7 +- src/app/services/ring-data.service.spec.ts | 15 +++- .../vis/network/vis-network.directive.spec.ts | 8 -- .../vis/network/vis-network.service.spec.ts | 79 +++++++++++++++++-- 18 files changed, 204 insertions(+), 45 deletions(-) delete mode 100644 src/app/vis/network/vis-network.directive.spec.ts diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index b63fafa..f331127 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -25,11 +25,4 @@ describe('AppComponent', () => { const app = fixture.componentInstance; expect(app.title).toEqual('ringtools-web'); }); - - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('ringtools-web app is running!'); - }); }); diff --git a/src/app/components/overview/overview.component.spec.ts b/src/app/components/overview/overview.component.spec.ts index 44a847e..bced863 100644 --- a/src/app/components/overview/overview.component.spec.ts +++ b/src/app/components/overview/overview.component.spec.ts @@ -1,16 +1,26 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore, MockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { OverviewComponent } from './overview.component'; describe('OverviewComponent', () => { let component: OverviewComponent; let fixture: ComponentFixture; + const initialState = { setting: initialSettingState }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ OverviewComponent ] + declarations: [ OverviewComponent ], + imports: [ HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); + + let store: MockStore; }); beforeEach(() => { diff --git a/src/app/components/ring-only/ring-only.component.spec.ts b/src/app/components/ring-only/ring-only.component.spec.ts index c82ab14..cd8ef7f 100644 --- a/src/app/components/ring-only/ring-only.component.spec.ts +++ b/src/app/components/ring-only/ring-only.component.spec.ts @@ -1,14 +1,23 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { RingOnlyComponent } from './ring-only.component'; describe('RingOnlyComponent', () => { let component: RingOnlyComponent; let fixture: ComponentFixture; + const initialState = { setting: initialSettingState }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ RingOnlyComponent ] + declarations: [ RingOnlyComponent ], + imports: [ RouterTestingModule, HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/components/settings/settings.component.spec.ts b/src/app/components/settings/settings.component.spec.ts index a3a508b..977acab 100644 --- a/src/app/components/settings/settings.component.spec.ts +++ b/src/app/components/settings/settings.component.spec.ts @@ -1,16 +1,28 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { MockStore, provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { SettingsComponent } from './settings.component'; describe('SettingsComponent', () => { let component: SettingsComponent; let fixture: ComponentFixture; + let store: MockStore; + const initialState = { setting: initialSettingState }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ SettingsComponent ] + declarations: [ SettingsComponent ], + imports: [ RouterTestingModule, HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); + + store = TestBed.inject(MockStore); }); beforeEach(() => { diff --git a/src/app/components/visual/visual.component.spec.ts b/src/app/components/visual/visual.component.spec.ts index cb38484..4ed6fc8 100644 --- a/src/app/components/visual/visual.component.spec.ts +++ b/src/app/components/visual/visual.component.spec.ts @@ -1,14 +1,24 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { VisualComponent } from './visual.component'; describe('VisualComponent', () => { let component: VisualComponent; let fixture: ComponentFixture; + const initialState = { + setting: initialSettingState + }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ VisualComponent ] + declarations: [ VisualComponent ], + imports: [ HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/layout/base/base.component.spec.ts b/src/app/layout/base/base.component.spec.ts index f8d80ca..530c50b 100644 --- a/src/app/layout/base/base.component.spec.ts +++ b/src/app/layout/base/base.component.spec.ts @@ -1,20 +1,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; -import { BaseComponent } from './base.component'; +import { BaseLayoutComponent } from './base.component'; describe('BaseComponent', () => { - let component: BaseComponent; - let fixture: ComponentFixture; + let component: BaseLayoutComponent; + let fixture: ComponentFixture; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ BaseComponent ] + declarations: [ BaseLayoutComponent ] }) .compileComponents(); }); beforeEach(() => { - fixture = TestBed.createComponent(BaseComponent); + fixture = TestBed.createComponent(BaseLayoutComponent); component = fixture.componentInstance; fixture.detectChanges(); }); diff --git a/src/app/layout/navigation/navigation.component.spec.ts b/src/app/layout/navigation/navigation.component.spec.ts index 23438b0..99e9fe7 100644 --- a/src/app/layout/navigation/navigation.component.spec.ts +++ b/src/app/layout/navigation/navigation.component.spec.ts @@ -1,14 +1,22 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { provideMockStore, MockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { NavigationComponent } from './navigation.component'; describe('NavigationComponent', () => { let component: NavigationComponent; let fixture: ComponentFixture; - + const initialState = { setting: initialSettingState }; + beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ NavigationComponent ] + declarations: [ NavigationComponent ], + imports: [ RouterTestingModule ], + providers: [ + provideMockStore({ initialState }) + ] }) .compileComponents(); }); diff --git a/src/app/partials/edit-ring-order/edit-ring-order.component.spec.ts b/src/app/partials/edit-ring-order/edit-ring-order.component.spec.ts index 98e0c70..fcb5ab3 100644 --- a/src/app/partials/edit-ring-order/edit-ring-order.component.spec.ts +++ b/src/app/partials/edit-ring-order/edit-ring-order.component.spec.ts @@ -1,14 +1,23 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { DragulaModule, DragulaService } from 'ng2-dragula'; import { EditRingOrderComponent } from './edit-ring-order.component'; describe('EditRingOrderComponent', () => { let component: EditRingOrderComponent; let fixture: ComponentFixture; + const initialState = { loggedIn: false }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ EditRingOrderComponent ] + declarations: [ EditRingOrderComponent ], + imports: [ DragulaModule, HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + DragulaService + ] }) .compileComponents(); }); diff --git a/src/app/partials/file-exporter/file-exporter.component.spec.ts b/src/app/partials/file-exporter/file-exporter.component.spec.ts index af8fe1e..7433933 100644 --- a/src/app/partials/file-exporter/file-exporter.component.spec.ts +++ b/src/app/partials/file-exporter/file-exporter.component.spec.ts @@ -1,14 +1,22 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { FileExporterComponent } from './file-exporter.component'; describe('FileExporterComponent', () => { let component: FileExporterComponent; let fixture: ComponentFixture; + const initialState = { setting: initialSettingState }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ FileExporterComponent ] + declarations: [ FileExporterComponent ], + imports: [ HttpClientTestingModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/partials/node-connections/node-connections.component.spec.ts b/src/app/partials/node-connections/node-connections.component.spec.ts index 2b00e81..735b062 100644 --- a/src/app/partials/node-connections/node-connections.component.spec.ts +++ b/src/app/partials/node-connections/node-connections.component.spec.ts @@ -1,14 +1,23 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; +import { VisModule } from 'src/app/vis/vis.module'; import { NodeConnectionsComponent } from './node-connections.component'; describe('NodeConnectionsComponent', () => { let component: NodeConnectionsComponent; let fixture: ComponentFixture; + const initialState = { setting: initialSettingState }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ NodeConnectionsComponent ] + declarations: [ NodeConnectionsComponent ], + imports: [ HttpClientTestingModule, VisModule ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/partials/participant-table/participant-table.component.spec.ts b/src/app/partials/participant-table/participant-table.component.spec.ts index bf64a7c..2ab4bdf 100644 --- a/src/app/partials/participant-table/participant-table.component.spec.ts +++ b/src/app/partials/participant-table/participant-table.component.spec.ts @@ -1,14 +1,21 @@ +import { JsonPipe } from '@angular/common'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; import { ParticipantTableComponent } from './participant-table.component'; describe('ParticipantTableComponent', () => { let component: ParticipantTableComponent; let fixture: ComponentFixture; + const initialState = { loggedIn: false }; beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ ParticipantTableComponent ] + declarations: [ ParticipantTableComponent ], + providers: [ + JsonPipe, + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/partials/reorder-participants/reorder-participants.component.spec.ts b/src/app/partials/reorder-participants/reorder-participants.component.spec.ts index 7445580..d165ee3 100644 --- a/src/app/partials/reorder-participants/reorder-participants.component.spec.ts +++ b/src/app/partials/reorder-participants/reorder-participants.component.spec.ts @@ -1,14 +1,21 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { initialSettingState } from 'src/app/reducers/setting.reducer'; import { ReorderParticipantsComponent } from './reorder-participants.component'; describe('ReorderParticipantsComponent', () => { let component: ReorderParticipantsComponent; let fixture: ComponentFixture; - + const initialState = { + settings: initialSettingState + } beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [ ReorderParticipantsComponent ] + declarations: [ ReorderParticipantsComponent ], + providers: [ + provideMockStore({ initialState }), + ] }) .compileComponents(); }); diff --git a/src/app/reducers/setting.reducer.spec.ts b/src/app/reducers/setting.reducer.spec.ts index ba61501..5b1e3ab 100644 --- a/src/app/reducers/setting.reducer.spec.ts +++ b/src/app/reducers/setting.reducer.spec.ts @@ -1,13 +1,13 @@ -import { reducer, initialState } from './setting.reducer'; +import { reducer, initialSettingState } from './setting.reducer'; describe('Setting Reducer', () => { describe('an unknown action', () => { it('should return the previous state', () => { const action = {} as any; - const result = reducer(initialState, action); + const result = reducer(initialSettingState, action); - expect(result).toBe(initialState); + expect(result).toBe(initialSettingState); }); }); }); diff --git a/src/app/reducers/setting.reducer.ts b/src/app/reducers/setting.reducer.ts index 15f9f80..1c3080a 100644 --- a/src/app/reducers/setting.reducer.ts +++ b/src/app/reducers/setting.reducer.ts @@ -12,7 +12,7 @@ export interface SettingState { ringLeader?: NodeOwner; } -export const initialState: SettingState = { +export const initialSettingState: SettingState = { ringName: 'Unconfigured', viewMode: 'tg', showLogo: false, @@ -20,7 +20,7 @@ export const initialState: SettingState = { }; export const settingReducer = createReducer( - initialState, + initialSettingState, on(SettingActions.setRingName, (state: SettingState, {ringName}) => { return {...state, ringName: ringName } diff --git a/src/app/services/ln-data.service.spec.ts b/src/app/services/ln-data.service.spec.ts index fcc23bc..8d326cc 100644 --- a/src/app/services/ln-data.service.spec.ts +++ b/src/app/services/ln-data.service.spec.ts @@ -1,3 +1,4 @@ +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { LnDataService } from './ln-data.service'; @@ -6,7 +7,11 @@ describe('LnDataService', () => { let service: LnDataService; beforeEach(() => { - TestBed.configureTestingModule({}); + TestBed.configureTestingModule({ + imports: [ + HttpClientTestingModule + ], + }); service = TestBed.inject(LnDataService); }); diff --git a/src/app/services/ring-data.service.spec.ts b/src/app/services/ring-data.service.spec.ts index 6591c82..3b185ef 100644 --- a/src/app/services/ring-data.service.spec.ts +++ b/src/app/services/ring-data.service.spec.ts @@ -1,12 +1,23 @@ import { TestBed } from '@angular/core/testing'; +import { provideMockStore } from '@ngrx/store/testing'; +import { HttpClientTestingModule } from '@angular/common/http/testing'; import { RingDataService } from './ring-data.service'; describe('RingDataService', () => { let service: RingDataService; - + const initialState = { loggedIn: false }; + beforeEach(() => { - TestBed.configureTestingModule({}); + TestBed.configureTestingModule({ + imports: [ + HttpClientTestingModule + ], + providers: [ + provideMockStore({ initialState }), + + ] + }); service = TestBed.inject(RingDataService); }); diff --git a/src/app/vis/network/vis-network.directive.spec.ts b/src/app/vis/network/vis-network.directive.spec.ts deleted file mode 100644 index 73e4b14..0000000 --- a/src/app/vis/network/vis-network.directive.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { VisNetworkDirective } from './vis-network.directive'; - -describe('VisNetworkDirective', () => { - it('should create an instance', () => { - const directive = new VisNetworkDirective(); - expect(directive).toBeTruthy(); - }); -}); diff --git a/src/app/vis/network/vis-network.service.spec.ts b/src/app/vis/network/vis-network.service.spec.ts index a837b81..11fbcab 100644 --- a/src/app/vis/network/vis-network.service.spec.ts +++ b/src/app/vis/network/vis-network.service.spec.ts @@ -3,14 +3,83 @@ import { TestBed } from '@angular/core/testing'; import { VisNetworkService } from './vis-network.service'; describe('VisNetworkService', () => { - let service: VisNetworkService; + let visNetworkService: VisNetworkService; beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(VisNetworkService); + TestBed.configureTestingModule({ + providers: [ + VisNetworkService + ] + }); + visNetworkService = TestBed.inject(VisNetworkService); }); - it('should be created', () => { - expect(service).toBeTruthy(); + it('returns undefined when network id is unknown', () => { + const selection = visNetworkService.getSelection('unknown'); + expect(selection).toBeUndefined(); + const selectedNodes = visNetworkService.getSelectedNodes('unknown'); + expect(selectedNodes).toBeUndefined(); + const selectedEdges = visNetworkService.getSelectedEdges('unknown'); + expect(selectedEdges).toBeUndefined(); + }); + + it('throws no error when the network does not exist', () => { + visNetworkService.destroy('unknown'); + }); + + it('throws error when network already exists', () => { + const dummyElement = document.createElement('div'); + visNetworkService.create('knownNetwork', dummyElement, { nodes: [], edges: [] }); + expect(() => visNetworkService.create('knownNetwork', dummyElement, { nodes: [], edges: [] })).toThrowError(); + }); + + it('returns false when network does not exist', () => { + expect(visNetworkService.on('unknown', 'click')).toBe(false); + expect(visNetworkService.once('unknown', 'click')).toBe(false); + visNetworkService.off('unknown', 'click'); + expect(visNetworkService.isCluster('unknown', 'nodeId')).toBe(false); + }); + + it('throws error when network does not exist', () => { + expect(() => visNetworkService.setData('unknown', { nodes: [], edges: [] })).toThrowError(); + expect(() => visNetworkService.setOptions('unknown', {})).toThrowError(); + expect(() => visNetworkService.selectNodes('unknown', [])).toThrowError(); + expect(() => visNetworkService.selectNodes('unknown', [], false)).toThrowError(); + expect(() => visNetworkService.setSelection('unknown', { nodes: [], edges: [] })).toThrowError(); + expect(() => visNetworkService.setSelection('unknown', { nodes: [], edges: [] }, {})).toThrowError(); + expect(() => visNetworkService.setSelection('unknown', { nodes: [], edges: [] }, { unselectAll: false, highlightEdges: false })).toThrowError(); + expect(() => visNetworkService.unselectAll('unknown')).toThrowError(); + expect(() => visNetworkService.fit('unknown')).toThrowError(); + expect(() => visNetworkService.getScale('unknown')).toThrowError(); + expect(() => visNetworkService.fit('unknown', { animation: true })).toThrowError(); + expect(() => visNetworkService.redraw('unknown')).toThrowError(); + expect(() => visNetworkService.enableEditMode('unknown')).toThrowError(); + expect(() => visNetworkService.addEdgeMode('unknown')).toThrowError(); + expect(() => visNetworkService.addNodeMode('unknown')).toThrowError(); + expect(() => visNetworkService.disableEditMode('unknown')).toThrowError(); + expect(() => visNetworkService.deleteSelected('unknown')).toThrowError(); + expect(() => visNetworkService.cluster('unknown')).toThrowError(); + expect(() => visNetworkService.cluster('unknown', {})).toThrowError(); + expect(() => visNetworkService.clusterByConnection('unknown', 42, {})).toThrowError(); + expect(() => visNetworkService.clusterByConnection('unknown', 42)).toThrowError(); + expect(() => visNetworkService.clusterByHubsize('unknown', 42, {})).toThrowError(); + expect(() => visNetworkService.clusterByHubsize('unknown', 42)).toThrowError(); + expect(() => visNetworkService.clusterOutliers('unknown', {})).toThrowError(); + expect(() => visNetworkService.clusterOutliers('unknown')).toThrowError(); + expect(() => visNetworkService.findNode('unknown', 42)).toThrowError(); + expect(() => visNetworkService.getClusteredEdges('unknown', 42)).toThrowError(); + expect(() => visNetworkService.getBaseEdge('unknown', 42)).toThrowError(); + expect(() => visNetworkService.updateEdge('unknown', 42)).toThrowError(); + expect(() => visNetworkService.updateEdge('unknown', 42)).toThrowError(); + expect(() => visNetworkService.updateClusteredNode('unknown', 42)).toThrowError(); + expect(() => visNetworkService.updateClusteredNode('unknown', 42, {})).toThrowError(); + expect(() => visNetworkService.getNodesInCluster('unknown', 42)).toThrowError(); + expect(() => visNetworkService.openCluster('unknown', 'nodeId')).toThrowError(); + expect(() => visNetworkService.canvasToDOM('unknown', { x: 1, y: 1 })).toThrowError(); + expect(() => visNetworkService.DOMtoCanvas('unknown', { x: 1, y: 1 })).toThrowError(); + }); + + it('returns -1 when network does not exist', () => { + expect(visNetworkService.getSeed('unknown')).toBe(-1); }); });