Sha256: 6d84741c8428b78a262e27dab386daef5895866c1452eae9455feaf3a086bf1d

Contents?: true

Size: 1.64 KB

Versions: 2

Compression:

Stored size: 1.64 KB

Contents

# frozen_string_literal: true

require 'spec_helper'

describe ProxyFetcher::Providers::Base do
  before { ProxyFetcher.config.reset! }
  after { ProxyFetcher.config.reset! }

  it 'does not allows to use not implemented methods' do
    NotImplementedCustomProvider = Class.new(ProxyFetcher::Providers::Base)

    ProxyFetcher::Configuration.register_provider(:provider_without_methods, NotImplementedCustomProvider)
    ProxyFetcher.config.provider = :provider_without_methods

    expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
      expect(error.message).to include('load_proxy_list')
    end

    # implement one of the methods
    NotImplementedCustomProvider.class_eval do
      def load_proxy_list(*)
        [1, 2, 3]
      end
    end

    expect { ProxyFetcher::Manager.new }.to raise_error(NotImplementedError) do |error|
      expect(error.message).to include('to_proxy')
    end
  end

  it 'logs failed to load proxy providers' do
    CustomProvider = Class.new(ProxyFetcher::Providers::Base) do
      def load_proxy_list(*)
        doc = load_document('https://google.com', {})
        doc.xpath('//table[contains(@class, "table")]/tr[(not(@id="proxy-table-header")) and (count(td)>2)]')
      end
    end

    logger = Logger.new(StringIO.new)

    ProxyFetcher::Configuration.register_provider(:custom_provider, CustomProvider)
    ProxyFetcher.config.provider = :custom_provider
    ProxyFetcher.config.logger = logger

    allow_any_instance_of(HTTP::Client).to receive(:get).and_raise(StandardError)

    expect(logger).to receive(:warn).with(/Failed to process request to http[s:\/]/)

    ProxyFetcher::Manager.new
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
proxy_fetcher-0.10.2 spec/proxy_fetcher/providers/base_spec.rb
proxy_fetcher-0.10.1 spec/proxy_fetcher/providers/base_spec.rb