Merge pull request #1825 from sixten/snooze-calculation

Snooze calculation
This commit is contained in:
Jackson Harper
2023-02-21 10:42:50 +08:00
committed by GitHub
3 changed files with 73 additions and 45 deletions

View File

@ -21,15 +21,15 @@ public struct SnoozeView: View {
Spacer()
HStack {
SnoozeIconButtonView(snooze: Snooze.snoozeValues[0], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.snoozeValues[1], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.currentValues[0], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.currentValues[1], action: { snoozeItem($0) })
}
Spacer(minLength: 32)
HStack {
SnoozeIconButtonView(snooze: Snooze.snoozeValues[2], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.snoozeValues[3], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.currentValues[2], action: { snoozeItem($0) })
SnoozeIconButtonView(snooze: Snooze.currentValues[3], action: { snoozeItem($0) })
}
Spacer()
}.padding(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16))
@ -102,14 +102,12 @@ struct Snooze {
self.untilStr = formatter.string(from: until)
}
static var snoozeValues: [Snooze] {
let now = Date()
return snoozeValuesForDate(now: now)
static var currentValues: [Snooze] {
calculateValues(for: Date(), calendar: Calendar.current)
}
static func snoozeValuesForDate(now: Date) -> [Snooze] {
static func calculateValues(for now: Date, calendar: Calendar) -> [Snooze] {
var res: [Snooze] = []
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour, .timeZone, .weekday], from: now)
var tonightComponent = components

View File

@ -1,36 +0,0 @@
@testable import Views
import XCTest
final class HomeFeedViewTests: XCTestCase {
func parse(_ str: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
return dateFormatter.date(from: str)!
}
func test_weekdayBefore8PM() {
let now = parse("2022-01-31T10:11:12-08:00")
let snoozes = Snooze.snoozeValuesForDate(now: now)
XCTAssertEqual(snoozes[0].until, parse("2022-01-31T20:00:00-08:00"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T08:00:00-08:00"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00-08:00"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00-08:00"))
}
func test_weekdayAfter8PM() {
let now = parse("2022-01-31T20:11:12-08:00")
let snoozes = Snooze.snoozeValuesForDate(now: now)
XCTAssertEqual(snoozes[0].until, parse("2022-02-01T08:00:00-08:00"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T20:00:00-08:00"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00-08:00"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00-08:00"))
}
static var allTests = [
("test_weekdayBefore8PM", test_weekdayBefore8PM),
("test_weekdayAfter8PM", test_weekdayAfter8PM)
]
}

View File

@ -0,0 +1,66 @@
@testable import Views
import XCTest
final class SnoozeTests: XCTestCase {
func parse(_ str: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
return dateFormatter.date(from: str)!
}
func test_weekdayBefore8PM_minus8() {
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: -8 * 3600)!
let now = parse("2022-01-31T10:11:12-08:00")
let snoozes = Snooze.calculateValues(for: now, calendar: calendar)
XCTAssertEqual(snoozes[0].until, parse("2022-01-31T20:00:00-08:00"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T08:00:00-08:00"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00-08:00"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00-08:00"))
}
func test_weekdayBefore8PM_zulu() {
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 0)!
let now = parse("2022-01-31T13:14:15Z")
let snoozes = Snooze.calculateValues(for: now, calendar: calendar)
XCTAssertEqual(snoozes[0].until, parse("2022-01-31T20:00:00Z"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T08:00:00Z"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00Z"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00Z"))
}
func test_weekdayAfter8PM_minus8() {
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: -8 * 3600)!
let now = parse("2022-01-31T20:11:12-08:00")
let snoozes = Snooze.calculateValues(for: now, calendar: calendar)
XCTAssertEqual(snoozes[0].until, parse("2022-02-01T08:00:00-08:00"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T20:00:00-08:00"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00-08:00"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00-08:00"))
}
func test_weekdayAfter8PM_plus5() {
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = TimeZone(secondsFromGMT: 5 * 3600)!
let now = parse("2022-01-31T22:33:44+05:00")
let snoozes = Snooze.calculateValues(for: now, calendar: calendar)
XCTAssertEqual(snoozes[0].until, parse("2022-02-01T08:00:00+05:00"))
XCTAssertEqual(snoozes[1].until, parse("2022-02-01T20:00:00+05:00"))
XCTAssertEqual(snoozes[2].until, parse("2022-02-05T08:00:00+05:00"))
XCTAssertEqual(snoozes[3].until, parse("2022-02-07T08:00:00+05:00"))
}
static var allTests = [
("test_weekdayBefore8PM_minus8", test_weekdayBefore8PM_minus8),
("test_weekdayBefore8PM_zulu", test_weekdayBefore8PM_zulu),
("test_weekdayAfter8PM_minus8", test_weekdayAfter8PM_minus8),
("test_weekdayAfter8PM_plus5", test_weekdayAfter8PM_plus5)
]
}