Commit 3f5393c9 authored by glevin's avatar glevin Committed by Commit bot

Unit test for Data Saver prompt notification

BUG=465607

Sets up logged in user and cellular network for testing, verifies that
the Data Saver prompt notification is shown once cellular becomes the
connected, default network.

Review URL: https://codereview.chromium.org/1108123003

Cr-Commit-Position: refs/heads/master@{#327497}
parent 4265822a
// Copyright (c) 2015 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/status/data_promo_notification.h"
#include "base/command_line.h"
#include "base/run_loop.h"
#include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
#include "chrome/test/base/testing_browser_process.h"
#include "chrome/test/base/testing_profile_manager.h"
#include "chromeos/chromeos_switches.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/shill_device_client.h"
#include "chromeos/dbus/shill_service_client.h"
#include "chromeos/login/login_state.h"
#include "chromeos/network/network_state_handler.h"
#include "testing/platform_test.h"
#include "third_party/cros_system_api/dbus/service_constants.h"
#include "ui/chromeos/network/network_connect.h"
#include "ui/message_center/message_center.h"
namespace {
const char kCellularDevicePath[] = "/device/stub_cellular_device1";
const char kCellularServicePath[] = "/service/cellular1";
const char kNotificationId[] = "chrome://settings/internet/data_saver";
const char kTestUserName[] = "test-user@example.com";
class NetworkConnectTestDelegate : public ui::NetworkConnect::Delegate {
public:
NetworkConnectTestDelegate() {}
~NetworkConnectTestDelegate() override {}
void ShowNetworkConfigure(const std::string& network_id) override {}
void ShowNetworkSettingsForGuid(const std::string& network_id) override {}
bool ShowEnrollNetwork(const std::string& network_id) override {
return false;
}
void ShowMobileSimDialog() override {}
void ShowMobileSetupDialog(const std::string& service_path) override {}
private:
DISALLOW_COPY_AND_ASSIGN(NetworkConnectTestDelegate);
};
} // namespace
namespace chromeos {
namespace test {
class DataPromoNotificationTest : public testing::Test {
public:
DataPromoNotificationTest() {}
~DataPromoNotificationTest() override {}
void SetUp() override {
testing::Test::SetUp();
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kEnableDataSaverPrompt);
DBusThreadManager::Initialize();
NetworkHandler::Initialize();
data_promo_notification_.reset(new DataPromoNotification);
SetupUser();
SetupNetworkShillState();
message_center::MessageCenter::Initialize();
base::RunLoop().RunUntilIdle();
network_connect_delegate_.reset(new NetworkConnectTestDelegate);
ui::NetworkConnect::Initialize(network_connect_delegate_.get());
}
void TearDown() override {
ui::NetworkConnect::Shutdown();
network_connect_delegate_.reset();
message_center::MessageCenter::Shutdown();
LoginState::Shutdown();
profile_manager_.reset();
user_manager_enabler_.reset();
data_promo_notification_.reset();
NetworkHandler::Shutdown();
DBusThreadManager::Shutdown();
testing::Test::TearDown();
}
protected:
void SetupUser() {
scoped_ptr<FakeChromeUserManager> user_manager(new FakeChromeUserManager());
user_manager->AddUser(kTestUserName);
user_manager->LoginUser(kTestUserName);
user_manager_enabler_.reset(
new ScopedUserManagerEnabler(user_manager.release()));
profile_manager_.reset(
new TestingProfileManager(TestingBrowserProcess::GetGlobal()));
ASSERT_TRUE(profile_manager_->SetUp());
profile_manager_->SetLoggedIn(true);
ASSERT_TRUE(user_manager::UserManager::Get()->GetPrimaryUser());
LoginState::Initialize();
LoginState::Get()->SetLoggedInState(LoginState::LOGGED_IN_ACTIVE,
LoginState::LOGGED_IN_USER_REGULAR);
}
void SetupNetworkShillState() {
base::RunLoop().RunUntilIdle();
// Create a cellular device with provider.
ShillDeviceClient::TestInterface* device_test =
DBusThreadManager::Get()->GetShillDeviceClient()->GetTestInterface();
device_test->ClearDevices();
device_test->AddDevice(kCellularDevicePath, shill::kTypeCellular,
"stub_cellular_device1");
base::DictionaryValue home_provider;
home_provider.SetString("name", "Cellular1_Provider");
home_provider.SetString("country", "us");
device_test->SetDeviceProperty(kCellularDevicePath,
shill::kHomeProviderProperty, home_provider);
// Create a cellular network and activate it.
ShillServiceClient::TestInterface* service_test =
DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface();
service_test->ClearServices();
service_test->AddService(kCellularServicePath, "cellular1_guid",
"cellular1" /* name */, shill::kTypeCellular,
"activated", true /* visible */);
service_test->SetServiceProperty(
kCellularServicePath, shill::kActivationStateProperty,
base::StringValue(shill::kActivationStateActivated));
service_test->SetServiceProperty(kCellularServicePath,
shill::kConnectableProperty,
base::FundamentalValue(true));
}
scoped_ptr<DataPromoNotification> data_promo_notification_;
scoped_ptr<NetworkConnectTestDelegate> network_connect_delegate_;
scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_;
scoped_ptr<TestingProfileManager> profile_manager_;
base::MessageLoop message_loop_;
private:
DISALLOW_COPY_AND_ASSIGN(DataPromoNotificationTest);
};
TEST_F(DataPromoNotificationTest, DataSaverNotification) {
message_center::MessageCenter* message_center =
message_center::MessageCenter::Get();
// Network setup shouldn't be enough to activate notification.
EXPECT_FALSE(message_center->FindVisibleNotificationById(kNotificationId));
ui::NetworkConnect::Get()->ConnectToNetwork(kCellularServicePath);
base::RunLoop().RunUntilIdle();
// Connecting to cellular network (which here makes it the default network)
// should trigger the Data Saver notification.
EXPECT_TRUE(message_center->FindVisibleNotificationById(kNotificationId));
}
} // namespace test
} // namespace chromeos
...@@ -1305,6 +1305,7 @@ ...@@ -1305,6 +1305,7 @@
'browser/chromeos/settings/session_manager_operation_unittest.cc', 'browser/chromeos/settings/session_manager_operation_unittest.cc',
'browser/chromeos/settings/shutdown_policy_handler_unittest.cc', 'browser/chromeos/settings/shutdown_policy_handler_unittest.cc',
'browser/chromeos/settings/stub_cros_settings_provider_unittest.cc', 'browser/chromeos/settings/stub_cros_settings_provider_unittest.cc',
'browser/chromeos/status/data_promo_notification_unittest.cc',
'browser/chromeos/system/automatic_reboot_manager_unittest.cc', 'browser/chromeos/system/automatic_reboot_manager_unittest.cc',
'browser/chromeos/system/device_disabling_manager_unittest.cc', 'browser/chromeos/system/device_disabling_manager_unittest.cc',
'browser/chromeos/ui/accessibility_focus_ring_controller_unittest.cc', 'browser/chromeos/ui/accessibility_focus_ring_controller_unittest.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment