# frozen_string_literal: true

describe "discourse login client auth" do
  include OmniauthHelpers

  before do
    OmniAuth.config.test_mode = true
    SiteSetting.discourse_id_client_id = "asdasd"
    SiteSetting.discourse_id_client_secret = "wadayathink"
    SiteSetting.enable_discourse_id = true

    OmniAuth.config.mock_auth[:discourse_id] = OmniAuth::AuthHash.new(
      provider: "discourse_id",
      uid: OmniauthHelpers::UID,
      info:
        OmniAuth::AuthHash::InfoHash.new(
          email: OmniauthHelpers::EMAIL,
          nickname: OmniauthHelpers::USERNAME,
        ),
    )
  end

  after { reset_omniauth_config(:discourse_id) }

  let(:signup_form) { PageObjects::Pages::Signup.new }

  context "when user does not exist" do
    context "when auth_skip_create_confirm is false" do
      before { SiteSetting.auth_skip_create_confirm = false }

      it "skips the signup form and creates the account directly" do
        visit("/")
        signup_form.open.click_social_button("discourse_id")
        expect(page).to have_css(".login-welcome-header")
      end
    end

    context "when auth_skip_create_confirm is true" do
      before { SiteSetting.auth_skip_create_confirm = true }

      it "skips the signup form and creates the account directly" do
        visit("/")
        signup_form.open.click_social_button("discourse_id")
        expect(page).to have_css(".header-dropdown-toggle.current-user")
      end
    end
  end

  context "when user exists" do
    fab!(:user) do
      Fabricate(:user, email: OmniauthHelpers::EMAIL, username: OmniauthHelpers::USERNAME)
    end

    it "logs in user" do
      visit("/")
      signup_form.open.click_social_button("discourse_id")
      expect(page).to have_css(".header-dropdown-toggle.current-user")
    end
  end
end
