mirror of
https://github.com/iSoron/uhabits.git
synced 2025-12-06 09:08:52 -06:00
Implement missing tests for Habit; remove some dead code
This commit is contained in:
@@ -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},
|
||||||
Habit.reorder(fromHabit, toHabit);
|
{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 < 10; i++)
|
for(int i = 0; i < operations.length; i++)
|
||||||
{
|
{
|
||||||
Habit h = Habit.get(ids.get(i));
|
int from = operations[i][0];
|
||||||
assertThat(h.position, is(expectedPosition[i]));
|
int to = operations[i][1];
|
||||||
|
|
||||||
|
Habit fromHabit = Habit.getByPosition(from);
|
||||||
|
Habit toHabit = Habit.getByPosition(to);
|
||||||
|
Habit.reorder(fromHabit, toHabit);
|
||||||
|
|
||||||
|
int actualPositions[] = new int[n];
|
||||||
|
|
||||||
|
for (int j = 0; j < n; j++)
|
||||||
|
{
|
||||||
|
Habit h = Habit.get(ids.get(j));
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user