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