/* * codjo.net * * Common Apache License 2.0 */ package net.codjo.control.common.manager; import net.codjo.control.common.ControlContext; import net.codjo.control.common.ControlException; import net.codjo.control.common.IntegrationPlan; import net.codjo.control.common.i18n.InternationalizationFixture; import net.codjo.control.common.loader.ApplicationIP; import net.codjo.i18n.common.plugin.InternationalizationPlugin; import net.codjo.test.common.LogString; import java.sql.Connection; import java.sql.SQLException; import javax.naming.NamingException; import junit.framework.TestCase; /** * TODO Classe dupliqu� de codjo-control (car encore sous maven1) : net.codjo.control.common.manager.AbstractControlManagerTestCase */ public abstract class AbstractControlManagerTestCase extends TestCase { private InternationalizationFixture i18nFixture = new InternationalizationFixture(); protected static final String USER_LOGIN = "smith"; protected LogString log = new LogString(); private ApplicationIPMock applicationIP; protected abstract String acquireConnectionLog(); protected abstract String releaseConnectionLog(); protected abstract AbstractControlManager createControlManager(ApplicationIP appIp); public void test_controlAdded() throws Exception { AbstractControlManager manager = createControlManager(applicationIP); manager.controlNewEntity("new Object"); log.assertContent("applicationIp.getPlan(java.lang.String), " + acquireConnectionLog() + ", plan.proceedNewEntity(connection, new Object, context(smith)), " + releaseConnectionLog()); } public void test_controlAdded_controlFailure() throws Exception { net.codjo.control.common.ControlException controlFailure = new ControlException(0, ""); applicationIP.mockControlFailure(controlFailure); AbstractControlManager manager = createControlManager(applicationIP); try { manager.controlNewEntity("new Object"); fail(); } catch (ControlException ex) { assertSame(controlFailure, ex); } assertTrue(log.getContent().contains(releaseConnectionLog())); } public void test_controlDeleted() throws Exception { AbstractControlManager manager = createControlManager(applicationIP); manager.controlDeletedEntity("deleted Object"); log.assertContent("applicationIp.getPlan(java.lang.String), " + acquireConnectionLog() + ", plan.proceedDeletedEntity(connection, deleted Object, context(smith)), " + releaseConnectionLog()); } public void test_controlUpdated() throws Exception { AbstractControlManager manager = createControlManager(applicationIP); manager.controlUpdatedEntity("updated Object"); log.assertContent("applicationIp.getPlan(java.lang.String), " + acquireConnectionLog() + ", plan.proceedUpdatedEntity(connection, updated Object, context(smith)), " + releaseConnectionLog()); } @Override protected final void setUp() throws Exception { i18nFixture.doSetUp(); applicationIP = new ApplicationIPMock(new LogString("applicationIp", log)); doSetup(); } protected abstract void doSetup() throws NamingException, ClassNotFoundException; private static class ApplicationIPMock extends ApplicationIP { private LogString log; private ControlException controlFailure; ApplicationIPMock(LogString log) { this.log = log; } @Override public IntegrationPlan getPlan(Class beanClass) { log.call("getPlan", beanClass.getName()); IntegrationPlanMock planMock = new IntegrationPlanMock(new LogString("plan", log)); planMock.mockControlFailure(controlFailure); return planMock; } public void mockControlFailure(ControlException failure) { controlFailure = failure; } } private static class IntegrationPlanMock extends IntegrationPlan { private final LogString log; private ControlException controlFailure; IntegrationPlanMock(LogString log) { this.log = log; } @Override public void proceedUpdatedEntity(final Connection con, final Object vo, final ControlContext ctxt) throws SQLException, ControlException { checkControlFailure(); log.call("proceedUpdatedEntity", "connection", vo, "context(" + ctxt.getUser() + ")"); } @Override public void proceedNewEntity(final Connection con, final Object vo, final ControlContext ctxt) throws SQLException, ControlException { checkControlFailure(); log.call("proceedNewEntity", "connection", vo, "context(" + ctxt.getUser() + ")"); } @Override public void proceedDeletedEntity(final Connection con, final Object vo, final ControlContext ctxt) throws SQLException, ControlException { checkControlFailure(); log.call("proceedDeletedEntity", "connection", vo, "context(" + ctxt.getUser() + ")"); } private void checkControlFailure() throws ControlException { if (controlFailure != null) { throw controlFailure; } } public void mockControlFailure(ControlException failure) { this.controlFailure = failure; } } }