summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lapierre <mlapierre@gitlab.com>2019-01-15 15:18:17 -0500
committerMark Lapierre <mlapierre@gitlab.com>2019-01-15 15:39:19 -0500
commit1d22498251fd728246611be7dd1a19adadbafae6 (patch)
tree4f830ee2ffb52a464638e7c812ea0cf8abbedcdd
parent75b1837da79b5244a8da6bde1e391343fef59431 (diff)
downloadgitlab-ce-1d22498251fd728246611be7dd1a19adadbafae6.tar.gz
Fix Resource attribute bug
Allow Resources to have the same attribute name but different attribute values
-rw-r--r--qa/qa/resource/base.rb12
-rw-r--r--qa/spec/resource/base_spec.rb36
2 files changed, 37 insertions, 11 deletions
diff --git a/qa/qa/resource/base.rb b/qa/qa/resource/base.rb
index f325162d1c0..ffe8633dd16 100644
--- a/qa/qa/resource/base.rb
+++ b/qa/qa/resource/base.rb
@@ -116,23 +116,13 @@ module QA
end
private_class_method :evaluator
- def self.dynamic_attributes
- const_get(:DynamicAttributes)
- rescue NameError
- mod = const_set(:DynamicAttributes, Module.new)
-
- include mod
-
- mod
- end
-
class DSL
def initialize(base)
@base = base
end
def attribute(name, &block)
- @base.dynamic_attributes.module_eval do
+ @base.module_eval do
attr_writer(name)
define_method(name) do
diff --git a/qa/spec/resource/base_spec.rb b/qa/spec/resource/base_spec.rb
index b8c406ae72a..a2a3ad01749 100644
--- a/qa/spec/resource/base_spec.rb
+++ b/qa/spec/resource/base_spec.rb
@@ -213,6 +213,42 @@ describe QA::Resource::Base do
.to raise_error(described_class::NoValueError, "No value was computed for no_block of #{resource.class.name}.")
end
end
+
+ context 'when multiple resources have the same attribute name' do
+ let(:base) do
+ Class.new(QA::Resource::Base) do
+ def fabricate!
+ 'any'
+ end
+
+ def self.current_url
+ 'http://stub'
+ end
+ end
+ end
+ let(:first_resource) do
+ Class.new(base) do
+ attribute :test do
+ 'first block'
+ end
+ end
+ end
+ let(:second_resource) do
+ Class.new(base) do
+ attribute :test do
+ 'second block'
+ end
+ end
+ end
+
+ it 'has unique attribute values' do
+ first_result = first_resource.fabricate!(resource: first_resource.new)
+ second_result = second_resource.fabricate!(resource: second_resource.new)
+
+ expect(first_result.test).to eq 'first block'
+ expect(second_result.test).to eq 'second block'
+ end
+ end
end
describe '#web_url' do