feat(album): add pull-to-refresh to management grid
This commit is contained in:
@@ -7,9 +7,50 @@ import UIKit
|
||||
import XCTest
|
||||
@testable import suixinkan
|
||||
|
||||
/// 相册管理页选择态底部操作区测试。
|
||||
/// 相册管理页刷新、预览与选择态交互测试。
|
||||
@MainActor
|
||||
final class TravelAlbumDetailViewControllerTests: XCTestCase {
|
||||
func testPullToRefreshReloadsGridAndEndsRefreshing() async throws {
|
||||
let api = TravelAlbumMockAPI()
|
||||
api.infoResponse = TravelAlbum(id: 2, name: "测试相册")
|
||||
api.materialListResponses = [
|
||||
TravelAlbumListResponse(total: 1, list: []),
|
||||
TravelAlbumListResponse(total: 0, list: []),
|
||||
TravelAlbumListResponse(total: 1, list: [TravelAlbumMaterial(id: 1)]),
|
||||
TravelAlbumListResponse(total: 2, list: []),
|
||||
TravelAlbumListResponse(total: 1, list: []),
|
||||
TravelAlbumListResponse(
|
||||
total: 2,
|
||||
list: [TravelAlbumMaterial(id: 1), TravelAlbumMaterial(id: 2)]
|
||||
),
|
||||
]
|
||||
let controller = TravelAlbumDetailViewController(albumId: 2, api: api)
|
||||
let window = UIWindow(frame: CGRect(x: 0, y: 0, width: 390, height: 844))
|
||||
window.rootViewController = controller
|
||||
window.makeKeyAndVisible()
|
||||
defer { window.isHidden = true }
|
||||
controller.loadViewIfNeeded()
|
||||
controller.view.layoutIfNeeded()
|
||||
let collectionView = try XCTUnwrap(
|
||||
controller.view.findSubview { $0 is UICollectionView } as? UICollectionView
|
||||
)
|
||||
let refreshControl = try XCTUnwrap(collectionView.refreshControl)
|
||||
await waitUntil { api.materialRequests.count == 3 }
|
||||
|
||||
refreshControl.beginRefreshing()
|
||||
XCTAssertTrue(refreshControl.isRefreshing)
|
||||
refreshControl.sendActions(for: .valueChanged)
|
||||
await waitUntil {
|
||||
api.materialRequests.count == 6
|
||||
&& !refreshControl.isRefreshing
|
||||
&& collectionView.numberOfItems(inSection: 0) == 2
|
||||
}
|
||||
|
||||
XCTAssertEqual(refreshControl.accessibilityIdentifier, "travelAlbum.refreshControl")
|
||||
XCTAssertEqual(collectionView.numberOfItems(inSection: 0), 2)
|
||||
XCTAssertFalse(refreshControl.isRefreshing)
|
||||
}
|
||||
|
||||
func testPreviewDeleteHandlerCallsMaterialAPIAndPreservesServerFailure() async {
|
||||
let api = TravelAlbumMockAPI()
|
||||
let handler = TravelAlbumPreviewActionHandler(api: api)
|
||||
|
||||
Reference in New Issue
Block a user