diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 18:44:42 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-05-19 18:44:42 +0300 |
commit | 4555e1b21c365ed8303ffb7a3325d773c9b8bf31 (patch) | |
tree | 5423a1c7516cffe36384133ade12572cf709398d /spec/lib/gitlab/class_attributes_spec.rb | |
parent | e570267f2f6b326480d284e0164a6464ba4081bc (diff) |
Add latest changes from gitlab-org/gitlab@13-12-stable-eev13.12.0-rc42
Diffstat (limited to 'spec/lib/gitlab/class_attributes_spec.rb')
-rw-r--r-- | spec/lib/gitlab/class_attributes_spec.rb | 62 |
1 files changed, 44 insertions, 18 deletions
diff --git a/spec/lib/gitlab/class_attributes_spec.rb b/spec/lib/gitlab/class_attributes_spec.rb index f8766f20495..ac2a18a1860 100644 --- a/spec/lib/gitlab/class_attributes_spec.rb +++ b/spec/lib/gitlab/class_attributes_spec.rb @@ -6,36 +6,62 @@ RSpec.describe Gitlab::ClassAttributes do Class.new do include Gitlab::ClassAttributes - def self.get_attribute(name) - get_class_attribute(name) + class << self + attr_reader :counter_1, :counter_2 + + # get_class_attribute and set_class_attribute are protected, + # hence those methods are for testing purpose + def get_attribute(name) + get_class_attribute(name) + end + + def set_attribute(name, value) + set_class_attribute(name, value) + end + end + + after_set_class_attribute do + @counter_1 ||= 0 + @counter_1 += 1 end - def self.set_attribute(name, value) - class_attributes[name] = value + after_set_class_attribute do + @counter_2 ||= 0 + @counter_2 += 2 end end end let(:subclass) { Class.new(klass) } - describe ".get_class_attribute" do - it "returns values set on the class" do - klass.set_attribute(:foo, :bar) + it "returns values set on the class" do + klass.set_attribute(:foo, :bar) - expect(klass.get_attribute(:foo)).to eq(:bar) - end + expect(klass.get_attribute(:foo)).to eq(:bar) + end - it "returns values set on a superclass" do - klass.set_attribute(:foo, :bar) + it "returns values set on a superclass" do + klass.set_attribute(:foo, :bar) - expect(subclass.get_attribute(:foo)).to eq(:bar) - end + expect(subclass.get_attribute(:foo)).to eq(:bar) + end - it "returns values from the subclass over attributes from a superclass" do - klass.set_attribute(:foo, :baz) - subclass.set_attribute(:foo, :bar) + it "returns values from the subclass over attributes from a superclass" do + klass.set_attribute(:foo, :baz) + subclass.set_attribute(:foo, :bar) - expect(subclass.get_attribute(:foo)).to eq(:bar) - end + expect(klass.get_attribute(:foo)).to eq(:baz) + expect(subclass.get_attribute(:foo)).to eq(:bar) + end + + it "triggers after hooks after set class values" do + expect(klass.counter_1).to be(nil) + expect(klass.counter_2).to be(nil) + + klass.set_attribute(:foo, :bar) + klass.set_attribute(:foo, :bar) + + expect(klass.counter_1).to eq(2) + expect(klass.counter_2).to eq(4) end end |