OLD | NEW |
---|---|
(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" | |
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 PaymentRequestSelectorMediator | |
gambard
2017/04/10 09:47:35
Do you really want to create a class with a name a
Moe
2017/04/10 17:53:50
Done.
| |
21 : NSObject<PaymentRequestSelectorViewControllerDataSource> | |
22 | |
23 @property(nonatomic, strong) NSArray<CollectionViewItem*>* items; | |
24 @property(nonatomic, assign) NSUInteger selectedItemIndex; | |
25 | |
26 @end | |
27 | |
28 @implementation PaymentRequestSelectorMediator | |
29 | |
30 @synthesize state = _state; | |
31 @synthesize selectedItemIndex = _selectedItemIndex; | |
32 @synthesize items = _items; | |
33 | |
34 - (instancetype)init { | |
35 self = [super init]; | |
36 if (self) { | |
37 _items = @[ | |
38 [[CollectionViewTextItem alloc] initWithType:kItemTypeSelectableItem], | |
gambard
2017/04/10 09:47:35
This would DCHECK in the styling done in cellForIt
Moe
2017/04/10 17:53:50
It wouldn't because it has an expected item type.
| |
39 [[CollectionViewTextItem alloc] initWithType:kItemTypeSelectableItem] | |
40 ]; | |
41 _selectedItemIndex = 0; | |
42 } | |
43 return self; | |
44 } | |
45 | |
46 #pragma mark - PaymentRequestSelectorViewControllerDataSource | |
47 | |
48 - (CollectionViewItem*)headerItem { | |
49 return [[CollectionViewItem alloc] initWithType:kItemTypeHeaderItem]; | |
50 } | |
51 | |
52 - (NSArray<CollectionViewItem*>*)selectableItems { | |
53 return _items; | |
54 } | |
55 | |
56 - (CollectionViewItem*)selectableItemAtIndex:(NSUInteger)index { | |
57 return [_items objectAtIndex:index]; | |
58 } | |
59 | |
60 - (NSString*)addButtonTitle { | |
61 return @"Add item"; | |
62 } | |
63 | |
64 @end | |
65 | |
66 class PaymentRequestSelectorViewControllerTest | |
67 : public CollectionViewControllerTest { | |
68 protected: | |
69 PaymentRequestSelectorViewControllerTest() {} | |
70 | |
71 CollectionViewController* NewController() override NS_RETURNS_RETAINED { | |
72 PaymentRequestSelectorViewController* viewController = | |
73 [[PaymentRequestSelectorViewController alloc] init]; | |
74 mediator_.reset([[PaymentRequestSelectorMediator alloc] init]); | |
75 [viewController setDataSource:mediator_.get()]; | |
76 return viewController; | |
77 } | |
78 | |
79 PaymentRequestSelectorViewController* | |
80 GetPaymentRequestSelectorViewController() { | |
81 return base::mac::ObjCCastStrict<PaymentRequestSelectorViewController>( | |
82 controller()); | |
83 } | |
84 | |
85 base::scoped_nsobject<PaymentRequestSelectorMediator> mediator_; | |
86 }; | |
87 | |
88 // Tests that the correct number of items are displayed after loading the model | |
89 // and that the correct item appears to be selected. | |
90 TEST_F(PaymentRequestSelectorViewControllerTest, TestModel) { | |
91 CreateController(); | |
92 CheckController(); | |
93 | |
94 [GetPaymentRequestSelectorViewController() loadModel]; | |
95 | |
96 ASSERT_EQ(1, NumberOfSections()); | |
97 // One header item, two selectable items, and one add button. | |
98 ASSERT_EQ(4, NumberOfItemsInSection(0)); | |
99 | |
100 // The first item should be of type CollectionViewItem. | |
101 id item = GetCollectionViewItem(0, 0); | |
102 ASSERT_TRUE([item isMemberOfClass:[CollectionViewItem class]]); | |
103 | |
104 // The next two selectable items should be of type CollectionViewTextItem. The | |
105 // first one should appear to be selected. | |
106 item = GetCollectionViewItem(0, 1); | |
107 ASSERT_TRUE([item isMemberOfClass:[CollectionViewTextItem class]]); | |
108 CollectionViewTextItem* selectable_item = item; | |
109 EXPECT_EQ(MDCCollectionViewCellAccessoryCheckmark, | |
110 selectable_item.accessoryType); | |
111 | |
112 item = GetCollectionViewItem(0, 2); | |
113 ASSERT_TRUE([item isMemberOfClass:[CollectionViewTextItem class]]); | |
114 selectable_item = item; | |
115 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, selectable_item.accessoryType); | |
116 | |
117 // The last item should be of type PaymentsTextItem. | |
118 item = GetCollectionViewItem(0, 3); | |
119 EXPECT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]); | |
120 } | |
121 | |
122 // Tests that the correct number of items are displayed after loading the model | |
123 // in the pending state. | |
124 TEST_F(PaymentRequestSelectorViewControllerTest, TestModelPendingState) { | |
125 CreateController(); | |
126 CheckController(); | |
127 | |
128 [mediator_ setState:PaymentRequestSelectorViewControllerStatePending]; | |
129 [GetPaymentRequestSelectorViewController() loadModel]; | |
130 | |
131 ASSERT_EQ(1, NumberOfSections()); | |
132 // There should be only one item. | |
133 ASSERT_EQ(1, NumberOfItemsInSection(0)); | |
134 | |
135 // The item should be of type StatusItem. | |
136 id item = GetCollectionViewItem(0, 0); | |
137 EXPECT_TRUE([item isMemberOfClass:[StatusItem class]]); | |
138 } | |
OLD | NEW |