Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2018-11-02 12:32:28 +0300
committerLin Jen-Shin <godfat@godfat.org>2018-11-05 17:20:57 +0300
commit4d0fd75cd5ceda72692a229d27ab6891fa8082e0 (patch)
tree7448b28ca974c9480e1e96b0d90c1322eeb9f0c7 /qa/spec/factory
parentc12a4a9ac7c04a215adf6062fec7bf31231c7d4a (diff)
Rename QA::Factory to QA::Resource
* Factory::Base -> Resource::Base, and therefore: * Factory::Resource::Project -> Resource::Project
Diffstat (limited to 'qa/spec/factory')
-rw-r--r--qa/spec/factory/api_fabricator_spec.rb161
-rw-r--r--qa/spec/factory/base_spec.rb246
-rw-r--r--qa/spec/factory/repository/push_spec.rb26
-rw-r--r--qa/spec/factory/resource/user_spec.rb2
4 files changed, 1 insertions, 434 deletions
diff --git a/qa/spec/factory/api_fabricator_spec.rb b/qa/spec/factory/api_fabricator_spec.rb
deleted file mode 100644
index e5fbc064911..00000000000
--- a/qa/spec/factory/api_fabricator_spec.rb
+++ /dev/null
@@ -1,161 +0,0 @@
-# frozen_string_literal: true
-
-describe QA::Factory::ApiFabricator do
- let(:factory_without_api_support) do
- Class.new do
- def self.name
- 'FooBarFactory'
- end
- end
- end
-
- let(:factory_with_api_support) do
- Class.new do
- def self.name
- 'FooBarFactory'
- end
-
- def api_get_path
- '/foo'
- end
-
- def api_post_path
- '/bar'
- end
-
- def api_post_body
- { name: 'John Doe' }
- end
- end
- end
-
- before do
- allow(subject).to receive(:current_url).and_return('')
- end
-
- subject { factory.tap { |f| f.include(described_class) }.new }
-
- describe '#api_support?' do
- let(:api_client) { spy('Runtime::API::Client') }
- let(:api_client_instance) { double('API Client') }
-
- context 'when factory does not support fabrication via the API' do
- let(:factory) { factory_without_api_support }
-
- it 'returns false' do
- expect(subject).not_to be_api_support
- end
- end
-
- context 'when factory supports fabrication via the API' do
- let(:factory) { factory_with_api_support }
-
- it 'returns false' do
- expect(subject).to be_api_support
- end
- end
- end
-
- describe '#fabricate_via_api!' do
- let(:api_client) { spy('Runtime::API::Client') }
- let(:api_client_instance) { double('API Client') }
-
- before do
- stub_const('QA::Runtime::API::Client', api_client)
-
- allow(api_client).to receive(:new).and_return(api_client_instance)
- allow(api_client_instance).to receive(:personal_access_token).and_return('foo')
- end
-
- context 'when factory does not support fabrication via the API' do
- let(:factory) { factory_without_api_support }
-
- it 'raises a NotImplementedError exception' do
- expect { subject.fabricate_via_api! }.to raise_error(NotImplementedError, "Factory FooBarFactory does not support fabrication via the API!")
- end
- end
-
- context 'when factory supports fabrication via the API' do
- let(:factory) { factory_with_api_support }
- let(:api_request) { spy('Runtime::API::Request') }
- let(:resource_web_url) { 'http://example.org/api/v4/foo' }
- let(:resource) { { id: 1, name: 'John Doe', web_url: resource_web_url } }
- let(:raw_post) { double('Raw POST response', code: 201, body: resource.to_json) }
-
- before do
- stub_const('QA::Runtime::API::Request', api_request)
-
- allow(api_request).to receive(:new).and_return(double(url: resource_web_url))
- end
-
- context 'when creating a resource' do
- before do
- allow(subject).to receive(:post).with(resource_web_url, subject.api_post_body).and_return(raw_post)
- end
-
- it 'returns the resource URL' do
- expect(api_request).to receive(:new).with(api_client_instance, subject.api_post_path).and_return(double(url: resource_web_url))
- expect(subject).to receive(:post).with(resource_web_url, subject.api_post_body).and_return(raw_post)
-
- expect(subject.fabricate_via_api!).to eq(resource_web_url)
- end
-
- it 'populates api_resource with the resource' do
- subject.fabricate_via_api!
-
- expect(subject.api_resource).to eq(resource)
- end
-
- context 'when the POST fails' do
- let(:post_response) { { error: "Name already taken." } }
- let(:raw_post) { double('Raw POST response', code: 400, body: post_response.to_json) }
-
- it 'raises a ResourceFabricationFailedError exception' do
- expect(api_request).to receive(:new).with(api_client_instance, subject.api_post_path).and_return(double(url: resource_web_url))
- expect(subject).to receive(:post).with(resource_web_url, subject.api_post_body).and_return(raw_post)
-
- expect { subject.fabricate_via_api! }.to raise_error(described_class::ResourceFabricationFailedError, "Fabrication of FooBarFactory using the API failed (400) with `#{raw_post}`.")
- expect(subject.api_resource).to be_nil
- end
- end
- end
-
- context '#transform_api_resource' do
- let(:factory) do
- Class.new do
- def self.name
- 'FooBarFactory'
- end
-
- def api_get_path
- '/foo'
- end
-
- def api_post_path
- '/bar'
- end
-
- def api_post_body
- { name: 'John Doe' }
- end
-
- def transform_api_resource(resource)
- resource[:new] = 'foobar'
- resource
- end
- end
- end
-
- let(:resource) { { existing: 'foo', web_url: resource_web_url } }
- let(:transformed_resource) { { existing: 'foo', new: 'foobar', web_url: resource_web_url } }
-
- it 'transforms the resource' do
- expect(subject).to receive(:post).with(resource_web_url, subject.api_post_body).and_return(raw_post)
- expect(subject).to receive(:transform_api_resource).with(resource).and_return(transformed_resource)
-
- subject.fabricate_via_api!
- end
- end
- end
- end
-end
diff --git a/qa/spec/factory/base_spec.rb b/qa/spec/factory/base_spec.rb
deleted file mode 100644
index 990eba76460..00000000000
--- a/qa/spec/factory/base_spec.rb
+++ /dev/null
@@ -1,246 +0,0 @@
-# frozen_string_literal: true
-
-describe QA::Factory::Base do
- include Support::StubENV
-
- let(:factory) { spy('factory') }
- let(:location) { 'http://location' }
-
- shared_context 'fabrication context' do
- subject do
- Class.new(described_class) do
- def self.name
- 'MyFactory'
- end
- end
- end
-
- before do
- allow(subject).to receive(:current_url).and_return(location)
- allow(subject).to receive(:new).and_return(factory)
- end
- end
-
- shared_examples 'fabrication method' do |fabrication_method_called, actual_fabrication_method = nil|
- let(:fabrication_method_used) { actual_fabrication_method || fabrication_method_called }
-
- it 'yields factory before calling factory method' do
- expect(factory).to receive(:something!).ordered
- expect(factory).to receive(fabrication_method_used).ordered.and_return(location)
-
- subject.public_send(fabrication_method_called, factory: factory) do |factory|
- factory.something!
- end
- end
-
- it 'does not log the factory and build method when QA_DEBUG=false' do
- stub_env('QA_DEBUG', 'false')
- expect(factory).to receive(fabrication_method_used).and_return(location)
-
- expect { subject.public_send(fabrication_method_called, 'something', factory: factory) }
- .not_to output.to_stdout
- end
- end
-
- describe '.fabricate!' do
- context 'when factory does not support fabrication via the API' do
- before do
- expect(described_class).to receive(:fabricate_via_api!).and_raise(NotImplementedError)
- end
-
- it 'calls .fabricate_via_browser_ui!' do
- expect(described_class).to receive(:fabricate_via_browser_ui!)
-
- described_class.fabricate!
- end
- end
-
- context 'when factory supports fabrication via the API' do
- it 'calls .fabricate_via_browser_ui!' do
- expect(described_class).to receive(:fabricate_via_api!)
-
- described_class.fabricate!
- end
- end
- end
-
- describe '.fabricate_via_api!' do
- include_context 'fabrication context'
-
- it_behaves_like 'fabrication method', :fabricate_via_api!
-
- it 'instantiates the factory, calls factory method returns the resource' do
- expect(factory).to receive(:fabricate_via_api!).and_return(location)
-
- result = subject.fabricate_via_api!(factory: factory, parents: [])
-
- expect(result).to eq(factory)
- end
-
- it 'logs the factory and build method when QA_DEBUG=true' do
- stub_env('QA_DEBUG', 'true')
- expect(factory).to receive(:fabricate_via_api!).and_return(location)
-
- expect { subject.fabricate_via_api!('something', factory: factory, parents: []) }
- .to output(/==> Built a MyFactory via api in [\d\.\-e]+ seconds+/)
- .to_stdout
- end
- end
-
- describe '.fabricate_via_browser_ui!' do
- include_context 'fabrication context'
-
- it_behaves_like 'fabrication method', :fabricate_via_browser_ui!, :fabricate!
-
- it 'instantiates the factory and calls factory method' do
- subject.fabricate_via_browser_ui!('something', factory: factory, parents: [])
-
- expect(factory).to have_received(:fabricate!).with('something')
- end
-
- it 'returns fabrication resource' do
- result = subject.fabricate_via_browser_ui!('something', factory: factory, parents: [])
-
- expect(result).to eq(factory)
- end
-
- it 'logs the factory and build method when QA_DEBUG=true' do
- stub_env('QA_DEBUG', 'true')
-
- expect { subject.fabricate_via_browser_ui!('something', factory: factory, parents: []) }
- .to output(/==> Built a MyFactory via browser_ui in [\d\.\-e]+ seconds+/)
- .to_stdout
- end
- end
-
- shared_context 'simple factory' do
- subject do
- Class.new(QA::Factory::Base) do
- attribute :test do
- 'block'
- end
-
- attribute :no_block
-
- def fabricate!
- 'any'
- end
-
- def self.current_url
- 'http://stub'
- end
- end
- end
-
- let(:factory) { subject.new }
- end
-
- describe '.attribute' do
- include_context 'simple factory'
-
- it 'appends new attribute' do
- expect(subject.attributes_names).to eq([:no_block, :test, :web_url])
- end
-
- context 'when the attribute is populated via a block' do
- it 'returns value from the block' do
- result = subject.fabricate!(factory: factory)
-
- expect(result).to be_a(described_class)
- expect(result.test).to eq('block')
- end
- end
-
- context 'when the attribute is populated via the api' do
- let(:api_resource) { { no_block: 'api' } }
-
- before do
- expect(factory).to receive(:api_resource).and_return(api_resource)
- end
-
- it 'returns value from api' do
- result = subject.fabricate!(factory: factory)
-
- expect(result).to be_a(described_class)
- expect(result.no_block).to eq('api')
- end
-
- context 'when the attribute also has a block' do
- let(:api_resource) { { test: 'api_with_block' } }
-
- before do
- allow(QA::Runtime::Logger).to receive(:info)
- end
-
- it 'returns value from api and emits an INFO log entry' do
- result = subject.fabricate!(factory: factory)
-
- expect(result).to be_a(described_class)
- expect(result.test).to eq('api_with_block')
- expect(QA::Runtime::Logger)
- .to have_received(:info).with(/api_with_block/)
- end
- end
- end
-
- context 'when the attribute is populated via direct assignment' do
- before do
- factory.test = 'value'
- end
-
- it 'returns value from the assignment' do
- result = subject.fabricate!(factory: factory)
-
- expect(result).to be_a(described_class)
- expect(result.test).to eq('value')
- end
-
- context 'when the api also has such response' do
- before do
- allow(factory).to receive(:api_resource).and_return({ test: 'api' })
- end
-
- it 'returns value from the assignment' do
- result = subject.fabricate!(factory: factory)
-
- expect(result).to be_a(described_class)
- expect(result.test).to eq('value')
- end
- end
- end
-
- context 'when the attribute has no value' do
- it 'raises an error because no values could be found' do
- result = subject.fabricate!(factory: factory)
-
- expect { result.no_block }
- .to raise_error(described_class::NoValueError, "No value was computed for no_block of #{factory.class.name}.")
- end
- end
- end
-
- describe '#web_url' do
- include_context 'simple factory'
-
- it 'sets #web_url to #current_url after fabrication' do
- subject.fabricate!(factory: factory)
-
- expect(factory.web_url).to eq(subject.current_url)
- end
- end
-
- describe '#visit!' do
- include_context 'simple factory'
-
- before do
- allow(factory).to receive(:visit)
- end
-
- it 'calls #visit with the underlying #web_url' do
- factory.web_url = subject.current_url
- factory.visit!
-
- expect(factory).to have_received(:visit).with(subject.current_url)
- end
- end
-end
diff --git a/qa/spec/factory/repository/push_spec.rb b/qa/spec/factory/repository/push_spec.rb
deleted file mode 100644
index 2eb6c008248..00000000000
--- a/qa/spec/factory/repository/push_spec.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-# frozen_string_literal: true
-
-describe QA::Factory::Repository::Push do
- describe '.files=' do
- let(:files) do
- [
- {
- name: 'file.txt',
- content: 'foo'
- }
- ]
- end
-
- it 'raises an error if files is not an array' do
- expect { subject.files = '' }.to raise_error(ArgumentError)
- end
-
- it 'raises an error if files is an empty array' do
- expect { subject.files = [] }.to raise_error(ArgumentError)
- end
-
- it 'does not raise if files is an array' do
- expect { subject.files = files }.not_to raise_error
- end
- end
-end
diff --git a/qa/spec/factory/resource/user_spec.rb b/qa/spec/factory/resource/user_spec.rb
index 2f6c59b3e69..820c506b715 100644
--- a/qa/spec/factory/resource/user_spec.rb
+++ b/qa/spec/factory/resource/user_spec.rb
@@ -1,6 +1,6 @@
# frozen_string_literal: true
-describe QA::Factory::Resource::User do
+describe QA::Resource::User do
describe "#fabricate_via_api!" do
Response = Struct.new(:code, :body)