Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2894)

Unified Diff: chrome/browser/ui/webui/signin/signin_supervised_user_import_handler_unittest.cc

Issue 1878263002: Unittests for signin_supervised_user_import_handler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Roger's comment Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/webui/signin/signin_supervised_user_import_handler_unittest.cc
diff --git a/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler_unittest.cc b/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9c86d2991e8eb946449ba11283565d716d30bcbf
--- /dev/null
+++ b/chrome/browser/ui/webui/signin/signin_supervised_user_import_handler_unittest.cc
@@ -0,0 +1,263 @@
+// Copyright 2016 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 "chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.h"
+
+#include "base/strings/utf_string_conversions.h"
+#include "base/time/time.h"
+#include "chrome/browser/signin/fake_signin_manager_builder.h"
+#include "chrome/browser/signin/signin_error_controller_factory.h"
+#include "chrome/browser/signin/signin_manager_factory.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_sync_service.h"
+#include "chrome/browser/supervised_user/legacy/supervised_user_sync_service_factory.h"
+#include "chrome/grit/generated_resources.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
+#include "chrome/test/base/testing_browser_process.h"
+#include "chrome/test/base/testing_profile.h"
+#include "chrome/test/base/testing_profile_manager.h"
+#include "components/signin/core/browser/fake_auth_status_provider.h"
+#include "components/syncable_prefs/pref_service_syncable.h"
+#include "content/public/test/test_web_ui.h"
+#include "sync/api/attachments/attachment_id.h"
+#include "sync/api/fake_sync_change_processor.h"
+#include "sync/api/sync_error_factory_mock.h"
+#include "sync/internal_api/public/attachments/attachment_service_proxy_for_test.h"
+#include "sync/protocol/sync.pb.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace {
+
+const char kTestGaiaId[] = "test-gaia-id";
+
+const char kTestWebUIResponse[] = "cr.webUIResponse";
+const char kTestCallbackId[] = "test-callback-id";
+
+const char kSupervisedUserId[] = "test-supervised-id";
+const char kSupervisedUsername[] = "test-supervised-username";
+const char kSupervisedUserAvatarName[] = "chrome-avatar-index:0";
+const char kSupervisedUserAvatarUrl[] = "chrome://theme/IDR_PROFILE_AVATAR_0";
+
+syncer::SyncData CreateSyncData(const std::string& id,
+ const std::string& name,
+ const std::string& chrome_avatar) {
+ sync_pb::EntitySpecifics specifics;
+ specifics.mutable_managed_user()->set_id(id);
+ specifics.mutable_managed_user()->set_name(name);
+ specifics.mutable_managed_user()->set_acknowledged(true);
+ specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar);
+
+ return syncer::SyncData::CreateRemoteData(
+ 1,
+ specifics,
+ base::Time(),
+ syncer::AttachmentIdList(),
+ syncer::AttachmentServiceProxyForTest::Create());
+}
+
+} // namespace
+
+class TestSigninSupervisedUserImportHandler :
+ public SigninSupervisedUserImportHandler {
+ public:
+ explicit TestSigninSupervisedUserImportHandler(content::WebUI* web_ui) {
+ set_web_ui(web_ui);
+ }
+};
+
+class SigninSupervisedUserImportHandlerTest : public BrowserWithTestWindowTest {
+ public:
+ SigninSupervisedUserImportHandlerTest() : web_ui_(new content::TestWebUI) {}
+
+ void SetUp() override {
+ BrowserWithTestWindowTest::SetUp();
+ handler_.reset(new TestSigninSupervisedUserImportHandler(web_ui()));
+
+ // Build a test profile.
+ profile_manager_.reset(
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
+ ASSERT_TRUE(profile_manager_->SetUp());
+
+ TestingProfile::TestingFactories factories;
+ factories.push_back(std::make_pair(SigninManagerFactory::GetInstance(),
+ BuildFakeSigninManagerBase));
+ profile_ = profile_manager_.get()->CreateTestingProfile(
+ "test-profile",
+ std::unique_ptr<syncable_prefs::PrefServiceSyncable>(),
+ base::UTF8ToUTF16("test-profile"),
+ 0,
+ std::string(),
+ factories);
+
+ // Authenticate the test profile.
+ fake_signin_manager_ = static_cast<FakeSigninManagerForTesting*>(
+ SigninManagerFactory::GetForProfile(profile_));
+ fake_signin_manager_->SetAuthenticatedAccountInfo(kTestGaiaId, kTestGaiaId);
+
+ // Add supervised users to the profile.
+ SupervisedUserSyncService* sync_service_ =
+ SupervisedUserSyncServiceFactory::GetForProfile(profile_);
+ syncer::SyncDataList sync_data;
+ sync_data.push_back(CreateSyncData(kSupervisedUserId,
+ kSupervisedUsername,
+ kSupervisedUserAvatarName));
+ syncer::SyncMergeResult result = sync_service_->MergeDataAndStartSyncing(
+ syncer::SUPERVISED_USERS,
+ sync_data,
+ std::unique_ptr<syncer::SyncChangeProcessor>(
+ new syncer::FakeSyncChangeProcessor()),
+ std::unique_ptr<syncer::SyncErrorFactory>(
+ new syncer::SyncErrorFactoryMock()));
+ EXPECT_FALSE(result.error().IsSet());
+ EXPECT_EQ(1u, sync_service_->GetSupervisedUsers()->size());
+ }
+
+ void TearDown() override {
+ profile_manager_.reset();
+ handler_.reset();
+ web_ui_.reset();
+ BrowserWithTestWindowTest::TearDown();
+ }
+
+ content::TestWebUI* web_ui() {
+ return web_ui_.get();
+ }
+
+ TestSigninSupervisedUserImportHandler* handler() {
+ return handler_.get();
+ }
+
+ TestingProfileManager* profile_manager() {
+ return profile_manager_.get();
+ }
+
+ TestingProfile* profile() {
+ return profile_;
+ }
+
+ FakeSigninManagerForTesting* signin_manager() {
+ return fake_signin_manager_;
+ }
+
+ void VerifyResponse(size_t expected_total_calls,
+ const std::string& expected_callback_id,
+ bool expected_fulfilled) {
+ EXPECT_EQ(expected_total_calls, web_ui()->call_data().size());
+
+ EXPECT_EQ(kTestWebUIResponse, web_ui()->call_data()[0]->function_name());
+
+ std::string callback_id;
+ ASSERT_TRUE(web_ui()->call_data()[0]->arg1()->GetAsString(&callback_id));
+ EXPECT_EQ(expected_callback_id, callback_id);
+
+ bool fulfilled;
+ ASSERT_TRUE(web_ui()->call_data()[0]->arg2()->GetAsBoolean(&fulfilled));
+ EXPECT_EQ(expected_fulfilled, fulfilled);
+ }
+
+ private:
+ std::unique_ptr<content::TestWebUI> web_ui_;
+ std::unique_ptr<TestSigninSupervisedUserImportHandler> handler_;
+ std::unique_ptr<TestingProfileManager> profile_manager_;
+ TestingProfile* profile_;
+ FakeSigninManagerForTesting* fake_signin_manager_;
+};
+
+TEST_F(SigninSupervisedUserImportHandlerTest, NotAuthenticated) {
+ // Stop Sync before signing out.
+ SupervisedUserSyncService* sync_service_ =
+ SupervisedUserSyncServiceFactory::GetForProfile(profile());
+ sync_service_->StopSyncing(syncer::SUPERVISED_USERS);
+
+ // Sign out the user.
+ signin_manager()->ForceSignOut();
+
+ // Test the JS -> C++ -> JS callback path.
+ base::ListValue list_args;
+ list_args.Append(new base::StringValue(kTestCallbackId));
+ list_args.Append(new base::StringValue(profile()->GetPath().AsUTF16Unsafe()));
+ handler()->GetExistingSupervisedUsers(&list_args);
+
+ // Expect an error response.
+ VerifyResponse(1U, kTestCallbackId, false);
+
+ base::string16 expected_error_message = l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_CUSTODIAN_ACCOUNT_DETAILS_OUT_OF_DATE_ERROR);
+ base::string16 error_message;
+ ASSERT_TRUE(web_ui()->call_data()[0]->arg3()->GetAsString(&error_message));
+ EXPECT_EQ(expected_error_message, error_message);
+}
+
+TEST_F(SigninSupervisedUserImportHandlerTest, AuthError) {
+ // Set Auth Error.
+ const GoogleServiceAuthError error(
+ GoogleServiceAuthError::INVALID_GAIA_CREDENTIALS);
+ FakeAuthStatusProvider provider(
+ SigninErrorControllerFactory::GetForProfile(profile()));
+ provider.SetAuthError(kTestGaiaId, error);
+
+ // Test the JS -> C++ -> JS callback path.
+ base::ListValue list_args;
+ list_args.Append(new base::StringValue(kTestCallbackId));
+ list_args.Append(new base::StringValue(profile()->GetPath().AsUTF16Unsafe()));
+ handler()->GetExistingSupervisedUsers(&list_args);
+
+ // Expect an error response.
+ VerifyResponse(1U, kTestCallbackId, false);
+
+ base::string16 expected_error_message = l10n_util::GetStringUTF16(
+ IDS_PROFILES_CREATE_CUSTODIAN_ACCOUNT_DETAILS_OUT_OF_DATE_ERROR);
+ base::string16 error_message;
+ ASSERT_TRUE(web_ui()->call_data()[0]->arg3()->GetAsString(&error_message));
+ EXPECT_EQ(expected_error_message, error_message);
+}
+
+TEST_F(SigninSupervisedUserImportHandlerTest, CustodianIsSupervised) {
+ // Build a supervised test profile.
+ TestingProfile* profile_ = profile_manager()->CreateTestingProfile(
+ "supervised-test-profile",
+ std::unique_ptr<syncable_prefs::PrefServiceSyncable>(),
+ base::UTF8ToUTF16("supervised-test-profile"),
+ 0,
+ "12345", // supervised_user_id
+ TestingProfile::TestingFactories());
+
+ // Test the JS -> C++ -> JS callback path.
+ base::ListValue list_args;
+ list_args.Append(new base::StringValue(kTestCallbackId));
+ list_args.Append(new base::StringValue(profile_->GetPath().AsUTF16Unsafe()));
+ handler()->GetExistingSupervisedUsers(&list_args);
+
+ // Expect to do nothing.
+ EXPECT_EQ(0U, web_ui()->call_data().size());
+}
+
+TEST_F(SigninSupervisedUserImportHandlerTest, SendExistingSupervisedUsers) {
+ // Test the JS -> C++ -> JS callback path.
+ base::ListValue list_args;
+ list_args.Append(new base::StringValue(kTestCallbackId));
+ list_args.Append(new base::StringValue(profile()->GetPath().AsUTF16Unsafe()));
+ handler()->GetExistingSupervisedUsers(&list_args);
+
+ // Expect a success response.
+ VerifyResponse(1U, kTestCallbackId, true);
+
+ const base::ListValue* supervised_users;
+ ASSERT_TRUE(web_ui()->call_data()[0]->arg3()->GetAsList(&supervised_users));
+ EXPECT_EQ(1U, supervised_users->GetSize());
+
+ const base::DictionaryValue* supervised_user;
+ ASSERT_TRUE(supervised_users->GetDictionary(0, &supervised_user));
+ std::string id;
+ ASSERT_TRUE(supervised_user->GetString("id", &id));
+ EXPECT_EQ(kSupervisedUserId, id);
+ std::string name;
+ ASSERT_TRUE(supervised_user->GetString("name", &name));
+ EXPECT_EQ(kSupervisedUsername, name);
+ std::string iconURL;
+ ASSERT_TRUE(supervised_user->GetString("iconURL", &iconURL));
+ EXPECT_EQ(kSupervisedUserAvatarUrl, iconURL);
+ bool onCurrentDevice;
+ ASSERT_TRUE(supervised_user->GetBoolean("onCurrentDevice", &onCurrentDevice));
+ ASSERT_FALSE(onCurrentDevice);
+}
« no previous file with comments | « chrome/browser/ui/webui/signin/signin_supervised_user_import_handler.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698