diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 223999cc..30493562 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -168,6 +168,7 @@ import { ListOfSnapshotsComponent } from './components/snapshots/list-of-snapsho import { DateFilter } from './filters/dateFilter.pipe'; import { NameFilter } from './filters/nameFilter.pipe'; import { CustomAdaptersComponent } from './components/preferences/common/custom-adapters/custom-adapters.component'; +import { NodesMenuComponent } from './components/project-map/nodes-menu/nodes-menu.component'; if (environment.production) { Raven.config('https://b2b1cfd9b043491eb6b566fd8acee358@sentry.io/842726', { @@ -273,7 +274,8 @@ if (environment.production) { DateFilter, NameFilter, ListOfSnapshotsComponent, - CustomAdaptersComponent + CustomAdaptersComponent, + NodesMenuComponent ], imports: [ BrowserModule, diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.html b/src/app/components/project-map/nodes-menu/nodes-menu.component.html new file mode 100644 index 00000000..10b78bf8 --- /dev/null +++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.html @@ -0,0 +1,32 @@ + + + + diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.scss b/src/app/components/project-map/nodes-menu/nodes-menu.component.scss new file mode 100644 index 00000000..cfac8782 --- /dev/null +++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.scss @@ -0,0 +1,12 @@ +.menu-button { + outline: 0 !important; + transition: 0.5s; + margin-bottom: 16px; + width: 40px; + margin-right: 12px !important; + margin-left: 12px !important; + background: #263238; + padding: 0; + border: none; + background-color: transparent; +} diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts b/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts new file mode 100644 index 00000000..9f199106 --- /dev/null +++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.spec.ts @@ -0,0 +1,74 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { NodesMenuComponent } from './nodes-menu.component'; +import { MockedToasterService } from '../../../services/toaster.service.spec'; +import { MockedNodeService } from '../project-map.component.spec'; +import { MatButtonModule, MatIconModule } from '@angular/material'; +import { CommonModule } from '@angular/common'; +import { NoopAnimationsModule } from '@angular/platform-browser/animations'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { NodeService } from '../../../services/node.service'; +import { ToasterService } from '../../../services/toaster.service'; +import { of } from 'rxjs'; + +describe('NodesMenuComponent', () => { + let component: NodesMenuComponent; + let fixture: ComponentFixture; + let mockedToasterService: MockedToasterService = new MockedToasterService(); + let mockedNodeService: MockedNodeService = new MockedNodeService(); + + beforeEach(async(() => { + TestBed.configureTestingModule({ + imports: [MatButtonModule, MatIconModule, CommonModule, NoopAnimationsModule], + providers: [ + { provide: NodeService, useValue: mockedNodeService }, + { provide: ToasterService, useValue: mockedToasterService } + ], + declarations: [ + NodesMenuComponent, + ], + schemas: [NO_ERRORS_SCHEMA] + }).compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(NodesMenuComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should call start all nodes', () => { + spyOn(mockedNodeService, 'startAll').and.returnValue(of()); + + component.startNodes(); + + expect(mockedNodeService.startAll).toHaveBeenCalled(); + }); + + it('should call stop all nodes', () => { + spyOn(mockedNodeService, 'stopAll').and.returnValue(of()); + + component.stopNodes(); + + expect(mockedNodeService.stopAll).toHaveBeenCalled(); + }); + + it('should call suspend all nodes', () => { + spyOn(mockedNodeService, 'suspendAll').and.returnValue(of()); + + component.suspendNodes(); + + expect(mockedNodeService.suspendAll).toHaveBeenCalled(); + }); + + it('should call reload all nodes', () => { + spyOn(mockedNodeService, 'reloadAll').and.returnValue(of()); + + component.reloadNodes(); + + expect(mockedNodeService.reloadAll).toHaveBeenCalled(); + }); +}); diff --git a/src/app/components/project-map/nodes-menu/nodes-menu.component.ts b/src/app/components/project-map/nodes-menu/nodes-menu.component.ts new file mode 100644 index 00000000..dd841cc7 --- /dev/null +++ b/src/app/components/project-map/nodes-menu/nodes-menu.component.ts @@ -0,0 +1,44 @@ +import { Component, Input } from "@angular/core"; +import { Project } from '../../../models/project'; +import { Server } from '../../../models/server'; +import { NodeService } from '../../../services/node.service'; +import { ToasterService } from '../../../services/toaster.service'; + +@Component({ + selector: 'app-nodes-menu', + templateUrl: './nodes-menu.component.html', + styleUrls: ['./nodes-menu.component.scss'] +}) +export class NodesMenuComponent { + @Input('project') project: Project; + @Input('server') server: Server; + + constructor( + private nodeService: NodeService, + private toasterService: ToasterService + ) {} + + startNodes() { + this.nodeService.startAll(this.server, this.project).subscribe(() => { + this.toasterService.success('All nodes successfully started'); + }); + } + + stopNodes() { + this.nodeService.stopAll(this.server, this.project).subscribe(() => { + this.toasterService.success('All nodes successfully stopped'); + }); + } + + suspendNodes() { + this.nodeService.suspendAll(this.server, this.project).subscribe(() => { + this.toasterService.success('All nodes successfully suspended'); + }); + } + + reloadNodes() { + this.nodeService.reloadAll(this.server, this.project).subscribe(() => { + this.toasterService.success('All nodes successfully reloaded'); + }); + } +} diff --git a/src/app/components/project-map/project-map.component.html b/src/app/components/project-map/project-map.component.html index 92f09b51..283e6cb5 100644 --- a/src/app/components/project-map/project-map.component.html +++ b/src/app/components/project-map/project-map.component.html @@ -33,7 +33,7 @@
- + @@ -48,7 +48,7 @@ - + @@ -60,13 +60,13 @@ - - @@ -80,7 +80,7 @@ - @@ -92,6 +92,8 @@