Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 39 additions & 8 deletions AIProject/iCoTests/ChartViewModel_Axis_Tests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,47 @@ import XCTest
@testable import iCo

/// 차트 X축 도메인/초기 스크롤 시각 계산을 검증하는 테스트
/// - 핵심: 상한은 "마지막 데이터 +5분"과 정확히 일치해야 하며,
/// 하한은 내부에서 Date()를 사용하는 특성상 (호출 시각 t0~t1) 사이의 -24h 범위여야 함.
@MainActor
final class ChartViewModel_Axis_Tests: XCTestCase {
/// 24h 미만(span < 24h)일 때:
/// - xAxisDomain == first...last
/// - scrollToTime == last
func test_xAxisDomain_and_scrollToTime() {
let base = Date()
let last = base.addingTimeInterval(600) // +10분
let data = [ makePrice(base, 100, 100),
makePrice(last, 110, 111) ]

let vm = ChartViewModel(coin: .init(id: "KRW-SOL", koreanName: "솔라나"))


let domain = vm.xAxisDomain(for: data)

XCTAssertEqual(domain.lowerBound.timeIntervalSince1970,
base.timeIntervalSince1970,
accuracy: 1)
XCTAssertEqual(domain.upperBound.timeIntervalSince1970,
last.timeIntervalSince1970,
accuracy: 1)
XCTAssertEqual(vm.scrollToTime(for: data).timeIntervalSince1970,
last.timeIntervalSince1970,
accuracy: 1)
}

/// 24h 이상(span ≥ 24h)일 때:
/// - xAxisDomain.lowerBound ≈ (now - 24h)
/// - xAxisDomain.upperBound == (last + 5m)
/// - scrollToTime == (last + 5m)
func test_xAxisDomain_and_scrollToTime_whenSpanIs24hOrMore() {
let base = Date()
// first = base, last = base + 24h + 10m ⇒ span ≥ 24h
let last = base.addingTimeInterval(24*60*60 + 10*60)
let data = [
makePrice(base, 100, 100),
makePrice(last, 110, 111)
]

let vm = ChartViewModel(coin: .init(id: "KRW-SOL", koreanName: "솔라나"))

// 호출 전후 now 경계 캡처
let t0 = Date()
let domain = vm.xAxisDomain(for: data)
Expand All @@ -31,12 +60,14 @@ final class ChartViewModel_Axis_Tests: XCTestCase {
let expectedUpper = last.addingTimeInterval(60 * 5)

XCTAssert(domain.lowerBound >= expectedLowerMin && domain.lowerBound <= expectedLowerMax,
"lowerBound이 호출 시각 기준 24h 윈도우와 일치해야 함")
XCTAssertEqual(domain.upperBound.timeIntervalSince1970, expectedUpper.timeIntervalSince1970, accuracy: 1)

// 초기 스크롤 지점은 마지막 데이터 +5분
"lowerBound는 호출 시각(now) 기준 -24h 범위여야 함")
XCTAssertEqual(domain.upperBound.timeIntervalSince1970,
expectedUpper.timeIntervalSince1970,
accuracy: 1,
"upperBound는 last+5m 이어야 함")
XCTAssertEqual(vm.scrollToTime(for: data).timeIntervalSince1970,
expectedUpper.timeIntervalSince1970,
accuracy: 1)
accuracy: 1,
"scrollToTime은 24h 이상일 때 last+5m이어야 함")
}
}
Loading