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

Side by Side Diff: ios/chrome/browser/payments/payment_request_selector_view_controller_unittest.mm

Issue 2805273002: [Payment Request] Selector view controller (Closed)
Patch Set: Addressed comments Created 3 years, 8 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/payments/payment_request_selector_view_controller.h"
6
7 #include "base/mac/foundation_util.h"
8 #import "base/mac/scoped_nsobject.h"
lpromero 2017/04/14 12:18:10 No need in ARC.
Moe 2017/04/17 21:29:37 Done.
9 #import "ios/chrome/browser/payments/cells/payments_text_item.h"
10 #import "ios/chrome/browser/payments/payment_request_selector_view_controller_da ta_source.h"
11 #import "ios/chrome/browser/ui/autofill/cells/status_item.h"
12 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_text_item.h "
13 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h "
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 #if !defined(__has_feature) || !__has_feature(objc_arc)
17 #error "This file requires ARC support."
18 #endif
19
20 @interface TestPaymentRequestSelectorMediator
21 : NSObject<PaymentRequestSelectorViewControllerDataSource>
22
23 @property(nonatomic, copy) NSArray<CollectionViewItem*>* items;
24
25 @property(nonatomic, readwrite, assign) PaymentRequestSelectorState state;
26
27 @end
28
29 @implementation TestPaymentRequestSelectorMediator
30
31 @synthesize state = _state;
32 @synthesize selectedItemIndex = _selectedItemIndex;
33 @synthesize items = _items;
34
35 - (instancetype)init {
36 self = [super init];
37 if (self) {
38 _items = @[
39 [[CollectionViewTextItem alloc] initWithType:kItemTypeSelectableItem],
40 [[CollectionViewTextItem alloc] initWithType:kItemTypeSelectableItem]
41 ];
42 _selectedItemIndex = 0;
43 }
44 return self;
45 }
46
47 #pragma mark - PaymentRequestSelectorViewControllerDataSource
48
49 - (CollectionViewItem*)headerItem {
50 return [[CollectionViewItem alloc] initWithType:kItemTypeHeaderItem];
51 }
52
53 - (NSArray<CollectionViewItem*>*)selectableItems {
54 return _items;
55 }
56
57 - (CollectionViewItem*)selectableItemAtIndex:(NSUInteger)index {
58 return [_items objectAtIndex:index];
59 }
60
61 - (NSString*)addButtonTitle {
62 return @"Add item";
63 }
64
65 @end
66
67 class PaymentRequestSelectorViewControllerTest
68 : public CollectionViewControllerTest {
69 protected:
70 PaymentRequestSelectorViewControllerTest() {}
71
72 CollectionViewController* InstantiateController() override {
73 PaymentRequestSelectorViewController* viewController =
74 [[PaymentRequestSelectorViewController alloc] init];
75 mediator_.reset([[TestPaymentRequestSelectorMediator alloc] init]);
76 [viewController setDataSource:mediator_.get()];
77 return viewController;
78 }
79
80 PaymentRequestSelectorViewController*
81 GetPaymentRequestSelectorViewController() {
82 return base::mac::ObjCCastStrict<PaymentRequestSelectorViewController>(
83 controller());
84 }
85
86 base::scoped_nsobject<TestPaymentRequestSelectorMediator> mediator_;
lpromero 2017/04/14 12:18:10 No need for scoped_nsobject in ARC. TestPaymentRe
Moe 2017/04/17 21:29:37 Done.
87 };
88
89 // Tests that the correct number of items are displayed after loading the model
90 // and that the correct item appears to be selected.
91 TEST_F(PaymentRequestSelectorViewControllerTest, TestModel) {
92 CreateController();
93 CheckController();
94
95 [GetPaymentRequestSelectorViewController() loadModel];
96
97 ASSERT_EQ(1, NumberOfSections());
98 // One header item, two selectable items, and one add button.
99 ASSERT_EQ(4, NumberOfItemsInSection(0));
100
101 // The first item should be of type CollectionViewItem.
102 id item = GetCollectionViewItem(0, 0);
103 ASSERT_TRUE([item isMemberOfClass:[CollectionViewItem class]]);
104
105 // The next two selectable items should be of type CollectionViewTextItem. The
106 // first one should appear to be selected.
107 item = GetCollectionViewItem(0, 1);
108 ASSERT_TRUE([item isMemberOfClass:[CollectionViewTextItem class]]);
109 CollectionViewTextItem* selectable_item = item;
110 EXPECT_EQ(MDCCollectionViewCellAccessoryCheckmark,
111 selectable_item.accessoryType);
112
113 item = GetCollectionViewItem(0, 2);
114 ASSERT_TRUE([item isMemberOfClass:[CollectionViewTextItem class]]);
115 selectable_item = item;
116 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, selectable_item.accessoryType);
117
118 // The last item should be of type PaymentsTextItem.
119 item = GetCollectionViewItem(0, 3);
120 EXPECT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]);
121 }
122
123 // Tests that the correct number of items are displayed after loading the model
124 // in the pending state.
125 TEST_F(PaymentRequestSelectorViewControllerTest, TestModelPendingState) {
126 CreateController();
127 CheckController();
128
129 [mediator_ setState:PaymentRequestSelectorStatePending];
130 [GetPaymentRequestSelectorViewController() loadModel];
131
132 ASSERT_EQ(1, NumberOfSections());
133 // There should be only one item.
134 ASSERT_EQ(1, NumberOfItemsInSection(0));
135
136 // The item should be of type StatusItem.
137 id item = GetCollectionViewItem(0, 0);
138 EXPECT_TRUE([item isMemberOfClass:[StatusItem class]]);
139 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698