Skip to content

Commit 5facb07

Browse files
committed
#140 Start hour of a day option
1 parent 46fea2b commit 5facb07

24 files changed

+1937
-145
lines changed

app/src/androidTest/kotlin/org/andstatus/todoagenda/BirthdayTest.kt

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.andstatus.todoagenda
22

33
import org.andstatus.todoagenda.prefs.AllDayEventsPlacement
4-
import org.andstatus.todoagenda.prefs.ApplicationPreferences
54
import org.andstatus.todoagenda.prefs.EndedSomeTimeAgo
65
import org.andstatus.todoagenda.prefs.dateformat.DateFormatType
76
import org.andstatus.todoagenda.prefs.dateformat.DateFormatValue
@@ -21,16 +20,13 @@ class BirthdayTest : BaseWidgetTest() {
2120
val inputs = provider.loadResultsAndSettings(
2221
org.andstatus.todoagenda.test.R.raw.birthday
2322
)
24-
provider.startEditingPreferences()
25-
ApplicationPreferences.setWidgetHeaderDateFormat(
26-
provider.context,
27-
DateFormatValue.of(DateFormatType.CUSTOM, "YYYY-MM-dd")
23+
provider.settings = settings.copy(
24+
widgetHeaderDateFormat = DateFormatValue.of(DateFormatType.CUSTOM, "YYYY-MM-dd"),
25+
allDayEventsPlacement = AllDayEventsPlacement.TOP_DAY,
26+
eventsEnded = EndedSomeTimeAgo.NONE,
27+
showPastEventsWithDefaultColor = false,
28+
eventRange = 30
2829
)
29-
ApplicationPreferences.setAllDayEventsPlacement(provider.context, AllDayEventsPlacement.TOP_DAY)
30-
ApplicationPreferences.setEventsEnded(provider.context, EndedSomeTimeAgo.NONE)
31-
ApplicationPreferences.setShowPastEventsWithDefaultColor(provider.context, false)
32-
ApplicationPreferences.setEventRange(provider.context, 30)
33-
provider.savePreferences()
3430
playAtOneTime(inputs, dateTime(2015, 8, 1, 17, 0), 0)
3531
playAtOneTime(inputs, dateTime(2015, 8, 9, 23, 59), 0)
3632
playAtOneTime(inputs, dateTime(2015, 8, 10, 0, 0).plusMillis(1), 2)
@@ -43,28 +39,33 @@ class BirthdayTest : BaseWidgetTest() {
4339
playAtOneTime(inputs, dateTime(2015, 9, 9, 23, 30), 2)
4440
playAtOneTime(inputs, dateTime(2015, 9, 10, 0, 30), 0)
4541
playAtOneTime(inputs, dateTime(2015, 9, 10, 11, 0), 0)
46-
ApplicationPreferences.setEventsEnded(provider.context, EndedSomeTimeAgo.ONE_HOUR)
47-
provider.savePreferences()
42+
provider.settings = settings.copy(
43+
eventsEnded = EndedSomeTimeAgo.ONE_HOUR
44+
)
4845
playAtOneTime(inputs, dateTime(2015, 9, 10, 0, 30), 2)
4946
playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 0)
50-
ApplicationPreferences.setEventsEnded(provider.context, EndedSomeTimeAgo.TODAY)
51-
provider.savePreferences()
47+
provider.settings = settings.copy(
48+
eventsEnded = EndedSomeTimeAgo.TODAY
49+
)
5250
playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 0)
53-
ApplicationPreferences.setEventsEnded(provider.context, EndedSomeTimeAgo.FOUR_HOURS)
54-
provider.savePreferences()
51+
provider.settings = settings.copy(
52+
eventsEnded = EndedSomeTimeAgo.FOUR_HOURS
53+
)
5554
playAtOneTime(inputs, dateTime(2015, 9, 10, 1, 30), 2)
5655
playAtOneTime(inputs, dateTime(2015, 9, 10, 3, 59), 2)
5756
playAtOneTime(inputs, dateTime(2015, 9, 10, 4, 0), 0)
58-
ApplicationPreferences.setEventsEnded(provider.context, EndedSomeTimeAgo.YESTERDAY)
59-
provider.savePreferences()
57+
provider.settings = settings.copy(
58+
eventsEnded = EndedSomeTimeAgo.YESTERDAY
59+
)
6060
playAtOneTime(inputs, dateTime(2015, 9, 10, 4, 0), 2)
6161
playAtOneTime(inputs, dateTime(2015, 9, 10, 11, 0), 2)
6262
playAtOneTime(inputs, dateTime(2015, 9, 10, 17, 0), 2)
6363
playAtOneTime(inputs, dateTime(2015, 9, 10, 23, 30), 2)
6464
playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 0), 0)
6565
playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 30), 0)
66-
ApplicationPreferences.setShowPastEventsWithDefaultColor(provider.context, true)
67-
provider.savePreferences()
66+
provider.settings = settings.copy(
67+
showPastEventsWithDefaultColor = true
68+
)
6869
playAtOneTime(inputs, dateTime(2015, 9, 11, 0, 30), 0)
6970
}
7071

app/src/androidTest/kotlin/org/andstatus/todoagenda/DuplicateEventsTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ class DuplicateEventsTest : BaseWidgetTest() {
1313
@Test
1414
fun testIssue354() {
1515
val method = "testIssue354"
16-
val inputs = provider!!.loadResultsAndSettings(
16+
val inputs = provider.loadResultsAndSettings(
1717
org.andstatus.todoagenda.test.R.raw.duplicates
1818
)
19-
provider!!.addResults(inputs)
19+
provider.addResults(inputs)
2020
playResults(method)
2121
Assert.assertEquals("Number of entries", 40, factory.widgetEntries.size.toLong())
2222
}

app/src/androidTest/kotlin/org/andstatus/todoagenda/MultidayAllDayEventTest.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.andstatus.todoagenda
22

3-
import org.andstatus.todoagenda.prefs.ApplicationPreferences
43
import org.andstatus.todoagenda.widget.DayHeader
54
import org.andstatus.todoagenda.widget.LastEntry
65
import org.joda.time.DateTime
@@ -21,9 +20,7 @@ class MultidayAllDayEventTest : BaseWidgetTest() {
2120
inputs.executedAt.set(now)
2221
provider.addResults(inputs)
2322
val dateRange = 30
24-
provider.startEditingPreferences()
25-
ApplicationPreferences.setEventRange(provider.context, dateRange)
26-
provider.savePreferences()
23+
provider.settings = settings.copy(eventRange = dateRange)
2724
playResults(method)
2825
val today = now.withTimeAtStartOfDay()
2926
val endOfRangeTime = today.plusDays(dateRange)

app/src/androidTest/kotlin/org/andstatus/todoagenda/RecurringEventsTest.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.andstatus.todoagenda
22

3-
import org.andstatus.todoagenda.prefs.ApplicationPreferences
43
import org.andstatus.todoagenda.provider.QueryRow
54
import org.andstatus.todoagenda.widget.CalendarEntry
65
import org.junit.Assert
@@ -21,9 +20,9 @@ class RecurringEventsTest : BaseWidgetTest() {
2120
fun testShowRecurringEvents() {
2221
generateEventInstances()
2322
Assert.assertEquals("Entries: " + factory.widgetEntries.size, 15, countCalendarEntries().toLong())
24-
provider.startEditingPreferences()
25-
ApplicationPreferences.setShowOnlyClosestInstanceOfRecurringEvent(provider.context, true)
26-
provider.savePreferences()
23+
provider.settings = settings.copy(
24+
showOnlyClosestInstanceOfRecurringEvent = true
25+
)
2726
generateEventInstances()
2827
Assert.assertEquals("Entries: " + factory.widgetEntries.size, 1, countCalendarEntries().toLong())
2928
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.andstatus.todoagenda
2+
3+
import junit.framework.TestCase.assertEquals
4+
import junit.framework.TestCase.assertTrue
5+
import org.andstatus.todoagenda.provider.QueryResultsStorage
6+
import org.andstatus.todoagenda.widget.CalendarEntry
7+
import org.joda.time.DateTime
8+
import org.joda.time.DateTimeZone
9+
import org.junit.Test
10+
11+
/**
12+
* @author yvolk@yurivolkov.com
13+
*/
14+
class StartHourOfDayTest : BaseWidgetTest() {
15+
@Test
16+
fun startHourOfDayTest() {
17+
val method = "startHourOfDayTest"
18+
provider.loadResultsAndSettings(org.andstatus.todoagenda.test.R.raw.start_hour_of_day)
19+
20+
assertSplitEvent(method, DateTime(2024, 12, 22, 23, 30, DateTimeZone.UTC))
21+
22+
provider.settings = settings.copy(startHourOfDayIn = 4)
23+
assertSplitEvent(method, DateTime(2024, 12, 23, 3, 30, DateTimeZone.UTC))
24+
}
25+
26+
private fun assertSplitEvent(
27+
methodIn: String,
28+
entryStartDate: DateTime
29+
) {
30+
val method = "$methodIn $entryStartDate"
31+
val inputs: QueryResultsStorage = settings.resultsStorage!!
32+
val thisDay: DateTime = inputs.executedAt.get().withTimeAtStartOfDay()
33+
34+
provider.addResults(inputs)
35+
playResults(method)
36+
val indLastDec22 = factory.widgetEntries.indexOfLast {
37+
it.entryDay == thisDay && it is CalendarEntry
38+
}
39+
assertTrue(
40+
"Should exist Dec 22 entry ${factory.widgetEntries}",
41+
indLastDec22 > 0
42+
)
43+
val lastDec22Entry: CalendarEntry = factory.widgetEntries[indLastDec22] as CalendarEntry
44+
assertEquals(
45+
"Last day entry start date $lastDec22Entry", entryStartDate, lastDec22Entry.event.startDate
46+
)
47+
assertTrue(
48+
"Entry should continue on the next day ${lastDec22Entry.eventTimeString}, $lastDec22Entry",
49+
lastDec22Entry.eventTimeString.endsWith("")
50+
)
51+
val firstDec23Entry: CalendarEntry = factory.widgetEntries[indLastDec22 + 2] as CalendarEntry
52+
assertEquals(
53+
"Next day entry start date $firstDec23Entry", entryStartDate, firstDec23Entry.event.startDate
54+
)
55+
}
56+
}

app/src/androidTest/kotlin/org/andstatus/todoagenda/provider/FakeCalendarContentProvider.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class FakeCalendarContentProvider private constructor(val context: Context) {
3232
?: throw java.lang.IllegalStateException("No settings stored")
3333
set(value) {
3434
settingsRef.set(value)
35-
AllSettings.addNew(TAG, context, value)
35+
AllSettings.addOrReplace(TAG, context, value)
3636
}
3737

3838
init {
@@ -51,10 +51,11 @@ class FakeCalendarContentProvider private constructor(val context: Context) {
5151

5252
fun updateAppSettings(tag: String) {
5353
settings = settings.copy(
54+
logEvents = true,
5455
resultsStorage = results,
5556
snapshotModeIn = SnapshotMode.SNAPSHOT_TIME
5657
)
57-
AllSettings.addNew(tag, context, settings)
58+
AllSettings.addOrReplace(tag, context, settings)
5859
if (results.results.isNotEmpty()) {
5960
Log.d(tag, "Results executed at " + settings.clock.now())
6061
}
@@ -136,7 +137,8 @@ class FakeCalendarContentProvider private constructor(val context: Context) {
136137
val widgetData = WidgetData.fromJson(json)
137138
settings = widgetData.getSettingsForWidget(
138139
context,
139-
settings, widgetId
140+
settings,
141+
widgetId
140142
)
141143
return settings.resultsStorage ?: throw IllegalStateException("No results storage")
142144
} catch (e: Exception) {

0 commit comments

Comments
 (0)