import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { VulnerabilitySummary } from '../service/index'; import { ResultBarChartComponent } from './result-bar-chart.component'; import { ResultTipComponent } from './result-tip.component'; import { ScanningResultService, ScanningResultDefaultService, TagService, TagDefaultService, JobLogService, JobLogDefaultService } from '../service/index'; import { SERVICE_CONFIG, IServiceConfig } from '../service.config'; import { ErrorHandler } from '../error-handler/index'; import { SharedModule } from '../shared/shared.module'; import { VULNERABILITY_SCAN_STATUS } from '../utils'; import { ChannelService } from '../channel/index'; import { JobLogViewerComponent } from '../job-log-viewer/index'; describe('ResultBarChartComponent (inline template)', () => { let component: ResultBarChartComponent; let fixture: ComponentFixture; let serviceConfig: IServiceConfig; let testConfig: IServiceConfig = { vulnerabilityScanningBaseEndpoint: "/api/vulnerability/testing" }; let mockData: VulnerabilitySummary = { scan_status: VULNERABILITY_SCAN_STATUS.finished, severity: 5, update_time: new Date(), components: { total: 124, summary: [{ severity: 1, count: 90 }, { severity: 3, count: 10 }, { severity: 4, count: 10 }, { severity: 5, count: 13 }] } }; beforeEach(async(() => { TestBed.configureTestingModule({ imports: [ SharedModule ], declarations: [ ResultBarChartComponent, ResultTipComponent, JobLogViewerComponent], providers: [ ErrorHandler, ChannelService, { provide: SERVICE_CONFIG, useValue: testConfig }, { provide: TagService, useValue: TagDefaultService }, { provide: ScanningResultService, useValue: ScanningResultDefaultService }, { provide: JobLogService, useValue: JobLogDefaultService} ] }); })); beforeEach(() => { fixture = TestBed.createComponent(ResultBarChartComponent); component = fixture.componentInstance; component.tagId = "mockTag"; component.summary = mockData; serviceConfig = TestBed.get(SERVICE_CONFIG); fixture.detectChanges(); }); it('should be created', () => { expect(component).toBeTruthy(); expect(serviceConfig).toBeTruthy(); expect(serviceConfig.vulnerabilityScanningBaseEndpoint).toEqual("/api/vulnerability/testing"); }); it('should show "not scanned" if status is STOPPED', async(() => { component.summary.scan_status = VULNERABILITY_SCAN_STATUS.stopped; fixture.detectChanges(); fixture.whenStable().then(() => { fixture.detectChanges(); let el: HTMLElement = fixture.nativeElement.querySelector('span'); expect(el).toBeTruthy(); expect(el.textContent).toEqual('VULNERABILITY.STATE.STOPPED'); }); })); it('should show progress if status is SCANNING', async(() => { component.summary.scan_status = VULNERABILITY_SCAN_STATUS.running; fixture.detectChanges(); fixture.whenStable().then(() => { fixture.detectChanges(); let el: HTMLElement = fixture.nativeElement.querySelector('.progress'); expect(el).toBeTruthy(); }); })); it('should show QUEUED if status is QUEUED', async(() => { component.summary.scan_status = VULNERABILITY_SCAN_STATUS.pending; fixture.detectChanges(); fixture.whenStable().then(() => { fixture.detectChanges(); let el: HTMLElement = fixture.nativeElement.querySelector('.bar-state'); expect(el).toBeTruthy(); let el2: HTMLElement = el.querySelector('span'); expect(el2).toBeTruthy(); expect(el2.textContent).toEqual('VULNERABILITY.STATE.QUEUED'); }); })); it('should show summary bar chart if status is COMPLETED', async(() => { component.summary.scan_status = VULNERABILITY_SCAN_STATUS.finished; fixture.detectChanges(); fixture.whenStable().then(() => { fixture.detectChanges(); let el: HTMLElement = fixture.nativeElement.querySelector('.bar-block-none'); expect(el).not.toBeNull(); expect(el.style.width).toEqual("73px"); }); })); });