Skip to content
Snippets Groups Projects
products.service.spec.ts 5.82 KiB
Newer Older
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();
  });
})
;