trade360-nodejs-sdk
Version:
LSports Trade360 SDK for Node.js
444 lines • 22.2 kB
JavaScript
"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