import "reflect-metadata"; import { IsNull } from "typeorm"; import Item from "../../domain/entities/item"; import ItemStatus from "../../domain/entities/vo/itemStatus.vo"; import ItemRepository from "../../domain/repositories/item.repository"; import UserRepository from "../../domain/repositories/user.repository"; import ListItemsService from "../../domain/services/listItems.service"; import { StockRecord } from "../../infrastructure/db/records/stock.record"; import marketplaceContainer from "../../marketplace.injection"; import { populateDB } from "../../utils/populateDB.script"; import itemFixture from "../../utils/seed/items.seed"; import User from "../../domain/entities/user"; describe("ListItemsService", () => { const items = itemFixture.map( i => new Item(i)); const service = marketplaceContainer.resolve("Items:ListItemsService"); const itemRepo = marketplaceContainer.resolve("Items:ItemRepository"); const userRepo = marketplaceContainer.resolve("Items:UserRepository"); describe("without user", () => { it("should return items", async() => { jest.spyOn(itemRepo, "list").mockImplementationOnce( async() => { return { count: items.length, items }; }); const result = await service.run({}); expect(result.isSuccess).toBeTruthy(); expect( result.data() .items.map(item => item.status) .filter(status => status !== ItemStatus.UNAVAILABLE) .length ).toBe(0); }); }); describe("with user", () => { it("should return items", async() => { jest.spyOn(userRepo, "find").mockImplementationOnce(async() => new User(1, 3)); await populateDB(); const pivot = await StockRecord.findOneByOrFail({ assignedToId: IsNull() }); pivot.assignedToId = 1; await pivot.save(); const result = await service.run({ userId: 1 }); expect(result.isSuccess).toBeTruthy(); expect( result.data() .items.map(item => item.assigned) .filter(r => r) .length ).toBe(1); }); }); });