crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

NotificationNavigationBrokerTests.swift (3511B)


      1 import Foundation
      2 import Testing
      3 
      4 @testable import Crossmate
      5 
      6 @Suite("Notification navigation broker", .serialized)
      7 @MainActor
      8 struct NotificationNavigationBrokerTests {
      9     @Test("Game opens are delivered to the game handler")
     10     func gameOpenDelivered() {
     11         let broker = NotificationNavigationBroker.shared
     12         broker.onOpenGame = nil
     13         broker.onOpenGameList = nil
     14         broker.onOpenInviteInGameList = nil
     15         let gameID = UUID()
     16         var openedGameID: UUID?
     17         var openedList = false
     18 
     19         broker.onOpenGame = { openedGameID = $0 }
     20         broker.onOpenGameList = { openedList = true }
     21         broker.openGame(gameID)
     22 
     23         #expect(openedGameID == gameID)
     24         #expect(!openedList)
     25     }
     26 
     27     @Test("Game opens are buffered until the game handler is installed")
     28     func gameOpenBuffered() {
     29         let broker = NotificationNavigationBroker.shared
     30         broker.onOpenGame = nil
     31         broker.onOpenGameList = nil
     32         broker.onOpenInviteInGameList = nil
     33         let gameID = UUID()
     34         var openedGameIDs: [UUID] = []
     35 
     36         broker.openGame(gameID)
     37         #expect(openedGameIDs.isEmpty)
     38 
     39         broker.onOpenGame = { openedGameIDs.append($0) }
     40 
     41         #expect(openedGameIDs == [gameID])
     42     }
     43 
     44     @Test("Game List opens are delivered to the list handler")
     45     func gameListOpenDelivered() {
     46         let broker = NotificationNavigationBroker.shared
     47         broker.onOpenGame = nil
     48         broker.onOpenGameList = nil
     49         broker.onOpenInviteInGameList = nil
     50         var openedGameID: UUID?
     51         var openedList = false
     52 
     53         broker.onOpenGame = { openedGameID = $0 }
     54         broker.onOpenGameList = { openedList = true }
     55         broker.openGameList()
     56 
     57         #expect(openedGameID == nil)
     58         #expect(openedList)
     59     }
     60 
     61     @Test("Game List opens are buffered until the list handler is installed")
     62     func gameListOpenBuffered() {
     63         let broker = NotificationNavigationBroker.shared
     64         broker.onOpenGame = nil
     65         broker.onOpenGameList = nil
     66         broker.onOpenInviteInGameList = nil
     67         var openedListCount = 0
     68 
     69         broker.openGameList()
     70         #expect(openedListCount == 0)
     71 
     72         broker.onOpenGameList = { openedListCount += 1 }
     73 
     74         #expect(openedListCount == 1)
     75     }
     76 
     77     @Test("Invite Game List opens are delivered to the invite handler")
     78     func inviteGameListOpenDelivered() {
     79         let broker = NotificationNavigationBroker.shared
     80         broker.onOpenGame = nil
     81         broker.onOpenGameList = nil
     82         broker.onOpenInviteInGameList = nil
     83         let gameID = UUID()
     84         var openedInviteGameID: UUID?
     85         var openedList = false
     86 
     87         broker.onOpenGameList = { openedList = true }
     88         broker.onOpenInviteInGameList = { openedInviteGameID = $0 }
     89         broker.openGameList(inviteGameID: gameID)
     90 
     91         #expect(openedInviteGameID == gameID)
     92         #expect(!openedList)
     93     }
     94 
     95     @Test("Invite Game List opens are buffered until the invite handler is installed")
     96     func inviteGameListOpenBuffered() {
     97         let broker = NotificationNavigationBroker.shared
     98         broker.onOpenGame = nil
     99         broker.onOpenGameList = nil
    100         broker.onOpenInviteInGameList = nil
    101         let gameID = UUID()
    102         var openedInviteGameIDs: [UUID] = []
    103 
    104         broker.openGameList(inviteGameID: gameID)
    105         #expect(openedInviteGameIDs.isEmpty)
    106 
    107         broker.onOpenInviteInGameList = { openedInviteGameIDs.append($0) }
    108 
    109         #expect(openedInviteGameIDs == [gameID])
    110     }
    111 }