// Copyright 2014 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/chromeos/policy/consumer_management_notifier.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" #include "chrome/browser/chromeos/policy/consumer_management_service.h" #include "chrome/browser/chromeos/policy/consumer_management_stage.h" #include "chrome/browser/chromeos/policy/fake_consumer_management_service.h" #include "chrome/browser/notifications/notification_ui_manager.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_manager.h" #include "testing/gtest/include/gtest/gtest.h" namespace policy { class ConsumerManagementNotifierTest : public BrowserWithTestWindowTest { public: ConsumerManagementNotifierTest() : fake_service_(new FakeConsumerManagementService()) { fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_UNENROLLED, ConsumerManagementStage::None()); // Inject objects. BrowserPolicyConnectorChromeOS* connector = g_browser_process->platform_part()->browser_policy_connector_chromeos(); connector->SetConsumerManagementServiceForTesting( make_scoped_ptr(fake_service_)); } void SetUp() override { BrowserWithTestWindowTest::SetUp(); // Set up TestingProfileManager. This is required for NotificationUIManager. testing_profile_manager_.reset(new TestingProfileManager( TestingBrowserProcess::GetGlobal())); ASSERT_TRUE(testing_profile_manager_->SetUp()); } void TearDown() override { if (notification_) notification_->Shutdown(); notification_.reset(); g_browser_process->notification_ui_manager()->CancelAll(); testing_profile_manager_.reset(); BrowserWithTestWindowTest::TearDown(); } void CreateConsumerManagementNotifier() { notification_.reset( new ConsumerManagementNotifier(profile(), fake_service_)); } bool HasEnrollmentNotification() { return g_browser_process->notification_ui_manager()->FindById( "consumer_management.enroll", NotificationUIManager::GetProfileID(profile())); } bool HasUnenrollmentNotification() { return g_browser_process->notification_ui_manager()->FindById( "consumer_management.unenroll", NotificationUIManager::GetProfileID(profile())); } FakeConsumerManagementService* fake_service_; scoped_ptr testing_profile_manager_; scoped_ptr notification_; }; TEST_F(ConsumerManagementNotifierTest, ShowsEnrollmentNotificationWhenCreated) { fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_UNENROLLED, ConsumerManagementStage::EnrollmentCanceled()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); CreateConsumerManagementNotifier(); EXPECT_EQ(ConsumerManagementStage::None(), fake_service_->GetStage()); EXPECT_TRUE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); } TEST_F(ConsumerManagementNotifierTest, ShowsUnenrollmentNotificationWhenCreated) { fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_UNENROLLED, ConsumerManagementStage::UnenrollmentSuccess()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); CreateConsumerManagementNotifier(); EXPECT_EQ(ConsumerManagementStage::None(), fake_service_->GetStage()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_TRUE(HasUnenrollmentNotification()); } TEST_F(ConsumerManagementNotifierTest, ShowsEnrollmentNotificationWhenStatusChanged) { fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_ENROLLING, ConsumerManagementStage::EnrollmentOwnerStored()); CreateConsumerManagementNotifier(); EXPECT_EQ(ConsumerManagementStage::EnrollmentOwnerStored(), fake_service_->GetStage()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_ENROLLED, ConsumerManagementStage::EnrollmentSuccess()); EXPECT_EQ(ConsumerManagementStage::None(), fake_service_->GetStage()); EXPECT_TRUE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); } TEST_F(ConsumerManagementNotifierTest, ShowsUnenrollmentNotificationWhenStatusChanged) { fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_ENROLLED, ConsumerManagementStage::None()); CreateConsumerManagementNotifier(); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_UNENROLLING, ConsumerManagementStage::UnenrollmentRequested()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_FALSE(HasUnenrollmentNotification()); fake_service_->SetStatusAndStage( ConsumerManagementService::STATUS_UNENROLLED, ConsumerManagementStage::UnenrollmentSuccess()); EXPECT_EQ(ConsumerManagementStage::None(), fake_service_->GetStage()); EXPECT_FALSE(HasEnrollmentNotification()); EXPECT_TRUE(HasUnenrollmentNotification()); } } // namespace policy