From 5639b21c7773ec2beb9f7328c0d0529aa28b5da5 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Mon, 4 May 2020 15:03:50 +0200 Subject: [PATCH] Add tests for current soft-deleted variant behavior in CartService --- spec/services/cart_service_spec.rb | 57 ++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/spec/services/cart_service_spec.rb b/spec/services/cart_service_spec.rb index 0baa3abe26..b5d2f69c94 100644 --- a/spec/services/cart_service_spec.rb +++ b/spec/services/cart_service_spec.rb @@ -15,14 +15,18 @@ describe CartService do context "end-to-end" do let(:order) { create(:order, distributor: distributor, order_cycle: order_cycle) } let(:distributor) { create(:distributor_enterprise) } - let(:order_cycle) { create(:simple_order_cycle, distributors: [distributor], variants: [v]) } + let(:order_cycle) { create(:simple_order_cycle, distributors: [distributor], + variants: [variant]) } let(:cart_service) { CartService.new(order) } - let(:v) { create(:variant) } + let(:variant) { create(:variant) } - describe "populate" do + describe "#populate" do it "adds a variant" do - cart_service.populate({ variants: { v.id.to_s => { quantity: '1', max_quantity: '2' } } }, true) - li = order.find_line_item_by_variant(v) + cart_service.populate( + { variants: { variant.id.to_s => { quantity: '1', max_quantity: '2' } } }, + true + ) + li = order.find_line_item_by_variant(variant) expect(li).to be expect(li.quantity).to eq(1) expect(li.max_quantity).to eq(2) @@ -30,10 +34,13 @@ describe CartService do end it "updates a variant's quantity, max quantity and final_weight_volume" do - order.add_variant v, 1, 2 + order.add_variant variant, 1, 2 - cart_service.populate({ variants: { v.id.to_s => { quantity: '2', max_quantity: '3' } } }, true) - li = order.find_line_item_by_variant(v) + cart_service.populate( + { variants: { variant.id.to_s => { quantity: '2', max_quantity: '3' } } }, + true + ) + li = order.find_line_item_by_variant(variant) expect(li).to be expect(li.quantity).to eq(2) expect(li.max_quantity).to eq(3) @@ -41,13 +48,43 @@ describe CartService do end it "removes a variant" do - order.add_variant v, 1, 2 + order.add_variant variant, 1, 2 cart_service.populate({ variants: {} }, true) order.line_items(:reload) - li = order.find_line_item_by_variant(v) + li = order.find_line_item_by_variant(variant) expect(li).not_to be end + + context "when a variant has been soft-deleted" do + let(:relevant_line_item) { order.reload.find_line_item_by_variant(variant) } + + describe "when the soft-deleted variant is not in the cart yet" do + xit "doesn't fail, and does not add the deleted variant to the cart" do + variant.delete + + cart_service.populate({ variants: { variant.id.to_s => { quantity: '2' } } }, true) + + expect(relevant_line_item).to be_nil + expect(cart_service.errors.count).to be 0 + end + end + + describe "when the soft-deleted variant already has a line_item in the cart" do + let!(:existing_line_item) { + create(:line_item, variant: variant, quantity: 2, order: order) + } + + xit "doesn't fail, and removes the line_item from the cart" do + variant.delete + + cart_service.populate({ variants: { variant.id.to_s => { quantity: '2' } } }, true) + + expect(relevant_line_item).to be_nil + expect(cart_service.errors.count).to be 0 + end + end + end end end