Fixing SO-Monitoring UI tests
[so.git] / so-monitoring / so-monitoring-ui / src / main / frontend / src / app / details / details.component.spec.ts
index 690c143..8205226 100644 (file)
@@ -23,25 +23,116 @@ SPDX-License-Identifier: Apache-2.0
 import { async, ComponentFixture, TestBed } from '@angular/core/testing';\r
 \r
 import { DetailsComponent } from './details.component';\r
+import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\r
+import { RouterTestingModule } from '@angular/router/testing';\r
+import { MatTableModule } from '@angular/material';\r
+import { inject } from '@angular/core/testing';\r
+import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\r
+import { HttpClientModule } from '@angular/common/http';\r
+import { HttpClient } from '@angular/common/http';\r
+import { RouterModule } from '@angular/router';\r
+import { APP_BASE_HREF } from '@angular/common';\r
+import { ToastrNotificationService } from '../toastr-notification-service.service';\r
+import { DataService } from '../data.service';\r
+import { Observable, of } from 'rxjs';\r
+import { ACTINST } from '../model/activityInstance.model';\r
+import { PDI } from '../model/processDefinition.model';\r
+import { PII } from '../model/processInstance.model';\r
+import { VarInstance } from '../model/variableInstance.model';\r
 \r
-describe('DetailsComponent', () => {\r
-  let component: DetailsComponent;\r
-  let fixture: ComponentFixture<DetailsComponent>;\r
+// Generate stub for toastr popup notifications\r
+class StubbedToastrNotificationService extends ToastrNotificationService {\r
+  toastrSettings() {\r
+  }\r
+}\r
+\r
+// Create SPY Object for Jasmine tests to mock DataService\r
+let spyDataService: jasmine.SpyObj<DataService>;\r
 \r
+describe('DetailsComponent', () => {\r
   beforeEach(async(() => {\r
+    spyDataService = jasmine.createSpyObj('DataService', ['getActivityInstance', 'getVariableInstance']);\r
+\r
     TestBed.configureTestingModule({\r
-      declarations: [DetailsComponent]\r
+      providers: [DetailsComponent, HttpClient, HttpTestingController,\r
+        { provide: APP_BASE_HREF, useValue: '/' },\r
+        { provide: ToastrNotificationService, useClass: StubbedToastrNotificationService },\r
+        { provide: DataService, useValue: spyDataService }],\r
+      imports: [RouterTestingModule, MatTableModule, HttpClientModule, RouterModule.forRoot([])],\r
+      schemas: [\r
+        CUSTOM_ELEMENTS_SCHEMA\r
+      ]\r
     })\r
       .compileComponents();\r
   }));\r
 \r
-  beforeEach(() => {\r
-    fixture = TestBed.createComponent(DetailsComponent);\r
-    component = fixture.componentInstance;\r
-    fixture.detectChanges();\r
-  });\r
+  // Ensure creation of DetailsComponent component\r
+  it('component should be created', inject([DetailsComponent],\r
+    (detailsComponent: DetailsComponent) => {\r
+      expect(detailsComponent).toBeTruthy();\r
+    }));\r
+\r
+\r
+  // Mock an activityInstance and ensure array is populated\r
+  it('activityInstance should be defined if data service returns activities', inject([DetailsComponent],\r
+    (detailsComponent: DetailsComponent) => {\r
+      const activity: ACTINST = {\r
+        activityId: "",\r
+        processInstanceId: "",\r
+        calledProcessInstanceId: "",\r
+        activityName: "",\r
+        activityType: "",\r
+        durationInMillis: "1",\r
+        endTime: "",\r
+        startTime: ""\r
+      };\r
+      spyDataService.getActivityInstance.and.returnValue(of([activity]));\r
+      detailsComponent.getActInst("");\r
+      expect(detailsComponent.activityInstance.length).toEqual(1);\r
+    }));\r
+\r
+\r
+  // Create a processDefinition and ensure it is defined\r
+  it('processDefinition should be defined if PDI populated', inject([DetailsComponent],\r
+    (detailsComponent: DetailsComponent) => {\r
+      const activity: PDI = {\r
+        processDefinitionId: "1",\r
+        processDefinitionXml: ""\r
+      };\r
+      detailsComponent.getProcessDefinition("");\r
+      detailsComponent.processDefinition = activity;\r
+      expect(detailsComponent.processDefinition).toBeDefined();\r
+    }));\r
+\r
+\r
+  // Create a processInstance and ensure it is defined\r
+  it('processInstance should be defined if PII populated', inject([DetailsComponent],\r
+    (detailsComponent: DetailsComponent) => {\r
+      const testVals: PII = {\r
+        processInstancId: "1",\r
+        processDefinitionId: "1",\r
+        processDefinitionName: "test",\r
+        superProcessInstanceId: "1"\r
+      };\r
+      detailsComponent.getProcInstance("");\r
+      detailsComponent.processInstance = testVals;\r
+      expect(detailsComponent.processInstance).toBeDefined();\r
+    }));\r
+\r
+\r
+    // displayCamundaflow test\r
+    // TODO\r
 \r
-  it('should create', () => {\r
-    expect(component).toBeTruthy();\r
-  });\r
+    // Mock an variableInstance and ensure array is populated\r
+    it('variableInstance should be defined if data service returns activities', inject([DetailsComponent],\r
+      (detailsComponent: DetailsComponent) => {\r
+        const activity2: VarInstance = {\r
+          name: "a",\r
+          type: "a",\r
+          value: "1"\r
+        };\r
+        spyDataService.getVariableInstance.and.returnValue(of([activity2]));\r
+        detailsComponent.getVarInst("");\r
+        expect(detailsComponent.variableInstance.length).toEqual(1);\r
+      }));\r
 });\r