# coding: utf-8
require 'helper'

describe Twitter::Media::Photo do

  describe '#==' do
    it 'returns true when objects IDs are the same' do
      photo = Twitter::Media::Photo.new(:id => 1)
      other = Twitter::Media::Photo.new(:id => 1)
      expect(photo == other).to be true
    end
    it 'returns false when objects IDs are different' do
      photo = Twitter::Media::Photo.new(:id => 1)
      other = Twitter::Media::Photo.new(:id => 2)
      expect(photo == other).to be false
    end
    it 'returns false when classes are different' do
      photo = Twitter::Media::Photo.new(:id => 1)
      other = Twitter::Identity.new(:id => 1)
      expect(photo == other).to be false
    end
  end

  describe '#sizes' do
    it 'returns a hash of Sizes when sizes is set' do
      sizes = Twitter::Media::Photo.new(:id => 110_102_452_988_157_952, :sizes => {:small => {:h => 226, :w => 340, :resize => 'fit'}, :large => {:h => 466, :w => 700, :resize => 'fit'}, :medium => {:h => 399, :w => 600, :resize => 'fit'}, :thumb => {:h => 150, :w => 150, :resize => 'crop'}}).sizes
      expect(sizes).to be_a Hash
      expect(sizes[:small]).to be_a Twitter::Size
    end
    it 'is empty when sizes is not set' do
      sizes = Twitter::Media::Photo.new(:id => 110_102_452_988_157_952).sizes
      expect(sizes).to be_empty
    end
  end

  describe '#display_uri' do
    it 'returns a String when the display_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :display_url => 'example.com/expanded…')
      expect(photo.display_uri).to be_a String
      expect(photo.display_uri).to eq('example.com/expanded…')
    end
    it 'returns nil when the display_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.display_uri).to be_nil
    end
  end

  describe '#display_uri?' do
    it 'returns true when the display_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :display_url => 'example.com/expanded…')
      expect(photo.display_uri?).to be true
    end
    it 'returns false when the display_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.display_uri?).to be false
    end
  end

  describe '#expanded_uri' do
    it 'returns a URI when the expanded_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :expanded_url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.expanded_uri).to be_an Addressable::URI
      expect(photo.expanded_uri.to_s).to eq('http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
    end
    it 'returns nil when the expanded_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.expanded_uri).to be_nil
    end
  end

  describe '#expanded_uri?' do
    it 'returns true when the expanded_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :expanded_url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.expanded_uri?).to be true
    end
    it 'returns false when the expanded_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.expanded_uri?).to be false
    end
  end

  describe '#media_uri' do
    it 'returns a URI when the media_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :media_url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.media_uri).to be_an Addressable::URI
      expect(photo.media_uri.to_s).to eq('http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
    end
    it 'returns nil when the media_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.media_uri).to be_nil
    end
  end

  describe '#media_uri?' do
    it 'returns true when the media_url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :media_url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.media_uri?).to be true
    end
    it 'returns false when the media_url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.media_uri?).to be false
    end
  end

  describe '#media_uri_https' do
    it 'returns a URI when the media_url_https is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :media_url_https => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.media_uri_https).to be_an Addressable::URI
      expect(photo.media_uri_https.to_s).to eq('http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
    end
    it 'returns nil when the media_url_https is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.media_uri_https).to be_nil
    end
  end

  describe '#media_uri_https?' do
    it 'returns true when the media_url_https is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :media_url_https => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.media_uri_https?).to be true
    end
    it 'returns false when the media_url_https is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.media_uri_https?).to be false
    end
  end

  describe '#uri' do
    it 'returns a URI when the url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.uri).to be_an Addressable::URI
      expect(photo.uri.to_s).to eq('http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
    end
    it 'returns nil when the url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.uri).to be_nil
    end
  end

  describe '#uri?' do
    it 'returns true when the url is set' do
      photo = Twitter::Media::Photo.new(:id => 1, :url => 'http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png')
      expect(photo.uri?).to be true
    end
    it 'returns false when the url is not set' do
      photo = Twitter::Media::Photo.new(:id => 1)
      expect(photo.uri?).to be false
    end
  end

end
