@@ -11,41 +11,79 @@ import Foundation
1111
1212@Suite ( " Item tests " )
1313struct SwiftUI_DaysTests {
14+ private let calendar = Calendar . current
15+ private let now = Date . now
16+
1417 /// Тестируем инициализацию объекта Item
15- @Test func itemInitialization( ) {
18+ @Test func itemInitialization( ) throws {
1619 let title = " Test Title "
1720 let details = " Test Details "
18- let oneDayAgo = Date ( timeIntervalSinceNow : - 86400 )
21+ let oneDayAgo = try #require ( calendar . date ( byAdding : . day , value : - 1 , to : now ) )
1922 let item = Item ( title: title, details: details, timestamp: oneDayAgo)
2023 #expect( item. title == title)
2124 #expect( item. details == details)
2225 #expect( item. timestamp == oneDayAgo)
2326 }
2427
28+
2529 /// Тестируем `daysCount`, когда событие произошло только что
2630 @Test func daysCountWithNoDaysPassed( ) {
27- let item = Item ( title: " Recent Event " , timestamp: . now)
28- let result = item. makeDaysCount ( to: . now)
31+ let item = Item ( title: " Recent Event " , timestamp: now)
32+ let result = item. makeDaysCount ( to: now)
2933 #expect( result == 0 )
3034 }
3135
3236 /// Тестируем `daysCount` для события, произошедшего 1 день назад
33- @Test func daysCountWithOneDayPassed( ) {
37+ @Test func daysCountWithOneDayPassed( ) throws {
38+ let oneDayAgo = try #require( calendar. date ( byAdding: . day, value: - 1 , to: now) )
3439 let oneDayOldItem = Item (
3540 title: " One Day Ago " ,
36- timestamp: Date ( timeIntervalSinceNow : - 86400 )
41+ timestamp: oneDayAgo
3742 )
38- let result = oneDayOldItem. makeDaysCount ( to: . now)
43+ let result = oneDayOldItem. makeDaysCount ( to: now)
3944 #expect( result == 1 )
4045 }
41-
46+
4247 /// Тестируем `daysCount` для события, произошедшего 5 дней назад
43- @Test func daysCountWithMultipleDaysPassed( ) {
48+ @Test func daysCountWithMultipleDaysPassed( ) throws {
49+ let fiveDaysAgo = try #require( calendar. date ( byAdding: . day, value: - 5 , to: now) )
4450 let fiveDaysOldItem = Item (
4551 title: " Five Days Ago " ,
46- timestamp: Date ( timeIntervalSinceNow : - 432000 )
52+ timestamp: fiveDaysAgo
4753 )
48- let result = fiveDaysOldItem. makeDaysCount ( to: . now)
54+ let result = fiveDaysOldItem. makeDaysCount ( to: now)
4955 #expect( result == 5 )
5056 }
57+
58+ @Test ( arguments: 1 ... 11 )
59+ func daysCountSameDay( hoursAgo: Int ) throws {
60+ let date = try #require( Calendar . current. date ( byAdding: . hour, value: - hoursAgo, to: now) )
61+ let item = Item ( title: " Recent Event " , timestamp: date)
62+ let result = item. makeDaysCount ( to: now)
63+ #expect( result == 0 , " Должно быть 0 дней, так как даты в одном календарном дне " )
64+ }
65+
66+ @Test ( arguments: 12 ... 23 )
67+ func daysCountDifferentDay( hoursAgo: Int ) throws {
68+ let date = try #require( Calendar . current. date ( byAdding: . hour, value: - hoursAgo, to: now) )
69+ let item = Item ( title: " Yesterday Event " , timestamp: date)
70+ let result = item. makeDaysCount ( to: now)
71+ #expect( result == 1 , " Должен быть 1 день, так как даты в разных календарных днях " )
72+ }
73+
74+ @Test func daysCountAcrossMidnight( ) throws {
75+ let todayStart = calendar. startOfDay ( for: now)
76+ let justBeforeMidnight = try #require( calendar. date ( byAdding: . minute, value: - 1 , to: todayStart) )
77+ let justAfterMidnight = try #require( calendar. date ( byAdding: . minute, value: 1 , to: todayStart) )
78+ let item = Item ( title: " Late Event " , timestamp: justBeforeMidnight)
79+ let result = item. makeDaysCount ( to: justAfterMidnight)
80+ #expect( result == 1 , " Должен быть 1 день при переходе через полночь " )
81+ }
82+
83+ @Test func daysCountFutureEvent( ) throws {
84+ let futureDate = try #require( calendar. date ( byAdding: . day, value: 1 , to: now) )
85+ let item = Item ( title: " Future Event " , timestamp: futureDate)
86+ let result = item. makeDaysCount ( to: now)
87+ #expect( result <= 0 , " Для будущих событий результат должен быть 0 или отрицательным " )
88+ }
5189}
0 commit comments