From 1a74e524459a330b9bfb8511918ba0f2ca48b9c7 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Tue, 9 May 2023 14:24:35 +0530 Subject: [PATCH] feat: ensure the clean-up logic works --- app/models/concerns/labelable.rb | 7 +++++++ spec/models/conversation_spec.rb | 9 ++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/models/concerns/labelable.rb b/app/models/concerns/labelable.rb index 74d8dfba9..ad4e0a1df 100644 --- a/app/models/concerns/labelable.rb +++ b/app/models/concerns/labelable.rb @@ -3,6 +3,7 @@ module Labelable included do acts_as_taggable_on :labels + before_save :clear_labels_cache end def update_labels(labels = nil) @@ -24,4 +25,10 @@ module Labelable @labels_cache || [] end + + private + + def clear_labels_cache + @labels_cache = nil + end end diff --git a/spec/models/conversation_spec.rb b/spec/models/conversation_spec.rb index f4208081d..5621f2fe1 100644 --- a/spec/models/conversation_spec.rb +++ b/spec/models/conversation_spec.rb @@ -244,10 +244,17 @@ RSpec.describe Conversation, type: :model do end it 'ensures preloaded labels are always in sync with the database' do - labels = [first_label, fourth_label].map(&:title) + labels = [first_label].map(&:title) expect(conversation.update_labels(labels)).to be(true) expect(conversation.label_list).to match_array(labels) expect(conversation.preloaded_label_list).to match_array(labels) + + updated_labels = [second_label].map(&:title) + # reload this so that the taggins collection is updated + conversation.reload + expect(conversation.update_labels(updated_labels)).to be(true) + expect(conversation.label_list).to match_array(updated_labels) + expect(conversation.preloaded_labelfe_list).to match_array(updated_labels) end it 'adds and removes previously added labels' do