feat: 优化线下收款日历交互与选中态

This commit is contained in:
2026-08-26 14:19:02 +08:00
parent 4351c26e74
commit 9fce6ef713
5 changed files with 262 additions and 58 deletions
@@ -87,6 +87,35 @@ final class OfflineCollectionCalendarTests: XCTestCase {
state.movePage(40)
XCTAssertEqual(OfflineCollectionDate.businessDate(for: state.selectedDate), "2026-08-25")
}
func testCalendarPageNavigationKeepsPositionAndUsesTodayAtFutureBoundary() throws {
let maximum = try XCTUnwrap(OfflineCollectionDate.date(from: "2026-08-26"))
let friday = try XCTUnwrap(OfflineCollectionDate.date(from: "2026-08-21"))
var week = OfflineCollectionCalendarState(selectedDate: friday, maximumDate: maximum)
XCTAssertTrue(week.canMovePage(1))
week.movePage(1)
XCTAssertEqual(OfflineCollectionDate.businessDate(for: week.selectedDate), "2026-08-26")
XCTAssertFalse(week.canMovePage(1))
let tuesday = try XCTUnwrap(OfflineCollectionDate.date(from: "2026-08-25"))
week = OfflineCollectionCalendarState(selectedDate: tuesday, maximumDate: maximum)
week.movePage(-1)
XCTAssertEqual(OfflineCollectionDate.businessDate(for: week.selectedDate), "2026-08-18")
let march = try XCTUnwrap(OfflineCollectionDate.date(from: "2025-03-31"))
var month = OfflineCollectionCalendarState(selectedDate: march, maximumDate: maximum, mode: .month)
month.movePage(-1)
XCTAssertEqual(OfflineCollectionDate.businessDate(for: month.selectedDate), "2025-02-28")
}
func testSelectedWeekRowIndexAndModeTogglePreserveDate() throws {
let selected = try XCTUnwrap(OfflineCollectionDate.date(from: "2026-08-12"))
var state = OfflineCollectionCalendarState(selectedDate: selected, maximumDate: selected)
XCTAssertEqual(state.selectedWeekRowIndex, 2)
state.toggleMode()
XCTAssertEqual(OfflineCollectionDate.businessDate(for: state.selectedDate), "2026-08-12")
XCTAssertEqual(state.selectedWeekRowIndex, 2)
}
}
/// 线下收款 ViewModel 的并发与幂等行为测试。