require "spec_helper"
describe RandomOrgHttpApi::Generator do

  before(:all) do
    @generator = RandomOrgHttpApi::Generator.new
  end

  describe '#insert_params' do
    it 'should do insert params in string' do
      params = {name: 'World'}
      string = 'Hello %{name}'
      expect(@generator.send(:insert_params, params, string)).to eq('Hello World')
    end
  end

  describe '#permit_params' do
    it 'should do permit only required params' do
      params = {a: 'A', b: 'B', c: 'C'}
      required_keys = [:a, :b]
      expect(@generator.send(:permit_params, params, required_keys)).to eq({a: 'A', b: 'B'})
    end
  end

  describe '#query' do
    it 'should do generate right query for integer' do
      object_type = 'integer'
      params = {num: 4, max: 100}
      right_query = '/integers/?num=4&min=1&max=100&col=1&base=10&format=plain&rnd=new'
      expect(@generator.send(:query, object_type, params)).to eq(right_query)
    end

    it 'should do generate right query for string' do
      object_type = 'string'
      params = {min: 1, max: 10, num: 3, len: 5}
      right_query = '/strings/?num=3&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
      expect(@generator.send(:query, object_type, params)).to eq(right_query)
    end

    it 'should do generate right query for sequence' do
      object_type = 'sequence'
      params = {num: 5, len: 10, max: 10}
      right_query = '/sequences/?min=1&max=10&col=1&format=plain&rnd=new'
      expect(@generator.send(:query, object_type, params)).to eq(right_query)
    end
  end

  describe '#request' do
    domain = 'www.random.org'

    it 'should do string with error message if request have bad response' do
      bad_query = '/strings/?num=HelloWorld&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
      expect(@generator.send(:request, domain, bad_query).class).to eq(String)
    end

    it 'should do return array if request have good response' do
      if @generator.quota > 0
        good_query = '/strings/?num=3&len=5&digits=on&upperalpha=on&loweralpha=on&unique=on&format=plain&rnd=new'
        expect(@generator.send(:request, domain, good_query).class).to eq(Array)
      end
    end
  end

end