feat(album): add pull-to-refresh to album entry

This commit is contained in:
2026-08-17 15:19:21 +08:00
parent 76aa7bb4aa
commit b127495e52
3 changed files with 48 additions and 7 deletions
+16 -1
View File
@@ -123,6 +123,19 @@ final class TravelAlbumEntryViewModelTests: XCTestCase {
XCTAssertEqual(viewModel.albums.first?.name, "A")
}
func testPullRefreshFailureKeepsExistingAlbums() async {
let api = TravelAlbumMockAPI()
api.listResponse = TravelAlbumListResponse(total: 1, list: [TravelAlbum(id: 1, name: "A")])
let viewModel = TravelAlbumEntryViewModel(currentScenicIdProvider: { 1 })
await viewModel.loadAlbums(api: api)
api.listError = APIError.serverCode(500, "刷新失败")
await viewModel.refreshAlbums(api: api)
XCTAssertEqual(viewModel.albumTotal, 1)
XCTAssertEqual(viewModel.albums.map(\.id), [1])
}
func testPreShootRequiresSinglePrice() async {
let api = TravelAlbumMockAPI()
let viewModel = TravelAlbumEntryViewModel(currentScenicIdProvider: { 1 })
@@ -1226,6 +1239,7 @@ final class TravelAlbumMockAPI: TravelAlbumServing {
var availableOrdersResponse: [TravelAlbumAvailableOrder] = []
var listResponse = TravelAlbumListResponse<TravelAlbum>()
var listError: Error?
var createResponse = TravelAlbumCreateResponse(id: 0)
var infoResponse = TravelAlbum()
var materialListResponses: [TravelAlbumListResponse<TravelAlbumMaterial>] = []
@@ -1281,7 +1295,8 @@ final class TravelAlbumMockAPI: TravelAlbumServing {
}
func list(page: Int, pageSize: Int) async throws -> TravelAlbumListResponse<TravelAlbum> {
listResponse
if let listError { throw listError }
return listResponse
}
func info(id: Int) async throws -> TravelAlbum {