/* * Copyright 2006 University of Dundee. All rights reserved. * Use is subject to license terms supplied in LICENSE.txt */ package ome.server.itests.details; import ome.conditions.SecurityViolation; import ome.conditions.ValidationException; import ome.model.core.Image; import ome.model.meta.ExternalInfo; import ome.parameters.Filter; import ome.parameters.Parameters; import ome.server.itests.AbstractManagedContextTest; import org.testng.annotations.Test; @Test(groups = {"ticket:371","broken"}) public class ExternalInfoTest extends AbstractManagedContextTest { Image i; ExternalInfo info; @Test public void testNullIsOk() throws Exception { loginNewUser(); i = createImage(); assertNull(i.getDetails().getExternalInfo()); i = iUpdate.saveAndReturnObject(i); assertNull(i.getDetails().getExternalInfo()); } @Test(groups = "MAYCHANGE") public void testLSIDCurrentlyRequired() throws Exception { loginNewUser(); createImageAndInfo(); assertNotNull(i.getDetails().getExternalInfo()); try { i = createImage(); info = createInfo(i); info.setLsid(null); // SETTING TO NULL i.getDetails().setExternalInfo(info); iUpdate.saveAndReturnObject(i); fail("invalid!"); } catch (ValidationException ve) { // ok. } } @Test public void testImmutableAlsoForRoot() throws Exception { loginRoot(); try { createImageAndInfo(); i.getDetails().setExternalInfo(null); // null iUpdate.saveObject(i); fail("secvio!"); } catch (SecurityViolation sv) { // ok } try { createImageAndInfo(); ExternalInfo different = createInfo(i); // unmanaged different.setLsid("different"); i.getDetails().setExternalInfo(different); iUpdate.saveObject(i); fail("secvio!"); } catch (SecurityViolation sv) { // ok } try { createImageAndInfo(); ExternalInfo different = iQuery.findByQuery( // managed "from ExternalInfo where id != :id", new Parameters( new Filter().page(0, 1)).addId(info.getId())); i.getDetails().setExternalInfo(different); iUpdate.saveObject(i); fail("secvio!"); } catch (SecurityViolation sv) { // ok } createImageAndInfo(); info.setLsid("modified"); // modified i.getDetails().setExternalInfo(info); iUpdate.saveObject(i); info = iQuery.get(info.getClass(), info.getId()); assertTrue(info.getLsid().equals(LSID)); } @Test public void testCascadeDeletes() throws Exception { loginRoot(); createImageAndInfo(); iUpdate.deleteObject(i); info = iQuery.find(info.getClass(), info.getId()); assertNull(info); } @Test public void testUnique() throws Exception { loginRoot(); createImageAndInfo(); Image i2 = createImage(); i2.getDetails().setExternalInfo(info); try { iUpdate.saveAndReturnObject(i2); fail("invalid!"); } catch (ValidationException ve) { // ok } } @Test public void testPermissions() throws Exception { } // ~ Heleprs // ========================================================================= private void createImageAndInfo() { i = createImage(); i = iUpdate.saveAndReturnObject(i); info = createInfo(i); i.getDetails().setExternalInfo(info); i = iUpdate.saveAndReturnObject(i); info = i.getDetails().getExternalInfo(); } private Image createImage() { Image i = new Image(); i.setName("ticket:371"); return i; } public final static String LSID = "urn:lsid:example.com:image:1"; private ExternalInfo createInfo(Image i) { ExternalInfo info = new ExternalInfo(); info.setEntityType(i.getClass().getName()); info.setEntityId(i.getId()); info.setLsid(LSID); return info; } }