From 65aa9bc11441bde417329fa591a42cbb736e9066 Mon Sep 17 00:00:00 2001 From: griest024 Date: Thu, 8 Feb 2024 11:13:31 -0500 Subject: [PATCH] feat(cart): use product data to seed added cart item (#2745) --- .../backend/cart-items/cart-items.service.ts | 3 +-- .../cart-item/cart-item.factory.spec.ts | 27 ++++++++++++++++--- .../factories/cart-item/cart-item.factory.ts | 19 ++++++++++--- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/libs/cart/driver/in-memory/src/backend/cart-items/cart-items.service.ts b/libs/cart/driver/in-memory/src/backend/cart-items/cart-items.service.ts index b455cab73a..f4aa7cf068 100644 --- a/libs/cart/driver/in-memory/src/backend/cart-items/cart-items.service.ts +++ b/libs/cart/driver/in-memory/src/backend/cart-items/cart-items.service.ts @@ -88,9 +88,8 @@ export class DaffInMemoryBackendCartItemsService implements DaffInMemoryDataServ private transformItemInput(itemInput: DaffCartItemInput) { return { - ...this.cartItemFactory.create(), + ...this.cartItemFactory.fromProduct(this.productBackend.products.find((product) => product.id === itemInput.productId)), ...itemInput, - product_id: itemInput.productId, }; } diff --git a/libs/cart/testing/src/factories/cart-item/cart-item.factory.spec.ts b/libs/cart/testing/src/factories/cart-item/cart-item.factory.spec.ts index 02f3883bfd..eb83c5cca1 100644 --- a/libs/cart/testing/src/factories/cart-item/cart-item.factory.spec.ts +++ b/libs/cart/testing/src/factories/cart-item/cart-item.factory.spec.ts @@ -1,12 +1,14 @@ import { TestBed } from '@angular/core/testing'; import { DaffCartItem } from '@daffodil/cart'; +import { DaffProduct } from '@daffodil/product'; +import { DaffProductFactory } from '@daffodil/product/testing'; import { DaffCartItemFactory } from './cart-item.factory'; -describe('Cart | Testing | Factories | CartItemFactory', () => { - +describe('@daffodil/cart/testing | DaffCartItemFactory', () => { let cartItemFactory: DaffCartItemFactory; + let productFactory: DaffProductFactory; beforeEach(() => { TestBed.configureTestingModule({ @@ -14,6 +16,7 @@ describe('Cart | Testing | Factories | CartItemFactory', () => { }); cartItemFactory = TestBed.inject(DaffCartItemFactory); + productFactory = TestBed.inject(DaffProductFactory); }); it('should be created', () => { @@ -21,7 +24,6 @@ describe('Cart | Testing | Factories | CartItemFactory', () => { }); describe('create', () => { - let result: DaffCartItem; beforeEach(() => { @@ -48,4 +50,23 @@ describe('Cart | Testing | Factories | CartItemFactory', () => { expect(result.discounts.reduce((acc, discount) => acc + discount.amount, 0)).toBeLessThanOrEqual(result.price); }); }); + + describe('fromProduct', () => { + let result: DaffCartItem; + let product: DaffProduct; + + beforeEach(() => { + product = productFactory.create(); + result = cartItemFactory.fromProduct(product); + }); + + it('should return a CartItem with fields seeded from a product', () => { + expect(result.product_id).toEqual(product.id); + expect(result.name).toEqual(product.name); + expect(result.url).toEqual(product.url); + expect(result.image).toEqual(product.images[0]); + expect(result.sku).toEqual(product.id); + expect(result.in_stock).toEqual(product.in_stock); + }); + }); }); diff --git a/libs/cart/testing/src/factories/cart-item/cart-item.factory.ts b/libs/cart/testing/src/factories/cart-item/cart-item.factory.ts index 11f8a5eb43..e27378b85b 100644 --- a/libs/cart/testing/src/factories/cart-item/cart-item.factory.ts +++ b/libs/cart/testing/src/factories/cart-item/cart-item.factory.ts @@ -7,7 +7,10 @@ import { DaffCartItemDiscount, } from '@daffodil/cart'; import { DaffModelFactory } from '@daffodil/core/testing'; -import { DaffProductImage } from '@daffodil/product'; +import { + DaffProduct, + DaffProductImage, +} from '@daffodil/product'; import { DaffProductImageFactory } from '@daffodil/product/testing'; export class DaffMockCartItem implements DaffCartItem { @@ -39,8 +42,18 @@ export class DaffMockCartItem implements DaffCartItem { providedIn: 'root', }) export class DaffCartItemFactory extends DaffModelFactory { - - constructor(){ + constructor() { super(DaffMockCartItem); } + + fromProduct(product: DaffProduct): DaffCartItem { + return this.create({ + product_id: product.id, + name: product.name, + url: product.url, + image: product.images[0], + sku: product.id, + in_stock: product.in_stock, + }); + } }