diff --git a/packages/snap-store-mobx/src/Cart/CartStore.test.ts b/packages/snap-store-mobx/src/Cart/CartStore.test.ts index c5aa9ceab..ff1cb7a6b 100644 --- a/packages/snap-store-mobx/src/Cart/CartStore.test.ts +++ b/packages/snap-store-mobx/src/Cart/CartStore.test.ts @@ -91,6 +91,22 @@ describe('CartStore store', () => { expect(cartStore.msrp).toStrictEqual(result.mappings.core?.msrp ? result.mappings.core?.msrp * 3 : 0); }); + it('will ensure price and MSRP are numbers', () => { + const cartStore = new CartStore(); + const result = results[0] as Product; + result.quantity = 1; + + // @ts-ignore - sometimes the values in variant data can be strings + result.mask.set({ mappings: { core: { msrp: '0.00' } } }); + + cartStore.addItems([result]); + + expect(cartStore.items).toHaveLength(1); + expect(cartStore.count).toStrictEqual(1); + expect(cartStore.price).toStrictEqual(result.mappings.core?.price); + expect(cartStore.msrp).toStrictEqual(result.mappings.core?.price); + }); + it('can use the eventmanager events', async () => { const cartStore = new CartStore(); diff --git a/packages/snap-store-mobx/src/Cart/CartStore.ts b/packages/snap-store-mobx/src/Cart/CartStore.ts index 7d73634f9..e9bc570c5 100644 --- a/packages/snap-store-mobx/src/Cart/CartStore.ts +++ b/packages/snap-store-mobx/src/Cart/CartStore.ts @@ -32,7 +32,7 @@ export class CartStore { get price(): number { let price = 0; this.items.forEach((item) => { - price += (item.display.mappings.core?.price || 0) * item.quantity; + price += +(item.display.mappings.core?.price || 0) * item.quantity; }); return price; } @@ -40,7 +40,7 @@ export class CartStore { get msrp(): number { let price = 0; this.items.forEach((item) => { - price += (item.display.mappings.core?.msrp || item.display.mappings.core?.price || 0) * item.quantity; + price += (+(item.display.mappings.core?.msrp || 0) || +(item.display.mappings.core?.price || 0) || 0) * item.quantity; }); return price; }