remove Expo project and all related files
Remove the entire Expo/React Native application: routes (app/), source code (src/), assets, iOS native build, config plugins, StoreKit config, npm dependencies, TypeScript/ESLint/Vitest configs, and Expo-specific documentation. The repository now contains only: admin-web, supabase, youtube-worker, tabatago-swift, docs, scripts, and CI/tooling configs.
This commit is contained in:
62
tabatago-swift/TabataGoTests/TabataGoTests.swift
Normal file
62
tabatago-swift/TabataGoTests/TabataGoTests.swift
Normal file
@@ -0,0 +1,62 @@
|
||||
import XCTest
|
||||
@testable import TabataGo
|
||||
|
||||
final class TabataGoTests: XCTestCase {
|
||||
|
||||
func testStreakComputationConsecutiveDays() {
|
||||
// Consecutive 3 days should yield streak of 3
|
||||
let calendar = Calendar.current
|
||||
let today = calendar.startOfDay(for: Date())
|
||||
let sessions: [Date] = [
|
||||
today,
|
||||
calendar.date(byAdding: .day, value: -1, to: today)!,
|
||||
calendar.date(byAdding: .day, value: -2, to: today)!,
|
||||
]
|
||||
// Validate unique day count
|
||||
XCTAssertEqual(sessions.count, 3)
|
||||
}
|
||||
|
||||
func testWorkoutSessionCompletionRate() {
|
||||
let session = WorkoutSession(
|
||||
programId: "test",
|
||||
programTitle: "Test",
|
||||
bodyZone: "full",
|
||||
level: "Beginner",
|
||||
startedAt: Date(),
|
||||
completedAt: Date(),
|
||||
durationSeconds: 1440,
|
||||
caloriesBurned: 180,
|
||||
roundsCompleted: 8,
|
||||
totalRounds: 8
|
||||
)
|
||||
XCTAssertEqual(session.completionRate, 1.0)
|
||||
}
|
||||
|
||||
func testWorkoutSessionPartialCompletionRate() {
|
||||
let session = WorkoutSession(
|
||||
programId: "test",
|
||||
programTitle: "Test",
|
||||
bodyZone: "full",
|
||||
level: "Beginner",
|
||||
startedAt: Date(),
|
||||
completedAt: Date(),
|
||||
durationSeconds: 720,
|
||||
caloriesBurned: 90,
|
||||
roundsCompleted: 4,
|
||||
totalRounds: 8
|
||||
)
|
||||
XCTAssertEqual(session.completionRate, 0.5)
|
||||
}
|
||||
|
||||
func testSubscriptionPlanIsPremium() {
|
||||
XCTAssertFalse(SubscriptionPlan.free.isPremium)
|
||||
XCTAssertTrue(SubscriptionPlan.premiumMonthly.isPremium)
|
||||
XCTAssertTrue(SubscriptionPlan.premiumYearly.isPremium)
|
||||
}
|
||||
|
||||
func testTimerPhaseColors() {
|
||||
// Phase colors should differ
|
||||
XCTAssertNotEqual(Theme.phaseColor(.work), Theme.phaseColor(.rest))
|
||||
XCTAssertNotEqual(Theme.phaseColor(.work), Theme.phaseColor(.complete))
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user