/*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com>
*
* This file is part of Loop Habit Tracker.
*
* Loop Habit Tracker is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or (at your
* option) any later version.
*
* Loop Habit Tracker is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.isoron.uhabits.models;
import org.isoron.uhabits.*;
import org.isoron.uhabits.utils.*;
import org.junit.*;
import java.io.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.core.IsEqual.*;
import static org.isoron.uhabits.models.Checkmark.*;
public class CheckmarkListTest extends BaseUnitTest
{
// 8:00am, January 25th, 2015 (UTC)
private long fixed_local_time = 1422172800000L;
private Habit nonDailyHabit;
private Habit emptyHabit;
@Override
public void setUp()
{
super.setUp();
DateUtils.setFixedLocalTime(fixed_local_time);
fixtures.createShortHabit();
nonDailyHabit = fixtures.createShortHabit();
habitList.add(nonDailyHabit);
emptyHabit = fixtures.createEmptyHabit();
habitList.add(emptyHabit);
}
@Test
public void test_getAllValues_moveBackwardsInTime()
{
travelInTime(-3);
int[] expectedValues = {
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY
};
int[] actualValues = nonDailyHabit.getCheckmarks().getAllValues();
assertThat(actualValues, equalTo(expectedValues));
}
@Test
public void test_getAllValues_moveForwardInTime()
{
travelInTime(3);
int[] expectedValues = {
UNCHECKED,
UNCHECKED,
UNCHECKED,
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY
};
int[] actualValues = nonDailyHabit.getCheckmarks().getAllValues();
assertThat(actualValues, equalTo(expectedValues));
}
@Test
public void test_getAllValues_withEmptyHabit()
{
int[] expectedValues = new int[0];
int[] actualValues = emptyHabit.getCheckmarks().getAllValues();
assertThat(actualValues, equalTo(expectedValues));
}
@Test
public void test_getAllValues_withNonDailyHabit()
{
int[] expectedValues = {
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY
};
int[] actualValues = nonDailyHabit.getCheckmarks().getAllValues();
assertThat(actualValues, equalTo(expectedValues));
}
@Test
public void test_getTodayValue()
{
travelInTime(-1);
assertThat(nonDailyHabit.getCheckmarks().getTodayValue(),
equalTo(UNCHECKED));
travelInTime(0);
assertThat(nonDailyHabit.getCheckmarks().getTodayValue(),
equalTo(CHECKED_EXPLICITLY));
travelInTime(1);
assertThat(nonDailyHabit.getCheckmarks().getTodayValue(),
equalTo(UNCHECKED));
}
@Test
public void test_getValues_withInvalidInterval()
{
int values[] = nonDailyHabit.getCheckmarks().getValues(100L, -100L);
assertThat(values, equalTo(new int[0]));
}
@Test
public void test_getValues_withValidInterval()
{
long from =
DateUtils.getStartOfToday() - 15 * DateUtils.millisecondsInOneDay;
long to =
DateUtils.getStartOfToday() - 5 * DateUtils.millisecondsInOneDay;
int[] expectedValues = {
CHECKED_EXPLICITLY,
UNCHECKED,
CHECKED_IMPLICITLY,
CHECKED_EXPLICITLY,
CHECKED_EXPLICITLY,
UNCHECKED,
UNCHECKED,
UNCHECKED,
UNCHECKED,
UNCHECKED,
UNCHECKED
};
int[] actualValues = nonDailyHabit.getCheckmarks().getValues(from, to);
assertThat(actualValues, equalTo(expectedValues));
}
@Test
public void test_writeCSV() throws IOException
{
String expectedCSV = "2015-01-25,2\n" +
"2015-01-24,0\n" +
"2015-01-23,1\n" +
"2015-01-22,2\n" +
"2015-01-21,2\n" +
"2015-01-20,2\n" +
"2015-01-19,0\n" +
"2015-01-18,1\n" +
"2015-01-17,2\n" +
"2015-01-16,2\n";
StringWriter writer = new StringWriter();
nonDailyHabit.getCheckmarks().writeCSV(writer);
assertThat(writer.toString(), equalTo(expectedCSV));
}
private void travelInTime(int days)
{
DateUtils.setFixedLocalTime(
fixed_local_time + days * DateUtils.millisecondsInOneDay);
}
}