Move tests to uhabits-core

pull/312/head
Alinson S. Xavier 8 years ago
parent 6dd7e49112
commit 1976160ae8

@ -1,239 +0,0 @@
/*
* 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 android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.hamcrest.*;
import org.isoron.uhabits.*;
import org.isoron.uhabits.core.models.*;
import org.junit.*;
import org.junit.runner.*;
import java.io.*;
import java.util.*;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.isoron.uhabits.core.models.HabitList.Order.*;
@RunWith(AndroidJUnit4.class)
@MediumTest
public class HabitListTest extends BaseAndroidTest
{
private ArrayList<Habit> habitsArray;
private HabitList activeHabits;
private HabitList reminderHabits;
@Override
public void setUp()
{
super.setUp();
habitList.removeAll();
habitsArray = new ArrayList<>();
for (int i = 0; i < 10; i++)
{
Habit habit = fixtures.createEmptyHabit((long) i);
habitsArray.add(habit);
if (i % 3 == 0)
habit.setReminder(new Reminder(8, 30, WeekdayList.EVERY_DAY));
habitList.update(habit);
}
habitsArray.get(0).setArchived(true);
habitsArray.get(1).setArchived(true);
habitsArray.get(4).setArchived(true);
habitsArray.get(7).setArchived(true);
activeHabits = habitList.getFiltered(new HabitMatcherBuilder().build());
reminderHabits = habitList.getFiltered(new HabitMatcherBuilder()
.setArchivedAllowed(true)
.setReminderRequired(true)
.build());
}
@Test
public void test_size()
{
assertThat(habitList.size(), equalTo(10));
}
@Test
public void test_countActive()
{
assertThat(activeHabits.size(), equalTo(6));
}
@Test
public void test_getByPosition()
{
assertThat(habitList.getByPosition(0), equalTo(habitsArray.get(0)));
assertThat(habitList.getByPosition(3), equalTo(habitsArray.get(3)));
assertThat(habitList.getByPosition(9), equalTo(habitsArray.get(9)));
assertThat(activeHabits.getByPosition(0), equalTo(habitsArray.get(2)));
}
@Test
public void test_getHabitsWithReminder()
{
assertThat(reminderHabits.size(), equalTo(4));
assertThat(reminderHabits.getByPosition(1),
equalTo(habitsArray.get(3)));
}
@Test
public void test_get_withInvalidId()
{
assertThat(habitList.getById(100L), is(nullValue()));
}
@Test
public void test_get_withValidId()
{
Habit habit1 = habitsArray.get(0);
Habit habit2 = habitList.getById(habit1.getId());
assertThat(habit1, equalTo(habit2));
}
@Test
public void test_reorder()
{
int operations[][] = {
{ 5, 2 }, { 3, 7 }, { 4, 4 }, { 3, 2 }
};
int expectedPosition[][] = {
{ 0, 1, 3, 4, 5, 2, 6, 7, 8, 9 },
{ 0, 1, 7, 3, 4, 2, 5, 6, 8, 9 },
{ 0, 1, 7, 3, 4, 2, 5, 6, 8, 9 },
{ 0, 1, 7, 2, 4, 3, 5, 6, 8, 9 },
};
for (int i = 0; i < operations.length; i++)
{
int from = operations[i][0];
int to = operations[i][1];
Habit fromHabit = habitList.getByPosition(from);
Habit toHabit = habitList.getByPosition(to);
habitList.reorder(fromHabit, toHabit);
int actualPositions[] = new int[10];
for (int j = 0; j < 10; j++)
{
Habit h = habitList.getById(j);
assertNotNull(h);
actualPositions[j] = habitList.indexOf(h);
}
assertThat(actualPositions, equalTo(expectedPosition[i]));
}
}
@Test
public void test_writeCSV() throws IOException
{
habitList.removeAll();
Habit h1 = fixtures.createEmptyHabit();
h1.setName("Meditate");
h1.setDescription("Did you meditate this morning?");
h1.setFrequency(Frequency.DAILY);
h1.setColor(3);
Habit h2 = fixtures.createEmptyHabit();
h2.setName("Wake up early");
h2.setDescription("Did you wake up before 6am?");
h2.setFrequency(new Frequency(2, 3));
h2.setColor(5);
habitList.update(h1);
habitList.update(h2);
String expectedCSV =
"Position,Name,Description,NumRepetitions,Interval,Color\n" +
"001,Meditate,Did you meditate this morning?,1,1,#FF8F00\n" +
"002,Wake up early,Did you wake up before 6am?,2,3,#AFB42B\n";
StringWriter writer = new StringWriter();
habitList.writeCSV(writer);
MatcherAssert.assertThat(writer.toString(), equalTo(expectedCSV));
}
@Test
public void test_ordering()
{
habitList.removeAll();
Habit h3 = fixtures.createEmptyHabit();
h3.setName("C Habit");
h3.setColor(0);
habitList.update(h3);
Habit h1 = fixtures.createEmptyHabit();
h1.setName("A Habit");
h1.setColor(2);
habitList.update(h1);
Habit h4 = fixtures.createEmptyHabit();
h4.setName("D Habit");
h4.setColor(1);
habitList.update(h4);
Habit h2 = fixtures.createEmptyHabit();
h2.setName("B Habit");
h2.setColor(2);
habitList.update(h2);
habitList.setOrder(BY_POSITION);
assertThat(habitList.getByPosition(0), equalTo(h3));
assertThat(habitList.getByPosition(1), equalTo(h1));
assertThat(habitList.getByPosition(2), equalTo(h4));
assertThat(habitList.getByPosition(3), equalTo(h2));
habitList.setOrder(BY_NAME);
assertThat(habitList.getByPosition(0), equalTo(h1));
assertThat(habitList.getByPosition(1), equalTo(h2));
assertThat(habitList.getByPosition(2), equalTo(h3));
assertThat(habitList.getByPosition(3), equalTo(h4));
habitList.remove(h1);
habitList.add(h1);
assertThat(habitList.getByPosition(0), equalTo(h1));
habitList.setOrder(BY_COLOR);
assertThat(habitList.getByPosition(0), equalTo(h3));
assertThat(habitList.getByPosition(1), equalTo(h4));
assertThat(habitList.getByPosition(2), equalTo(h1));
assertThat(habitList.getByPosition(3), equalTo(h2));
}
}

@ -115,7 +115,7 @@ public class SQLiteRepetitionList extends RepetitionList
check(habit.getId()); check(habit.getId());
repository.execSQL( repository.execSQL(
"delete from repetitions where habit = ? and timestamp = ?", "delete from repetitions where habit = ? and timestamp = ?",
habit.getId()); habit.getId(), repetition.getTimestamp());
observable.notifyListeners(); observable.notifyListeners();
} }

@ -20,6 +20,7 @@
package org.isoron.uhabits.core.test; package org.isoron.uhabits.core.test;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.models.sqlite.*;
import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.core.utils.*;
public class HabitFixtures public class HabitFixtures
@ -42,6 +43,8 @@ public class HabitFixtures
habit.setDescription("Did you meditate this morning?"); habit.setDescription("Did you meditate this morning?");
habit.setColor(3); habit.setColor(3);
habit.setFrequency(Frequency.DAILY); habit.setFrequency(Frequency.DAILY);
saveIfSQLite(habit);
return habit; return habit;
} }
@ -73,6 +76,7 @@ public class HabitFixtures
habit.setTargetType(Habit.AT_LEAST); habit.setTargetType(Habit.AT_LEAST);
habit.setTargetValue(2.0); habit.setTargetValue(2.0);
habit.setColor(1); habit.setColor(1);
saveIfSQLite(habit);
long day = DateUtils.millisecondsInOneDay; long day = DateUtils.millisecondsInOneDay;
long today = DateUtils.getStartOfToday(); long today = DateUtils.getStartOfToday();
@ -94,6 +98,7 @@ public class HabitFixtures
habit.setName("Wake up early"); habit.setName("Wake up early");
habit.setDescription("Did you wake up before 6am?"); habit.setDescription("Did you wake up before 6am?");
habit.setFrequency(new Frequency(2, 3)); habit.setFrequency(new Frequency(2, 3));
saveIfSQLite(habit);
long timestamp = DateUtils.getStartOfToday(); long timestamp = DateUtils.getStartOfToday();
for (boolean c : NON_DAILY_HABIT_CHECKS) for (boolean c : NON_DAILY_HABIT_CHECKS)
@ -104,4 +109,10 @@ public class HabitFixtures
return habit; return habit;
} }
private void saveIfSQLite(Habit habit)
{
if (!(habit.getRepetitions() instanceof SQLiteRepetitionList)) return;
new SQLiteHabitList(modelFactory).add(habit);
}
} }

@ -1,41 +0,0 @@
create table Habits (
id integer primary key autoincrement,
archived integer,
color integer,
description text,
freq_den integer,
freq_num integer,
highlight integer,
name text,
position integer,
reminder_hour integer,
reminder_min integer
);
create table Checkmarks (
id integer primary key autoincrement,
habit integer references habits(id),
timestamp integer,
value integer
);
create table Repetitions (
id integer primary key autoincrement,
habit integer references habits(id),
timestamp integer
);
create table Streak (
id integer primary key autoincrement,
end integer,
habit integer references habits(id),
length integer,
start integer
);
create table Score (
id integer primary key autoincrement,
habit integer references habits(id),
score integer,
timestamp integer
);

@ -47,7 +47,7 @@ public class BaseUnitTest
protected HabitFixtures fixtures; protected HabitFixtures fixtures;
protected MemoryModelFactory modelFactory; protected ModelFactory modelFactory;
protected SingleThreadTaskRunner taskRunner; protected SingleThreadTaskRunner taskRunner;

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> * Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
* *
* This file is part of Loop Habit Tracker. * This file is part of Loop Habit Tracker.
* *
@ -17,42 +17,34 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.isoron.uhabits.models.sqlite; package org.isoron.uhabits.core.db;
import android.database.sqlite.SQLiteDatabase;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.apache.commons.lang3.builder.*; import org.apache.commons.lang3.builder.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.core.db.*;
import org.isoron.uhabits.database.*;
import org.isoron.uhabits.utils.*;
import org.junit.*; import org.junit.*;
import org.junit.runner.*;
import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertThat; import static org.hamcrest.core.IsEqual.equalTo;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@RunWith(AndroidJUnit4.class) public class RepositoryTest extends BaseUnitTest
@MediumTest
public class SQLiteRepositoryTest extends BaseAndroidTest
{ {
private Repository<ThingRecord> repository; private Repository<ThingRecord> repository;
private SQLiteDatabase db; private Database db;
@Before @Before
@Override @Override
public void setUp() public void setUp() throws Exception
{ {
super.setUp(); super.setUp();
this.db = DatabaseUtils.openDatabase(); this.db = buildMemoryDatabase();
repository = new Repository<>(ThingRecord.class, repository = new Repository<>(ThingRecord.class, db);
new AndroidSQLiteDatabase((db)));
db.execSQL("drop table if exists tests"); db.execute("drop table if exists tests");
db.execSQL("create table tests(" + db.execute("create table tests(" +
"id integer not null primary key autoincrement, " + "id integer not null primary key autoincrement, " +
"color_number integer not null, score float not null, " + "color_number integer not null, score float not null, " +
"name string not null)"); "name string not null)");
@ -61,7 +53,7 @@ public class SQLiteRepositoryTest extends BaseAndroidTest
@Test @Test
public void testFind() throws Exception public void testFind() throws Exception
{ {
db.execSQL("insert into tests(id, color_number, name, score) " + db.execute("insert into tests(id, color_number, name, score) " +
"values (10, 20, 'hello', 8.0)"); "values (10, 20, 'hello', 8.0)");
ThingRecord record = repository.find(10L); ThingRecord record = repository.find(10L);

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2016 Álinson Santos Xavier <isoron@gmail.com> * Copyright (C) 2017 Álinson Santos Xavier <isoron@gmail.com>
* *
* This file is part of Loop Habit Tracker. * This file is part of Loop Habit Tracker.
* *
@ -17,31 +17,27 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package org.isoron.uhabits.models.sqlite; package org.isoron.uhabits.core.models.sqlite;
import android.support.annotation.*; import android.support.annotation.*;
import android.support.test.runner.*;
import android.test.suitebuilder.annotation.*;
import org.isoron.uhabits.*; import org.isoron.uhabits.*;
import org.isoron.uhabits.core.db.*; import org.isoron.uhabits.core.db.*;
import org.isoron.uhabits.core.models.*; import org.isoron.uhabits.core.models.*;
import org.isoron.uhabits.core.models.sqlite.records.*; import org.isoron.uhabits.core.models.sqlite.records.*;
import org.isoron.uhabits.core.test.*;
import org.isoron.uhabits.core.utils.*; import org.isoron.uhabits.core.utils.*;
import org.isoron.uhabits.database.*;
import org.isoron.uhabits.utils.*;
import org.junit.*; import org.junit.*;
import org.junit.runner.*;
import java.util.*; import java.util.*;
import static android.support.test.espresso.matcher.ViewMatchers.assertThat; import static junit.framework.TestCase.assertNotNull;
import static junit.framework.TestCase.assertNull;
import static org.hamcrest.MatcherAssert.*;
import static org.hamcrest.core.IsEqual.*; import static org.hamcrest.core.IsEqual.*;
import static org.isoron.uhabits.core.models.Checkmark.CHECKED_EXPLICITLY; import static org.isoron.uhabits.core.models.Checkmark.CHECKED_EXPLICITLY;
@RunWith(AndroidJUnit4.class) public class SQLiteRepetitionListTest extends BaseUnitTest
@MediumTest
public class SQLiteRepetitionListTest extends BaseAndroidTest
{ {
private Habit habit; private Habit habit;
@ -51,19 +47,23 @@ public class SQLiteRepetitionListTest extends BaseAndroidTest
private long day; private long day;
private Repository<RepetitionRecord> sqlite; private Repository<RepetitionRecord> repository;
@Override @Override
public void setUp() public void setUp() throws Exception
{ {
super.setUp(); super.setUp();
Database db = buildMemoryDatabase();
modelFactory = new SQLModelFactory(db);
fixtures = new HabitFixtures(modelFactory);
habitList = modelFactory.buildHabitList();
repository = new Repository<>(RepetitionRecord.class, db);
habit = fixtures.createLongHabit(); habit = fixtures.createLongHabit();
repetitions = habit.getRepetitions(); repetitions = habit.getRepetitions();
today = DateUtils.getStartOfToday(); today = DateUtils.getStartOfToday();
day = DateUtils.millisecondsInOneDay; day = DateUtils.millisecondsInOneDay;
sqlite = new Repository<>(RepetitionRecord.class,
new AndroidSQLiteDatabase(DatabaseUtils.openDatabase()));
} }
@Test @Test
@ -136,12 +136,10 @@ public class SQLiteRepetitionListTest extends BaseAndroidTest
private RepetitionRecord getByTimestamp(long timestamp) private RepetitionRecord getByTimestamp(long timestamp)
{ {
String query = "where habit = ? and timestamp = ?"; String query = "where habit = ? and timestamp = ?";
String params[] = { String params[] = {
Long.toString(habit.getId()), Long.toString(habit.getId()), Long.toString(timestamp)
Long.toString(timestamp)
}; };
return sqlite.findFirst(query, params); return repository.findFirst(query, params);
} }
} }
Loading…
Cancel
Save