Implement missing tests for Habit; remove some dead code

pull/69/head
Alinson S. Xavier 10 years ago
parent 075b7812eb
commit f5e4a88415

@ -23,6 +23,7 @@ import android.graphics.Color;
import android.support.test.runner.AndroidJUnit4; import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest; import android.test.suitebuilder.annotation.SmallTest;
import org.isoron.helpers.DateHelper;
import org.isoron.uhabits.models.Habit; import org.isoron.uhabits.models.Habit;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -31,10 +32,12 @@ import org.junit.runner.RunWith;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.IsNot.not; import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
@SmallTest @SmallTest
@ -90,11 +93,116 @@ public class HabitTest
} }
@Test @Test
public void reorderTest() public void get_withValidId()
{
Habit habit = new Habit();
habit.save();
Habit habit2 = Habit.get(habit.getId());
assertThat(habit, equalTo(habit2));
}
@Test
public void get_withInvalidId()
{
Habit habit = Habit.get(123456L);
assertThat(habit, is(nullValue()));
}
@Test
public void getAll_withoutArchived()
{
List<Habit> habits = new LinkedList<>();
List<Habit> habitsWithArchived = new LinkedList<>();
for(int i = 0; i < 10; i++)
{
Habit h = new Habit();
if(i % 2 == 0)
h.archived = 1;
else
habits.add(h);
habitsWithArchived.add(h);
h.save();
}
assertThat(habits, equalTo(Habit.getAll(false)));
assertThat(habitsWithArchived, equalTo(Habit.getAll(true)));
}
@Test
public void getByPosition()
{
List<Habit> habits = new LinkedList<>();
for(int i = 0; i < 10; i++)
{
Habit h = new Habit();
h.save();
habits.add(h);
}
for(int i = 0; i < 10; i++)
{
Habit h = Habit.getByPosition(i);
if(h == null) fail();
assertThat(h, equalTo(habits.get(i)));
}
}
@Test
public void count()
{
for(int i = 0; i < 10; i++)
{
Habit h = new Habit();
if(i % 2 == 0) h.archived = 1;
h.save();
}
assertThat(Habit.count(), equalTo(5));
}
@Test
public void countWithArchived()
{
for(int i = 0; i < 10; i++)
{
Habit h = new Habit();
if(i % 2 == 0) h.archived = 1;
h.save();
}
assertThat(Habit.countWithArchived(), equalTo(10));
}
@Test
public void updateId()
{
Habit habit = new Habit();
habit.name = "Hello World";
habit.save();
Long oldId = habit.getId();
Long newId = 123456L;
Habit.updateId(oldId, newId);
Habit newHabit = Habit.get(newId);
if(newHabit == null) fail();
assertThat(newHabit, is(not(nullValue())));
assertThat(newHabit.name, equalTo(habit.name));
}
@Test
public void reorder()
{ {
List<Long> ids = new LinkedList<>(); List<Long> ids = new LinkedList<>();
for (int i = 0; i < 10; i++) int n = 10;
for (int i = 0; i < n; i++)
{ {
Habit h = new Habit(); Habit h = new Habit();
h.save(); h.save();
@ -102,22 +210,44 @@ public class HabitTest
assertThat(h.position, is(i)); assertThat(h.position, is(i));
} }
int from = 5, to = 2; int operations[][] = {
int expectedPosition[] = {0, 1, 3, 4, 5, 2, 6, 7, 8, 9}; {5, 2},
{3, 7},
{4, 4},
{3, 2}
};
Habit fromHabit = Habit.get(ids.get(from)); int expectedPosition[][] = {
Habit toHabit = Habit.get(ids.get(to)); {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 = Habit.getByPosition(from);
Habit toHabit = Habit.getByPosition(to);
Habit.reorder(fromHabit, toHabit); Habit.reorder(fromHabit, toHabit);
for (int i = 0; i < 10; i++) int actualPositions[] = new int[n];
for (int j = 0; j < n; j++)
{ {
Habit h = Habit.get(ids.get(i)); Habit h = Habit.get(ids.get(j));
assertThat(h.position, is(expectedPosition[i])); if (h == null) fail();
actualPositions[j] = h.position;
}
assertThat(actualPositions, equalTo(expectedPosition[i]));
} }
} }
@Test @Test
public void rebuildOrderTest() public void rebuildOrder()
{ {
List<Long> ids = new LinkedList<>(); List<Long> ids = new LinkedList<>();
int originalPositions[] = { 0, 1, 1, 4, 6, 8, 10, 10, 13}; int originalPositions[] = { 0, 1, 1, 4, 6, 8, 10, 10, 13};
@ -135,7 +265,92 @@ public class HabitTest
for (int i = 0; i < originalPositions.length; i++) for (int i = 0; i < originalPositions.length; i++)
{ {
Habit h = Habit.get(ids.get(i)); Habit h = Habit.get(ids.get(i));
if(h == null) fail();
assertThat(h.position, is(i)); assertThat(h.position, is(i));
} }
} }
@Test
public void getHabitsWithReminder()
{
List<Habit> habitsWithReminder = new LinkedList<>();
for(int i = 0; i < 10; i++)
{
Habit habit = new Habit();
if(i % 2 == 0)
{
habit.reminderDays = DateHelper.ALL_WEEK_DAYS;
habit.reminderHour = 8;
habit.reminderMin = 30;
habitsWithReminder.add(habit);
}
habit.save();
}
assertThat(habitsWithReminder, equalTo(Habit.getHabitsWithReminder()));
}
@Test
public void archive_unarchive()
{
List<Habit> allHabits = new LinkedList<>();
List<Habit> archivedHabits = new LinkedList<>();
List<Habit> unarchivedHabits = new LinkedList<>();
for(int i = 0; i < 10; i++)
{
Habit habit = new Habit();
habit.save();
allHabits.add(habit);
if(i % 2 == 0)
archivedHabits.add(habit);
else
unarchivedHabits.add(habit);
}
Habit.archive(archivedHabits);
assertThat(Habit.getAll(false), equalTo(unarchivedHabits));
assertThat(Habit.getAll(true), equalTo(allHabits));
Habit.unarchive(archivedHabits);
assertThat(Habit.getAll(false), equalTo(allHabits));
assertThat(Habit.getAll(true), equalTo(allHabits));
}
@Test
public void setColor()
{
List<Habit> habits = new LinkedList<>();
for(int i = 0; i < 10; i++)
{
Habit habit = new Habit();
habit.color = i;
habit.save();
habits.add(habit);
}
int newColor = 100;
Habit.setColor(habits, newColor);
for(Habit h : habits)
assertThat(h.color, equalTo(newColor));
}
@Test
public void hasReminder_clearReminder()
{
Habit h = new Habit();
assertThat(h.hasReminder(), is(false));
h.reminderDays = DateHelper.ALL_WEEK_DAYS;
h.reminderHour = 8;
h.reminderMin = 30;
assertThat(h.hasReminder(), is(true));
h.clearReminder();
assertThat(h.hasReminder(), is(false));
}
} }

@ -125,11 +125,7 @@ public class HabitBroadcastReceiver extends BroadcastReceiver
private void dismissAllHabits() private void dismissAllHabits()
{ {
for (Habit h : Habit.getHighlightedHabits())
{
h.highlight = 0;
h.save();
}
} }
private void dismissNotification(Context context, Long habitId) private void dismissNotification(Context context, Long habitId)

@ -37,6 +37,7 @@ import com.activeandroid.util.SQLiteUtils;
import org.isoron.helpers.ColorHelper; import org.isoron.helpers.ColorHelper;
import java.util.List; import java.util.List;
import java.util.Locale;
@Table(name = "Habits") @Table(name = "Habits")
public class Habit extends Model public class Habit extends Model
@ -174,7 +175,7 @@ public class Habit extends Model
* @return the habit, or null if none exist * @return the habit, or null if none exist
*/ */
@Nullable @Nullable
public static Habit get(@NonNull Long id) public static Habit get(long id)
{ {
return Habit.load(Habit.class, id); return Habit.load(Habit.class, id);
} }
@ -185,12 +186,25 @@ public class Habit extends Model
* @param includeArchive whether archived habits should be included the list * @param includeArchive whether archived habits should be included the list
* @return list of all habits * @return list of all habits
*/ */
@NonNull
public static List<Habit> getAll(boolean includeArchive) public static List<Habit> getAll(boolean includeArchive)
{ {
if(includeArchive) return selectWithArchived().execute(); if(includeArchive) return selectWithArchived().execute();
else return select().execute(); else return select().execute();
} }
/**
* Returns the habit that occupies a certain position.
*
* @param position the position of the desired habit
* @return the habit at that position, or null if there is none
*/
@Nullable
public static Habit getByPosition(int position)
{
return selectWithArchived().where("position = ?", position).executeSingle();
}
/** /**
* Changes the id of a habit on the database. * Changes the id of a habit on the database.
* *
@ -203,11 +217,13 @@ public class Habit extends Model
SQLiteUtils.execSql(String.format("update Habits set Id = %d where Id = %d", newId, oldId)); SQLiteUtils.execSql(String.format("update Habits set Id = %d where Id = %d", newId, oldId));
} }
@NonNull
protected static From select() protected static From select()
{ {
return new Select().from(Habit.class).where("archived = 0").orderBy("position"); return new Select().from(Habit.class).where("archived = 0").orderBy("position");
} }
@NonNull
protected static From selectWithArchived() protected static From selectWithArchived()
{ {
return new Select().from(Habit.class).orderBy("position"); return new Select().from(Habit.class).orderBy("position");
@ -233,19 +249,12 @@ public class Habit extends Model
return selectWithArchived().count(); return selectWithArchived().count();
} }
public static java.util.List<Habit> getHighlightedHabits()
{
return select().where("highlight = 1")
.orderBy("reminder_hour desc, reminder_min desc")
.execute();
}
/** /**
* Returns a list the habits that have a reminder. Does not include archived habits. * Returns a list the habits that have a reminder. Does not include archived habits.
* *
* @return list of habits with reminder * @return list of habits with reminder
*/ */
@NonNull
public static List<Habit> getHabitsWithReminder() public static List<Habit> getHabitsWithReminder()
{ {
return select().where("reminder_hour is not null").execute(); return select().where("reminder_hour is not null").execute();
@ -310,7 +319,7 @@ public class Habit extends Model
* *
* @param model the model whose attributes should be copied from * @param model the model whose attributes should be copied from
*/ */
public void copyAttributes(Habit model) public void copyAttributes(@NonNull Habit model)
{ {
this.name = model.name; this.name = model.name;
this.description = model.description; this.description = model.description;
@ -330,7 +339,7 @@ public class Habit extends Model
* *
* @param id the id that the habit should receive * @param id the id that the habit should receive
*/ */
public void save(Long id) public void save(long id)
{ {
save(); save();
Habit.updateId(getId(), id); Habit.updateId(getId(), id);
@ -367,7 +376,8 @@ public class Habit extends Model
*/ */
public Uri getUri() public Uri getUri()
{ {
return Uri.parse(String.format("content://org.isoron.uhabits/habit/%d", getId())); String s = String.format(Locale.US, "content://org.isoron.uhabits/habit/%d", getId());
return Uri.parse(s);
} }
/** /**
@ -379,7 +389,8 @@ public class Habit extends Model
return archived != 0; return archived != 0;
} }
private static void updateAttributes(List<Habit> habits, Integer color, Integer archived) private static void updateAttributes(@NonNull List<Habit> habits, @Nullable Integer color,
@Nullable Integer archived)
{ {
ActiveAndroid.beginTransaction(); ActiveAndroid.beginTransaction();
@ -405,7 +416,7 @@ public class Habit extends Model
* *
* @param habits the habits to be archived * @param habits the habits to be archived
*/ */
public static void archive(List<Habit> habits) public static void archive(@NonNull List<Habit> habits)
{ {
updateAttributes(habits, null, 1); updateAttributes(habits, null, 1);
} }
@ -415,7 +426,7 @@ public class Habit extends Model
* *
* @param habits the habits to be unarchived * @param habits the habits to be unarchived
*/ */
public static void unarchive(List<Habit> habits) public static void unarchive(@NonNull List<Habit> habits)
{ {
updateAttributes(habits, null, 0); updateAttributes(habits, null, 0);
} }
@ -426,7 +437,7 @@ public class Habit extends Model
* @param habits the habits to be modified * @param habits the habits to be modified
* @param color the new color to be set * @param color the new color to be set
*/ */
public static void setColor(List<Habit> habits, int color) public static void setColor(@NonNull List<Habit> habits, int color)
{ {
updateAttributes(habits, color, null); updateAttributes(habits, color, null);
} }

Loading…
Cancel
Save