/*
Copyright 2015 CrushPaper.com.
This file is part of CrushPaper.
CrushPaper is free software: you can redistribute it and/or modify
it under the terms of version 3 of the GNU Affero General Public
License as published by the Free Software Foundation.
CrushPaper 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with CrushPaper. If not, see <http://www.gnu.org/licenses/>.
*/
package com.crushpaper;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
/** Tests deleting entries. */
public class DbDeleteEntryTest extends DbLogicTestBase {
// delete with null node
@Test
public void test1() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry(
"1"), });
final TestEntrySet expectedAfter = before;
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
assertFalse(dbLogic.deleteEntry(user, null, null, false,
null, errors));
assertTrue(errors.compare(errorMessages.errorEntryIsNull()));
finalAssertions(user, expectedAfter);
}
// delete with null user
@Test
public void test2() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry(
"1"), });
final TestEntrySet expectedAfter = before;
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertFalse(dbLogic.deleteEntry(null, toDeleteNode, null,
false, null, errors));
assertTrue(errors.compare(errorMessages.errorUserIsNull()));
finalAssertions(user, expectedAfter);
}
// delete a root node with 0 children
@Test
public void test3() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1"), new TestEntry("2"), });
final TestEntrySet expectedAfter = new TestEntrySet(
new TestEntry[] { new TestEntry("2"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode, null,
false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a root node with 1 child and delete the child
@Test
public void test4() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry(
"1", new TestEntry[] { new TestEntry("2"), }), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {});
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"delete", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a root node with 2 children and delete the child
@Test
public void test5() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("3"), }), new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(
new TestEntry[] { new TestEntry("4"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"delete", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a root node with 1 child and uproot the child
@Test
public void test6() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry(
"1", new TestEntry[] { new TestEntry("2"), }), });
final TestEntrySet expectedAfter = new TestEntrySet(
new TestEntry[] { new TestEntry("2"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"orphan", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a root node with 2 children and uproot the child
@Test
public void test7() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("3"), }), new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("4"), new TestEntry("2"), new TestEntry("3"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"orphan", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a root node with 1 child and merge the child to the parent - fail
@Test
public void test8() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"), }),
new TestEntry("4"), });
final TestEntrySet expectedAfter = before;
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertFalse(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertTrue(errors
.compare(errorMessages
.errorChildrenActionMayNotBeParentIfTheDeletedEntryHasNoParent()));
finalAssertions(user, expectedAfter);
}
// delete a node with no children and a parent with 0 other children and and
// merge the non existent children to the parent
@Test
public void test9() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"), }),
new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("4"), new TestEntry("1"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with no children and a parent with 1 other child, the
// deleted node is the first
@Test
public void test10() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("3"), }), new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"), }),
new TestEntry("4"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with no children and a parent with 1 other child, the
// deleted node is the second
@Test
public void test11() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("3"), }), new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"), }),
new TestEntry("4"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with no children and a parent with 2 other children, the
// deleted node is the middle
@Test
public void test12() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("3"), new TestEntry("4"), }),
new TestEntry("5"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), }), new TestEntry("5"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 1 child and a parent with 0 other children and merge
// into the parent
@Test
public void test13() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2",
new TestEntry[] { new TestEntry("3"), }) }),
new TestEntry("4"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"), }),
new TestEntry("4"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 1 child and a parent with 1 other child, the deleted
// node is the first, and merge into the parent
@Test
public void test14() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2",
new TestEntry[] { new TestEntry("3"), }),
new TestEntry("4") }), new TestEntry("5"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"),
new TestEntry("4"), }), new TestEntry("5"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 1 child and a parent with 1 other child, the deleted
// node is the second, and merge into the parent
@Test
public void test15() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3",
new TestEntry[] { new TestEntry("4"), }), }),
new TestEntry("5"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), }), new TestEntry("5"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 1 child and a parent with 2 other children, the
// deleted node is the middle, and merge into the parent
@Test
public void test16() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3",
new TestEntry[] { new TestEntry("4"), }),
new TestEntry("5") }), new TestEntry("6"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), new TestEntry("5"), }),
new TestEntry("6"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 2 children and a parent with 0 other children and
// merge into the parent
@Test
public void test17() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2",
new TestEntry[] { new TestEntry("3"),
new TestEntry("4") }) }), new TestEntry("5"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"),
new TestEntry("4") }), new TestEntry("5"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 2 children and a parent with 1 other child, the
// deleted node is the first, and merge into the parent
@Test
public void test18() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2", new TestEntry[] {
new TestEntry("3"), new TestEntry("4") }),
new TestEntry("5") }), new TestEntry("6"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"),
new TestEntry("4"), new TestEntry("5") }),
new TestEntry("6"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 2 children and a parent with 1 other child, the
// deleted node is the second, and merge into the parent
@Test
public void test19() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3", new TestEntry[] {
new TestEntry("4"), new TestEntry("5") }), }),
new TestEntry("6"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), new TestEntry("5") }),
new TestEntry("6"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 2 children and a parent with 2 other children, the
// deleted node is the middle, and merge into the parent
@Test
public void test20() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3", new TestEntry[] {
new TestEntry("4"), new TestEntry("5") }),
new TestEntry("6") }), new TestEntry("7"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6") }), new TestEntry("7"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 3 children and a parent with 0 other children and
// merge into the parent
@Test
public void test21() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2",
new TestEntry[] { new TestEntry("3"),
new TestEntry("4"), new TestEntry("5"), }) }),
new TestEntry("6"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"),
new TestEntry("4"), new TestEntry("5"), }),
new TestEntry("6"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 3 children and a parent with 1 other child, the
// deleted node is the first, and merge into the parent
@Test
public void test22() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2", new TestEntry[] {
new TestEntry("3"), new TestEntry("4"),
new TestEntry("5"), }), new TestEntry("6") }),
new TestEntry("7"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("3"),
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6"), }), new TestEntry("7"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("2");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 3 children and a parent with 1 other child, the
// deleted node is the second, and merge into the parent
@Test
public void test23() {
final TestEntrySet before = new TestEntrySet(
new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3", new TestEntry[] {
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6"), }), }),
new TestEntry("7"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6"), }), new TestEntry("7"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// delete a node with 3 children and a parent with 2 other children, the
// deleted node is the middle, and merge into the parent
@Test
public void test24() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] {
new TestEntry("2"),
new TestEntry("3", new TestEntry[] {
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6"), }), new TestEntry("7") }),
new TestEntry("8"), });
final TestEntrySet expectedAfter = new TestEntrySet(new TestEntry[] {
new TestEntry("1", new TestEntry[] { new TestEntry("2"),
new TestEntry("4"), new TestEntry("5"),
new TestEntry("6"), new TestEntry("7"), }),
new TestEntry("8"), });
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("3");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertTrue(dbLogic.deleteEntry(user, toDeleteNode,
"parent", false, null, errors));
assertFalse(errors.hasErrors());
finalAssertions(user, expectedAfter);
}
// an invalid childrenAction value
@Test
public void test25() {
final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry(
"1"), });
final TestEntrySet expectedAfter = before;
final Errors errors = new Errors();
final User user = dbLogic.getOrCreateUser("user");
assertTrue(dbLogic.addEntries(before, user, createTime,
errors));
final String toDeleteId = before.getIdForValue("1");
final Entry toDeleteNode = dbLogic.getEntryById(toDeleteId);
assertFalse(dbLogic.deleteEntry(user, toDeleteNode, "",
false, null, errors));
assertTrue(errors.compare(errorMessages
.errorChildrenActionInvalid()));
finalAssertions(user, expectedAfter);
}
}