import { TestBed, inject } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';

import { DetailService } from './detail.service';
import { AppConfigService } from 'src/app/app-config.service';

describe('DetailService', () => {
    let service: DetailService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [HttpClientTestingModule],
            providers: [
                { provide: AppConfigService, useValue: { apiUrl: 'http://testing.com' } },
                DetailService
            ]
        });
        service = TestBed.inject(DetailService);
    });

    it('#retrieveData() should return an Observable<any[]>',
        inject([HttpTestingController, DetailService],(httpMock: HttpTestingController, detailervice: DetailService) => {
                const mockResponse = ['myData'];

                detailervice.retrieveData('myQuery').subscribe((event: any[]) => {
                    expect(event).toEqual(mockResponse);
                });

                const mockRequest = httpMock.expectOne('http://testing.com/search/myQuery');

                expect(mockRequest.cancelled).toBeFalsy();
                expect(mockRequest.request.responseType).toEqual('json');
                mockRequest.flush(mockResponse);

                httpMock.verify();
            }
        )
    );

    // it('#retrieveDataLength() should return an Observable<{ nb: number }[]>',
    //     inject([HttpTestingController, SearchService],(httpMock: HttpTestingController, searchService: SearchService) => {
    //             const mockResponse = [{ nb: 1 }];
    //
    //             searchService.retrieveDataLength('myQuery').subscribe((event: { nb: number }[]) => {
    //                 expect(event).toEqual(mockResponse);
    //             });
    //
    //             const mockRequest = httpMock.expectOne('http://testing.com/search/myQuery');
    //
    //             expect(mockRequest.cancelled).toBeFalsy();
    //             expect(mockRequest.request.responseType).toEqual('json');
    //             mockRequest.flush(mockResponse);
    //
    //             httpMock.verify();
    //         }
    //     )
    // );
});