spec/connectors/gitlab/connector_spec.rb (105 lines of code) (raw):

# frozen_string_literal: true require 'connectors/gitlab/connector' require 'connectors/gitlab/custom_client' require 'core/filtering/validation_status' require 'spec_helper' describe Connectors::GitLab::Connector do let(:user_json) { connectors_fixture_raw('gitlab/user.json') } let(:base_url) { Connectors::GitLab::DEFAULT_BASE_URL } let(:config) do { :base_url => { :value => base_url }, :api_key => { :value => 'some_token' } } end let(:advanced_config) { {} } let(:filtering) { { :advanced_config => advanced_config } } subject do Connectors::GitLab::Connector.new(configuration: config) end it_behaves_like 'a connector' describe '.validate_filtering' do context 'filtering is not present' do let(:filtering) { {} } it_behaves_like 'filtering is valid' end context 'filtering is present' do let(:filtering) { { :advanced_config => advanced_config } } it_behaves_like 'filtering is valid' end end describe '#is_healthy?' do it 'correctly returns true on 200' do stub_request(:get, "#{base_url}/user") .to_return(:status => 200, :body => user_json) result = subject.is_healthy? expect(result).to eq(true) end it 'correctly returns false on 401' do stub_request(:get, "#{base_url}/user") .to_return(:status => 401, :body => '{ "error": "wrong token" }') result = subject.is_healthy? expect(result).to eq(false) end it 'correctly returns false on 400' do stub_request(:get, "#{base_url}/user") .to_return(:status => 401, :body => '{ "error": "wrong token" }') result = subject.is_healthy? expect(result).to eq(false) end end describe '#yield_documents' do let(:page_count) { 3 } let(:page_size) { 100 } let(:first_page_next_page_link) { 'https://next.page/1' } let(:second_page_next_page_link) { 'https://next.page/2' } let(:third_page_next_page_link) { 'https://next.page/3' } let(:extractor) { double } def create_data_page(ids) ids.map do |id| { :id => id, :something => "something-#{id}" } end end before(:each) do allow(Connectors::GitLab::Extractor).to receive(:new).and_return(extractor) allow(extractor) .to receive(:yield_projects_page) .with(nil) .and_yield(create_data_page(1..page_size)) .and_return(first_page_next_page_link) allow(extractor) .to receive(:yield_projects_page) .with(first_page_next_page_link) .and_yield(create_data_page(page_size + 1..page_size * 2)) .and_return(second_page_next_page_link) allow(extractor) .to receive(:yield_projects_page) .with(second_page_next_page_link) .and_yield(create_data_page(page_size * 2 + 1..page_size * 3)) .and_return(third_page_next_page_link) allow(extractor) .to receive(:yield_projects_page) .with(third_page_next_page_link) .and_return(nil) end it 'extracts all documents' do docs = [] subject.yield_documents { |doc| docs << doc } expect(docs.size).to eq(page_count * page_size) end end end