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

#include "remoting/signaling/signaling_id_util.h"

#include "testing/gtest/include/gtest/gtest.h"

namespace remoting {

TEST(SignalingIdUtilTest, NormalizeSignalingId) {
  EXPECT_EQ(NormalizeSignalingId("USER@DOMAIN.com"), "user@domain.com");
  EXPECT_EQ(NormalizeSignalingId("user@domain.com"), "user@domain.com");
  EXPECT_EQ(NormalizeSignalingId("USER@DOMAIN.com/RESOURCE"),
            "user@domain.com/RESOURCE");
  EXPECT_EQ(NormalizeSignalingId("USER@DOMAIN.com/"), "user@domain.com/");

  // Jabber ID normalization
  EXPECT_EQ("user.mixed.case@googlemail.com/RESOURCE",
            NormalizeSignalingId("User.Mixed.Case@GOOGLEMAIL.com/RESOURCE"));

  // FTL ID normalization
  EXPECT_EQ("user@domain.com/chromoting_ftl_abc123",
            NormalizeSignalingId("USER@DOMAIN.com/chromoting_ftl_abc123"));
  EXPECT_EQ("user@domain.com/chromoting_ftl_abc123",
            NormalizeSignalingId("  USER@DOMAIN.com/chromoting_ftl_abc123"));
  EXPECT_EQ(
      "usermixedcase@gmail.com/chromoting_ftl_abc123",
      NormalizeSignalingId("User.Mixed.Case@GMAIL.com/chromoting_ftl_abc123"));
  EXPECT_EQ("usermixedcase@gmail.com/chromoting_ftl_abc123",
            NormalizeSignalingId(
                "User.Mixed.Case@GOOGLEMAIL.com/chromoting_ftl_abc123"));
  EXPECT_EQ(
      "user.mixed.case@domain.com/chromoting_ftl_abc123",
      NormalizeSignalingId("User.Mixed.Case@DOMAIN.com/chromoting_ftl_abc123"));
  EXPECT_EQ("invalid.user/chromoting_ftl_abc123",
            NormalizeSignalingId("  Invalid.User/chromoting_ftl_abc123"));
  EXPECT_EQ("invalid.user@/chromoting_ftl_abc123",
            NormalizeSignalingId("  Invalid.User@/chromoting_ftl_abc123"));
  EXPECT_EQ("@gmail.com/chromoting_ftl_abc123",
            NormalizeSignalingId("@googlemail.com/chromoting_ftl_abc123"));
}

TEST(SignalingIdUtilTest, SplitSignalingIdResource) {
  std::string email;
  std::string resource_suffix;

  EXPECT_TRUE(
      SplitSignalingIdResource("user@domain/resource", nullptr, nullptr));
  EXPECT_TRUE(SplitSignalingIdResource("user@domain/resource", &email,
                                       &resource_suffix));
  EXPECT_EQ(email, "user@domain");
  EXPECT_EQ(resource_suffix, "resource");

  EXPECT_FALSE(SplitSignalingIdResource("user@domain", nullptr, nullptr));
  EXPECT_FALSE(
      SplitSignalingIdResource("user@domain", &email, &resource_suffix));
  EXPECT_EQ(email, "user@domain");
  EXPECT_EQ(resource_suffix, "");
}

}  // namespace remoting
