Баннер Telegram-паритета и прямой переход в чат по тапу
This commit is contained in:
115
RosettaTests/ChatListBottomInsetTests.swift
Normal file
115
RosettaTests/ChatListBottomInsetTests.swift
Normal file
@@ -0,0 +1,115 @@
|
||||
import XCTest
|
||||
@testable import Rosetta
|
||||
|
||||
/// Tests for ChatList bottom inset bug fix.
|
||||
/// Bug: Unwanted horizontal strip appears at bottom of ChatList (not in Calls/Settings).
|
||||
/// Fix: keep platform-specific bottom inset (72 on iOS < 26 custom tab bar, 0 on iOS 26+).
|
||||
final class ChatListBottomInsetTests: XCTestCase {
|
||||
|
||||
var controller: ChatListCollectionController!
|
||||
|
||||
override func setUp() {
|
||||
super.setUp()
|
||||
controller = ChatListCollectionController()
|
||||
}
|
||||
|
||||
override func tearDown() {
|
||||
controller = nil
|
||||
super.tearDown()
|
||||
}
|
||||
|
||||
private var expectedBottomInset: CGFloat {
|
||||
if #available(iOS 26, *) {
|
||||
return 0
|
||||
} else {
|
||||
return 72
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - RED Phase Tests (These FAIL before fix, PASS after fix)
|
||||
|
||||
/// Test 1: contentInset.bottom should match active tab implementation.
|
||||
func testContentInsetBottomMatchesPlatform() {
|
||||
// Force view load to trigger setupCollectionView()
|
||||
_ = controller.view
|
||||
|
||||
let collectionView = controller.value(forKey: "collectionView") as? UICollectionView
|
||||
XCTAssertNotNil(collectionView, "Collection view should be initialized")
|
||||
|
||||
// iOS 26+: native TabView handles inset automatically (0 here).
|
||||
// iOS < 26: custom floating tab bar needs 72pt manual inset.
|
||||
XCTAssertEqual(
|
||||
collectionView?.contentInset.bottom,
|
||||
expectedBottomInset,
|
||||
"Bottom inset should match platform-specific tab bar behavior"
|
||||
)
|
||||
}
|
||||
|
||||
/// Test 2: Verify automatic safe area adjustment is enabled
|
||||
func testContentInsetAdjustmentBehaviorIsAutomatic() {
|
||||
_ = controller.view
|
||||
|
||||
let collectionView = controller.value(forKey: "collectionView") as? UICollectionView
|
||||
XCTAssertNotNil(collectionView, "Collection view should be initialized")
|
||||
|
||||
XCTAssertEqual(
|
||||
collectionView?.contentInsetAdjustmentBehavior,
|
||||
.automatic,
|
||||
"Should use automatic adjustment (respects tab bar safe area)"
|
||||
)
|
||||
}
|
||||
|
||||
/// Test 3: Verify no excessive bottom inset (must not exceed custom tab bar space).
|
||||
func testBottomInsetIsNotExcessive() {
|
||||
_ = controller.view
|
||||
|
||||
let collectionView = controller.value(forKey: "collectionView") as? UICollectionView
|
||||
XCTAssertNotNil(collectionView, "Collection view should be initialized")
|
||||
|
||||
let maxReasonableInset: CGFloat = 72
|
||||
XCTAssertLessThanOrEqual(
|
||||
collectionView?.contentInset.bottom ?? 0,
|
||||
maxReasonableInset,
|
||||
"Bottom inset should not exceed \(maxReasonableInset)pt"
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Integration Tests
|
||||
|
||||
/// Test 4: Verify controller can be instantiated without crashes
|
||||
func testControllerInitialization() {
|
||||
XCTAssertNotNil(controller, "Controller should initialize successfully")
|
||||
_ = controller.view
|
||||
XCTAssertNotNil(controller.view, "View should load without crashes")
|
||||
}
|
||||
|
||||
/// Test 5: Verify collection view constraints are properly set
|
||||
func testCollectionViewConstraints() {
|
||||
_ = controller.view
|
||||
|
||||
let collectionView = controller.value(forKey: "collectionView") as? UICollectionView
|
||||
XCTAssertNotNil(collectionView, "Collection view should be initialized")
|
||||
|
||||
// Collection view should be edge-to-edge (no custom insets)
|
||||
XCTAssertFalse(
|
||||
collectionView?.translatesAutoresizingMaskIntoConstraints ?? true,
|
||||
"Should use Auto Layout constraints"
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Performance Tests
|
||||
|
||||
/// Test 6: Verify content inset query is fast (not computed on every access)
|
||||
func testContentInsetPerformance() {
|
||||
_ = controller.view
|
||||
|
||||
let collectionView = controller.value(forKey: "collectionView") as? UICollectionView
|
||||
XCTAssertNotNil(collectionView)
|
||||
|
||||
measure {
|
||||
for _ in 0..<1000 {
|
||||
_ = collectionView?.contentInset.bottom
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user