blob: 4d4999cb3b984d11d1143e06ee9abaf29f366838 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2015-2020 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
********************************************************************************/
import { async, TestBed, inject } from '@angular/core/testing';
import { BaseRequestOptions, Http, HttpModule, Response, ResponseOptions, RequestMethod} from '@angular/http';
import { MockBackend, MockConnection } from '@angular/http/testing';
import { HttpErrorHandler } from '../core/http-error-handler';
import { of as observableOf } from 'rxjs';
import { MDMItem } from '../core/mdm-item';
import { PropertyService } from '../core/property.service';
import { QueryService, Query, SearchResult } from './query.service';
describe ( 'QueryService', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [HttpModule],
providers: [
PropertyService,
QueryService,
MockBackend,
BaseRequestOptions,
HttpErrorHandler,
{
provide: Http,
useFactory: (backend, options) => new Http(backend, options),
deps: [MockBackend, BaseRequestOptions]
}]
});
});
describe('query()', () => {
it('should return result for simple query', async(inject([QueryService, MockBackend], (queryService, mockBackend) => {
mockBackend.connections.subscribe((conn: MockConnection) => {
if (conn.request.url.endsWith('/query') && conn.request.method === RequestMethod.Post) {
let mockResponse = { rows: [
{source: 'MDMNVH', type: 'Test', id: 'id1', columns: [{type: 'Test', attribute: 'Name', value: 'TestNumberOne'}]}
]};
conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
}
return;
});
queryService.query(new Query()).subscribe(results => {
expect(results.rows.length).toBe(1);
expect(results.rows[0].columns[0].value).toEqual('TestNumberOne');
});
})));
});
describe('queryType()', () => {
it('should quote IDs', async(inject([QueryService], (queryService) => {
let spy = spyOn(queryService, 'query').and.returnValue(observableOf(new SearchResult()));
let query = new Query();
query.resultType = 'TestStep';
query.addFilter('MDM', 'Test.Id eq "id1"');
query.columns = ['TestStep.Name', 'TestStep.Id'];
queryService.queryType('TestStep', [{ source: 'MDM', type: 'Test', id: 'id1'}], ['TestStep.Name']).subscribe(results => {
expect(queryService.query).toHaveBeenCalledWith(query);
});
})));
});
describe('queryItems()', () => {
it('should return result for simple query', async(inject([QueryService, MockBackend], (queryService, mockBackend) => {
mockBackend.connections.subscribe((conn: MockConnection) => {
if (conn.request.url.endsWith('/query') && conn.request.method === RequestMethod.Post) {
let queryObject = <Query>JSON.parse(conn.request.getBody());
let mockResponse = { rows: [
{source: 'MDMNVH', type: queryObject.resultType, id: 'id1', columns:
[{type: 'Test', attribute: 'Name', value: 'TestNumberOne'}]}
]};
conn.mockRespond(new Response(new ResponseOptions({ body: mockResponse })));
}
return;
});
let item = new MDMItem('MDMNVH', 'Test', 'id1');
let result = queryService.queryItems([item], ['Test.Name']);
expect(result.length).toBe(1);
result[0].subscribe(results => {
expect(results.rows.length).toBe(1);
expect(results.rows[0].type).toEqual('Test');
expect(results.rows[0].columns[0].value).toEqual('TestNumberOne');
});
})));
});
});