@@ -101,7 +101,7 @@ final class DashboardViewModelTests: XCTestCase {
101101 stores. whenReceivingAction ( ofType: JustInTimeMessageAction . self) { action in
102102 switch action {
103103 case let . loadMessage( _, _, _, completion) :
104- completion ( . success( Yosemite . JustInTimeMessage. fake ( ) ) )
104+ completion ( . success( [ Yosemite . JustInTimeMessage. fake ( ) ] ) )
105105 default :
106106 XCTFail ( " Received unsupported action: \( action) " )
107107 }
@@ -118,7 +118,7 @@ final class DashboardViewModelTests: XCTestCase {
118118 func test_view_model_syncs_just_in_time_messages_when_ineligible_for_products_onboarding( ) {
119119 // Given
120120 let message = Yosemite . JustInTimeMessage. fake ( ) . copy ( title: " JITM Message " )
121- prepareStoresToShowJustInTimeMessage ( . success( message) )
121+ prepareStoresToShowJustInTimeMessage ( . success( [ message] ) )
122122 let viewModel = DashboardViewModel ( stores: stores)
123123
124124 // When
@@ -128,7 +128,7 @@ final class DashboardViewModelTests: XCTestCase {
128128 XCTAssertEqual ( viewModel. announcementViewModel? . title, " JITM Message " )
129129 }
130130
131- func prepareStoresToShowJustInTimeMessage( _ response: Result < Yosemite . JustInTimeMessage ? , Error > ) {
131+ func prepareStoresToShowJustInTimeMessage( _ response: Result < [ Yosemite . JustInTimeMessage ] , Error > ) {
132132 stores. whenReceivingAction ( ofType: ProductAction . self) { action in
133133 switch action {
134134 case let . checkProductsOnboardingEligibility( _, completion) :
@@ -160,7 +160,7 @@ final class DashboardViewModelTests: XCTestCase {
160160 stores. whenReceivingAction ( ofType: JustInTimeMessageAction . self) { action in
161161 switch action {
162162 case let . loadMessage( _, _, _, completion) :
163- completion ( . success( nil ) )
163+ completion ( . success( [ ] ) )
164164 default :
165165 XCTFail ( " Received unsupported action: \( action) " )
166166 }
@@ -188,7 +188,7 @@ final class DashboardViewModelTests: XCTestCase {
188188 stores. whenReceivingAction ( ofType: JustInTimeMessageAction . self) { action in
189189 switch action {
190190 case let . loadMessage( _, _, _, completion) :
191- completion ( . success( Yosemite . JustInTimeMessage. fake ( ) ) )
191+ completion ( . success( [ Yosemite . JustInTimeMessage. fake ( ) ] ) )
192192 default :
193193 XCTFail ( " Received unsupported action: \( action) " )
194194 }
@@ -202,11 +202,14 @@ final class DashboardViewModelTests: XCTestCase {
202202 XCTAssertNil ( viewModel. announcementViewModel)
203203 }
204204
205- func test_fetch_success_analytics_logged_when_just_in_time_message_retrieved ( ) {
205+ func test_fetch_success_analytics_logged_when_just_in_time_messages_retrieved ( ) {
206206 // Given
207207 let message = Yosemite . JustInTimeMessage. fake ( ) . copy ( messageID: " test-message-id " ,
208208 featureClass: " test-feature-class " )
209- prepareStoresToShowJustInTimeMessage ( . success( message) )
209+
210+ let secondMessage = Yosemite . JustInTimeMessage. fake ( ) . copy ( messageID: " test-message-id-2 " ,
211+ featureClass: " test-feature-class-2 " )
212+ prepareStoresToShowJustInTimeMessage ( . success( [ message, secondMessage] ) )
210213 let viewModel = DashboardViewModel ( stores: stores, analytics: analytics)
211214
212215 // When
@@ -221,7 +224,22 @@ final class DashboardViewModelTests: XCTestCase {
221224
222225 assertEqual ( " my_store " , properties [ " source " ] as? String )
223226 assertEqual ( " test-message-id " , properties [ " jitm " ] as? String )
224- assertEqual ( 1 , properties [ " count " ] as? Int64 )
227+ assertEqual ( 2 , properties [ " count " ] as? Int64 )
228+ }
229+
230+ func test_when_two_messages_are_received_only_the_first_is_displayed( ) {
231+ // Given
232+ let message = Yosemite . JustInTimeMessage. fake ( ) . copy ( title: " Higher priority JITM " )
233+
234+ let secondMessage = Yosemite . JustInTimeMessage. fake ( ) . copy ( title: " Lower priority JITM " )
235+ prepareStoresToShowJustInTimeMessage ( . success( [ message, secondMessage] ) )
236+ let viewModel = DashboardViewModel ( stores: stores, analytics: analytics)
237+
238+ // When
239+ viewModel. syncAnnouncements ( for: sampleSiteID)
240+
241+ // Then
242+ XCTAssertEqual ( viewModel. announcementViewModel? . title, " Higher priority JITM " )
225243 }
226244
227245 func test_fetch_failure_analytics_logged_when_just_in_time_message_errors( ) {
0 commit comments