require 'helper'

describe Twitter::REST::Trends do
  before do
    @client = Twitter::REST::Client.new(consumer_key: 'CK', consumer_secret: 'CS', access_token: 'AT', access_token_secret: 'AS')
  end

  describe '#trends' do
    context 'with woeid passed' do
      before do
        stub_get('/1.1/trends/place.json').with(query: {id: '2487956'}).to_return(body: fixture('matching_trends.json'), headers: {content_type: 'application/json; charset=utf-8'})
      end
      it 'requests the correct resource' do
        @client.trends(2_487_956)
        expect(a_get('/1.1/trends/place.json').with(query: {id: '2487956'})).to have_been_made
      end
      it 'returns the top 10 trending topics for a specific WOEID' do
        matching_trends = @client.trends(2_487_956)
        expect(matching_trends).to be_a Twitter::TrendResults
        expect(matching_trends.first).to be_a Twitter::Trend
        expect(matching_trends.first.name).to eq('#sevenwordsaftersex')
      end
    end
    context 'without arguments passed' do
      before do
        stub_get('/1.1/trends/place.json').with(query: {id: '1'}).to_return(body: fixture('matching_trends.json'), headers: {content_type: 'application/json; charset=utf-8'})
      end
      it 'requests the correct resource' do
        @client.trends
        expect(a_get('/1.1/trends/place.json').with(query: {id: '1'})).to have_been_made
      end
    end
  end

  describe '#trends_available' do
    before do
      stub_get('/1.1/trends/available.json').to_return(body: fixture('locations.json'), headers: {content_type: 'application/json; charset=utf-8'})
    end
    it 'requests the correct resource' do
      @client.trends_available
      expect(a_get('/1.1/trends/available.json')).to have_been_made
    end
    it 'returns the locations that Twitter has trending topic information for' do
      locations = @client.trends_available
      expect(locations).to be_an Array
      expect(locations.first).to be_a Twitter::Place
      expect(locations.first.name).to eq('Ireland')
    end
  end

  describe '#trends_closest' do
    before do
      stub_get('/1.1/trends/closest.json').to_return(body: fixture('locations.json'), headers: {content_type: 'application/json; charset=utf-8'})
    end
    it 'requests the correct resource' do
      @client.trends_closest
      expect(a_get('/1.1/trends/closest.json')).to have_been_made
    end
    it 'returns the locations that Twitter has trending topic information for' do
      locations = @client.trends_closest
      expect(locations).to be_an Array
      expect(locations.first).to be_a Twitter::Place
      expect(locations.first.name).to eq('Ireland')
    end
  end
end
