mirror of
https://github.com/andwati/order-service.git
synced 2026-10-18 10:22:52 +00:00
+9
-2
@@ -11,7 +11,10 @@
|
||||
"lint:fix": "eslint . --ext .ts --fix",
|
||||
"prettier": "prettier --check .",
|
||||
"prettier:fix": "prettier --write .",
|
||||
"seed": "tsc && node dist/scripts/seed.js"
|
||||
"seed": "tsc && node dist/scripts/seed.js",
|
||||
"test": "vitest",
|
||||
"test:unit": "vitest run src/tests/unit",
|
||||
"test:integration": "vitest run src/tests/integration"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
@@ -40,15 +43,19 @@
|
||||
"@types/jsonwebtoken": "^9.0.10",
|
||||
"@types/morgan": "^1.9.10",
|
||||
"@types/node": "^25.0.6",
|
||||
"@types/supertest": "^6.0.3",
|
||||
"@types/swagger-jsdoc": "^6.0.4",
|
||||
"@types/swagger-ui-express": "^4.1.8",
|
||||
"@vitest/coverage-v8": "^4.0.17",
|
||||
"eslint": "^9.39.2",
|
||||
"globals": "^17.0.0",
|
||||
"jsonwebtoken": "^9.0.3",
|
||||
"nodemon": "^3.1.11",
|
||||
"prettier": "^3.7.4",
|
||||
"supertest": "^7.2.2",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.9.3",
|
||||
"typescript-eslint": "^8.52.0"
|
||||
"typescript-eslint": "^8.52.0",
|
||||
"vitest": "^4.0.17"
|
||||
}
|
||||
}
|
||||
Generated
+1156
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
||||
onlyBuiltDependencies:
|
||||
- '@scarf/scarf'
|
||||
- bcrypt
|
||||
- esbuild
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import request from "supertest";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
describe("GET /health", () => {
|
||||
it("returns 200 OK", async () => {
|
||||
// Minimal env required by app config during import
|
||||
process.env.MONGO_URI = process.env.MONGO_URI ?? "mongodb://localhost:27017/test";
|
||||
process.env.JWT_SECRET = process.env.JWT_SECRET ?? "test-secret";
|
||||
|
||||
const { default: app } = await import("../../app.js");
|
||||
|
||||
const res = await request(app).get("/health");
|
||||
|
||||
expect(res.status).toBe(200);
|
||||
expect(res.body).toEqual({ status: "OK" });
|
||||
}, 20000);
|
||||
});
|
||||
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
import { describe, expect, it, vi, beforeEach, afterEach } from "vitest";
|
||||
|
||||
import { OrderService } from "../../services/order.service.js";
|
||||
import { OrderRepository } from "../../repositories/order.repo.js";
|
||||
import { ProductRepository } from "../../repositories/product.repo.js";
|
||||
|
||||
vi.mock("mongoose", async (importOriginal) => {
|
||||
const actual = (await importOriginal()) as typeof import("mongoose");
|
||||
|
||||
const startSession = vi.fn().mockResolvedValue({
|
||||
startTransaction: vi.fn(),
|
||||
commitTransaction: vi.fn(),
|
||||
abortTransaction: vi.fn(),
|
||||
endSession: vi.fn(),
|
||||
});
|
||||
|
||||
return {
|
||||
...actual,
|
||||
default: {
|
||||
...(actual as any).default,
|
||||
startSession,
|
||||
},
|
||||
startSession,
|
||||
};
|
||||
});
|
||||
|
||||
vi.mock("../../repositories/order.repo.js");
|
||||
vi.mock("../../repositories/product.repo.js");
|
||||
|
||||
describe("OrderService", () => {
|
||||
const mockedOrderRepo = vi.mocked(OrderRepository);
|
||||
const mockedProductRepo = vi.mocked(ProductRepository);
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe("listOrders", () => {
|
||||
it("lists all orders for admin role", async () => {
|
||||
const orders = [{ id: "1" }];
|
||||
mockedOrderRepo.findAll.mockResolvedValueOnce(orders as never);
|
||||
|
||||
const result = await OrderService.listOrders("user-id", "admin");
|
||||
|
||||
expect(mockedOrderRepo.findAll).toHaveBeenCalledOnce();
|
||||
expect(result).toEqual(orders);
|
||||
});
|
||||
|
||||
it("lists user orders for non-admin role", async () => {
|
||||
const orders = [{ id: "2" }];
|
||||
mockedOrderRepo.findByUser.mockResolvedValueOnce(orders as never);
|
||||
|
||||
const result = await OrderService.listOrders("user-123", "customer");
|
||||
|
||||
expect(mockedOrderRepo.findByUser).toHaveBeenCalledWith("user-123");
|
||||
expect(result).toEqual(orders);
|
||||
});
|
||||
});
|
||||
|
||||
describe("payOrder", () => {
|
||||
it("throws 400 for invalid id", async () => {
|
||||
await expect(OrderService.payOrder(undefined)).rejects.toMatchObject({
|
||||
statusCode: 400,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
import { defineConfig } from "vitest/config";
|
||||
|
||||
export default defineConfig({
|
||||
test: {
|
||||
environment: "node",
|
||||
globals: true,
|
||||
include: ["src/tests/**/*.test.ts"],
|
||||
coverage: {
|
||||
provider: "v8",
|
||||
reporter: ["text", "html"],
|
||||
reportsDirectory: "./coverage",
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user