Skip to content

Commit 1e6f7bf

Browse files
committed
fix: unit and integration tests
1 parent 4266268 commit 1e6f7bf

17 files changed

+169
-86
lines changed

prisma/initial_data.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { CategorySlug } from "generated/prisma/client.js";
1+
import type { CategorySlug } from "@/../generated/prisma/client";
22

33
export const categories = [
44
{

prisma/seed.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { categories, products } from "./initial_data";
2-
import { PrismaClient } from "../generated/prisma/client.js";
2+
3+
import { PrismaClient } from "@/../generated/prisma/client";
34

45
const prisma = new PrismaClient();
56

src/db/prisma.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { PrismaClient } from "generated/prisma/client.js";
1+
import { PrismaClient } from "@/../generated/prisma/client";
22

33
// Global variable to store the Prisma client instance
44
declare global {

src/lib/utils.tests.ts

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,15 @@ import type { Order, OrderDetails, OrderItem } from "@/models/order.model";
55
import type { Product } from "@/models/product.model";
66
import type { User } from "@/models/user.model";
77

8+
import type {
9+
OrderItem as PrismaOrderItem,
10+
Order as PrismaOrder,
11+
Product as PrismaProduct,
12+
} from "@/../generated/prisma/client";
813
import type { Session } from "react-router";
914

15+
import { Decimal } from "@/../generated/prisma/internal/prismaNamespace";
16+
1017
type TestRequestConfig = {
1118
url?: string;
1219
headers?: HeadersInit;
@@ -61,6 +68,23 @@ export const createTestProduct = (overrides?: Partial<Product>): Product => ({
6168
...overrides,
6269
});
6370

71+
export const createTestDBProduct = (
72+
overrides?: Partial<PrismaProduct>
73+
): PrismaProduct => ({
74+
id: 1,
75+
title: "Test Product",
76+
imgSrc: "/test-image.jpg",
77+
alt: "Test alt text",
78+
price: new Decimal(100),
79+
description: "Test description",
80+
categoryId: 1,
81+
isOnSale: false,
82+
features: ["Feature 1", "Feature 2"],
83+
createdAt: new Date(),
84+
updatedAt: new Date(),
85+
...overrides,
86+
});
87+
6488
export const createTestCategory = (
6589
overrides?: Partial<Category>
6690
): Category => ({
@@ -107,6 +131,22 @@ export const createTestOrderItem = (
107131
...overrides,
108132
} satisfies OrderItem);
109133

134+
export const createTestDBOrderItem = (
135+
overrides: Partial<PrismaOrderItem> = {}
136+
): PrismaOrderItem =>
137+
({
138+
id: 1,
139+
orderId: 1,
140+
productId: 1,
141+
quantity: 1,
142+
title: "Test Product",
143+
price: new Decimal(100),
144+
imgSrc: "test-image.jpg",
145+
createdAt: new Date(),
146+
updatedAt: new Date(),
147+
...overrides,
148+
} satisfies PrismaOrderItem);
149+
110150
export const createTestOrder = (overrides: Partial<Order> = {}): Order => {
111151
const details = overrides.details ?? createTestOrderDetails();
112152
return {
@@ -121,3 +161,26 @@ export const createTestOrder = (overrides: Partial<Order> = {}): Order => {
121161
...overrides,
122162
} satisfies Order;
123163
};
164+
165+
export const createTestDBOrder = (
166+
overrides: Partial<PrismaOrder> = {}
167+
): PrismaOrder => {
168+
return {
169+
id: 1,
170+
userId: 1,
171+
172+
totalAmount: new Decimal(100),
173+
firstName: "Test",
174+
lastName: "User",
175+
company: null,
176+
address: "Test Address",
177+
city: "Test City",
178+
country: "Test Country",
179+
region: "Test Region",
180+
zip: "12345",
181+
phone: "123456789",
182+
createdAt: new Date(),
183+
updatedAt: new Date(),
184+
...overrides,
185+
} satisfies PrismaOrder;
186+
};

src/models/cart.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { type Product } from "./product.model";
33
import type {
44
Cart as PrismaCart,
55
CartItem as PrismaCartItem,
6-
} from "generated/prisma/client";
6+
} from "@/../generated/prisma/client";
77

88
export type CartItem = PrismaCartItem & {
99
product: Pick<

src/models/category.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Category as PrismaCategory } from "generated/prisma/client";
1+
import type { Category as PrismaCategory } from "@/../generated/prisma/client";
22

33
export const VALID_SLUGS = ["polos", "stickers", "tazas"] as const;
44

src/models/order.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type {
22
Order as PrismaOrder,
33
OrderItem as PrismaOrderItem,
4-
} from "generated/prisma/client";
4+
} from "@/../generated/prisma/client";
55

66
export type OrderDetails = Pick<
77
PrismaOrder,

src/models/product.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Product as PrismaProduct } from "generated/prisma/client";
1+
import type { Product as PrismaProduct } from "@/../generated/prisma/client";
22

33
export type Product = Omit<PrismaProduct, "price"> & {
44
price: number;

src/models/user.model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { User as PrismaUser } from "generated/prisma/client";
1+
import type { User as PrismaUser } from "@/../generated/prisma/client";
22

33
export type User = PrismaUser;
44

src/services/category.service.test.ts

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,19 @@
11
import { beforeEach, describe, expect, it, vi } from "vitest";
22

3+
import { prisma as mockPrisma } from "@/db/prisma";
34
import { createTestCategory } from "@/lib/utils.tests";
45
import {
56
getAllCategories,
67
getCategoryBySlug,
78
} from "@/services/category.service";
89

9-
// Mock Prisma client
10-
const mockPrisma = {
11-
category: {
12-
findMany: vi.fn(),
13-
findUnique: vi.fn(),
14-
},
15-
};
16-
1710
vi.mock("@/db/prisma", () => ({
18-
prisma: mockPrisma,
11+
prisma: {
12+
category: {
13+
findMany: vi.fn(),
14+
findUnique: vi.fn(),
15+
},
16+
},
1917
}));
2018

2119
describe("Category Service", () => {
@@ -38,7 +36,7 @@ describe("Category Service", () => {
3836
}),
3937
];
4038

41-
mockPrisma.category.findMany.mockResolvedValue(mockCategories);
39+
vi.mocked(mockPrisma.category.findMany).mockResolvedValue(mockCategories);
4240

4341
const result = await getAllCategories();
4442

@@ -47,7 +45,7 @@ describe("Category Service", () => {
4745
});
4846

4947
it("should handle empty categories", async () => {
50-
mockPrisma.category.findMany.mockResolvedValue([]);
48+
vi.mocked(mockPrisma.category.findMany).mockResolvedValue([]);
5149

5250
const result = await getAllCategories();
5351

@@ -60,7 +58,7 @@ describe("Category Service", () => {
6058
it("should return category when found", async () => {
6159
const mockCategory = createTestCategory();
6260

63-
mockPrisma.category.findUnique.mockResolvedValue(mockCategory);
61+
vi.mocked(mockPrisma.category.findUnique).mockResolvedValue(mockCategory);
6462

6563
const result = await getCategoryBySlug("polos");
6664

@@ -71,7 +69,7 @@ describe("Category Service", () => {
7169
});
7270

7371
it("should throw error when category not found", async () => {
74-
mockPrisma.category.findUnique.mockResolvedValue(null);
72+
vi.mocked(mockPrisma.category.findUnique).mockResolvedValue(null);
7573

7674
await expect(getCategoryBySlug("polos")).rejects.toThrow(
7775
'Category with slug "polos" not found'

0 commit comments

Comments
 (0)