diff options
Diffstat (limited to 'spec/lib/gitlab/zentao/client_spec.rb')
-rw-r--r-- | spec/lib/gitlab/zentao/client_spec.rb | 70 |
1 files changed, 49 insertions, 21 deletions
diff --git a/spec/lib/gitlab/zentao/client_spec.rb b/spec/lib/gitlab/zentao/client_spec.rb index e3a335c1e89..86b310fe417 100644 --- a/spec/lib/gitlab/zentao/client_spec.rb +++ b/spec/lib/gitlab/zentao/client_spec.rb @@ -6,7 +6,23 @@ RSpec.describe Gitlab::Zentao::Client do subject(:integration) { described_class.new(zentao_integration) } let(:zentao_integration) { create(:zentao_integration) } - let(:mock_get_products_url) { integration.send(:url, "products/#{zentao_integration.zentao_product_xid}") } + + def mock_get_products_url + integration.send(:url, "products/#{zentao_integration.zentao_product_xid}") + end + + def mock_fetch_issue_url(issue_id) + integration.send(:url, "issues/#{issue_id}") + end + + let(:mock_headers) do + { + headers: { + 'Content-Type' => 'application/json', + 'Token' => zentao_integration.api_token + } + } + end describe '#new' do context 'if integration is nil' do @@ -25,15 +41,6 @@ RSpec.describe Gitlab::Zentao::Client do end describe '#fetch_product' do - let(:mock_headers) do - { - headers: { - 'Content-Type' => 'application/json', - 'Token' => zentao_integration.api_token - } - } - end - context 'with valid product' do let(:mock_response) { { 'id' => zentao_integration.zentao_product_xid } } @@ -54,7 +61,9 @@ RSpec.describe Gitlab::Zentao::Client do end it 'fetches the empty product' do - expect(integration.fetch_product(zentao_integration.zentao_product_xid)).to eq({}) + expect do + integration.fetch_product(zentao_integration.zentao_product_xid) + end.to raise_error(Gitlab::Zentao::Client::Error, 'request error') end end @@ -65,21 +74,14 @@ RSpec.describe Gitlab::Zentao::Client do end it 'fetches the empty product' do - expect(integration.fetch_product(zentao_integration.zentao_product_xid)).to eq({}) + expect do + integration.fetch_product(zentao_integration.zentao_product_xid) + end.to raise_error(Gitlab::Zentao::Client::Error, 'invalid response format') end end end describe '#ping' do - let(:mock_headers) do - { - headers: { - 'Content-Type' => 'application/json', - 'Token' => zentao_integration.api_token - } - } - end - context 'with valid resource' do before do WebMock.stub_request(:get, mock_get_products_url) @@ -102,4 +104,30 @@ RSpec.describe Gitlab::Zentao::Client do end end end + + describe '#fetch_issue' do + context 'with invalid id' do + let(:invalid_ids) { ['story', 'story-', '-', '123', ''] } + + it 'returns empty object' do + invalid_ids.each do |id| + expect { integration.fetch_issue(id) } + .to raise_error(Gitlab::Zentao::Client::Error, 'invalid issue id') + end + end + end + + context 'with valid id' do + let(:valid_ids) { %w[story-1 bug-23] } + + it 'fetches current issue' do + valid_ids.each do |id| + WebMock.stub_request(:get, mock_fetch_issue_url(id)) + .with(mock_headers).to_return(status: 200, body: { issue: { id: id } }.to_json) + + expect(integration.fetch_issue(id).dig('issue', 'id')).to eq id + end + end + end + end end |