require "rails_helper"

describe ManagerAuthenticator do
  let(:authenticator) do
    ManagerAuthenticator.new(login: "JJB033", clave_usuario: "31415926", fecha_conexion: "20151031135905")
  end

  describe "initialization params" do
    it "causes auth to return false if blank login" do
      blank_login_authenticator = ManagerAuthenticator.new(
        login: "",
        clave_usuario: "31415926",
        fecha_conexion: "20151031135905"
      )

      expect(blank_login_authenticator.auth).to be false
    end

    it "causes auth to return false if blank user_key" do
      blank_user_key_authenticator = ManagerAuthenticator.new(
        login: "JJB033",
        clave_usuario: "",
        fecha_conexion: "20151031135905"
      )

      expect(blank_user_key_authenticator.auth).to be false
    end

    it "causes auth to return false if blank date" do
      blank_date_authenticator = ManagerAuthenticator.new(
        login: "JJB033",
        clave_usuario: "31415926",
        fecha_conexion: ""
      )

      expect(blank_date_authenticator.auth).to be false
    end
  end

  describe "#auth" do
    it "returns false if not manager_exists" do
      allow(authenticator).to receive_messages(manager_exists?: false, application_authorized?: true)

      expect(authenticator.auth).to be false
    end

    it "returns false if not application_authorized" do
      allow(authenticator).to receive_messages(manager_exists?: true, application_authorized?: false)

      expect(authenticator.auth).to be false
    end

    it "returns ok if manager_exists and application_authorized" do
      allow(authenticator).to receive_messages(manager_exists?: true, application_authorized?: true)

      expect(authenticator.auth).to be_truthy
    end
  end

  describe "SOAP" do
    it "calls the verification user method" do
      message = { ub: { user_key: "31415926", date: "20151031135905" }}
      allow(authenticator).to receive(:application_authorized?).and_return(true)
      allow(authenticator.send(:client)).to receive(:call).with(:get_status_user_data, message: message)
      authenticator.auth
    end

    it "calls the permissions check method" do
      allow(authenticator).to receive(:manager_exists?).and_return(true)
      allow(authenticator.send(:client)).to receive(:call).with(:get_applications_user_list,
                                                                message: { ub: { user_key: "31415926" }})
      authenticator.auth
    end
  end
end
