Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Side by Side Diff: ios/chrome/browser/ui/authentication/signin_promo_view_mediator_unittest.mm

Issue 2749703003: Adding mediator for Sign-in promo (Closed)
Patch Set: Visual constraints Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "ios/chrome/browser/ui/authentication/signin_promo_view_mediator.h"
6
7 #import "ios/third_party/material_components_ios/src/components/Buttons/src/Mate rialButtons.h"
8 #import "testing/platform_test.h"
9 #import "third_party/ocmock/OCMock/OCMock.h"
10 #include "third_party/ocmock/gtest_support.h"
11
12 #if !defined(__has_feature) || !__has_feature(objc_arc)
13 #error "This file requires ARC support."
14 #endif
15
16 namespace {
17
18 class SigninPromoViewMediatorTest : public PlatformTest {
19 protected:
20 void SetUp() override {
21 _mediator = [[SigninPromoViewMediator alloc] init];
22
23 _signinPromoView = OCMStrictClassMock([SigninPromoView class]);
lpromero 2017/03/24 10:36:20 Why not just a real SigninPromoView? You don't rea
jlebel 2017/03/24 20:59:09 I have a better control about what is done on Sign
lpromero 2017/03/27 13:14:46 You mean that the view takes the configurator data
24 _primaryButton = OCMStrictClassMock([MDCFlatButton class]);
25 OCMStub([_signinPromoView primaryButton]).andReturn(_primaryButton);
26 _secondaryButton = OCMStrictClassMock([MDCFlatButton class]);
27 OCMStub([_signinPromoView secondaryButton]).andReturn(_secondaryButton);
28 }
29
30 void TearDown() override {
31 _mediator = nil;
32 EXPECT_OCMOCK_VERIFY((id)_signinPromoView);
33 EXPECT_OCMOCK_VERIFY((id)_primaryButton);
34 EXPECT_OCMOCK_VERIFY((id)_secondaryButton);
35 }
36
37 void ExpectColdStartConfiguration() {
38 OCMExpect([_signinPromoView setMode:SigninPromoViewColdStartMode]);
39 _imageViewProfileImage = nil;
40 _primaryButtonTitle = nil;
41 OCMExpect([_primaryButton setTitle:[OCMArg checkWithBlock:^BOOL(id value) {
42 _primaryButtonTitle = value;
43 return YES;
44 }]
45 forState:UIControlStateNormal]);
46 _secondaryButtonTitle = nil;
47 }
48
49 void CheckColdStartConfiguration() {
50 EXPECT_EQ(nil, _imageViewProfileImage);
51 EXPECT_NE(nil, _primaryButtonTitle);
52 EXPECT_EQ(nil, _secondaryButtonTitle);
53 }
54
55 void ExpectWarmStartConfiguration() {
56 OCMExpect([_signinPromoView setMode:SigninPromoViewWarmStartMode]);
57 OCMExpect([_signinPromoView
58 setProfileImage:[OCMArg checkWithBlock:^BOOL(id value) {
59 _imageViewProfileImage = value;
60 return YES;
61 }]]);
62 _primaryButtonTitle = nil;
63 OCMExpect([_primaryButton setTitle:[OCMArg checkWithBlock:^BOOL(id value) {
64 _primaryButtonTitle = value;
65 return YES;
66 }]
67 forState:UIControlStateNormal]);
68 _secondaryButtonTitle = nil;
69 OCMExpect([_secondaryButton
70 setTitle:[OCMArg checkWithBlock:^BOOL(id value) {
71 _secondaryButtonTitle = value;
72 return YES;
73 }]
74 forState:UIControlStateNormal]);
75 }
76
77 void CheckWarmStartConfiguration() {
78 EXPECT_NE(nil, _imageViewProfileImage);
79 NSRange profileNameRange =
80 [_primaryButtonTitle rangeOfString:_mediator.userFullName];
81 EXPECT_NE(profileNameRange.length, 0u);
82 NSRange profileEmailRange =
83 [_secondaryButtonTitle rangeOfString:_mediator.userEmail];
84 EXPECT_NE(profileEmailRange.length, 0u);
85 }
86
87 // Mediator used for the tests.
88 SigninPromoViewMediator* _mediator;
lpromero 2017/03/24 10:36:20 C++ class, so use trailing underscore and snake ca
jlebel 2017/03/24 20:59:09 Done.
89
90 // Mocks.
91 SigninPromoView* _signinPromoView;
92 MDCFlatButton* _primaryButton;
93 MDCFlatButton* _secondaryButton;
94
95 // Value set by -[SigninPromoView setProfileImage:].
96 UIImage* _imageViewProfileImage;
97 // Value set by -[_primaryButton setTitle: forState:UIControlStateNormal].
98 NSString* _primaryButtonTitle;
99 // Value set by -[_secondaryButton setTitle: forState:UIControlStateNormal].
100 NSString* _secondaryButtonTitle;
101 };
102
103 TEST_F(SigninPromoViewMediatorTest, ColdStartConfigureSigninPromoView) {
104 EXPECT_TRUE(_mediator.coldStart);
lpromero 2017/03/24 10:36:20 I don;t see this property on the mediator. Where i
jlebel 2017/03/24 20:59:10 Done.
105 EXPECT_EQ(nil, _mediator.userFullName);
106 EXPECT_EQ(nil, _mediator.userEmail);
107 EXPECT_EQ(nil, _mediator.userImage);
108
109 ExpectColdStartConfiguration();
110 [_mediator configureSigninPromoView:_signinPromoView];
111 CheckColdStartConfiguration();
112 }
113
114 TEST_F(SigninPromoViewMediatorTest,
115 WarmStartConfigureSigninPromoViewWithoutImage) {
116 _mediator.userFullName = @"John Doe";
117 _mediator.userEmail = @"johndoe@example.com";
118 EXPECT_FALSE(_mediator.coldStart);
119
120 ExpectWarmStartConfiguration();
121 [_mediator configureSigninPromoView:_signinPromoView];
122 CheckWarmStartConfiguration();
123 }
124
125 TEST_F(SigninPromoViewMediatorTest,
126 WarmStartConfigureSigninPromoViewWithImage) {
127 _mediator.userFullName = @"John Doe";
128 _mediator.userEmail = @"johndoe@example.com";
129 _mediator.userImage = [[UIImage alloc] init];
130 EXPECT_FALSE(_mediator.coldStart);
131
132 ExpectWarmStartConfiguration();
133 [_mediator configureSigninPromoView:_signinPromoView];
134 CheckWarmStartConfiguration();
135 EXPECT_EQ(_mediator.userImage, _imageViewProfileImage);
136 }
137
138 // Cold start configuration and then warm start configuration.
139 TEST_F(SigninPromoViewMediatorTest, TwoConfigureSigninPromoView) {
140 ExpectColdStartConfiguration();
141 [_mediator configureSigninPromoView:_signinPromoView];
142 CheckColdStartConfiguration();
143
144 _mediator.userFullName = @"John Doe";
145 _mediator.userEmail = @"johndoe@example.com";
146
147 ExpectWarmStartConfiguration();
148 [_mediator configureSigninPromoView:_signinPromoView];
149 CheckWarmStartConfiguration();
150 }
151
152 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698