1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/compiler_specific.h" 6f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/chromeos/login/screens/user_selection_screen.h" 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/fake_user_manager.h" 8f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/multi_profile_user_controller.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/multi_profile_user_controller_delegate.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/signin/screenlock_bridge.h" 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/user_manager/user.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace { 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst size_t kMaxUsers = 18; // same as in user_selection_screen.cc 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)const char* kOwner = "owner@gmail.com"; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char* kUsersPublic[] = {"public0@gmail.com", "public1@gmail.com"}; 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char* kUsers[] = { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "a0@gmail.com", "a1@gmail.com", "a2@gmail.com", "a3@gmail.com", 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "a4@gmail.com", "a5@gmail.com", "a6@gmail.com", "a7@gmail.com", 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "a8@gmail.com", "a9@gmail.com", "a10@gmail.com", "a11@gmail.com", 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "a12@gmail.com", "a13@gmail.com", "a14@gmail.com", "a15@gmail.com", 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "a16@gmail.com", "a17@gmail.com", kOwner, "a18@gmail.com"}; 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace chromeos { 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SigninPrepareUserListTest 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : public testing::Test, 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public MultiProfileUserControllerDelegate { 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) SigninPrepareUserListTest() 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) : fake_user_manager_(new FakeUserManager()), 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) user_manager_enabler_(fake_user_manager_) { 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual ~SigninPrepareUserListTest() { 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void SetUp() OVERRIDE { 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_manager_.reset( 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ASSERT_TRUE(profile_manager_->SetUp()); 49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) controller_.reset(new MultiProfileUserController( 50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) this, TestingBrowserProcess::GetGlobal()->local_state())); 51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) fake_user_manager_->set_multi_profile_user_controller(controller_.get()); 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < arraysize(kUsersPublic); ++i) 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->AddPublicAccountUser(kUsersPublic[i]); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch for (size_t i = 0; i < arraysize(kUsers); ++i) 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->AddUser(kUsers[i]); 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->set_owner_email(kOwner); 60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void TearDown() OVERRIDE { 63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) controller_.reset(); 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_manager_.reset(); 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // MultiProfileUserControllerDelegate overrides: 68f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnUserNotAllowed(const std::string& user_email) OVERRIDE { 69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 70f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 71f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) FakeUserManager* fake_user_manager_; 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ScopedUserManagerEnabler user_manager_enabler_; 73f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<TestingProfileManager> profile_manager_; 74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) std::map<std::string, 75f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ScreenlockBridge::LockHandler::AuthType> user_auth_type_map; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<MultiProfileUserController> controller_; 77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 78f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SigninPrepareUserListTest); 79f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 80f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 81116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SigninPrepareUserListTest, AlwaysKeepOwnerInList) { 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_LT(kMaxUsers, fake_user_manager_->GetUsers().size()); 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::UserList users_to_send = 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserSelectionScreen::PrepareUserListForSending( 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fake_user_manager_->GetUsers(), kOwner, true /* is signin to add */); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kMaxUsers, users_to_send.size()); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kOwner, users_to_send.back()->email()); 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->RemoveUserFromList("a16@gmail.com"); 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->RemoveUserFromList("a17@gmail.com"); 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch users_to_send = UserSelectionScreen::PrepareUserListForSending( 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->GetUsers(), 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOwner, 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch true /* is signin to add */); 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kMaxUsers, users_to_send.size()); 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("a18@gmail.com", users_to_send.back()->email()); 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kOwner, users_to_send[kMaxUsers-2]->email()); 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 102116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(SigninPrepareUserListTest, PublicAccounts) { 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) user_manager::UserList users_to_send = 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) UserSelectionScreen::PrepareUserListForSending( 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fake_user_manager_->GetUsers(), kOwner, true /* is signin to add */); 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kMaxUsers, users_to_send.size()); 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("a0@gmail.com", users_to_send.front()->email()); 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch users_to_send = UserSelectionScreen::PrepareUserListForSending( 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch fake_user_manager_->GetUsers(), 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kOwner, 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false /* is signin to add */); 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kMaxUsers, users_to_send.size()); 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ("public0@gmail.com", users_to_send.front()->email()); 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 119f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} // namespace chromeos 120