/* 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 unlinking entries. */ public class DbUnlinkTest extends DbLogicTestBase { // unlink 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.unlinkEntry(user, null, false, errors)); assertTrue(errors.compare(errorMessages.errorEntryIsNull())); finalAssertions(user, expectedAfter); } // unlink 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 toUnlinkId = before.getIdForValue("1"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertFalse(dbLogic.unlinkEntry(null, toUnlinkNode, false, errors)); assertTrue(errors.compare(errorMessages.errorUserIsNull())); finalAssertions(user, expectedAfter); } // unlink a source with no children or parent @Test public void test2a() { final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry("S", true) }); final TestEntrySet expectedAfter = before; final Errors errors = new Errors(); final User user = dbLogic.getOrCreateUser("user"); assertTrue(dbLogic.addEntries(before, user, createTime, errors)); final String toUnlinkId = before.getIdForValue("S"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertTrue(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertFalse(errors.hasErrors()); finalAssertions(user, expectedAfter); } // unlink a quotation with no children or parent @Test public void test2b() { final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry("S", true), TestEntry.newQuotation("2", "S") }); final TestEntrySet expectedAfter = before; final Errors errors = new Errors(); final User user = dbLogic.getOrCreateUser("user"); assertTrue(dbLogic.addEntries(before, user, createTime, errors)); final String toUnlinkId = before.getIdForValue("2"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertTrue(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertFalse(errors.hasErrors()); finalAssertions(user, expectedAfter); } // unlink a root @Test public void test2c() { 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 toUnlinkId = before.getIdForValue("1"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertFalse(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertTrue(errors.compare(errorMessages.errorUserOnlyQuotationsAndSourcesMayBeUnlinked())); finalAssertions(user, expectedAfter); } // unlink a note @Test public void test2d() { final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry("1", new TestEntry[] { new TestEntry("2") } ) }); final TestEntrySet expectedAfter = before; final Errors errors = new Errors(); final User user = dbLogic.getOrCreateUser("user"); assertTrue(dbLogic.addEntries(before, user, createTime, errors)); final String toUnlinkId = before.getIdForValue("2"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertFalse(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertTrue(errors.compare(errorMessages.errorUserOnlyQuotationsAndSourcesMayBeUnlinked())); finalAssertions(user, expectedAfter); } // unlink a quotation node with parent and 0 children @Test public void test3() { final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry("S", true), new TestEntry("1", new TestEntry[] { TestEntry.newQuotation("2", "S") } ) }); final TestEntrySet expectedAfter = new TestEntrySet( new TestEntry[] { new TestEntry("S"), new TestEntry("1"), new TestEntry("2") }); final Errors errors = new Errors(); final User user = dbLogic.getOrCreateUser("user"); assertTrue(dbLogic.addEntries(before, user, createTime, errors)); final String toUnlinkId = before.getIdForValue("2"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertTrue(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertFalse(errors.hasErrors()); finalAssertions(user, expectedAfter); } // unlink a quotation node with parent and 1 child @Test public void test4() { final TestEntrySet before = new TestEntrySet(new TestEntry[] { new TestEntry("S", true), new TestEntry("1", new TestEntry[] { TestEntry.newQuotation("2", "S", new TestEntry[] { new TestEntry("3") } ) } ) }); final TestEntrySet expectedAfter = new TestEntrySet( new TestEntry[] { new TestEntry("S"), new TestEntry("1", new TestEntry[] { new TestEntry("3") } ), new TestEntry("2") }); final Errors errors = new Errors(); final User user = dbLogic.getOrCreateUser("user"); assertTrue(dbLogic.addEntries(before, user, createTime, errors)); final String toUnlinkId = before.getIdForValue("2"); final Entry toUnlinkNode = dbLogic.getEntryById(toUnlinkId); assertTrue(dbLogic.unlinkEntry(user, toUnlinkNode, false, errors)); assertFalse(errors.hasErrors()); finalAssertions(user, expectedAfter); } }