Add missing tests for RepetitionList and Habit

pull/87/merge
Alinson S. Xavier 8 years ago
parent 8a29fbf07d
commit 6ccfb53329

@ -73,7 +73,7 @@ public class HabitFixtures
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120}; 81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
for (int mark : marks) for (int mark : marks)
habit.getRepetitions().toggleTimestamp(today - mark * day); habit.getRepetitions().toggle(today - mark * day);
return habit; return habit;
} }
@ -108,7 +108,7 @@ public class HabitFixtures
long timestamp = DateUtils.getStartOfToday(); long timestamp = DateUtils.getStartOfToday();
for (boolean c : LONG_HABIT_CHECKS) for (boolean c : LONG_HABIT_CHECKS)
{ {
if (c) habit.getRepetitions().toggleTimestamp(timestamp); if (c) habit.getRepetitions().toggle(timestamp);
timestamp -= DateUtils.millisecondsInOneDay; timestamp -= DateUtils.millisecondsInOneDay;
} }

@ -108,7 +108,7 @@ public class HabitBullCSVImporter extends AbstractImporter
} }
if(!h.getRepetitions().containsTimestamp(timestamp)) if(!h.getRepetitions().containsTimestamp(timestamp))
h.getRepetitions().toggleTimestamp(timestamp); h.getRepetitions().toggle(timestamp);
} }
} }
} }

@ -101,7 +101,7 @@ public class RewireDBImporter extends AbstractImporter
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month - 1, day); cal.set(year, month - 1, day);
habit.getRepetitions().toggleTimestamp(cal.getTimeInMillis()); habit.getRepetitions().toggle(cal.getTimeInMillis());
} while (c.moveToNext()); } while (c.moveToNext());
} }
finally finally

@ -100,7 +100,7 @@ public class TickmateDBImporter extends AbstractImporter
GregorianCalendar cal = DateUtils.getStartOfTodayCalendar(); GregorianCalendar cal = DateUtils.getStartOfTodayCalendar();
cal.set(year, month, day); cal.set(year, month, day);
habit.getRepetitions().toggleTimestamp(cal.getTimeInMillis()); habit.getRepetitions().toggle(cal.getTimeInMillis());
} while (c.moveToNext()); } while (c.moveToNext());
} }
finally finally

@ -59,7 +59,7 @@ public class WidgetControllerTest extends BaseAndroidUnitTest
@Test @Test
public void testOnAddRepetition_whenChecked() throws Exception public void testOnAddRepetition_whenChecked() throws Exception
{ {
habit.getRepetitions().toggleTimestamp(today); habit.getRepetitions().toggle(today);
int todayValue = habit.getCheckmarks().getTodayValue(); int todayValue = habit.getCheckmarks().getTodayValue();
assertThat(todayValue, equalTo(CHECKED_EXPLICITLY)); assertThat(todayValue, equalTo(CHECKED_EXPLICITLY));
controller.onAddRepetition(habit, today); controller.onAddRepetition(habit, today);
@ -79,7 +79,7 @@ public class WidgetControllerTest extends BaseAndroidUnitTest
@Test @Test
public void testOnRemoveRepetition_whenChecked() throws Exception public void testOnRemoveRepetition_whenChecked() throws Exception
{ {
habit.getRepetitions().toggleTimestamp(today); habit.getRepetitions().toggle(today);
int todayValue = habit.getCheckmarks().getTodayValue(); int todayValue = habit.getCheckmarks().getTodayValue();
assertThat(todayValue, equalTo(CHECKED_EXPLICITLY)); assertThat(todayValue, equalTo(CHECKED_EXPLICITLY));
controller.onRemoveRepetition(habit, today); controller.onRemoveRepetition(habit, today);

@ -43,7 +43,7 @@ public class ToggleRepetitionCommand extends Command
@Override @Override
public void execute() public void execute()
{ {
habit.getRepetitions().toggleTimestamp(timestamp); habit.getRepetitions().toggle(timestamp);
} }
@NonNull @NonNull

@ -322,7 +322,13 @@ public class Habit
public synchronized boolean isCompletedToday() public synchronized boolean isCompletedToday()
{ {
int todayCheckmark = getCheckmarks().getTodayValue(); int todayCheckmark = getCheckmarks().getTodayValue();
if (isNumerical()) return todayCheckmark >= data.targetValue; if (isNumerical())
{
if(getTargetType() == AT_LEAST)
return todayCheckmark >= data.targetValue;
else
return todayCheckmark <= data.targetValue;
}
else return (todayCheckmark != UNCHECKED); else return (todayCheckmark != UNCHECKED);
} }

@ -107,6 +107,7 @@ public abstract class RepetitionList
*/ */
@Nullable @Nullable
public abstract Repetition getOldest(); public abstract Repetition getOldest();
@Nullable @Nullable
/** /**
* Returns the newest repetition in the list. * Returns the newest repetition in the list.
@ -184,8 +185,11 @@ public abstract class RepetitionList
* @return the repetition that has been added or removed. * @return the repetition that has been added or removed.
*/ */
@NonNull @NonNull
public Repetition toggleTimestamp(long timestamp) public Repetition toggle(long timestamp)
{ {
if(habit.isNumerical())
throw new IllegalStateException("habit must NOT be numerical");
timestamp = DateUtils.getStartOfDay(timestamp); timestamp = DateUtils.getStartOfDay(timestamp);
Repetition rep = getByTimestamp(timestamp); Repetition rep = getByTimestamp(timestamp);
@ -207,4 +211,15 @@ public abstract class RepetitionList
*/ */
@NonNull @NonNull
public abstract long getTotalCount(); public abstract long getTotalCount();
public void toggle(long timestamp, int value)
{
if(!habit.isNumerical())
throw new IllegalStateException("habit must be numerical");
Repetition rep = getByTimestamp(timestamp);
if(rep != null) remove(rep);
add(new Repetition(timestamp, value));
habit.invalidateNewerThan(timestamp);
}
} }

@ -58,7 +58,7 @@ public class HabitFixtures
81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120}; 81, 83, 89, 90, 91, 95, 102, 103, 108, 109, 120};
for (int mark : marks) for (int mark : marks)
habit.getRepetitions().toggleTimestamp(today - mark * day); habit.getRepetitions().toggle(today - mark * day);
return habit; return habit;
} }
@ -98,7 +98,7 @@ public class HabitFixtures
long timestamp = DateUtils.getStartOfToday(); long timestamp = DateUtils.getStartOfToday();
for (boolean c : NON_DAILY_HABIT_CHECKS) for (boolean c : NON_DAILY_HABIT_CHECKS)
{ {
if (c) habit.getRepetitions().toggleTimestamp(timestamp); if (c) habit.getRepetitions().toggle(timestamp);
timestamp -= DateUtils.millisecondsInOneDay; timestamp -= DateUtils.millisecondsInOneDay;
} }

@ -21,12 +21,17 @@ package org.isoron.uhabits.core.models;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.junit.*; import org.junit.*;
import org.junit.rules.*;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.isoron.uhabits.core.utils.DateUtils.*;
import static org.junit.Assert.*; import static org.junit.Assert.*;
public class HabitTest extends BaseUnitTest public class HabitTest extends BaseUnitTest
{ {
@Rule
public final ExpectedException exception = ExpectedException.none();
@Override @Override
public void setUp() public void setUp()
{ {
@ -76,4 +81,49 @@ public class HabitTest extends BaseUnitTest
h.clearReminder(); h.clearReminder();
assertThat(h.hasReminder(), is(false)); assertThat(h.hasReminder(), is(false));
} }
@Test
public void test_isCompleted() throws Exception
{
Habit h = modelFactory.buildHabit();
assertFalse(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday());
assertTrue(h.isCompletedToday());
}
@Test
public void test_isCompleted_numerical() throws Exception
{
Habit h = modelFactory.buildHabit();
h.setType(Habit.NUMBER_HABIT);
h.setTargetType(Habit.AT_LEAST);
h.setTargetValue(100.0);
assertFalse(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday(), 200);
assertTrue(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday(), 100);
assertTrue(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday(), 50);
assertFalse(h.isCompletedToday());
h.setTargetType(Habit.AT_MOST);
h.getRepetitions().toggle(getStartOfToday(), 200);
assertFalse(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday(), 100);
assertTrue(h.isCompletedToday());
h.getRepetitions().toggle(getStartOfToday(), 50);
assertTrue(h.isCompletedToday());
}
@Test
public void testURI() throws Exception
{
assertTrue(habitList.isEmpty());
Habit h = modelFactory.buildHabit();
habitList.add(h);
assertThat(h.getId(), equalTo(0L));
assertThat(h.getUriString(),
equalTo("content://org.isoron.uhabits/habit/0"));
}
} }

@ -27,9 +27,12 @@ import org.junit.*;
import java.util.*; import java.util.*;
import static org.hamcrest.MatcherAssert.*; import static junit.framework.TestCase.assertFalse;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.*; import static org.hamcrest.core.Is.*;
import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.core.IsEqual.*;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.*; import static org.mockito.Mockito.*;
public class RepetitionListTest extends BaseUnitTest public class RepetitionListTest extends BaseUnitTest
@ -58,14 +61,15 @@ public class RepetitionListTest extends BaseUnitTest
today = DateUtils.getStartOfToday(); today = DateUtils.getStartOfToday();
day = DateUtils.millisecondsInOneDay; day = DateUtils.millisecondsInOneDay;
reps.toggleTimestamp(today - 3 * day); reps.toggle(today - 3 * day);
reps.toggleTimestamp(today - 2 * day); reps.toggle(today - 2 * day);
reps.toggleTimestamp(today); reps.toggle(today);
reps.toggleTimestamp(today - 7 * day); reps.toggle(today - 7 * day);
reps.toggleTimestamp(today - 5 * day); reps.toggle(today - 5 * day);
listener = mock(ModelObservable.Listener.class); listener = mock(ModelObservable.Listener.class);
reps.getObservable().addListener(listener); reps.getObservable().addListener(listener);
reset(listener);
} }
@Override @Override
@ -130,7 +134,7 @@ public class RepetitionListTest extends BaseUnitTest
weekdayCount[month][week]++; weekdayCount[month][week]++;
monthCount[month]++; monthCount[month]++;
} }
reps.toggleTimestamp(day.getTimeInMillis()); reps.toggle(day.getTimeInMillis());
} }
} }
@ -155,17 +159,33 @@ public class RepetitionListTest extends BaseUnitTest
} }
@Test @Test
public void test_toggleTimestamp() public void test_toggle()
{ {
assertThat(reps.containsTimestamp(today), equalTo(true)); assertTrue(reps.containsTimestamp(today));
reps.toggleTimestamp(today); reps.toggle(today);
assertThat(reps.containsTimestamp(today), equalTo(false)); assertFalse(reps.containsTimestamp(today));
verify(listener).onModelChange();
reset(listener);
assertFalse(reps.containsTimestamp(today - day));
reps.toggle(today - day);
assertTrue(reps.containsTimestamp(today - day));
verify(listener).onModelChange(); verify(listener).onModelChange();
reset(listener); reset(listener);
assertThat(reps.containsTimestamp(today - day), equalTo(false)); habit.setType(Habit.NUMBER_HABIT);
reps.toggleTimestamp(today - day); reps.toggle(today, 100);
assertThat(reps.containsTimestamp(today - day), equalTo(true)); Repetition check = reps.getByTimestamp(today);
assertNotNull(check);
assertThat(check.getValue(), equalTo(100));
verify(listener).onModelChange(); verify(listener).onModelChange();
reset(listener);
reps.toggle(today, 500);
check = reps.getByTimestamp(today);
assertNotNull(check);
assertThat(check.getValue(), equalTo(500));
verify(listener, times(2)).onModelChange();
reset(listener);
} }
} }

@ -205,6 +205,6 @@ public class ScoreListTest extends BaseUnitTest
long day = DateUtils.millisecondsInOneDay; long day = DateUtils.millisecondsInOneDay;
for (int i = from; i < to; i++) for (int i = from; i < to; i++)
reps.toggleTimestamp(today - i * day); reps.toggle(today - i * day);
} }
} }

Loading…
Cancel
Save