///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition 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 General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.plugins.crm; import static org.junit.Assert.assertEquals; import org.apache.log4j.Logger; import org.projectforge.test.TestBase; public class ContactEntryTest extends TestBase { private final static Logger log = Logger.getLogger(ContactEntryTest.class); private ContactEntryDao contactEntryDao; private ContactDao contactDao; public void setContactEntryDao(final ContactEntryDao contactEntryDao) { this.contactEntryDao = contactEntryDao; } public void setContactDao(final ContactDao contactDao) { this.contactDao = contactDao; } //@Test public void testSaveAndUpdate() { logon(ADMIN); //final ContactDao contactDao = new ContactDao(); final ContactDO a1 = new ContactDO(); a1.setName("Kai Reinhard"); a1.setTask(getTask("1.1")); contactDao.save(a1); log.debug(a1); final ContactEntryDO ae1 = new ContactEntryDO(); ae1.setContact(a1); ae1.setContactType(ContactType.BUSINESS); ae1.setStreet("Marie-Calm-Straße 1-5"); contactEntryDao.save(ae1); log.debug(ae1); final ContactEntryDO ae2 = contactEntryDao.getById(ae1.getId()); assertEquals("Marie-Calm-Straße 1-5", ae2.getStreet()); ae2.setContactType(ContactType.POSTAL); ae2.setStreet("Teststrasse 42"); contactEntryDao.update(ae2); log.debug(ae2); final ContactEntryDO ae3 = contactEntryDao.getById(ae2.getId()); assertEquals("Teststrasse 42", ae3.getStreet()); assertEquals(ContactType.POSTAL, ae3.getContactType()); log.debug(ae3); } //@Test public void testDeleteAndUndelete() { logon(ADMIN); final ContactDO a1 = new ContactDO(); a1.setName("Test"); a1.setTask(getTask("1.1")); contactDao.save(a1); ContactEntryDO ae1 = new ContactEntryDO(); ae1.setContact(a1); ae1.setContactType(ContactType.BUSINESS); ae1.setStreet("Marie-Calm-Straße 1-5"); contactEntryDao.save(ae1); log.debug(ae1); final Integer id = ae1.getId(); ae1 = contactEntryDao.getById(id); contactEntryDao.markAsDeleted(ae1); ae1 = contactEntryDao.getById(id); assertEquals("Should be marked as deleted.", true, ae1.isDeleted()); contactEntryDao.undelete(ae1); ae1 = contactEntryDao.getById(id); assertEquals("Should be undeleted.", false, ae1.isDeleted()); } // @Test(expected = RuntimeException.class) // public void testDelete() // { // ContactEntryDO a1 = new ContactEntryDO(); // a1.setName("Not deletable"); // a1.setTask(getTask("1.1")); // contactDao.save(a1); // final Integer id = a1.getId(); // a1 = contactDao.getById(id); // contactDao.delete(a1); // } // @Test // public void testHistory() // { // final PFUserDO user = getUser(TestBase.ADMIN); // logon(user.getUsername()); // ContactDO a1 = new ContactDO(); // a1.setName("History test"); // a1.setTask(getTask("1.1")); // contactDao.save(a1); // final Integer id = a1.getId(); // a1.setName("History 2"); // contactDao.update(a1); // HistoryEntry[] historyEntries = contactDao.getHistoryEntries(a1); // assertEquals(2, historyEntries.length); // HistoryEntry entry = historyEntries[0]; // log.debug(entry); // assertHistoryEntry(entry, id, user, HistoryEntryType.UPDATE, "name", String.class, "History test", "History 2"); // entry = historyEntries[1]; // log.debug(entry); // assertHistoryEntry(entry, id, user, HistoryEntryType.INSERT, null, null, null, null); // // a1.setTask(getTask("1.2")); // contactDao.update(a1); // historyEntries = contactDao.getHistoryEntries(a1); // assertEquals(3, historyEntries.length); // entry = historyEntries[0]; // log.debug(entry); // assertHistoryEntry(entry, id, user, HistoryEntryType.UPDATE, "task", TaskDO.class, getTask("1.1").getId(), getTask("1.2").getId()); // // a1.setTask(getTask("1.1")); // a1.setName("History test"); // contactDao.update(a1); // historyEntries = contactDao.getHistoryEntries(a1); // assertEquals(4, historyEntries.length); // entry = historyEntries[0]; // log.debug(entry); // assertHistoryEntry(entry, id, user, HistoryEntryType.UPDATE, null, null, null, null); // final List<PropertyDelta> delta = entry.getDelta(); // assertEquals(2, delta.size()); // for (int i = 0; i < 2; i++) { // final PropertyDelta prop = delta.get(0); // if ("name".equals(prop.getPropertyName()) == true) { // assertPropertyDelta(prop, "name", String.class, "History 2", "History test"); // } else { // assertPropertyDelta(prop, "task", TaskDO.class, getTask("1.2").getId(), getTask("1.1").getId()); // } // } // // List<SimpleHistoryEntry> list = contactDao.getSimpleHistoryEntries(a1); // assertEquals(5, list.size()); // for (int i = 0; i < 2; i++) { // final SimpleHistoryEntry se = list.get(i); // if ("name".equals(se.getPropertyName()) == true) { // assertSimpleHistoryEntry(se, user, HistoryEntryType.UPDATE, "name", String.class, "History 2", "History test"); // } else { // assertSimpleHistoryEntry(se, user, HistoryEntryType.UPDATE, "task", TaskDO.class, getTask("1.2").getId(), getTask("1.1").getId()); // } // } // SimpleHistoryEntry se = list.get(2); // assertSimpleHistoryEntry(se, user, HistoryEntryType.UPDATE, "task", TaskDO.class, getTask("1.1").getId(), getTask("1.2").getId()); // se = list.get(3); // assertSimpleHistoryEntry(se, user, HistoryEntryType.UPDATE, "name", String.class, "History test", "History 2"); // se = list.get(4); // assertSimpleHistoryEntry(se, user, HistoryEntryType.INSERT, null, null, null, null); // // a1 = contactDao.getById(a1.getId()); // final Date date = a1.getLastUpdate(); // final String oldName = a1.getName(); // a1.setName("Micromata GmbH"); // a1.setName(oldName); // contactDao.update(a1); // a1 = contactDao.getById(a1.getId()); // list = contactDao.getSimpleHistoryEntries(a1); // assertEquals(5, list.size()); // assertEquals(date, a1.getLastUpdate()); // Fails: Fix AbstractBaseDO.copyDeclaredFields: ObjectUtils.equals(Boolean, boolean) etc. // } // // @Test // public void checkStandardAccess() // { // ContactDO a1 = new ContactDO(); // a1.setName("testa1"); // a1.setTask(getTask("ta_1_siud")); // contactDao.internalSave(a1); // ContactDO a2 = new ContactDO(); // a2.setName("testa2"); // a2.setTask(getTask("ta_2_siux")); // contactDao.internalSave(a2); // final ContactDO a3 = new ContactDO(); // a3.setName("testa3"); // a3.setTask(getTask("ta_3_sxxx")); // contactDao.internalSave(a3); // final ContactDO a4 = new ContactDO(); // a4.setName("testa4"); // a4.setTask(getTask("ta_4_xxxx")); // contactDao.internalSave(a4); // logon(TestBase.TEST_USER); // // // Select // try { // contactDao.getById(a4.getId()); // fail("User has no access to select"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_4_xxxx").getId(), AccessType.TASKS, OperationType.SELECT); // } // ContactDO address = contactDao.getById(a3.getId()); // assertEquals("testa3", address.getName()); // // // Select filter // final BaseSearchFilter searchFilter = new BaseSearchFilter(); // searchFilter.setSearchString("testa*"); // final QueryFilter filter = new QueryFilter(searchFilter); // filter.addOrder(Order.asc("name")); // final List<ContactDO> result = contactDao.getList(filter); // assertEquals("Should found 3 address'.", 3, result.size()); // final HashSet<String> set = new HashSet<String>(); // set.add("testa1"); // set.add("testa2"); // set.add("testa3"); // assertTrue("Hit first entry", set.remove(result.get(0).getName())); // assertTrue("Hit second entry", set.remove(result.get(1).getName())); // assertTrue("Hit third entry", set.remove(result.get(2).getName())); // // test_a4 should not be included in result list (no select access) // // // Insert // address = new ContactDO(); // address.setName("test"); // contactDao.setTask(address, getTask("ta_4_xxxx").getId()); // try { // contactDao.save(address); // fail("User has no access to insert"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_4_xxxx").getId(), AccessType.TASKS, OperationType.INSERT); // } // contactDao.setTask(address, getTask("ta_1_siud").getId()); // contactDao.save(address); // assertEquals("test", address.getName()); // // // Update // a3.setName("test_a3test"); // try { // contactDao.update(a3); // fail("User has no access to update"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_3_sxxx").getId(), AccessType.TASKS, OperationType.UPDATE); // } // a2.setName("testa2test"); // contactDao.update(a2); // address = contactDao.getById(a2.getId()); // assertEquals("testa2test", address.getName()); // a2.setName("testa2"); // contactDao.update(a2); // address = contactDao.getById(a2.getId()); // assertEquals("testa2", address.getName()); // // // Update with moving in task hierarchy // a2.setName("testa2test"); // contactDao.setTask(a2, getTask("ta_1_siud").getId()); // try { // contactDao.update(a2); // fail("User has no access to update"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_2_siux").getId(), AccessType.TASKS, OperationType.DELETE); // } // a2 = contactDao.getById(a2.getId()); // a1.setName("testa1test"); // contactDao.setTask(a1, getTask("ta_5_sxux").getId()); // try { // contactDao.update(a1); // fail("User has no access to update"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_5_sxux").getId(), AccessType.TASKS, OperationType.INSERT); // } // a1 = contactDao.getById(a1.getId()); // assertEquals("testa1", a1.getName()); // // // Delete // try { // contactDao.delete(a1); // fail("Address is historizable and should not be allowed to delete."); // } catch (final RuntimeException ex) { // assertEquals(true, ex.getMessage().startsWith(ContactDao.EXCEPTION_HISTORIZABLE_NOTDELETABLE)); // } // try { // contactDao.markAsDeleted(a2); // fail("User has no access to delete"); // } catch (final AccessException ex) { // assertAccessException(ex, getTask("ta_2_siux").getId(), AccessType.TASKS, OperationType.DELETE); // } // } // @Test // public void testInstantMessagingField() throws Exception // { // final ContactDO address = new ContactDO(); // assertNull(address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.SKYPE, "skype-name"); // assertEquals("SKYPE=skype-name", address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.AIM, "aim-id"); // assertEquals("SKYPE=skype-name\nAIM=aim-id", address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.YAHOO, "yahoo-name"); // assertEquals("SKYPE=skype-name\nAIM=aim-id\nYAHOO=yahoo-name", address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.YAHOO, ""); // assertEquals("SKYPE=skype-name\nAIM=aim-id", address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.SKYPE, ""); // assertEquals("AIM=aim-id", address.getInstantMessaging4DB()); // address.setInstantMessaging(SocialMediaType.AIM, ""); // assertNull(address.getInstantMessaging4DB()); // } }