1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// found in the LICENSE file.
4a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/ui/sync/sync_promo_ui.h"
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
7a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/basictypes.h"
8a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h"
9a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/compiler_specific.h"
10a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/signin/fake_signin_manager.h"
12a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
14a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
15a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
16a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
17a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)class SyncPromoUITest : public testing::Test {
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) public:
19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  SyncPromoUITest() {}
20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
21a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // testing::Test:
22a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
23a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    testing::Test::SetUp();
24a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    profile_.reset(new TestingProfile());
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
26a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
27a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) protected:
28a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void CreateSigninManager(const std::string& username) {
29a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    SigninManagerBase* signin_manager =
30a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        static_cast<FakeSigninManagerBase*>(
31a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)            SigninManagerFactory::GetInstance()->SetTestingFactoryAndUse(
32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                profile_.get(),
33a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                &FakeSigninManagerBase::Build));
34a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    signin_manager->Initialize(profile_.get(), NULL);
35a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (!username.empty()) {
37a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      ASSERT_TRUE(signin_manager);
38a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      signin_manager->SetAuthenticatedUsername(username);
39a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
40a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
41a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
42a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  void DisableSync() {
43a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    CommandLine::ForCurrentProcess()->AppendSwitch(switches::kDisableSync);
44a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
45a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) private:
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SyncPromoUITest);
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)};
51a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
52a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Verifies that ShouldShowSyncPromo returns false if sync is disabled by
53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// policy.
54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(SyncPromoUITest, ShouldShowSyncPromoSyncDisabled) {
55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CreateSigninManager("");
56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  DisableSync();
57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(SyncPromoUI::ShouldShowSyncPromo(profile_.get()));
58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
59a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
60a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Verifies that ShouldShowSyncPromo returns true if all conditions to
61a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// show the promo are met.
62a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)TEST_F(SyncPromoUITest, ShouldShowSyncPromoSyncEnabled) {
63a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CreateSigninManager("");
64a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#if defined(OS_CHROMEOS)
65a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  // No sync promo on CrOS.
66a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_FALSE(SyncPromoUI::ShouldShowSyncPromo(profile_.get()));
67a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#else
68a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  EXPECT_TRUE(SyncPromoUI::ShouldShowSyncPromo(profile_.get()));
69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#endif
70a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
71