Files
MatchLiveTv/native/ios/MatchLiveTvTests/ScoreControllerTests.swift
Emiliano Frascaro 731b43ea88 Stabilizza diretta iOS e aggiunge test simulatore pre-release.
Corregge lifecycle RTMP/preview tra partite, reset tabellone, orientamento
con debounce, condivisione su iPad e script test_ios_simulator per CI locale.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-20 12:02:14 +02:00

59 lines
2.3 KiB
Swift

import XCTest
@testable import MatchLiveTv
@MainActor
final class ScoreControllerTests: XCTestCase {
func testBindNewSessionResetsScoreToZero() {
let controller = ScoreController(
scoreRepository: ScoreRepository(api: MatchLiveAPI()),
sessionCable: SessionCableService()
)
var previous = ScoreState()
previous.homePoints = 3
previous.awayPoints = 3
controller.bind(sessionId: "session-1", initial: previous)
XCTAssertEqual(controller.score.homePoints, 3)
controller.bind(sessionId: "session-2", initial: nil)
XCTAssertEqual(controller.score.homePoints, 0)
XCTAssertEqual(controller.score.awayPoints, 0)
}
func testBindNewSessionUsesServerInitialState() {
let controller = ScoreController(
scoreRepository: ScoreRepository(api: MatchLiveAPI()),
sessionCable: SessionCableService()
)
controller.bind(sessionId: "session-1", initial: ScoreState(homePoints: 2, awayPoints: 1))
var fresh = ScoreState()
fresh.homePoints = 1
fresh.awayPoints = 0
controller.bind(sessionId: "session-2", initial: fresh)
XCTAssertEqual(controller.score.homePoints, 1)
XCTAssertEqual(controller.score.awayPoints, 0)
}
func testIncrementHomeUpdatesPublishedScore() {
let controller = ScoreController(
scoreRepository: ScoreRepository(api: MatchLiveAPI()),
sessionCable: SessionCableService()
)
controller.bind(sessionId: "session-1", initial: ScoreState())
controller.incrementHome()
XCTAssertEqual(controller.score.homePoints, 1)
}
func testApplyBoardActionOptimisticThenConfirm() async {
let api = MatchLiveAPI()
let controller = ScoreController(
scoreRepository: ScoreRepository(api: api),
sessionCable: SessionCableService()
)
controller.bind(sessionId: "session-1", initial: ScoreState())
// Senza backend: fallisce e ripristina ma l'ottimistico deve almeno scattare durante la chiamata.
// Verifichiamo solo che applyOptimistic funzioni via applyAction locale.
controller.applyAction("home_point")
XCTAssertEqual(controller.score.homePoints, 1)
}
}