beforeEach(async(() => {
const jobDataSourceSpy = jasmine.createSpyObj('EIJobDataSource', [ 'connect', 'getJobs', 'disconnect' ]);
- const producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', [ 'connect', 'loadTable', 'getProducers', 'disconnect' ]);
+ const producerDataSourceSpy = jasmine.createSpyObj('EIProducerDataSource', [ 'connect', 'loadTable', 'loadProducers', 'disconnect' ]);
jobDataSourceSpy.connect.and.returnValue(of([]));
jobDataSourceSpy.disconnect();
producerDataSourceSpy.connect.and.returnValue(of([]));
- producerDataSourceSpy.getProducers.and.returnValue(of([]));
+ producerDataSourceSpy.loadProducers.and.returnValue(of([]));
producerDataSourceSpy.disconnect();
TestBed.configureTestingModule({
ngOnInit() {
this.eiJobsDataSource.getJobs();
- this.producers$= this.eiProducersDataSource.getProducers();
+ this.producers$= this.eiProducersDataSource.loadProducers();
this.filteredProducers$ = defer(() => this.formGroup.get("filter")
.valueChanges.pipe(
startWith(""),
refreshTables() {
this.eiJobsDataSource.getJobs();
- this.eiProducersDataSource.loadTable();
+ this.eiProducersDataSource.loadProducers();
}
}
* limitations under the License.
* ========================LICENSE_END===================================
*/
-import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import { TestBed } from '@angular/core/testing';
import { BehaviorSubject, of } from 'rxjs';
import { EIJobDataSource } from './ei-job.datasource';
expect(dataSource).toBeTruthy();
});
- it('#getJobs and connect', () => {
+ it('#getJobs', () => {
dataSource.getJobs();
const jobsSubject: BehaviorSubject<EIJob[]> = dataSource.eiJobsSubject;
const value = jobsSubject.getValue();
}),
finalize(() => this.loadingSubject.next(false))
)
- .subscribe((producerIds: String[]) => {
+ .subscribe((producerIds: string[]) => {
producerIds.forEach(id => {
this.getJobsForProducer(id);
});
});
}
- private getJobsForProducer(id: String) {
+ private getJobsForProducer(id: string) {
console.log('Getting jobs for producer ID: ', id);
this.eiSvc.getJobsForProducer(id).subscribe(jobs => {
this.addJobsToSubject(jobs);
--- /dev/null
+/*-
+ * ========================LICENSE_START=================================
+ * O-RAN-SC
+ * %%
+ * Copyright (C) 2021 Nordix Foundation
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================LICENSE_END===================================
+ */
+import { TestBed } from '@angular/core/testing';
+import { BehaviorSubject, of } from 'rxjs';
+
+import { EIService } from '../services/ei/ei.service';
+import { NotificationService } from '../services/ui/notification.service';
+import { ToastrModule } from 'ngx-toastr';
+import { EIJob, EIProducer, OperationalState, ProducerRegistrationInfo, ProducerStatus } from '../interfaces/ei.types';
+import { EIProducerDataSource } from './ei-producer.datasource';
+
+describe('EIProducerDataSource', () => {
+ let dataSource: EIProducerDataSource;
+ let eiServiceSpy: any;
+
+ let producer1 = {
+ supported_ei_types: [ 'type1', 'type2' ]
+ } as ProducerRegistrationInfo;
+ let producer2 = {
+ supported_ei_types: [ 'type3', 'type4' ]
+ } as ProducerRegistrationInfo;
+ let producerStatus1 = {
+ opState: OperationalState.ENABLED
+ } as ProducerStatus;
+ let producerStatus2 = {
+ opState: OperationalState.DISABLED
+ } as ProducerStatus;
+
+ let expectedProducer1 = {
+ ei_producer_id: 'producer1',
+ ei_producer_types: [ 'type1', 'type2' ],
+ status: 'ENABLED'
+ } as EIProducer;
+ let expectedProducer2 = {
+ ei_producer_id: 'producer2',
+ ei_producer_types: [ 'type3', 'type4' ],
+ status: 'DISABLED'
+ } as EIProducer;
+
+ beforeEach(() => {
+ eiServiceSpy = jasmine.createSpyObj('EIService', ['getProducerIds', 'getProducer', 'getProducerStatus']);
+
+ eiServiceSpy.getProducerIds.and.returnValue(of([ 'producer1', 'producer2']));
+ eiServiceSpy.getProducer.and.returnValues(of(producer1), of(producer2));
+ eiServiceSpy.getProducerStatus.and.returnValues(of(producerStatus1), of(producerStatus2));
+ TestBed.configureTestingModule({
+ imports: [ToastrModule.forRoot()],
+ providers: [
+ { provide: EIService, useValue: eiServiceSpy },
+ NotificationService
+ ]
+ });
+ });
+
+ it('should create', () => {
+ dataSource = TestBed.get(EIProducerDataSource);
+ expect(dataSource).toBeTruthy();
+ });
+
+ it('#loadProducers', () => {
+ dataSource.loadProducers();
+ const jobsSubject: BehaviorSubject<EIProducer[]> = dataSource.producerSubject;
+ const value = jobsSubject.getValue();
+ expect(value).toEqual([ expectedProducer1, expectedProducer2 ]);
+ expect(dataSource.rowCount).toEqual(2);
+ });
+});
export class EIProducerDataSource extends MatTableDataSource<EIProducer> {
- private producerSubject = new BehaviorSubject<EIProducer[]>([]);
+ producerSubject = new BehaviorSubject<EIProducer[]>([]);
private loadingSubject = new BehaviorSubject<boolean>(false);
super();
}
- loadTable() {
+ loadProducers(): Observable<EIProducer[]> {
this.loadingSubject.next(true);
- this.eiSvc.getEIProducers()
+ let producers: Array<EIProducer> = [];
+ this.eiSvc.getProducerIds()
.pipe(
catchError((her: HttpErrorResponse) => {
this.notificationService.error('Failed to get producers: ' + her.error);
}),
finalize(() => this.loadingSubject.next(false))
)
- .subscribe((prods: EIProducer[]) => {
- console.log("Producers: " + prods);
- this.rowCount = prods.length;
- this.producerSubject.next(prods);
+ .subscribe((prodIds: string[]) => {
+ console.log("ProducerIds: " + prodIds);
+ prodIds.forEach(id => {
+ let eiProducer = <EIProducer>{};
+ eiProducer.ei_producer_id = id;
+ this.eiSvc.getProducer(id).subscribe(producer => {
+ eiProducer.ei_producer_types = producer.supported_ei_types;
+ });
+ this.eiSvc.getProducerStatus(id).subscribe(prodStatus => {
+ eiProducer.status = prodStatus.opState.toString();
+ });
+ this.addProducerToSubject(eiProducer);
+ producers.push(eiProducer);
+ });
+ this.rowCount = this.producerSubject.value.length;
});
- this.connect();
+ return of(producers);
+ }
+
+ private addProducerToSubject(producer: EIProducer) {
+ const currentValue = this.producerSubject.value;
+ const updatedValue = [...currentValue, producer];
+ this.producerSubject.next(updatedValue);
}
connect(): BehaviorSubject<EIProducer[]> {
this.producerSubject.complete();
this.loadingSubject.complete();
}
-
- getProducers(): Observable<EIProducer[]> {
- return this.eiSvc.getEIProducers()
- .pipe(tap(console.log));
- }
}
import * as eijobsProd1 from './mock/ei-jobs-producer1.json';
import * as eijobsProd2 from './mock/ei-jobs-producer2.json';
import * as eiProducerIds from './mock/ei-producerids.json';
-import * as eiproducers from './mock/ei-producers.json';
+import * as eiproducer1 from './mock/ei-producer1.json';
+import * as eiproducer2 from './mock/ei-producer2.json';
+import * as eiproducerstatus1 from './mock/ei-producer-status1.json';
+import * as eiproducerstatus2 from './mock/ei-producer-status2.json';
import * as policytypesList from './mock/policy-types.json';
import * as policytypes1 from './mock/policy-type1.json';
import * as policyinstanceedit from './mock/policy-instance-edit.json';
url: '/a1-policy/v2/rics?policytype_id=',
json: ric2
},
- {
- url: 'api/enrichment/eiproducers',
- json: eiproducers
- },
{
url: 'api/policy/rics?policyType=1',
json: rics
url: '/ei-producer/v1/eiproducers',
json: eiProducerIds
},
+ {
+ url: '/ei-producer/v1/eiproducers/producer1',
+ json: eiproducer1
+ },
+ {
+ url: '/ei-producer/v1/eiproducers/producer2',
+ json: eiproducer2
+ },
+ {
+ url: '/ei-producer/v1/eiproducers/producer1/status',
+ json: eiproducerstatus1
+ },
+ {
+ url: '/ei-producer/v1/eiproducers/producer2/status',
+ json: eiproducerstatus2
+ },
{
url: '/ei-producer/v1/eiproducers/producer1/eijobs',
json: eijobsProd1
}
export interface ProducerRegistrationInfo {
- supported_ei_types: String[]
+ supported_ei_types: string[]
}
export enum OperationalState {
- ENABLED,
- DISABLED
+ ENABLED = 'ENABLED',
+ DISABLED = 'DISABLED'
}
export interface ProducerStatus {
opState: OperationalState
--- /dev/null
+{
+ "opState": "ENABLED"
+}
\ No newline at end of file
--- /dev/null
+{
+ "opState": "DISABLED"
+}
\ No newline at end of file
--- /dev/null
+{
+ "supported_ei_types": [ "type1", "type2" ]
+}
\ No newline at end of file
--- /dev/null
+{
+ "supported_ei_types": [ "type3", "type4" ]
+}
\ No newline at end of file
+++ /dev/null
-[
- {
- "ei_producer_id": "1",
- "ei_producer_types": [
- "type1"
- ],
- "status": "ENABLED"
- },
- {
- "ei_producer_id": "prod-2",
- "ei_producer_types": [
- "type2"
- ],
- "status": "ENABLED"
- },
- {
- "ei_producer_id": "3-prod",
- "ei_producer_types": [
- "type1"
- ],
- "status": "DISABLED"
- }
- ]
\ No newline at end of file
});
describe('#getProducerIds', () => {
- let expectedEIProducerIds: String[];
+ let expectedEIProducerIds: string[];
beforeEach(() => {
service = TestBed.get(EIService);
httpTestingController = TestBed.get(HttpTestingController);
- expectedEIProducerIds = [ 'producer1', 'producer2' ] as String[];
+ expectedEIProducerIds = [ 'producer1', 'producer2' ] as string[];
});
it('should return all producer IDs', () => {
// injects to variable httpClient
}
- getProducerIds(): Observable<String[]> {
+ getProducerIds(): Observable<string[]> {
const url = this.buildPath(this.eiProducersPath);
- return this.httpClient.get<String[]>(url);
+ return this.httpClient.get<string[]>(url);
}
- getJobsForProducer(producerId: String): Observable<EIJob[]> {
+ getJobsForProducer(producerId: string): Observable<EIJob[]> {
const url = this.buildPath(this.eiProducersPath, producerId, this.eiJobsPath);
return this.httpClient.get<EIJob[]>(url);
}
- getProducer(producerId: String): Observable<ProducerRegistrationInfo> {
+ getProducer(producerId: string): Observable<ProducerRegistrationInfo> {
const url = this.buildPath(this.eiProducersPath, producerId);
return this.httpClient.get<ProducerRegistrationInfo>(url);
}
- getProducerStatus(producerId: String): Observable<ProducerStatus> {
+ getProducerStatus(producerId: string): Observable<ProducerStatus> {
const url = this.buildPath(this.eiProducersPath, producerId, this.eiProducerStatusPath);
return this.httpClient.get<ProducerStatus>(url);
}