Files
Reflect/Tests iOS/Tests_iOS.swift
Trey t 4125c93dfe Add 57 tests covering all data mutation paths
Refactor ShowBasedOnVoteLogics to accept injectable `now: Date` parameter
across all methods, enabling deterministic testing of voting date logic
without simulator clock manipulation.

Test coverage (55 new tests across 3 files):
- Pipeline 1: Streak calculation (7 tests) — consecutive, gaps, missing/placeholder exclusion
- Pipeline 2: Duplicate prevention (5 tests) — add replaces, removeDuplicates keeps best
- Pipeline 3: Fill missing dates (4 tests) — gap fill, idempotent, no overwrite
- Pipeline 4: Delete flows (5 tests) — clearDB, deleteLast, deleteAllEntries
- Pipeline 5: Update flows (5 tests) — mood, notes, photo set/clear
- Pipeline 6: Batch import (4 tests) — bulk insert, replace, dedup in batch
- Pipeline 7: Data listeners (3 tests) — fire on save, multiple listeners, refreshFromDisk
- Pipeline 8: Boundary edge cases (5 tests) — midnight, 23:59, day boundary leak
- Pipeline 9: Voting date logic (5 tests) — Today/Previous x before/after voting time
- Pipeline 10: Side effects orchestration (7 tests) — logMood, updateMood, deleteMood
- Pipeline 11: Full integration (5 tests) — streak grows/breaks/rebuilds, voting lifecycle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 23:25:14 -06:00

58 lines
2.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//
// Tests_iOS.swift
// Tests iOS
//
// Created by Trey Tartt on 1/10/22.
//
import XCTest
@testable import Feels
class Tests_iOS: XCTestCase {
override func setUpWithError() throws {
// Put setup code here. This method is called before the invocation of each test method in the class.
// In UI tests it is usually best to stop immediately when a failure occurs.
continueAfterFailure = false
// In UI tests its important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
}
override func tearDownWithError() throws {
// Put teardown code here. This method is called after the invocation of each test method in the class.
}
func testDatesBetween() {
let today = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: today)!
let tenDaysAgo = Calendar.current.date(byAdding: .day, value: -10, to: today)!
let dates = Date.dates(from: Calendar.current.date(byAdding: .day, value: -10, to: Date())!, toDate: Date())
XCTAssertTrue(dates.last == yesterday)
XCTAssertTrue(dates.first == tenDaysAgo)
}
func testDatesIncluding() {
let today = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
let yesterday = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
let tenDaysAgo = Calendar.current.date(byAdding: .day, value: -10, to: today)!
let dates = Date.dates(from: Calendar.current.date(byAdding: .day, value: -10, to: Date())!, toDate: Date(), includingToDate: true)
XCTAssertTrue(dates.last == today)
XCTAssertTrue(dates.first == tenDaysAgo)
}
// func testLastVoteShouldExist() {
// let todayOneHourAhead = Calendar.current.date(byAdding: .day, value: 1, to: Date())!
// let fakeOnboarding = OnboardingData()
// fakeOnboarding.inputDay = DayOptions.Today
// fakeOnboarding.date = todayOneHourAhead
//
// let lastDay = ShowBasedOnVoteLogics.getLastDateVoteShouldExist(onboardingData: fakeOnboarding)
// let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())!
// XCTAssertTrue(lastDay == yesterday)
// }
}