From 3c06a0644b6cdb6b353eb6f67c58f986c426e61b Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Wed, 18 Sep 2019 10:26:29 -0500 Subject: [PATCH] Add TagDataDao.getTagDataForTask --- .../java/org/tasks/data/TagDataDaoTest.java | 27 ++++++++++++++ .../java/org/tasks/makers/TagMaker.java | 35 +++++++++++++++++++ .../todoroo/astrid/tags/TagsControlSet.java | 12 ++----- app/src/main/java/org/tasks/data/TagDao.java | 6 ---- .../main/java/org/tasks/data/TagDataDao.java | 5 +++ 5 files changed, 69 insertions(+), 16 deletions(-) create mode 100644 app/src/androidTest/java/org/tasks/makers/TagMaker.java diff --git a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java index 89b126a50..206406306 100644 --- a/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java +++ b/app/src/androidTest/java/org/tasks/data/TagDataDaoTest.java @@ -1,12 +1,19 @@ package org.tasks.data; import static com.natpryce.makeiteasy.MakeItEasy.with; +import static java.util.Collections.singletonList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.tasks.makers.TagDataMaker.NAME; import static org.tasks.makers.TagDataMaker.newTagData; +import static org.tasks.makers.TagMaker.TAGDATA; +import static org.tasks.makers.TagMaker.TASK; +import static org.tasks.makers.TagMaker.newTag; +import static org.tasks.makers.TaskMaker.newTask; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.todoroo.astrid.dao.TaskDao; +import com.todoroo.astrid.data.Task; import javax.inject.Inject; import org.junit.Test; import org.junit.runner.RunWith; @@ -16,6 +23,8 @@ import org.tasks.injection.TestComponent; @RunWith(AndroidJUnit4.class) public class TagDataDaoTest extends InjectingTestCase { + @Inject TaskDao taskDao; + @Inject TagDao tagDao; @Inject TagDataDao tagDataDao; @Test @@ -44,6 +53,24 @@ public class TagDataDaoTest extends InjectingTestCase { assertEquals("Derp", tagDataDao.getTagWithCase("derp")); } + @Test + public void getTagDataForTask() { + Task taskOne = newTask(); + Task taskTwo = newTask(); + taskDao.createNew(taskOne); + taskDao.createNew(taskTwo); + + TagData tagOne = newTagData(with(NAME, "one")); + TagData tagTwo = newTagData(with(NAME, "two")); + tagDataDao.createNew(tagOne); + tagDataDao.createNew(tagTwo); + + tagDao.insert(newTag(with(TAGDATA, tagOne), with(TASK, taskOne))); + tagDao.insert(newTag(with(TAGDATA, tagTwo), with(TASK, taskTwo))); + + assertEquals(singletonList(tagOne), tagDataDao.getTagDataForTask(taskOne.getId())); + } + @Override protected void inject(TestComponent component) { component.inject(this); diff --git a/app/src/androidTest/java/org/tasks/makers/TagMaker.java b/app/src/androidTest/java/org/tasks/makers/TagMaker.java new file mode 100644 index 000000000..3b1629f92 --- /dev/null +++ b/app/src/androidTest/java/org/tasks/makers/TagMaker.java @@ -0,0 +1,35 @@ +package org.tasks.makers; + +import static com.natpryce.makeiteasy.Property.newProperty; +import static org.tasks.makers.Maker.make; + +import com.natpryce.makeiteasy.Instantiator; +import com.natpryce.makeiteasy.Property; +import com.natpryce.makeiteasy.PropertyValue; +import com.todoroo.astrid.data.Task; +import org.tasks.data.Tag; +import org.tasks.data.TagData; + +public class TagMaker { + + public static final Property NAME = newProperty(); + public static final Property TAGDATA = newProperty(); + public static final Property TASK = newProperty(); + + private static final Instantiator instantiator = lookup -> { + Tag tag = new Tag(); + Task task = lookup.valueOf(TASK, (Task) null); + assert(task != null); + tag.setTask(task.getId()); + tag.setTaskUid(task.getUuid()); + TagData tagData = lookup.valueOf(TAGDATA, (TagData) null); + assert(tagData != null); + tag.setTagUid(tagData.getRemoteId()); + return tag; + }; + + @SafeVarargs + public static Tag newTag(PropertyValue... properties) { + return make(instantiator, properties); + } +} diff --git a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java index bdb75d709..8efe97cea 100644 --- a/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java +++ b/app/src/main/java/com/todoroo/astrid/tags/TagsControlSet.java @@ -112,7 +112,7 @@ public final class TagsControlSet extends TaskEditControlFragment { new ArrayList<>( task.isNew() ? transform(task.getTags(), tagDataDao::getTagByName) - : getTagDataForTask(task.getId())); + : tagDataDao.getTagDataForTask(task.getId())); selectedTags = new ArrayList<>(originalTags); newTags = new ArrayList<>(); } @@ -155,14 +155,6 @@ public final class TagsControlSet extends TaskEditControlFragment { return view; } - private List getTagDataForTask(String uuid) { - return transform(tagDao.getTagUids(uuid), tagDataDao::getByUuid); - } - - private List getTagDataForTask(long taskId) { - return transform(tagDao.getTagUids(taskId), tagDataDao::getByUuid); - } - @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); @@ -381,7 +373,7 @@ public final class TagsControlSet extends TaskEditControlFragment { tagDataDao.createNew(tagData); } } - Set existingHash = newHashSet(getTagDataForTask(taskUuid)); + Set existingHash = newHashSet(tagDataDao.getTagDataForTask(taskId)); Set selectedHash = newHashSet(selectedTags); Sets.SetView added = difference(selectedHash, existingHash); Sets.SetView removed = difference(existingHash, selectedHash); diff --git a/app/src/main/java/org/tasks/data/TagDao.java b/app/src/main/java/org/tasks/data/TagDao.java index 2359f6d46..ad7e71f69 100644 --- a/app/src/main/java/org/tasks/data/TagDao.java +++ b/app/src/main/java/org/tasks/data/TagDao.java @@ -26,12 +26,6 @@ public interface TagDao { @Query("SELECT name FROM tags WHERE task = :taskId ORDER BY UPPER(name) ASC") List getTagNames(long taskId); - @Query("SELECT tag_uid FROM tags WHERE task = :taskId") - List getTagUids(long taskId); - - @Query("SELECT tag_uid FROM tags WHERE task_uid = :taskUid") - List getTagUids(String taskUid); - @Query("SELECT * FROM tags WHERE tag_uid = :tagUid") List getByTagUid(String tagUid); diff --git a/app/src/main/java/org/tasks/data/TagDataDao.java b/app/src/main/java/org/tasks/data/TagDataDao.java index 924ae9ada..74f966740 100644 --- a/app/src/main/java/org/tasks/data/TagDataDao.java +++ b/app/src/main/java/org/tasks/data/TagDataDao.java @@ -40,6 +40,11 @@ public abstract class TagDataDao { @Query("DELETE FROM tagdata WHERE _id = :id") public abstract void delete(Long id); + @Query("SELECT tagdata.* FROM tagdata " + + "INNER JOIN tags ON tags.tag_uid = tagdata.remoteId " + + "WHERE tags.task = :id") + public abstract List getTagDataForTask(long id); + @Update public abstract void update(TagData tagData);