From 0a90a48b04a6da2f50e55306885c2796b4a4f31d Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Thu, 4 Feb 2016 12:45:05 +1100 Subject: [PATCH] Refresh products cache when coordinator fees are changed or destroyed --- app/models/coordinator_fee.rb | 11 +++++++++++ app/models/order_cycle.rb | 9 ++++----- spec/models/coordinator_fee_spec.rb | 19 +++++++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 spec/models/coordinator_fee_spec.rb diff --git a/app/models/coordinator_fee.rb b/app/models/coordinator_fee.rb index f15a194158..135ee821a9 100644 --- a/app/models/coordinator_fee.rb +++ b/app/models/coordinator_fee.rb @@ -1,4 +1,15 @@ class CoordinatorFee < ActiveRecord::Base belongs_to :order_cycle belongs_to :enterprise_fee + + after_save :refresh_products_cache + after_destroy :refresh_products_cache + + + private + + def refresh_products_cache + order_cycle.refresh_products_cache + end + end diff --git a/app/models/order_cycle.rb b/app/models/order_cycle.rb index 8d0fa83da8..58ec1bdfa0 100644 --- a/app/models/order_cycle.rb +++ b/app/models/order_cycle.rb @@ -241,6 +241,10 @@ class OrderCycle < ActiveRecord::Base coordinator.users.include? user end + def refresh_products_cache + OpenFoodNetwork::ProductsCache.order_cycle_changed self + end + private @@ -254,9 +258,4 @@ class OrderCycle < ActiveRecord::Base distributed_variants.include?(product.master) && (product.variants & distributed_variants).empty? end - - def refresh_products_cache - OpenFoodNetwork::ProductsCache.order_cycle_changed self - end - end diff --git a/spec/models/coordinator_fee_spec.rb b/spec/models/coordinator_fee_spec.rb new file mode 100644 index 0000000000..2a54a0e96c --- /dev/null +++ b/spec/models/coordinator_fee_spec.rb @@ -0,0 +1,19 @@ +require 'spec_helper' + +describe CoordinatorFee do + describe "products caching" do + let(:order_cycle) { create(:simple_order_cycle) } + let(:enterprise_fee) { create(:enterprise_fee) } + + it "refreshes the products cache on change" do + expect(OpenFoodNetwork::ProductsCache).to receive(:order_cycle_changed).with(order_cycle) + order_cycle.coordinator_fees << enterprise_fee + end + + it "refreshes the products cache on destruction" do + order_cycle.coordinator_fees << enterprise_fee + expect(OpenFoodNetwork::ProductsCache).to receive(:order_cycle_changed).with(order_cycle) + order_cycle.coordinator_fee_refs.first.destroy + end + end +end