1// Copyright (c) 2012 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#import "chrome/browser/ui/cocoa/one_click_signin_bubble_controller.h"
6
7#import <Cocoa/Cocoa.h>
8
9#include "base/bind.h"
10#include "base/compiler_specific.h"
11#import "base/mac/scoped_nsobject.h"
12#include "base/memory/weak_ptr.h"
13#import "chrome/browser/ui/cocoa/browser_window_cocoa.h"
14#include "chrome/browser/ui/cocoa/cocoa_profile_test.h"
15#import "chrome/browser/ui/cocoa/one_click_signin_view_controller.h"
16#include "chrome/browser/ui/sync/one_click_signin_sync_starter.h"
17#include "testing/gmock/include/gmock/gmock.h"
18#include "testing/gtest/include/gtest/gtest.h"
19#import "testing/gtest_mac.h"
20
21namespace {
22
23using ::testing::_;
24
25class OneClickSigninBubbleControllerTest : public CocoaProfileTest {
26 public:
27  OneClickSigninBubbleControllerTest()
28      : weak_ptr_factory_(this),
29        start_sync_callback_(
30            base::Bind(&OneClickSigninBubbleControllerTest::OnStartSync,
31                       weak_ptr_factory_.GetWeakPtr())) {}
32
33  virtual void SetUp() OVERRIDE {
34    CocoaProfileTest::SetUp();
35    BrowserWindowCocoa* browser_window =
36        static_cast<BrowserWindowCocoa*>(browser()->window());
37    controller_.reset([[OneClickSigninBubbleController alloc]
38            initWithBrowserWindowController:browser_window->cocoa_controller()
39                                webContents:nil
40                               errorMessage:nil
41                                   callback:start_sync_callback_]);
42    [controller_ showWindow:nil];
43    EXPECT_NSEQ(@"OneClickSigninBubble",
44                [[controller_ viewController] nibName]);
45  }
46
47  virtual void TearDown() OVERRIDE {
48    controller_.reset();
49    CocoaProfileTest::TearDown();
50  }
51
52  MOCK_METHOD1(OnStartSync, void(OneClickSigninSyncStarter::StartSyncMode));
53
54 protected:
55  base::WeakPtrFactory<OneClickSigninBubbleControllerTest> weak_ptr_factory_;
56  BrowserWindow::StartSyncCallback start_sync_callback_;
57  base::scoped_nsobject<OneClickSigninBubbleController> controller_;
58
59 private:
60  DISALLOW_COPY_AND_ASSIGN(OneClickSigninBubbleControllerTest);
61};
62
63// Test that the bubble does not sync if the OK button is clicked.
64TEST_F(OneClickSigninBubbleControllerTest, OK) {
65  EXPECT_CALL(*this, OnStartSync(
66      OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0);
67  [[controller_ viewController] ok:nil];
68}
69
70// Test that the bubble does not sync if the Undo button
71// is clicked. Callback should be called to abort the sync.
72TEST_F(OneClickSigninBubbleControllerTest, Undo) {
73  EXPECT_CALL(*this, OnStartSync(
74      OneClickSigninSyncStarter::UNDO_SYNC)).Times(0);
75  [[controller_ viewController] onClickUndo:nil];
76}
77
78// Test that the bubble does not sync if the bubble is closed.
79TEST_F(OneClickSigninBubbleControllerTest, Close) {
80  EXPECT_CALL(*this, OnStartSync(
81      OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS)).Times(0);
82  [controller_ close];
83}
84
85}  // namespace
86