blob: 144d025bd2a1d3777c08f4102d0e2d7b0d09562c [file] [log] [blame]
// 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 "components/data_sharing/public/data_sharing_service.h"
#include "base/run_loop.h"
#include "base/test/scoped_feature_list.h"
#include "build/branding_buildflags.h"
#include "chrome/browser/data_sharing/data_sharing_service_factory.h"
#include "chrome/browser/data_sharing/desktop/data_sharing_sdk_delegate_desktop.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "components/data_sharing/public/features.h"
#include "content/public/test/browser_test.h"
#include "google_apis/gaia/gaia_id.h"
class DataSharingServiceBrowserTest : public InProcessBrowserTest {
public:
DataSharingServiceBrowserTest() {
scoped_feature_list_.InitWithFeatures(
{data_sharing::features::kDataSharingFeature}, {});
}
private:
base::test::ScopedFeatureList scoped_feature_list_;
};
IN_PROC_BROWSER_TEST_F(DataSharingServiceBrowserTest, ReadGroup) {
// In branded build, tests are skipped since it fetches data from the server.
// In non-branded build, fake data are returned from a dummy implementation.
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
GTEST_SKIP() << "N/A for Google Chrome Branding Build";
#else
base::RunLoop run_loop;
auto* service = data_sharing::DataSharingServiceFactory::GetForProfile(
browser()->profile());
// TODO(crbug.com/338431049): This test should use synchronous ReadGroup()
// instead of ReadGroupDeprecated(). Note that this will require receiving a
// GroupId from the sync server first (as part of COLLABORATION_GROUP
// datatype) -> simplest way to achieve this is to derive test from SyncTest
// and inject COLLABORATION_GROUP into fake sync server.
service->ReadGroupDeprecated(
data_sharing::GroupId("12345"),
base::BindOnce(
[](base::RunLoop* run_loop,
const data_sharing::DataSharingService::GroupDataOrFailureOutcome&
result) {
EXPECT_EQ(data_sharing::GroupId("12345"),
result->group_token.group_id);
EXPECT_EQ("GROUP_NAME", result->display_name);
EXPECT_EQ(1u, result->members.size());
data_sharing::GroupMember member = result->members[0];
EXPECT_EQ("GAIA_ID", member.gaia_id.ToString());
EXPECT_EQ("MEMBER_NAME", member.display_name);
EXPECT_EQ("test@gmail.com", member.email);
EXPECT_EQ(data_sharing::MemberRole::kMember, member.role);
EXPECT_EQ(GURL("http://example.com"), member.avatar_url);
data_sharing::GroupMember former_member = result->former_members[0];
EXPECT_EQ("GAIA_ID2", former_member.gaia_id.ToString());
EXPECT_EQ("MEMBER_NAME2", former_member.display_name);
EXPECT_EQ("test2@gmail.com", former_member.email);
EXPECT_EQ(data_sharing::MemberRole::kFormerMember,
former_member.role);
EXPECT_EQ(GURL("http://example2.com"), former_member.avatar_url);
run_loop->Quit();
},
&run_loop));
run_loop.Run();
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
}
IN_PROC_BROWSER_TEST_F(DataSharingServiceBrowserTest, ReadGroupWithToken) {
// In branded build, tests are skipped since it fetches data from the server.
// In non-branded build, fake data are returned from a dummy implementation.
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
GTEST_SKIP() << "N/A for Google Chrome Branding Build";
#else
base::RunLoop run_loop;
auto* service = data_sharing::DataSharingServiceFactory::GetForProfile(
browser()->profile());
service->ReadNewGroup(
data_sharing::GroupToken(data_sharing::GroupId("12345"), "access_token"),
base::BindOnce(
[](base::RunLoop* run_loop,
const data_sharing::DataSharingService::GroupDataOrFailureOutcome&
result) {
EXPECT_EQ(data_sharing::GroupId("12345"),
result->group_token.group_id);
EXPECT_EQ("GROUP_NAME", result->display_name);
EXPECT_EQ(1u, result->members.size());
data_sharing::GroupMember member = result->members[0];
EXPECT_EQ("GAIA_ID", member.gaia_id.ToString());
EXPECT_EQ("MEMBER_NAME", member.display_name);
EXPECT_EQ("test@gmail.com", member.email);
EXPECT_EQ(data_sharing::MemberRole::kMember, member.role);
EXPECT_EQ(GURL("http://example.com"), member.avatar_url);
data_sharing::GroupMember former_member = result->former_members[0];
EXPECT_EQ("GAIA_ID2", former_member.gaia_id.ToString());
EXPECT_EQ("MEMBER_NAME2", former_member.display_name);
EXPECT_EQ("test2@gmail.com", former_member.email);
EXPECT_EQ(data_sharing::MemberRole::kFormerMember,
former_member.role);
EXPECT_EQ(GURL("http://example2.com"), former_member.avatar_url);
run_loop->Quit();
},
&run_loop));
run_loop.Run();
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
}
IN_PROC_BROWSER_TEST_F(DataSharingServiceBrowserTest, DeleteGroup) {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
GTEST_SKIP() << "N/A for Google Chrome Branding Build";
#else
base::RunLoop run_loop;
auto* service = data_sharing::DataSharingServiceFactory::GetForProfile(
browser()->profile());
service->DeleteGroup(
data_sharing::GroupId("12345"),
base::BindOnce(
[](base::RunLoop* run_loop,
data_sharing::DataSharingService::PeopleGroupActionOutcome
result) {
EXPECT_EQ(result, data_sharing::DataSharingService::
PeopleGroupActionOutcome::kPersistentFailure);
run_loop->Quit();
},
&run_loop));
run_loop.Run();
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
}
IN_PROC_BROWSER_TEST_F(DataSharingServiceBrowserTest, LeaveGroup) {
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
GTEST_SKIP() << "N/A for Google Chrome Branding Build";
#else
base::RunLoop run_loop;
auto* service = data_sharing::DataSharingServiceFactory::GetForProfile(
browser()->profile());
service->LeaveGroup(
data_sharing::GroupId("12345"),
base::BindOnce(
[](base::RunLoop* run_loop,
data_sharing::DataSharingService::PeopleGroupActionOutcome
result) {
EXPECT_EQ(result, data_sharing::DataSharingService::
PeopleGroupActionOutcome::kPersistentFailure);
run_loop->Quit();
},
&run_loop));
run_loop.Run();
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
}