Skip to content

Commit

Permalink
Fix Codacy errors
Browse files Browse the repository at this point in the history
  • Loading branch information
w3bdesign committed Jan 26, 2025
1 parent 9cd0933 commit d21da3a
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 26 deletions.
29 changes: 21 additions & 8 deletions backend/src/bookings/bookings.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { Test, TestingModule } from "@nestjs/testing";
import { getRepositoryToken } from "@nestjs/typeorm";
import { Repository } from "typeorm";
import { BookingsService } from "./bookings.service";
import { Booking, BookingStatus } from "./entities/booking.entity";
import { UsersService } from "../users/users.service";
Expand All @@ -15,11 +14,24 @@ import { NotFoundException, BadRequestException } from "@nestjs/common";
describe("BookingsService", () => {
let service: BookingsService;

interface MockBooking extends Partial<Booking> {
id: string;
customer?: { firstName: string };
service?: { id: string; duration: number };
employee?: { id: string };
}

const mockBookingRepository = {
create: jest.fn(),
save: jest.fn(),
findOne: jest.fn(),
find: jest.fn(),
create: jest.fn().mockImplementation((dto: Partial<Booking>): MockBooking => ({
id: 'booking1',
...dto
})),
save: jest.fn().mockImplementation((booking: MockBooking): Promise<MockBooking> =>
Promise.resolve({ id: 'booking1', ...booking })),
findOne: jest.fn().mockImplementation((options: any): Promise<MockBooking | null> =>
Promise.resolve({ id: 'booking1' })),
find: jest.fn().mockImplementation((): Promise<MockBooking[]> =>
Promise.resolve([{ id: 'booking1' }])),
};

const mockUsersService = {
Expand Down Expand Up @@ -102,8 +114,9 @@ describe("BookingsService", () => {
mockServicesService.findOne.mockResolvedValue(mockService);
mockEmployeesService.findAll.mockResolvedValue([mockEmployee]);
mockBookingRepository.find.mockResolvedValue([]);
mockBookingRepository.create.mockReturnValue({});
mockBookingRepository.save.mockResolvedValue({ id: "booking1" });
const newBooking: MockBooking = { id: 'booking1' };
mockBookingRepository.create.mockReturnValue(newBooking);
mockBookingRepository.save.mockResolvedValue(newBooking);

const result = await service.createWalkIn(createWalkInDto, mockShop);

Expand Down Expand Up @@ -259,7 +272,7 @@ describe("BookingsService", () => {
};

mockBookingRepository.findOne.mockResolvedValue(mockBooking);
mockBookingRepository.save.mockImplementation((booking) =>
mockBookingRepository.save.mockImplementation((booking: MockBooking): Promise<MockBooking> =>
Promise.resolve(booking)
);

Expand Down
66 changes: 48 additions & 18 deletions backend/src/database/seeds/run-seeds.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,24 @@ import { createSampleBookings } from "./create-sample-bookings.seed";
import { createSampleOrders } from "./create-sample-orders.seed";

// Mock the DataSource class
// Import the actual DataSource type to use in our mock
import { DataSourceOptions } from "typeorm";

jest.mock("typeorm", () => {
const originalModule = jest.requireActual("typeorm");
return {
...originalModule,
DataSource: jest.fn().mockImplementation((options: PostgresConnectionOptions) => {
const actualModule = jest.requireActual("typeorm") as typeof import("typeorm");

class MockDataSource extends actualModule.DataSource {
constructor(options: PostgresConnectionOptions) {
if (options.url === 'invalid-url') {
throw new Error('Invalid URL format');
}
const dataSource = new originalModule.DataSource(options);
return dataSource;
}),
super(options);
}
}

return {
...actualModule,
DataSource: jest.fn().mockImplementation((options: PostgresConnectionOptions) => new MockDataSource(options)),
};
});

Expand All @@ -28,15 +35,40 @@ jest.mock("./create-sample-bookings.seed");
jest.mock("./create-sample-orders.seed");

describe('run-seeds', () => {
const mockDataSource: DataSource = {
initialize: jest.fn().mockResolvedValue(undefined),
destroy: jest.fn().mockResolvedValue(undefined),
// Create a minimal mock of DataSource with required properties
const createMockDataSource = () => ({
name: 'default',
options: {} as PostgresConnectionOptions,
isInitialized: false,
driver: {} as any,
manager: {} as any,
name: 'default',
} as DataSource;
initialize: jest.fn().mockResolvedValue(undefined),
destroy: jest.fn().mockResolvedValue(undefined),
isConnected: false,
close: jest.fn().mockResolvedValue(undefined),
connect: jest.fn().mockResolvedValue(undefined),
createEntityManager: jest.fn(),
createQueryRunner: jest.fn(),
getMetadata: jest.fn(),
hasMetadata: jest.fn(),
getRepository: jest.fn(),
getTreeRepository: jest.fn(),
getMongoRepository: jest.fn(),
transaction: jest.fn(),
driver: {},
manager: {},
mongoManager: undefined,
sqljsManager: undefined,
namingStrategy: {},
entityMetadatas: [],
subscribers: [],
migrations: [],
logger: console,
metadataTableName: 'typeorm_metadata',
queryResultCache: null,
relationLoader: {},
relationIdLoader: {},
}) as unknown as DataSource;

const mockDataSource = createMockDataSource();

const originalEnv = process.env;

Expand Down Expand Up @@ -94,10 +126,8 @@ describe('run-seeds', () => {
});

it('should handle initialization error', async () => {
const errorDataSource: DataSource = {
...mockDataSource,
initialize: jest.fn().mockRejectedValue(new Error('Init failed')),
};
const errorDataSource = createMockDataSource();
errorDataSource.initialize = jest.fn().mockRejectedValue(new Error('Init failed'));

await expect(runSeeds(errorDataSource)).rejects.toThrow('Seed operation failed: Init failed');
});
Expand Down

0 comments on commit d21da3a

Please sign in to comment.