1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/compiler_specific.h" 6 #include "chrome/browser/chromeos/login/screens/user_selection_screen.h" 7 #include "chrome/browser/chromeos/login/users/fake_user_manager.h" 8 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" 9 #include "chrome/browser/chromeos/login/users/multi_profile_user_controller_delegate.h" 10 #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 11 #include "chrome/browser/signin/screenlock_bridge.h" 12 #include "chrome/test/base/testing_browser_process.h" 13 #include "chrome/test/base/testing_profile_manager.h" 14 #include "components/user_manager/user.h" 15 #include "testing/gtest/include/gtest/gtest.h" 16 17 namespace { 18 19 const size_t kMaxUsers = 18; // same as in user_selection_screen.cc 20 const char* kOwner = "owner (at) gmail.com"; 21 const char* kUsersPublic[] = {"public0 (at) gmail.com", "public1 (at) gmail.com"}; 22 const char* kUsers[] = { 23 "a0 (at) gmail.com", "a1 (at) gmail.com", "a2 (at) gmail.com", "a3 (at) gmail.com", 24 "a4 (at) gmail.com", "a5 (at) gmail.com", "a6 (at) gmail.com", "a7 (at) gmail.com", 25 "a8 (at) gmail.com", "a9 (at) gmail.com", "a10 (at) gmail.com", "a11 (at) gmail.com", 26 "a12 (at) gmail.com", "a13 (at) gmail.com", "a14 (at) gmail.com", "a15 (at) gmail.com", 27 "a16 (at) gmail.com", "a17 (at) gmail.com", kOwner, "a18 (at) gmail.com"}; 28 29 } // namespace 30 31 namespace chromeos { 32 33 class SigninPrepareUserListTest 34 : public testing::Test, 35 public MultiProfileUserControllerDelegate { 36 public: 37 SigninPrepareUserListTest() 38 : fake_user_manager_(new FakeUserManager()), 39 user_manager_enabler_(fake_user_manager_) { 40 } 41 42 virtual ~SigninPrepareUserListTest() { 43 } 44 45 virtual void SetUp() OVERRIDE { 46 profile_manager_.reset( 47 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 48 ASSERT_TRUE(profile_manager_->SetUp()); 49 controller_.reset(new MultiProfileUserController( 50 this, TestingBrowserProcess::GetGlobal()->local_state())); 51 fake_user_manager_->set_multi_profile_user_controller(controller_.get()); 52 53 for (size_t i = 0; i < arraysize(kUsersPublic); ++i) 54 fake_user_manager_->AddPublicAccountUser(kUsersPublic[i]); 55 56 for (size_t i = 0; i < arraysize(kUsers); ++i) 57 fake_user_manager_->AddUser(kUsers[i]); 58 59 fake_user_manager_->set_owner_email(kOwner); 60 } 61 62 virtual void TearDown() OVERRIDE { 63 controller_.reset(); 64 profile_manager_.reset(); 65 } 66 67 // MultiProfileUserControllerDelegate overrides: 68 virtual void OnUserNotAllowed(const std::string& user_email) OVERRIDE { 69 } 70 71 FakeUserManager* fake_user_manager_; 72 ScopedUserManagerEnabler user_manager_enabler_; 73 scoped_ptr<TestingProfileManager> profile_manager_; 74 std::map<std::string, 75 ScreenlockBridge::LockHandler::AuthType> user_auth_type_map; 76 scoped_ptr<MultiProfileUserController> controller_; 77 78 DISALLOW_COPY_AND_ASSIGN(SigninPrepareUserListTest); 79 }; 80 81 TEST_F(SigninPrepareUserListTest, AlwaysKeepOwnerInList) { 82 EXPECT_LT(kMaxUsers, fake_user_manager_->GetUsers().size()); 83 user_manager::UserList users_to_send = 84 UserSelectionScreen::PrepareUserListForSending( 85 fake_user_manager_->GetUsers(), kOwner, true /* is signin to add */); 86 87 EXPECT_EQ(kMaxUsers, users_to_send.size()); 88 EXPECT_EQ(kOwner, users_to_send.back()->email()); 89 90 fake_user_manager_->RemoveUserFromList("a16 (at) gmail.com"); 91 fake_user_manager_->RemoveUserFromList("a17 (at) gmail.com"); 92 users_to_send = UserSelectionScreen::PrepareUserListForSending( 93 fake_user_manager_->GetUsers(), 94 kOwner, 95 true /* is signin to add */); 96 97 EXPECT_EQ(kMaxUsers, users_to_send.size()); 98 EXPECT_EQ("a18 (at) gmail.com", users_to_send.back()->email()); 99 EXPECT_EQ(kOwner, users_to_send[kMaxUsers-2]->email()); 100 } 101 102 TEST_F(SigninPrepareUserListTest, PublicAccounts) { 103 user_manager::UserList users_to_send = 104 UserSelectionScreen::PrepareUserListForSending( 105 fake_user_manager_->GetUsers(), kOwner, true /* is signin to add */); 106 107 EXPECT_EQ(kMaxUsers, users_to_send.size()); 108 EXPECT_EQ("a0 (at) gmail.com", users_to_send.front()->email()); 109 110 users_to_send = UserSelectionScreen::PrepareUserListForSending( 111 fake_user_manager_->GetUsers(), 112 kOwner, 113 false /* is signin to add */); 114 115 EXPECT_EQ(kMaxUsers, users_to_send.size()); 116 EXPECT_EQ("public0 (at) gmail.com", users_to_send.front()->email()); 117 } 118 119 } // namespace chromeos 120