require 'test/unit'

require 'myspace'

require 'myspace_test'

class TC_Profile < Test::Unit::TestCase
  include MySpaceTest

  def test_userid
    user_id = nil
    assert_nothing_raised do
      user_id = @myspace.get_userid
    end
    assert_instance_of(String, user_id)
    assert_equal(USER_ID, user_id)
  end

  def test_profile
    obj = nil
    BAD_IDS.each do |value|
      assert_raise(MySpace::BadIdentifier) do
        obj = @myspace.get_profile(value)
      end
    end
    assert_nothing_raised do
      obj = @myspace.get_profile(USER_ID)
    end
    assert_instance_of(Hash, obj)
    basic_profile = obj['basicprofile']
    assert_instance_of(Hash, basic_profile)
    name = basic_profile['name']
    assert_instance_of(String, name)
    assert_equal("Bob", name)
    uri = basic_profile['uri']
    assert_instance_of(String, uri)
    assert_equal("http://api.myspace.com/v1/users/456073223", uri)
    web_uri = basic_profile['webUri']
    assert_instance_of(String, web_uri)
    assert_equal("http://www.myspace.com/bobvontestacount", web_uri)
    large_image = basic_profile['largeImage']
    assert_instance_of(String, large_image)
    assert_equal("http://c1.ac-images.myspacecdn.com/images02/45/l_f820313641924f0f90004932c8bc310c.jpg", large_image)
    image = basic_profile['image']
    assert_instance_of(String, image)
    assert_equal("http://c1.ac-images.myspacecdn.com/images02/45/s_f820313641924f0f90004932c8bc310c.jpg", image)
  end

  def test_mood
    obj = nil
    BAD_IDS.each do |value|
      assert_raise(MySpace::BadIdentifier) do
        obj = @myspace.get_mood(value)
      end
    end
    assert_nothing_raised do
      obj = @myspace.get_mood(USER_ID)
    end
    assert_instance_of(Hash, obj)
    mood = obj['mood']
    assert_instance_of(String, mood)
    assert_equal("tested", mood)
    mood_image = obj['moodImageUrl']
    assert_instance_of(String, mood_image)
    assert_equal("http://x.myspacecdn.com/images/blog/moods/iBrads/confused.gif", mood_image)
  end

  def test_status
    obj = nil
    BAD_IDS.each do |value|
      assert_raise(MySpace::BadIdentifier) do
        obj = @myspace.get_status(value)
      end
    end
    assert_nothing_raised do
      obj = @myspace.get_status(USER_ID)
    end
    assert_instance_of(Hash, obj)
    status = obj['status']
    assert_instance_of(String, status)
    # assert_equal("Testing", status)

    assert_nothing_raised do
      @myspace.set_status(USER_ID, "Updating!")
    end

    assert_passes_eventually do |result|
      assert_nothing_raised do
        obj = @myspace.get_status(USER_ID)
      end
      assert_instance_of(Hash, obj)
      status = obj['status']
      assert_instance_of(String, status)
      result.passed = true if status == "Updating!"
    end

    # passed = false
    # 10.times do
    #   assert_nothing_raised do
    #     obj = @myspace.get_status(USER_ID)
    #   end
    #   assert_instance_of(Hash, obj)
    #   status = obj['status']
    #   assert_instance_of(String, status)
    #   if status == "Updating!"
    #     passed = true
    #     break
    #   end
    #   sleep(0.1)
    # end
    # assert(passed)

    assert_nothing_raised do
      @myspace.set_status(USER_ID, "Testing")
    end
  end
end