Add TagDataDao.getTagDataForTask

pull/848/head
Alex Baker 6 years ago
parent 16910c53c9
commit 3c06a0644b

@ -1,12 +1,19 @@
package org.tasks.data; package org.tasks.data;
import static com.natpryce.makeiteasy.MakeItEasy.with; import static com.natpryce.makeiteasy.MakeItEasy.with;
import static java.util.Collections.singletonList;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.tasks.makers.TagDataMaker.NAME; import static org.tasks.makers.TagDataMaker.NAME;
import static org.tasks.makers.TagDataMaker.newTagData; 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 androidx.test.ext.junit.runners.AndroidJUnit4;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import javax.inject.Inject; import javax.inject.Inject;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -16,6 +23,8 @@ import org.tasks.injection.TestComponent;
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class TagDataDaoTest extends InjectingTestCase { public class TagDataDaoTest extends InjectingTestCase {
@Inject TaskDao taskDao;
@Inject TagDao tagDao;
@Inject TagDataDao tagDataDao; @Inject TagDataDao tagDataDao;
@Test @Test
@ -44,6 +53,24 @@ public class TagDataDaoTest extends InjectingTestCase {
assertEquals("Derp", tagDataDao.getTagWithCase("derp")); 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 @Override
protected void inject(TestComponent component) { protected void inject(TestComponent component) {
component.inject(this); component.inject(this);

@ -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<Tag, String> NAME = newProperty();
public static final Property<Tag, TagData> TAGDATA = newProperty();
public static final Property<Tag, Task> TASK = newProperty();
private static final Instantiator<Tag> 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<? super Tag, ?>... properties) {
return make(instantiator, properties);
}
}

@ -112,7 +112,7 @@ public final class TagsControlSet extends TaskEditControlFragment {
new ArrayList<>( new ArrayList<>(
task.isNew() task.isNew()
? transform(task.getTags(), tagDataDao::getTagByName) ? transform(task.getTags(), tagDataDao::getTagByName)
: getTagDataForTask(task.getId())); : tagDataDao.getTagDataForTask(task.getId()));
selectedTags = new ArrayList<>(originalTags); selectedTags = new ArrayList<>(originalTags);
newTags = new ArrayList<>(); newTags = new ArrayList<>();
} }
@ -155,14 +155,6 @@ public final class TagsControlSet extends TaskEditControlFragment {
return view; return view;
} }
private List<TagData> getTagDataForTask(String uuid) {
return transform(tagDao.getTagUids(uuid), tagDataDao::getByUuid);
}
private List<TagData> getTagDataForTask(long taskId) {
return transform(tagDao.getTagUids(taskId), tagDataDao::getByUuid);
}
@Override @Override
public void onSaveInstanceState(Bundle outState) { public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState); super.onSaveInstanceState(outState);
@ -381,7 +373,7 @@ public final class TagsControlSet extends TaskEditControlFragment {
tagDataDao.createNew(tagData); tagDataDao.createNew(tagData);
} }
} }
Set<TagData> existingHash = newHashSet(getTagDataForTask(taskUuid)); Set<TagData> existingHash = newHashSet(tagDataDao.getTagDataForTask(taskId));
Set<TagData> selectedHash = newHashSet(selectedTags); Set<TagData> selectedHash = newHashSet(selectedTags);
Sets.SetView<TagData> added = difference(selectedHash, existingHash); Sets.SetView<TagData> added = difference(selectedHash, existingHash);
Sets.SetView<TagData> removed = difference(existingHash, selectedHash); Sets.SetView<TagData> removed = difference(existingHash, selectedHash);

@ -26,12 +26,6 @@ public interface TagDao {
@Query("SELECT name FROM tags WHERE task = :taskId ORDER BY UPPER(name) ASC") @Query("SELECT name FROM tags WHERE task = :taskId ORDER BY UPPER(name) ASC")
List<String> getTagNames(long taskId); List<String> getTagNames(long taskId);
@Query("SELECT tag_uid FROM tags WHERE task = :taskId")
List<String> getTagUids(long taskId);
@Query("SELECT tag_uid FROM tags WHERE task_uid = :taskUid")
List<String> getTagUids(String taskUid);
@Query("SELECT * FROM tags WHERE tag_uid = :tagUid") @Query("SELECT * FROM tags WHERE tag_uid = :tagUid")
List<Tag> getByTagUid(String tagUid); List<Tag> getByTagUid(String tagUid);

@ -40,6 +40,11 @@ public abstract class TagDataDao {
@Query("DELETE FROM tagdata WHERE _id = :id") @Query("DELETE FROM tagdata WHERE _id = :id")
public abstract void delete(Long 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<TagData> getTagDataForTask(long id);
@Update @Update
public abstract void update(TagData tagData); public abstract void update(TagData tagData);

Loading…
Cancel
Save