From d7a3218fbe801a3758e057447d28fb86911b70eb Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Tue, 31 May 2022 09:26:42 +0200 Subject: [PATCH] test(medusa): Add few tests on PriceListService#update method (#1554) --- .../src/services/__tests__/price-list.js | 115 +++++++++++++----- 1 file changed, 86 insertions(+), 29 deletions(-) diff --git a/packages/medusa/src/services/__tests__/price-list.js b/packages/medusa/src/services/__tests__/price-list.js index 1fe9bc8495..d794530f4f 100644 --- a/packages/medusa/src/services/__tests__/price-list.js +++ b/packages/medusa/src/services/__tests__/price-list.js @@ -1,42 +1,41 @@ import { MedusaError } from "medusa-core-utils" import { IdMap, MockManager, MockRepository } from "medusa-test-utils" import PriceListService from "../price-list" +import { MoneyAmountRepository } from "../../repositories/money-amount" + +const priceListRepository = MockRepository({ + findOne: (q) => { + if (q === IdMap.getId("batman")) { + return Promise.resolve(undefined) + } + return Promise.resolve({ id: IdMap.getId("ironman") }) + }, + create: (data) => { + return Promise.resolve({ id: IdMap.getId("ironman"), ...data }) + }, + save: (data) => Promise.resolve(data), +}) + +const customerGroupService = { + retrieve: jest.fn((id) => { + if (id === IdMap.getId("group")) { + return Promise.resolve({ id: IdMap.getId("group") }) + } + + throw new MedusaError( + MedusaError.Types.NOT_FOUND, + `CustomerGroup with id ${id} was not found` + ) + }), +} describe("PriceListService", () => { - const priceListRepository = MockRepository({ - findOne: (q) => { - if (q === IdMap.getId("batman")) { - return Promise.resolve(undefined) - } - return Promise.resolve({ id: IdMap.getId("ironman") }) - }, - create: (data) => { - return Promise.resolve({ id: IdMap.getId("ironman"), ...data }) - }, - save: (data) => Promise.resolve(data), - }) - - const customerGroupService = { - retrieve: jest.fn((id) => { - if (id === IdMap.getId("group")) { - return Promise.resolve({ id: IdMap.getId("group") }) - } - - throw new MedusaError( - MedusaError.Types.NOT_FOUND, - `CustomerGroup with id ${id} was not found` - ) - }), - } - const moneyAmountRepository = MockRepository() moneyAmountRepository.addPriceListPrices = jest.fn(() => Promise.resolve()) moneyAmountRepository.removePriceListPrices = jest.fn(() => Promise.resolve()) moneyAmountRepository.updatePriceListPrices = jest.fn(() => Promise.resolve()) - const defaultRelations = ["prices", "customer_groups"] - const priceListService = new PriceListService({ manager: MockManager, customerGroupService, @@ -73,7 +72,7 @@ describe("PriceListService", () => { describe("create", () => { it("creates a new Price List", async () => { - const result = await priceListService.create({ + await priceListService.create({ name: "VIP winter sale", description: "Winter sale for VIP customers. 25% off selected items.", type: "sale", @@ -118,4 +117,62 @@ describe("PriceListService", () => { ) }) }) + + describe("update", () => { + const updateRelatedMoneyAmountRepository = MockRepository() + updateRelatedMoneyAmountRepository.create = jest.fn().mockImplementation((rawEntity) => Promise.resolve(rawEntity)) + updateRelatedMoneyAmountRepository.save = jest.fn().mockImplementation(() => Promise.resolve()) + updateRelatedMoneyAmountRepository.updatePriceListPrices = (new MoneyAmountRepository()).updatePriceListPrices + + const updateRelatedPriceListService = new PriceListService({ + manager: MockManager, + customerGroupService, + priceListRepository, + moneyAmountRepository: updateRelatedMoneyAmountRepository, + }) + + it("update only existing price lists and related money amount", async () => { + await updateRelatedPriceListService.update(IdMap.getId("ironman"), { + description: "Updated description", + name: "Updated name", + prices: [ + { + id: "pl_dakjn", + amount: 100, + currency_code: "usd", + min_quantity: 1, + max_quantity: 100, + }, + ], + }) + + expect(updateRelatedMoneyAmountRepository.create).not.toHaveBeenCalled() + expect(updateRelatedMoneyAmountRepository.save).toHaveBeenCalled() + }) + + it("update only existing and create new price lists and related money amount", async () => { + await updateRelatedPriceListService.update(IdMap.getId("ironman"), { + description: "Updated description", + name: "Updated name", + prices: [ + { + id: "pl_dakjn", + amount: 100, + currency_code: "usd", + min_quantity: 1, + max_quantity: 100, + }, + { + amount: 100, + currency_code: "usd", + min_quantity: 1, + max_quantity: 100, + }, + ], + }) + + expect(updateRelatedMoneyAmountRepository.create).toHaveBeenCalledTimes(1) + expect(updateRelatedMoneyAmountRepository.save).toHaveBeenCalled() + }) + }) })