// // import { CallHandler, ExecutionContext } from "@nestjs/common";
// import { HttpModule } from "@nestjs/axios";
// import { Test } from "@nestjs/testing";
// import { Observable, of } from "rxjs";
// import { PapersController } from "src/application";
// import { Order } from "src/core/domain";
// import { PageDto, SearchQueryDto } from "src/core/domain/dtos";
// import { PageInterceptor } from "src/core/interceptors/page.interceptor";
// import { SearchService } from "src/core/services/common/search.service";

// const executionContext = {
//     switchToHttp: jest.fn().mockReturnThis(),
//     getRequest: jest.fn().mockReturnThis(),
//     getHandler: jest.fn().mockReturnThis(),
//     getArgs: jest.fn().mockReturnThis(),
//     getArgByIndex: jest.fn().mockReturnThis(),
//     switchToRpc: jest.fn().mockReturnThis(),
//     switchToWs: jest.fn().mockReturnThis(),
//     getType: jest.fn().mockReturnThis(),
//     getClass: jest.fn().mockReturnThis(),
//   };

//   const callHandler = {
//     handle: jest.fn(),
//   };

// describe('Testing PageInterceptor', () => {
//     let pageInter: PageInterceptor;
//     let moduleRef;

//     beforeEach(async () => {
//          moduleRef = await Test.createTestingModule({
//             imports: [HttpModule],
//             controllers: [PapersController],
//             providers: [SearchService, PageInterceptor],
//         }).compile();

//         pageInter = moduleRef.get(PageInterceptor);
//     });

//     describe('intercept()', () => {
//         it('Should be defined', () => {
//             expect(pageInter).toBeDefined();
//         });

//         it('Should return an Observable with a page of type PageDto', (done) => { 
//             executionContext.getRequest.mockReturnValue( { query: new SearchQueryDto('someQuery', 1, 10, 'desc') });
//             callHandler.handle.mockReturnValue( of({
//                 total: { value: 1 },
//                 hits: [{},],
//             }));
            
            
//             expect(pageInter.intercept(executionContext, callHandler)).toBeInstanceOf(Observable);
//             pageInter.intercept(executionContext, callHandler).subscribe((data) => {
//                 expect(data).toBeInstanceOf(PageDto);
//                 done();
//             });
//         })

//         it('Should hold content on the returned page', (done) => {
//             executionContext.getRequest.mockReturnValueOnce( { query: new SearchQueryDto('someQuery', 1, 10, 'desc') });
//             callHandler.handle.mockReturnValueOnce(of({
//                 total: { value: 1 },
//                 hits: [{dummy: 'dum'}],
//             }));

//             pageInter.intercept(executionContext, callHandler).subscribe((data) => {
//                 expect(data).toEqual({
//                     data: expect.anything(),
//                     meta: expect.anything(),
//                 });
//                 done();
//             });
//         });

//         it('Should have next page', (done) => {
//             executionContext.getRequest.mockReturnValue({ query: new SearchQueryDto('someQuery', 1, 5, 'desc') });
//             callHandler.handle.mockReturnValue(of({
//                 total: { value: 10 },
//                 hits: Array(10).fill({dummy: 'dum'}, 0, 10),
//             }));

//             pageInter.intercept(executionContext, callHandler).subscribe((data) => {
//                 expect(data.meta.hasNext).toEqual(true);
//                 expect(data.meta.hasPrev).toEqual(false);
//                 done();
//             });
//         });

//         it('Should have correct meta-data', (done) => {
//             executionContext.getRequest.mockReturnValue({ query: new SearchQueryDto('someQuery', 2, 5, 'asc') });
//             callHandler.handle.mockReturnValue(of({
//                 total: { value: 15 },
//                 hits: Array(15).fill({dummy: 'dum'}, 0, 15),
//             }));

//             pageInter.intercept(executionContext, callHandler).subscribe((data) => {
//                 expect(data.meta).toEqual({
//                     total: 15,
// 		            pagenum: 2,
// 		            order: Order.ASC,
// 		            hasNext: true,
// 		            hasPrev: true,
// 		            pagesize: 5
//                 });
//                 done();
//             });
//         });
//     });

// });