;
+ 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 @@
-
-
+
zoom_out_map
@@ -80,7 +80,7 @@
-
+
settings_applications
@@ -92,6 +92,8 @@