summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-01-11 12:00:22 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-01-11 12:00:22 +0100
commita3ab8aa3bbcf83c80e8f6195994bd531507e7348 (patch)
treea23923382eaf67e8c7a8cfb3803a94a83dd280ba /qa
parentd32a151714c01bc09484d423dd2136a89760b5ef (diff)
downloadgitlab-ce-a3ab8aa3bbcf83c80e8f6195994bd531507e7348.tar.gz
Populate QA factory product with data from a page
Diffstat (limited to 'qa')
-rw-r--r--qa/qa/factory/base.rb4
-rw-r--r--qa/qa/factory/product.rb15
-rw-r--r--qa/spec/factory/base_spec.rb28
-rw-r--r--qa/spec/factory/product_spec.rb21
4 files changed, 37 insertions, 31 deletions
diff --git a/qa/qa/factory/base.rb b/qa/qa/factory/base.rb
index c7202d4ae65..bd66b74a164 100644
--- a/qa/qa/factory/base.rb
+++ b/qa/qa/factory/base.rb
@@ -13,7 +13,7 @@ module QA
end
def self.fabricate!(*args)
- Factory::Product.populate!(new) do |factory|
+ new.tap do |factory|
yield factory if block_given?
dependencies.each do |name, signature|
@@ -21,6 +21,8 @@ module QA
end
factory.fabricate!(*args)
+
+ return Factory::Product.populate!(self)
end
end
diff --git a/qa/qa/factory/product.rb b/qa/qa/factory/product.rb
index 2558350f8a3..d004e642f9b 100644
--- a/qa/qa/factory/product.rb
+++ b/qa/qa/factory/product.rb
@@ -7,8 +7,7 @@ module QA
Attribute = Struct.new(:name, :block)
- def initialize(factory)
- @factory = factory
+ def initialize
@location = current_url
end
@@ -17,11 +16,13 @@ module QA
end
def self.populate!(factory)
- raise ArgumentError unless block_given?
-
- yield factory
-
- new(factory)
+ new.tap do |product|
+ factory.attributes.each_value do |attribute|
+ product.instance_exec(&attribute.block).tap do |value|
+ product.define_singleton_method(attribute.name) { value }
+ end
+ end
+ end
end
end
end
diff --git a/qa/spec/factory/base_spec.rb b/qa/spec/factory/base_spec.rb
index d7cb9a770b5..90dd58e20fd 100644
--- a/qa/spec/factory/base_spec.rb
+++ b/qa/spec/factory/base_spec.rb
@@ -1,8 +1,9 @@
describe QA::Factory::Base do
+ let(:factory) { spy('factory') }
+ let(:product) { spy('product') }
+
describe '.fabricate!' do
subject { Class.new(described_class) }
- let(:factory) { spy('factory') }
- let(:product) { spy('product') }
before do
allow(QA::Factory::Product).to receive(:new).and_return(product)
@@ -89,14 +90,33 @@ describe QA::Factory::Base do
describe '.product' do
subject do
Class.new(described_class) do
- product :token do |factory, page|
- page.do_something!
+ product :token do
+ page.do_something_on_page!
+ 'resulting value'
end
end
end
it 'appends new product attribute' do
expect(subject.attributes).to be_one
+ expect(subject.attributes).to have_key(:token)
+ end
+
+ describe 'populating fabrication product with data' do
+ let(:page) { spy('page') }
+
+ before do
+ allow(subject).to receive(:new).and_return(factory)
+ allow(QA::Factory::Product).to receive(:new).and_return(product)
+ allow(product).to receive(:page).and_return(page)
+ end
+
+ it 'populates product after fabrication' do
+ subject.fabricate!
+
+ expect(page).to have_received(:do_something_on_page!)
+ expect(product.token).to eq 'resulting value'
+ end
end
end
end
diff --git a/qa/spec/factory/product_spec.rb b/qa/spec/factory/product_spec.rb
index 3d9e86a641b..fdfb1ec90cc 100644
--- a/qa/spec/factory/product_spec.rb
+++ b/qa/spec/factory/product_spec.rb
@@ -3,19 +3,8 @@ describe QA::Factory::Product do
let(:product) { spy('product') }
describe '.populate!' do
- it 'instantiates and yields factory' do
- expect(described_class).to receive(:new).with(factory)
-
- described_class.populate!(factory) do |instance|
- instance.something = 'string'
- end
-
- expect(factory).to have_received(:something=).with('string')
- end
-
it 'returns a fabrication product' do
- expect(described_class).to receive(:new)
- .with(factory).and_return(product)
+ expect(described_class).to receive(:new).and_return(product)
result = described_class.populate!(factory) do |instance|
instance.something = 'string'
@@ -23,11 +12,6 @@ describe QA::Factory::Product do
expect(result).to be product
end
-
- it 'raises unless block given' do
- expect { described_class.populate!(factory) }
- .to raise_error ArgumentError
- end
end
describe '.visit!' do
@@ -37,8 +21,7 @@ describe QA::Factory::Product do
allow_any_instance_of(described_class)
.to receive(:visit).and_return('visited some url')
- expect(described_class.new(factory).visit!)
- .to eq 'visited some url'
+ expect(subject.visit!).to eq 'visited some url'
end
end
end