Skip to content

Commit

Permalink
Fix next event countdown
Browse files Browse the repository at this point in the history
This bug was introduced in v1.7.3
  • Loading branch information
pakerwreah committed Dec 14, 2022
1 parent 937743e commit 898bbb4
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 4 deletions.
4 changes: 2 additions & 2 deletions Calendr.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1150,7 +1150,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 1.7.3;
MARKETING_VERSION = 1.7.4;
PRODUCT_BUNDLE_IDENTIFIER = br.paker.Calendr;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Calendr/Config/Calendr-Bridging-Header.h";
Expand All @@ -1174,7 +1174,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
MARKETING_VERSION = 1.7.3;
MARKETING_VERSION = 1.7.4;
PRODUCT_BUNDLE_IDENTIFIER = br.paker.Calendr;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "Calendr/Config/Calendr-Bridging-Header.h";
Expand Down
1 change: 0 additions & 1 deletion Calendr/MenuBar/NextEventViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,6 @@ class NextEventViewModel {
}
}
}
.distinctUntilChanged()
.share(replay: 1)

nextEventObservable
Expand Down
93 changes: 92 additions & 1 deletion CalendrTests/NextEventViewModelTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class NextEventViewModelTests: XCTestCase {
let calendarService = MockCalendarServiceProvider()
let workspace = MockWorkspaceServiceProvider()
let screenProvider = MockScreenProvider()
let scheduler = HistoricalScheduler()

lazy var viewModel = NextEventViewModel(
settings: settings,
Expand All @@ -29,7 +30,7 @@ class NextEventViewModelTests: XCTestCase {
workspace: workspace,
screenProvider: screenProvider,
isShowingDetails: .dummy(),
scheduler: MainScheduler.instance
scheduler: scheduler
)

var now: Date {
Expand Down Expand Up @@ -277,6 +278,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 30s")

dateProvider.now.addTimeInterval(1)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 29s")
}

func testNextEvent_isNotInProgress_startsInLessThan1Minute() {
Expand All @@ -292,6 +298,16 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 1m")

dateProvider.now.addTimeInterval(1)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 1m")

dateProvider.now.addTimeInterval(28)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 30s")
}

func testNextEvent_isNotInProgress_startsIn1Minute() {
Expand Down Expand Up @@ -322,6 +338,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 2m")

dateProvider.now.addTimeInterval(5)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 1m")
}

func testNextEvent_isNotInProgress_startsIn1Hour() {
Expand All @@ -337,6 +358,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 1h")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 59m")
}

func testNextEvent_isNotInProgress_startsInMoreThan1Hour() {
Expand All @@ -352,6 +378,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 1h 40m")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 1h 39m")
}

func testNextEvent_isInProgress_endsIn30Seconds() {
Expand All @@ -367,6 +398,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "30s left")

dateProvider.now.addTimeInterval(1)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "29s left")
}

func testNextEvent_isInProgress_endsInLessThan1Minute() {
Expand All @@ -382,6 +418,16 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "1m left")

dateProvider.now.addTimeInterval(1)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "1m left")

dateProvider.now.addTimeInterval(28)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "30s left")
}

func testNextEvent_isInProgress_endsIn1Minute() {
Expand Down Expand Up @@ -412,6 +458,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "2m left")

dateProvider.now.addTimeInterval(5)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "1m left")
}

func testNextEvent_isInProgress_endsIn1Hour() {
Expand All @@ -427,6 +478,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "1h left")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "59m left")
}

func testNextEvent_isInProgress_endsInMoreThan1Hour() {
Expand All @@ -442,6 +498,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "1h 40m left")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "1h 39m left")
}

func testNextEvent_isReminder() {
Expand All @@ -457,6 +518,11 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "in 1h 40m")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "in 1h 39m")
}

func testNextEvent_isPast_isReminder() {
Expand All @@ -476,6 +542,31 @@ class NextEventViewModelTests: XCTestCase {
])

XCTAssertEqual(time, "1h 40m ago")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "1h 41m ago")
}

func testNextEvent_becomesPast_isReminder() {

var time: String?

viewModel.time
.bind { time = $0 }
.disposed(by: disposeBag)

calendarService.changeEvents([
.make(start: dateProvider.now + 30, type: .reminder)
])

XCTAssertEqual(time, "in 30s")

dateProvider.now.addTimeInterval(60)
scheduler.advance(.seconds(1))

XCTAssertEqual(time, "30s ago")
}
}

Expand Down

0 comments on commit 898bbb4

Please sign in to comment.