require 'rails_helper'

# In the ghetto ... getting the spec to run in autospec
#  thing is we need to load up all auth really early pre-fork
#  it means that the require is not going to get a new copy
Auth.send(:remove_const, :FacebookAuthenticator)
load 'auth/facebook_authenticator.rb'

describe Auth::FacebookAuthenticator do

  context 'after_authenticate' do
    it 'can authenticate and create a user record for already existing users' do
      authenticator = Auth::FacebookAuthenticator.new
      user = Fabricate(:user)

      hash = {
        "extra" => {
            "raw_info" => {
            "username" => "bob"
          }
        },
        "info" => {
          :email => user.email,
          "location" => "America",
          "description" => "bio",
          "urls" => {
            "Website" => "https://awesome.com"
          }
        },
        "uid" => "100"
      }

      result = authenticator.after_authenticate(hash)

      expect(result.user.id).to eq(user.id)
      expect(result.user.user_profile.website).to eq("https://awesome.com")
      expect(result.user.user_profile.bio_raw).to eq("bio")
      expect(result.user.user_profile.location).to eq("America")
    end

    it 'can create a proper result for non existing users' do

      hash = {
        "extra" => {
            "raw_info" => {
            "username" => "bob",
            "name" => "bob bob"
          }
        },
        "info" => {
          email: "bob@bob.com"
        },
        "uid" => "100"
      }

      authenticator = Auth::FacebookAuthenticator.new

      result = authenticator.after_authenticate(hash)

      expect(result.user).to eq(nil)
      expect(result.extra_data[:name]).to eq("bob bob")
    end
  end

end
