// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <string>
#include <vector>

#include "build/branding_buildflags.h"
#include "chrome/browser/ash/login/test/session_manager_state_waiter.h"
#include "chrome/test/base/chromeos/crosier/ash_integration_test.h"
#include "chrome/test/base/chromeos/crosier/chromeos_integration_login_mixin.h"

class LoginIntegrationTest : public AshIntegrationTest {
 public:
  LoginIntegrationTest() {
    set_exit_when_last_browser_closes(false);

    login_mixin().SetMode(ChromeOSIntegrationLoginMixin::Mode::kTestLogin);
  }

  LoginIntegrationTest(const LoginIntegrationTest&) = delete;
  LoginIntegrationTest& operator=(const LoginIntegrationTest&) = delete;

  ~LoginIntegrationTest() override = default;
};

IN_PROC_BROWSER_TEST_F(LoginIntegrationTest, TestLogin) {
  login_mixin().Login();

  // Waits for the primary user session to start.
  ash::test::WaitForPrimaryUserSessionStart();

  EXPECT_TRUE(login_mixin().IsCryptohomeMounted());
}

#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Gaia login is only supported for branded build.
class GaiaLoginIntegrationTest : public AshIntegrationTest {
 public:
  GaiaLoginIntegrationTest() {
    set_exit_when_last_browser_closes(false);

    // Allows network access for production Gaia.
    SetAllowNetworkAccessToHostResolutions();

    login_mixin().SetMode(ChromeOSIntegrationLoginMixin::Mode::kGaiaLogin);
  }

  GaiaLoginIntegrationTest(const GaiaLoginIntegrationTest&) = delete;
  GaiaLoginIntegrationTest& operator=(const GaiaLoginIntegrationTest&) = delete;

  ~GaiaLoginIntegrationTest() override = default;
};

// TODO: b/484110852 - Re-enable this test once the flakiness is fixed.
IN_PROC_BROWSER_TEST_F(GaiaLoginIntegrationTest, DISABLED_GaiaLogin) {
  login_mixin().Login();

  // Waits for the primary user session to start.
  ash::test::WaitForPrimaryUserSessionStart();

  EXPECT_TRUE(login_mixin().IsCryptohomeMounted());
}
#endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
