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

#include "chrome/browser/webid/identity_provider_permission_request.h"

#include <memory>
#include <variant>

#include "base/test/mock_callback.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
#include "url/origin.h"

class IdentityProviderPermissionRequestTest : public testing::Test {
 public:
  IdentityProviderPermissionRequestTest() = default;
  ~IdentityProviderPermissionRequestTest() override = default;
  IdentityProviderPermissionRequestTest(
      IdentityProviderPermissionRequestTest&) = delete;
  IdentityProviderPermissionRequestTest& operator=(
      IdentityProviderPermissionRequestTest&) = delete;

  void SetUp() override {}
};

TEST_F(IdentityProviderPermissionRequestTest, PermissionGranted) {
  base::MockCallback<base::OnceCallback<void(bool accepted)>> callback;
  EXPECT_CALL(callback, Run(true)).WillOnce(testing::Return());
  auto request = std::make_unique<IdentityProviderPermissionRequest>(
      url::Origin::Create(GURL("https://idp.example")), callback.Get());
  request->PermissionGranted(/*prompt_options=*/std::monostate(),
                             /*is_one_time=*/false);
}

TEST_F(IdentityProviderPermissionRequestTest, PermissionDenied) {
  base::MockCallback<base::OnceCallback<void(bool accepted)>> callback;
  EXPECT_CALL(callback, Run(false)).WillOnce(testing::Return());
  auto request = std::make_unique<IdentityProviderPermissionRequest>(
      url::Origin::Create(GURL("https://idp.example")), callback.Get());
  request->PermissionDenied();
}

TEST_F(IdentityProviderPermissionRequestTest, PermissionCancelled) {
  base::MockCallback<base::OnceCallback<void(bool accepted)>> callback;
  EXPECT_CALL(callback, Run(false)).WillOnce(testing::Return());
  auto request = std::make_unique<IdentityProviderPermissionRequest>(
      url::Origin::Create(GURL("https://idp.example")), callback.Get());
  request->Cancelled();
}
