import {JobsService} from './jobs.service'; import {Job, JobExecution, JobSpec} from "../model/job"; 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('JobsService', () => { let httpMock: HttpTestingController; let jobsService: JobsService; let fakeConfigService: FakeConfigurationService; let jobArray = []; jobArray.push({ jobspec_id: 1, jobspec_name: "JobSpec1", jobspec_creation_date: 1563346880361, jobspec_sdm_id: "Job1", job_id: 2, job_name: "Job2", job_starttime: 1564785856832, job_endtime: 1565212305634, job_status: "QA_ACCEPTED", job_arch_status: "ARCHIVED", jobspec_creation_date_formatted: "07/17/2019, 12:01:20 AM", job_starttime_formatted: "08/02/2019, 03:44:16 PM", job_endtime_formatted: "08/07/2019, 02:11:45 PM", jobspec_status: "QA_ACCEPTED" } as Job); jobArray.push({ jobspec_id: 3, jobspec_name: "JobSpec3", jobspec_creation_date: 1556849964313, jobspec_sdm_id: "Job3", job_id: 4, job_name: "Job4", job_starttime: 1565655567384, job_endtime: null, job_status: "PROCESSING", job_arch_status: "UNARCHIVED", jobspec_creation_date_formatted: "05/02/2019, 07:19:24 PM", job_starttime_formatted: "08/12/2019, 05:19:27 PM", job_endtime_formatted: "still going", jobspec_status: "PROCESSING" } as Job); jobArray.push({ jobspec_id: 10, jobspec_name: "JobSpec10", jobspec_creation_date: 1557353188726, jobspec_sdm_id: "Job10", job_id: 11, job_name: "Job11", job_starttime: 1557353188764, job_endtime: 1557421962191, job_status: "ERROR", job_arch_status: "UNARCHIVED", jobspec_creation_date_formatted: "05/08/2019, 03:06:28 PM", job_starttime_formatted: "05/08/2019, 03:06:28 PM", job_endtime_formatted: "05/09/2019, 10:12:42 AM", jobspec_status: "ERROR" } as Job); beforeEach(() => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule], providers: [JobsService, {provide: ConfigurationService, useClass: FakeConfigurationService}] }); jobsService = TestBed.get(JobsService); httpMock = TestBed.get(HttpTestingController); fakeConfigService = TestBed.get(ConfigurationService); }); it('should return jobs', () => { jobsService.getJobs('any', null, null, null).subscribe(response => { expect(response).toEqual(jobArray, 'get jobs'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'optimized/queues/any'); expect(req.request.method).toBe("GET"); req.flush(jobArray); httpMock.verify(); }); it('should return jobs filtered by id', () => { jobsService.getJobs('any', '3', null, null).subscribe(response => { expect(response[0]).toEqual(jobArray[1], 'get jobs with id'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'optimized/queues/any'); expect(req.request.method).toBe("GET"); req.flush(jobArray); httpMock.verify(); }); it('should return jobs filtered by pattern', () => { jobsService.getJobs('any', null, 'Spec1', null).subscribe(response => { console.log('res', response); expect(response.length).toBe(2, 'get jobs with pattern'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'optimized/queues/any'); expect(req.request.method).toBe("GET"); req.flush(jobArray); httpMock.verify(); }); it('should return jobs filtered by status', () => { jobsService.getJobs('any', null, null, 'QA_ACCEPTED').subscribe(response => { expect(response[0]).toEqual(jobArray[0], 'get jobs with status'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'optimized/queues/any'); expect(req.request.method).toBe("GET"); req.flush(jobArray); httpMock.verify(); }); it('should return a jobspec', () => { const jobSpec = { id: 1, name: "JobSpec1", creationDate: 1557353188726, status: "ERROR", targets: [], inputs: null, executions: [], files: [], queueName: "quicklook", lastJob: null, sbId: 3, sdmId: "sdm3" } as JobSpec; jobsService.getJobSpec(1).subscribe(response => { expect(response).toEqual(jobSpec, 'get job spec'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'specs/1'); expect(req.request.method).toBe("GET"); req.flush(jobSpec); httpMock.verify(); }); it('should return a job', () => { const job = { "id": 2, "name": "JobEx2", "start": 1565655567384, "end": null, "status": "PROCESSING", "jsonResults": null, "analyst": null, "notes": null, "tasks": [], "archivalJob": null, "archiveStatus": "UNARCHIVED", "queueName": "quicklook", "sdmId": "sdm2", "jobSpecId": 3, "startDate": "08/12/2019, 05:19:27 PM", "endDate": "still going" } as JobExecution; jobsService.getJob(2).subscribe(response => { expect(response).toEqual(job, 'get job execution'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'jobs/2'); expect(req.request.method).toBe("GET"); req.flush(job); httpMock.verify(); }); it('should create job', () => { jobsService.createJob(1, 'calibration', 2).subscribe(response => { expect(response).toEqual(200, 'create job'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'createJob?id=1&queue=calibration'); expect(req.request.method).toBe("POST"); req.flush(jobArray); httpMock.verify(); }); it('should update job notes', () => { jobsService.updateNotes(1, 'some notes').subscribe(response => { expect(response).toEqual('some notes', 'update note'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + 'jobs/1/notes'); expect(req.request.method).toBe("PUT"); req.flush(jobArray); httpMock.verify(); }); it('should update job status', () => { jobsService.updateJobStatus(1, 'QA_PASSED', 'calibration').subscribe(response => { expect(response).toEqual('QA_PASSED', 'update status'); }); const req = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + '/jobs/1/status?status=QA_PASSED&queue=calibration'); expect(req.request.method).toBe("PUT"); req.flush(jobArray); const req2 = httpMock.expectOne(fakeConfigService.config.url + jobsService.endPoint + '/jobs/1/images?status=QA_PASSED&queue=calibration'); expect(req2.request.method).toBe("PUT"); req2.flush(jobArray); httpMock.verify(); }); });