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

#include "net/cookies/cookie_options.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace net {
namespace {

TEST(CookieOptionsTest, SameSiteCookieContextType) {
  using ContextType = CookieOptions::SameSiteCookieContext::ContextType;
  EXPECT_EQ("0", ::testing::PrintToString(ContextType::CROSS_SITE));
  EXPECT_EQ("1",
            ::testing::PrintToString(ContextType::SAME_SITE_LAX_METHOD_UNSAFE));
  EXPECT_EQ("2", ::testing::PrintToString(ContextType::SAME_SITE_LAX));
  EXPECT_EQ("3", ::testing::PrintToString(ContextType::SAME_SITE_STRICT));
}

TEST(CookieOptionsTest, SameSiteCookieContext) {
  using SameSiteCookieContext = CookieOptions::SameSiteCookieContext;
  SameSiteCookieContext cross_cross(
      SameSiteCookieContext::ContextType::CROSS_SITE);
  SameSiteCookieContext lax_lax(
      SameSiteCookieContext::ContextType::SAME_SITE_LAX);
  SameSiteCookieContext strict_strict(
      SameSiteCookieContext::ContextType::SAME_SITE_STRICT);
  SameSiteCookieContext strict_cross(
      SameSiteCookieContext::ContextType::SAME_SITE_STRICT,
      SameSiteCookieContext::ContextType::CROSS_SITE);
  SameSiteCookieContext strict_lax(
      SameSiteCookieContext::ContextType::SAME_SITE_STRICT,
      SameSiteCookieContext::ContextType::SAME_SITE_LAX);
  SameSiteCookieContext lax_cross(
      SameSiteCookieContext::ContextType::SAME_SITE_LAX,
      SameSiteCookieContext::ContextType::CROSS_SITE);

  SameSiteCookieContext::ContextMetadata metadata1;
  metadata1.cross_site_redirect_downgrade = SameSiteCookieContext::
      ContextMetadata::ContextDowngradeType::kStrictToLax;
  metadata1.redirect_type_bug_1221316 = SameSiteCookieContext::ContextMetadata::
      ContextRedirectTypeBug1221316::kPartialSameSiteRedirect;
  SameSiteCookieContext::ContextMetadata metadata2;
  metadata2.cross_site_redirect_downgrade = SameSiteCookieContext::
      ContextMetadata::ContextDowngradeType::kStrictToLax;
  metadata2.redirect_type_bug_1221316 = SameSiteCookieContext::ContextMetadata::
      ContextRedirectTypeBug1221316::kPartialSameSiteRedirect;
  SameSiteCookieContext context_with_metadata(
      SameSiteCookieContext::ContextType::SAME_SITE_STRICT,
      SameSiteCookieContext::ContextType::SAME_SITE_STRICT, metadata1,
      metadata2);

  EXPECT_EQ(
      "{ context: 0, schemeful_context: 0, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(cross_cross));
  EXPECT_EQ(
      "{ context: 2, schemeful_context: 2, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(lax_lax));
  EXPECT_EQ(
      "{ context: 3, schemeful_context: 3, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(strict_strict));
  EXPECT_EQ(
      "{ context: 3, schemeful_context: 0, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(strict_cross));
  EXPECT_EQ(
      "{ context: 3, schemeful_context: 2, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(strict_lax));
  EXPECT_EQ(
      "{ context: 2, schemeful_context: 0, "
      "metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 0, "
      "redirect_type_bug_1221316: 0 } }",
      ::testing::PrintToString(lax_cross));
  EXPECT_EQ(
      "{ context: 3, schemeful_context: 3, "
      "metadata: { cross_site_redirect_downgrade: 1, "
      "redirect_type_bug_1221316: 3 }, "
      "schemeful_metadata: { cross_site_redirect_downgrade: 1, "
      "redirect_type_bug_1221316: 3 } }",
      ::testing::PrintToString(context_with_metadata));
}

}  // namespace
}  // namespace net
