UNPKG

trade360-nodejs-sdk

Version:
444 lines 22.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const incidents_request_dto_1 = require("../../../../src/api/common/metadata/dtos/incidents-request.dto"); const venues_request_dto_1 = require("../../../../src/api/common/metadata/dtos/venues-request.dto"); const cities_request_dto_1 = require("../../../../src/api/common/metadata/dtos/cities-request.dto"); const states_request_dto_1 = require("../../../../src/api/common/metadata/dtos/states-request.dto"); const incidents_request_1 = require("../../../../src/api/common/metadata/requests/incidents-request"); const venues_request_1 = require("../../../../src/api/common/metadata/requests/venues-request"); const cities_request_1 = require("../../../../src/api/common/metadata/requests/cities-request"); const states_request_1 = require("../../../../src/api/common/metadata/requests/states-request"); const incidents_collection_response_1 = require("../../../../src/api/common/metadata/responses/incidents-collection-response"); const venues_collection_response_1 = require("../../../../src/api/common/metadata/responses/venues-collection-response"); const cities_collection_response_1 = require("../../../../src/api/common/metadata/responses/cities-collection-response"); const states_collection_response_1 = require("../../../../src/api/common/metadata/responses/states-collection-response"); const errors_1 = require("../../../../src/entities/errors"); const moment_1 = __importDefault(require("moment")); // Mock dependencies class MockMapper { constructor() { this.map = jest.fn(); } } // Since MetadataHttpClient extends BaseHttpClient, we need to mock the base functionality jest.mock('@httpClient/base-http-client', () => { return { BaseHttpClient: jest.fn().mockImplementation(() => { return { postRequest: jest.fn(), }; }), }; }); describe('MetadataHttpClient - getIncidents', () => { let metadataHttpClient; let mockMapper; let mockPostRequest; beforeEach(() => { mockMapper = new MockMapper(); mockPostRequest = jest.fn(); // Instead of creating a real MetadataHttpClient, create a lightweight mock metadataHttpClient = { getIncidents: jest.fn(async (requestDto) => { const mappedRequest = mockMapper.map(requestDto, incidents_request_1.GetIncidentsRequest); return mockPostRequest({ route: '/Incidents/Get', responseBodyType: incidents_collection_response_1.IncidentsCollectionResponse, requestBody: mappedRequest, }); }), // Add other required methods as empty mocks getCompetitions: jest.fn(), getLeagues: jest.fn(), getMarkets: jest.fn(), getTranslations: jest.fn(), getSports: jest.fn(), getLocations: jest.fn(), getVenues: jest.fn(), getCities: jest.fn(), getStates: jest.fn(), getParticipants: jest.fn(), }; }); // Test Case 1.1: Successful API Call with All Filters it('should successfully call getIncidents with all filters', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto({ filter: new incidents_request_dto_1.IncidentsFilterDto({ ids: [1, 2, 3], sports: [6046, 6047], searchText: ['Goal', 'Penalty'], from: (0, moment_1.default)('2023-10-01 10:00:00'), }), }); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); const expectedResponse = new incidents_collection_response_1.IncidentsCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); // Action const result = await metadataHttpClient.getIncidents(requestDto); // Assertions expect(mockMapper.map).toHaveBeenCalledWith(requestDto, incidents_request_1.GetIncidentsRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Incidents/Get', responseBodyType: incidents_collection_response_1.IncidentsCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); // Test Case 1.2: Successful API Call with Optional Filters (Partial) it('should successfully call getIncidents with partial filters', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto({ filter: new incidents_request_dto_1.IncidentsFilterDto({ sports: [6046], searchText: ['Goal'], }), }); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); const expectedResponse = new incidents_collection_response_1.IncidentsCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); // Action const result = await metadataHttpClient.getIncidents(requestDto); // Assertions expect(mockMapper.map).toHaveBeenCalledWith(requestDto, incidents_request_1.GetIncidentsRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Incidents/Get', responseBodyType: incidents_collection_response_1.IncidentsCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); // Test Case 1.3: Successful API Call with No Filters it('should successfully call getIncidents with no filters', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto(); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); const expectedResponse = new incidents_collection_response_1.IncidentsCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); // Action const result = await metadataHttpClient.getIncidents(requestDto); // Assertions expect(mockMapper.map).toHaveBeenCalledWith(requestDto, incidents_request_1.GetIncidentsRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Incidents/Get', responseBodyType: incidents_collection_response_1.IncidentsCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); // Test Case 1.4: API Call Fails (postRequest throws error) it('should propagate error when postRequest fails', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto(); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); const error = new errors_1.HttpResponseError('API Error'); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockRejectedValue(error); // Action & Assertion await expect(metadataHttpClient.getIncidents(requestDto)).rejects.toThrow(error); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, incidents_request_1.GetIncidentsRequest); expect(mockPostRequest).toHaveBeenCalled(); }); // Test Case 1.5: Mapper Fails (mapper.map throws error) it('should propagate error when mapper.map fails', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto(); const error = new Error('Mapping Error'); mockMapper.map.mockImplementation(() => { throw error; }); // Action & Assertion await expect(metadataHttpClient.getIncidents(requestDto)).rejects.toThrow(error); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, incidents_request_1.GetIncidentsRequest); expect(mockPostRequest).not.toHaveBeenCalled(); }); // Test Case 1.6: Empty Response Handling it('should handle empty data array response', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto(); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); const emptyResponse = new incidents_collection_response_1.IncidentsCollectionResponse(); emptyResponse.data = []; emptyResponse.totalItems = 0; mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(emptyResponse); // Action const result = await metadataHttpClient.getIncidents(requestDto); // Assertions expect(result).toBe(emptyResponse); expect(result?.data).toEqual([]); expect(result?.totalItems).toBe(0); }); // Test Case 1.7: API returns null/undefined response it('should handle null/undefined response', async () => { // Setup const requestDto = new incidents_request_dto_1.GetIncidentsRequestDto(); const mappedRequest = new incidents_request_1.GetIncidentsRequest(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(undefined); // Action const result = await metadataHttpClient.getIncidents(requestDto); // Assertions expect(result).toBeUndefined(); }); }); describe('MetadataHttpClient - getVenues', () => { let metadataHttpClient; let mockMapper; let mockPostRequest; beforeEach(() => { mockMapper = new MockMapper(); mockPostRequest = jest.fn(); metadataHttpClient = { getIncidents: jest.fn(), getCompetitions: jest.fn(), getLeagues: jest.fn(), getMarkets: jest.fn(), getTranslations: jest.fn(), getSports: jest.fn(), getLocations: jest.fn(), getVenues: jest.fn(async (requestDto) => { const mappedRequest = mockMapper.map(requestDto, venues_request_1.GetVenuesRequest); return mockPostRequest({ route: '/Venues/Get', responseBodyType: venues_collection_response_1.VenuesCollectionResponse, requestBody: mappedRequest, }); }), getCities: jest.fn(), getStates: jest.fn(), getParticipants: jest.fn(), }; }); it('should successfully call getVenues with all filters', async () => { const requestDto = new venues_request_dto_1.GetVenuesRequestDto({ filter: new venues_request_dto_1.VenueFilterDto({ venueIds: [1, 2, 3], countryIds: [100, 200], stateIds: [10, 20], cityIds: [1000, 2000], }), }); const mappedRequest = new venues_request_1.GetVenuesRequest(); const expectedResponse = new venues_collection_response_1.VenuesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getVenues(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, venues_request_1.GetVenuesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Venues/Get', responseBodyType: venues_collection_response_1.VenuesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should successfully call getVenues with partial filters', async () => { const requestDto = new venues_request_dto_1.GetVenuesRequestDto({ filter: new venues_request_dto_1.VenueFilterDto({ venueIds: [1, 2], countryIds: [100], }), }); const mappedRequest = new venues_request_1.GetVenuesRequest(); const expectedResponse = new venues_collection_response_1.VenuesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getVenues(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, venues_request_1.GetVenuesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Venues/Get', responseBodyType: venues_collection_response_1.VenuesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should successfully call getVenues with no filters', async () => { const requestDto = new venues_request_dto_1.GetVenuesRequestDto(); const mappedRequest = new venues_request_1.GetVenuesRequest(); const expectedResponse = new venues_collection_response_1.VenuesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getVenues(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, venues_request_1.GetVenuesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Venues/Get', responseBodyType: venues_collection_response_1.VenuesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should propagate error when postRequest fails', async () => { const requestDto = new venues_request_dto_1.GetVenuesRequestDto(); const mappedRequest = new venues_request_1.GetVenuesRequest(); const error = new errors_1.HttpResponseError('API Error'); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockRejectedValue(error); await expect(metadataHttpClient.getVenues(requestDto)).rejects.toThrow(error); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, venues_request_1.GetVenuesRequest); expect(mockPostRequest).toHaveBeenCalled(); }); it('should handle null/undefined response', async () => { const requestDto = new venues_request_dto_1.GetVenuesRequestDto(); const mappedRequest = new venues_request_1.GetVenuesRequest(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(undefined); const result = await metadataHttpClient.getVenues(requestDto); expect(result).toBeUndefined(); }); }); describe('MetadataHttpClient - getCities', () => { let metadataHttpClient; let mockMapper; let mockPostRequest; beforeEach(() => { mockMapper = new MockMapper(); mockPostRequest = jest.fn(); metadataHttpClient = { getIncidents: jest.fn(), getCompetitions: jest.fn(), getLeagues: jest.fn(), getMarkets: jest.fn(), getTranslations: jest.fn(), getSports: jest.fn(), getLocations: jest.fn(), getVenues: jest.fn(), getCities: jest.fn(async (requestDto) => { const mappedRequest = mockMapper.map(requestDto, cities_request_1.GetCitiesRequest); return mockPostRequest({ route: '/Cities/Get', responseBodyType: cities_collection_response_1.CitiesCollectionResponse, requestBody: mappedRequest, }); }), getStates: jest.fn(), getParticipants: jest.fn(), }; }); it('should successfully call getCities with all filters', async () => { const requestDto = new cities_request_dto_1.GetCitiesRequestDto({ filter: new cities_request_dto_1.CityFilterDto({ cityIds: [1, 2, 3], countryIds: [100, 200], stateIds: [10, 20], }), }); const mappedRequest = new cities_request_1.GetCitiesRequest(); const expectedResponse = new cities_collection_response_1.CitiesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getCities(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, cities_request_1.GetCitiesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Cities/Get', responseBodyType: cities_collection_response_1.CitiesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should successfully call getCities with no filters', async () => { const requestDto = new cities_request_dto_1.GetCitiesRequestDto(); const mappedRequest = new cities_request_1.GetCitiesRequest(); const expectedResponse = new cities_collection_response_1.CitiesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getCities(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, cities_request_1.GetCitiesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/Cities/Get', responseBodyType: cities_collection_response_1.CitiesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should propagate error when postRequest fails', async () => { const requestDto = new cities_request_dto_1.GetCitiesRequestDto(); const mappedRequest = new cities_request_1.GetCitiesRequest(); const error = new errors_1.HttpResponseError('API Error'); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockRejectedValue(error); await expect(metadataHttpClient.getCities(requestDto)).rejects.toThrow(error); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, cities_request_1.GetCitiesRequest); expect(mockPostRequest).toHaveBeenCalled(); }); }); describe('MetadataHttpClient - getStates', () => { let metadataHttpClient; let mockMapper; let mockPostRequest; beforeEach(() => { mockMapper = new MockMapper(); mockPostRequest = jest.fn(); metadataHttpClient = { getIncidents: jest.fn(), getCompetitions: jest.fn(), getLeagues: jest.fn(), getMarkets: jest.fn(), getTranslations: jest.fn(), getSports: jest.fn(), getLocations: jest.fn(), getVenues: jest.fn(), getCities: jest.fn(), getStates: jest.fn(async (requestDto) => { const mappedRequest = mockMapper.map(requestDto, states_request_1.GetStatesRequest); return mockPostRequest({ route: '/States/Get', responseBodyType: states_collection_response_1.StatesCollectionResponse, requestBody: mappedRequest, }); }), getParticipants: jest.fn(), }; }); it('should successfully call getStates with all filters', async () => { const requestDto = new states_request_dto_1.GetStatesRequestDto({ filter: new states_request_dto_1.StateFilterDto({ stateIds: [1, 2, 3], countryIds: [100, 200], }), }); const mappedRequest = new states_request_1.GetStatesRequest(); const expectedResponse = new states_collection_response_1.StatesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getStates(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, states_request_1.GetStatesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/States/Get', responseBodyType: states_collection_response_1.StatesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should successfully call getStates with no filters', async () => { const requestDto = new states_request_dto_1.GetStatesRequestDto(); const mappedRequest = new states_request_1.GetStatesRequest(); const expectedResponse = new states_collection_response_1.StatesCollectionResponse(); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockResolvedValue(expectedResponse); const result = await metadataHttpClient.getStates(requestDto); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, states_request_1.GetStatesRequest); expect(mockPostRequest).toHaveBeenCalledWith({ route: '/States/Get', responseBodyType: states_collection_response_1.StatesCollectionResponse, requestBody: mappedRequest, }); expect(result).toBe(expectedResponse); }); it('should propagate error when postRequest fails', async () => { const requestDto = new states_request_dto_1.GetStatesRequestDto(); const mappedRequest = new states_request_1.GetStatesRequest(); const error = new errors_1.HttpResponseError('API Error'); mockMapper.map.mockReturnValue(mappedRequest); mockPostRequest.mockRejectedValue(error); await expect(metadataHttpClient.getStates(requestDto)).rejects.toThrow(error); expect(mockMapper.map).toHaveBeenCalledWith(requestDto, states_request_1.GetStatesRequest); expect(mockPostRequest).toHaveBeenCalled(); }); }); //# sourceMappingURL=metadata.service.spec.js.map