@@ -66,4 +66,72 @@ struct PointOfSaleCouponsControllerTests {
6666 // Then
6767 #expect( sut. itemsViewState == expectedViewState)
6868 }
69+
70+ @available ( iOS 17 . 0 , * )
71+ @Test func refreshItems_when_empty_coupons_then_results_in_empty_loaded_state( ) async throws {
72+ // Given
73+ let couponProvider = MockPointOfSaleCouponService ( )
74+ couponProvider. shouldReturnZeroItems = true
75+ let sut = PointOfSaleCouponsController ( itemProvider: couponProvider)
76+
77+ let expectedItemStackState = ItemsStackState ( root: . loaded( [ ] , hasMoreItems: false ) , itemStates: [ : ] )
78+ let expectedViewState = ItemsViewState ( containerState: . content, itemsStack: expectedItemStackState)
79+
80+ // When
81+ await sut. refreshItems ( base: . root)
82+
83+ // Then
84+ #expect( sut. itemsViewState == expectedViewState)
85+ }
86+
87+ @available ( iOS 17 . 0 , * )
88+ @Test func refreshItems_when_some_coupons_then_results_in_coupons_loaded_state( ) async throws {
89+ // Given
90+ let couponProvider = MockPointOfSaleCouponService ( )
91+ let expectedCoupons = MockPointOfSaleCouponService . makeInitialCoupons ( )
92+ let sut = PointOfSaleCouponsController ( itemProvider: couponProvider)
93+
94+ let expectedItemStackState = ItemsStackState ( root: . loaded( expectedCoupons, hasMoreItems: false ) , itemStates: [ : ] )
95+ let expectedViewState = ItemsViewState ( containerState: . content, itemsStack: expectedItemStackState)
96+
97+ // When
98+ await sut. refreshItems ( base: . root)
99+
100+ // Then
101+ #expect( sut. itemsViewState == expectedViewState)
102+ }
103+
104+ @available ( iOS 17 . 0 , * )
105+ @Test func loadNextItems_when_empty_coupons_then_results_in_empty_loaded_state( ) async throws {
106+ // Given
107+ let couponProvider = MockPointOfSaleCouponService ( )
108+ couponProvider. shouldReturnZeroItems = true
109+ let sut = PointOfSaleCouponsController ( itemProvider: couponProvider)
110+
111+ let expectedItemStackState = ItemsStackState ( root: . loaded( [ ] , hasMoreItems: false ) , itemStates: [ : ] )
112+ let expectedViewState = ItemsViewState ( containerState: . content, itemsStack: expectedItemStackState)
113+
114+ // When
115+ await sut. loadNextItems ( base: . root)
116+
117+ // Then
118+ #expect( sut. itemsViewState == expectedViewState)
119+ }
120+
121+ @available ( iOS 17 . 0 , * )
122+ @Test func loadNextItems_when_some_coupons_then_results_in_coupons_loaded_state( ) async throws {
123+ // Given
124+ let couponProvider = MockPointOfSaleCouponService ( )
125+ let expectedCoupons = MockPointOfSaleCouponService . makeInitialCoupons ( )
126+ let sut = PointOfSaleCouponsController ( itemProvider: couponProvider)
127+
128+ let expectedItemStackState = ItemsStackState ( root: . loaded( expectedCoupons, hasMoreItems: false ) , itemStates: [ : ] )
129+ let expectedViewState = ItemsViewState ( containerState: . content, itemsStack: expectedItemStackState)
130+
131+ // When
132+ await sut. loadNextItems ( base: . root)
133+
134+ // Then
135+ #expect( sut. itemsViewState == expectedViewState)
136+ }
69137}
0 commit comments