UNPKG

@biothings-explorer/call-apis

Version:

A nodejs module to make api calls for biothings explorer

217 lines (205 loc) 7.06 kB
/** * @jest-environment node */ const { default: axios } = require("axios"); const q = require("../src/query"); const resolved_ids = { "NCBIGene:1017": 'k', "CHEBI:1234": 'L' } const resolved_invalid_ids = { "NCBIGene:1017": 'kkkk', "CHEBI:1234": 'LLL' } // jest.mock('@biothings-explorer/api-response-transform', () => { // // Works and lets you check for constructor calls: // return jest.fn().mockImplementation((res) => { // return { transform: () => [{ v: true }] }; // }); // }); jest.mock('../src/query_queue', () => { // Works and lets you check for constructor calls: return jest.fn().mockImplementation((res) => { return { addQuery: () => { }, constructQueue: () => { } }; }); }); // jest.mock('axios'); describe("Test query class", () => { describe("Test _merge function", () => { test("Failed promise should be excluded in the result", () => { const success = { status: "fulfilled", value: [{ id: 1 }] } const fail = { status: "rejected", reason: "bad request" } const caller = new q([]); const res = caller._merge([success, fail, fail]); expect(res).toHaveLength(1); expect(res[0]).toEqual(success.value[0]); }) test("successful promise should be correctly merged", () => { const success1 = { status: "fulfilled", value: [{ id: 1 }] } const success2 = { status: "fulfilled", value: [{ id: 3 }] } const fail = { status: "rejected", reason: "bad request" } const caller = new q([]); const res = caller._merge([success1, success2, success1, fail, fail]); expect(res).toHaveLength(3); expect(res[0]).toEqual(success1.value[0]); expect(res[1]).toEqual(success2.value[0]); expect(res[2]).toEqual(success1.value[0]); }) test("logs is correctly populated", () => { const success1 = { status: "fulfilled", value: [{ id: 1 }] } const success2 = { status: "fulfilled", value: [{ id: 3 }] } const fail = { status: "rejected", reason: "bad request" } const caller = new q([]); caller._merge([success1, success2, success1, fail, fail]); expect(caller.logs).toHaveLength(1); expect(caller.logs[0]).toHaveProperty("message", "call-apis: Total number of results returned for this query is 3") }) }) describe("Test _groupOutputIDsBySemanticType function", () => { test("Empty result should return an empty dict", () => { const caller = new q([]); const res = caller._groupOutputIDsBySemanticType([]); expect(res).toEqual({}); }) test("Output IDs are correctly grouped", () => { const caller = new q([]); const result = [ { $edge_metadata: { output_type: 'Gene' }, $output: { original: "NCBIGene:1017" } }, { $edge_metadata: { output_type: 'Gene' }, $output: { original: "NCBIGene:1018" } }, { $edge_metadata: { output_type: 'Disease' }, $output: { original: "MONDO:1234" } }, ] const res = caller._groupOutputIDsBySemanticType(result); expect(res).toHaveProperty("Disease"); expect(res.Disease).toEqual(['MONDO:1234']); expect(res).toHaveProperty("Gene"); expect(res.Gene).toEqual(['NCBIGene:1017', 'NCBIGene:1018']) }) }) describe("test _annotate function", () => { test("check if annotated ids are correctly mapped", async () => { const res = [ { $edge_metadata: { output_type: "Gene" }, $output: { original: "NCBIGene:1017" } }, { $edge_metadata: { output_type: "SmallMolecule" }, $output: { original: "CHEBI:1234" } } ]; const caller = new q([]); const annotatedResult = await caller._annotate(res); expect(annotatedResult).toHaveLength(2); }) test("if set enabled equal to false, return the result itself", async () => { const res = [ { $edge_metadata: { output_type: "Gene" }, $output: { original: "NCBIGene:1017" } }, { $edge_metadata: { output_type: "SmallMolecule" }, $output: { original: "CHEBI:1234" } } ]; const caller = new q([]); const annotatedResult = await caller._annotate(res, false); expect(annotatedResult).toEqual(res); }) }) // describe("test _queryBucket function", () => { // test("test _queryBucket function", async () => { // const queries = [ // { // getConfig() { // return {}; // }, // needPagination(res) { // return false; // } // } // ]; // const mockRes = { // data: { // gene: 1017 // } // } // axios.mockResolvedValue(mockRes); // const caller = new q([]); // caller.queue = { // dequeue() { // return true; // } // }; // const res = await caller._queryBucket(queries); // console.log('res', res) // expect(res).toHaveLength(1); // expect(res[0]).toHaveProperty('status', 'fulfilled'); // expect(res[0]).toHaveProperty('value', [{ v: true }]) // }) // }) })