Skip to content

Commit

Permalink
feat(cart): use product data to seed added cart item (#2745)
Browse files Browse the repository at this point in the history
  • Loading branch information
griest024 committed Feb 8, 2024
1 parent d9f1704 commit 65aa9bc
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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,
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,29 @@
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({
providers: [DaffCartItemFactory],
});

cartItemFactory = TestBed.inject(DaffCartItemFactory);
productFactory = TestBed.inject(DaffProductFactory);
});

it('should be created', () => {
expect(cartItemFactory).toBeTruthy();
});

describe('create', () => {

let result: DaffCartItem;

beforeEach(() => {
Expand All @@ -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);
});
});
});
19 changes: 16 additions & 3 deletions libs/cart/testing/src/factories/cart-item/cart-item.factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -39,8 +42,18 @@ export class DaffMockCartItem implements DaffCartItem {
providedIn: 'root',
})
export class DaffCartItemFactory extends DaffModelFactory<DaffCartItem> {

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,
});
}
}

0 comments on commit 65aa9bc

Please sign in to comment.