import {ProductsService} from './products.service'; import {Product} from "../model/product"; import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing"; import {TestBed} from "@angular/core/testing"; import {ConfigurationService} from "../env/configuration.service"; export class FakeConfigurationService { get config() { return { dryrun: "false", rootDataDirectory: "/lustre/aoc/cluster/pipeline/vlass_test/spool", url: "http://localhost:4200/VlassMngr", weblogbaseurl: "http://webtest.aoc.nrao.edu/", projectcode: "VLASS1.1", wsurl: "ws://localhost:8081/VlassMngr/changes", currentepoch: "1" }; } } describe('ProductsService', () => { let httpMock: HttpTestingController; let productsService: ProductsService; let fakeConfigService: FakeConfigurationService; beforeEach(() => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [ProductsService, {provide: ConfigurationService, useClass: FakeConfigurationService}] }); productsService = TestBed.get(ProductsService); httpMock = TestBed.get(HttpTestingController); fakeConfigService = TestBed.get(ConfigurationService); }); it('should get number of records', () => { productsService.getRecordCount(1, 11, null).subscribe(response => { expect(response).toEqual(123, 'get record count'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'byEpoch/1/byType/11/pages?pattern=' + encodeURI(null)); expect(req.request.method).toBe("GET"); req.flush(123); httpMock.verify(); }); it('should get a page', () => { let expectedResponse = [{ category: "CALIBRATION", completed: false, configurations: [], epoch: 1, extraInfoForJobName: "JobName1", fileNames: [], id: 1, latestProductVersion: {present: true}, minitiles: [], name: "JobName1", notes: null, preRequisites: [], status: "COMPLETED", tags: [], typeId: 1, typeName: "calibration", versions: [] } as Product, { category: "CALIBRATION", completed: false, configurations: [], epoch: 1, extraInfoForJobName: "JobName2", fileNames: [], id: 2, latestProductVersion: {present: true}, minitiles: [], name: "JobName2", notes: null, preRequisites: [], status: "COMPLETED", tags: [], typeId: 1, typeName: "calibration", versions: [] } as Product]; productsService.getPage(1, 11, 1, null).subscribe(response => { expect(response).toEqual(expectedResponse, 'get page'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'byEpoch/1/byType/11/pages/1?pattern=' + encodeURI(null)); expect(req.request.method).toBe("GET"); req.flush(expectedResponse); httpMock.verify(); }); it('should get page info', () => { let expectedResponse = ['calibrations', 'compression']; productsService.getPageInfo(1).subscribe(response => { expect(response).toEqual(expectedResponse, 'get page info'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'types/1/queues'); expect(req.request.method).toBe("GET"); req.flush(expectedResponse); httpMock.verify(); }); it('should get product', () => { let expectedResponse = { category: "CALIBRATION", completed: false, configurations: [], epoch: 1, extraInfoForJobName: "JobName1", fileNames: [], id: 1, latestProductVersion: {present: true}, minitiles: [], name: "JobName1", notes: null, preRequisites: [], status: "COMPLETED", tags: [], typeId: 1, typeName: "calibration", versions: [] } as Product; productsService.getProductById('1').subscribe(response => { expect(response).toEqual(expectedResponse, 'get product'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'byId/1'); expect(req.request.method).toBe("GET"); req.flush(expectedResponse); httpMock.verify(); }); it('should get product config', () => { let expectedResponse = { main: { flagtemplate: [{ mode: "manual", spw: "3,5:3~6,5:55~60,15:3~15,15:34~60,17:3~6", reason: "RFI", scan: "7~112" }] } }; productsService.getProductConfig(1, '11').subscribe(response => { expect(response).toEqual(expectedResponse, 'get product config'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'byId/1/11'); expect(req.request.method).toBe("GET"); req.flush(expectedResponse); httpMock.verify(); }); it('should get product type config', () => { let expectedResponse = { main: { CASA_HOME: "/home/casa/packages/pipeline/casa-prerelease-5.5.0-144.el6/", tecmaps: "false" } }; productsService.getProductTypeConfig(11).subscribe(response => { expect(response).toEqual(expectedResponse, 'get product type config'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'types/11/configurations'); expect(req.request.method).toBe("GET"); req.flush(expectedResponse); httpMock.verify(); }); it('should update product status', () => { productsService.updateProductStatus(1, 'COMPLETED').subscribe(response => { expect(response).toEqual('COMPETED', 'update product status'); }); const req = httpMock.expectOne(fakeConfigService.config.url + productsService.endPoint + 'byId/1/changeStatus?status=COMPLETED'); expect(req.request.method).toBe("PUT"); //req.flush(); httpMock.verify(); }); }) ;