Pre-web changes
This commit is contained in:
@@ -12,20 +12,42 @@ import * as platformModule from '../../../platform';
|
||||
jest.mock('../../data/vehicles.repository');
|
||||
jest.mock('../../../../core/config/redis');
|
||||
jest.mock('../../../platform', () => ({
|
||||
getVINDecodeService: jest.fn()
|
||||
getVINDecodeService: jest.fn(),
|
||||
getVehicleDataService: jest.fn(),
|
||||
getPool: jest.fn()
|
||||
}));
|
||||
|
||||
const mockRepository = jest.mocked(VehiclesRepository);
|
||||
const mockCacheService = jest.mocked(cacheService);
|
||||
const mockGetVINDecodeService = jest.mocked(platformModule.getVINDecodeService);
|
||||
const mockGetVehicleDataService = jest.mocked(platformModule.getVehicleDataService);
|
||||
const mockGetPool = jest.mocked(platformModule.getPool);
|
||||
|
||||
describe('VehiclesService', () => {
|
||||
let service: VehiclesService;
|
||||
let repositoryInstance: jest.Mocked<VehiclesRepository>;
|
||||
let vehicleDataServiceMock: {
|
||||
getYears: jest.Mock;
|
||||
getMakes: jest.Mock;
|
||||
getModels: jest.Mock;
|
||||
getTrims: jest.Mock;
|
||||
getEngines: jest.Mock;
|
||||
};
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
|
||||
vehicleDataServiceMock = {
|
||||
getYears: jest.fn(),
|
||||
getMakes: jest.fn(),
|
||||
getModels: jest.fn(),
|
||||
getTrims: jest.fn(),
|
||||
getEngines: jest.fn(),
|
||||
};
|
||||
|
||||
mockGetVehicleDataService.mockReturnValue(vehicleDataServiceMock as any);
|
||||
mockGetPool.mockReturnValue('mock-pool' as any);
|
||||
|
||||
repositoryInstance = {
|
||||
create: jest.fn(),
|
||||
findByUserId: jest.fn(),
|
||||
@@ -39,6 +61,63 @@ describe('VehiclesService', () => {
|
||||
service = new VehiclesService(repositoryInstance);
|
||||
});
|
||||
|
||||
describe('dropdown data integration', () => {
|
||||
it('retrieves years from platform service', async () => {
|
||||
vehicleDataServiceMock.getYears.mockResolvedValue([2024, 2023]);
|
||||
|
||||
const result = await service.getDropdownYears();
|
||||
|
||||
expect(mockGetVehicleDataService).toHaveBeenCalled();
|
||||
expect(vehicleDataServiceMock.getYears).toHaveBeenCalledWith('mock-pool');
|
||||
expect(result).toEqual([2024, 2023]);
|
||||
});
|
||||
|
||||
it('retrieves makes scoped to year', async () => {
|
||||
vehicleDataServiceMock.getMakes.mockResolvedValue([{ id: 10, name: 'Honda' }]);
|
||||
|
||||
const result = await service.getDropdownMakes(2024);
|
||||
|
||||
expect(vehicleDataServiceMock.getMakes).toHaveBeenCalledWith('mock-pool', 2024);
|
||||
expect(result).toEqual([{ id: 10, name: 'Honda' }]);
|
||||
});
|
||||
|
||||
it('retrieves models scoped to year and make', async () => {
|
||||
vehicleDataServiceMock.getModels.mockResolvedValue([{ id: 20, name: 'Civic' }]);
|
||||
|
||||
const result = await service.getDropdownModels(2024, 10);
|
||||
|
||||
expect(vehicleDataServiceMock.getModels).toHaveBeenCalledWith('mock-pool', 2024, 10);
|
||||
expect(result).toEqual([{ id: 20, name: 'Civic' }]);
|
||||
});
|
||||
|
||||
it('retrieves trims scoped to year, make, and model', async () => {
|
||||
vehicleDataServiceMock.getTrims.mockResolvedValue([{ id: 30, name: 'Sport' }]);
|
||||
|
||||
const result = await service.getDropdownTrims(2024, 10, 20);
|
||||
|
||||
expect(vehicleDataServiceMock.getTrims).toHaveBeenCalledWith('mock-pool', 2024, 20);
|
||||
expect(result).toEqual([{ id: 30, name: 'Sport' }]);
|
||||
});
|
||||
|
||||
it('retrieves engines scoped to selection', async () => {
|
||||
vehicleDataServiceMock.getEngines.mockResolvedValue([{ id: 40, name: '2.0L Turbo' }]);
|
||||
|
||||
const result = await service.getDropdownEngines(2024, 10, 20, 30);
|
||||
|
||||
expect(vehicleDataServiceMock.getEngines).toHaveBeenCalledWith('mock-pool', 2024, 20, 30);
|
||||
expect(result).toEqual([{ id: 40, name: '2.0L Turbo' }]);
|
||||
});
|
||||
|
||||
it('returns static transmission options', async () => {
|
||||
const result = await service.getDropdownTransmissions(2024, 10, 20);
|
||||
|
||||
expect(result).toEqual([
|
||||
{ id: 1, name: 'Automatic' },
|
||||
{ id: 2, name: 'Manual' }
|
||||
]);
|
||||
});
|
||||
});
|
||||
});
|
||||
describe('createVehicle', () => {
|
||||
const mockVehicleData = {
|
||||
vin: '1HGBH41JXMN109186',
|
||||
@@ -94,7 +173,7 @@ describe('VehiclesService', () => {
|
||||
const result = await service.createVehicle(mockVehicleData, 'user-123');
|
||||
|
||||
expect(repositoryInstance.findByUserAndVIN).toHaveBeenCalledWith('user-123', '1HGBH41JXMN109186');
|
||||
expect(mockVinDecodeService.decodeVIN).toHaveBeenCalledWith('1HGBH41JXMN109186');
|
||||
expect(mockVinDecodeService.decodeVIN).toHaveBeenCalledWith('mock-pool', '1HGBH41JXMN109186');
|
||||
expect(repositoryInstance.create).toHaveBeenCalledWith({
|
||||
...mockVehicleData,
|
||||
userId: 'user-123',
|
||||
@@ -319,4 +398,4 @@ describe('VehiclesService', () => {
|
||||
await expect(service.deleteVehicle('vehicle-id-123', 'user-123')).rejects.toThrow('Unauthorized');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user