@Test public void createdAdapterFailsOnCreateIfHandlerIsNotAContainerHandler(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockContainerSnapshot(), simpleHandler(),session); try { adapter.create(null); fail("Should fail if an exception is thrown on create"); } catch(FeatureException e) { verifyExpectedFeatureException(e, ContainerHandler.class, SimpleHandler.class, session); } }
@Test public void adapterExposesResourceIdentifier(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); assertThat(adapter.resourceId(),equalTo(ResourceId.createId(resourceName(), templateId()))); }
@Test public void createdAdapterFailsOnCreateIfHandlerViolatesPostcondition(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockContainerSnapshot(), violationHandler(),session); try { adapter.create(null); fail("Should fail if create postcondition is violated"); } catch(FeaturePostconditionException e) { verifyExpectedFeatureException(e, ContainerHandler.class, ViolationHandler.class, session); } }
@Test public void createdAdapterFailsOnInternalDeleteFailure(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); try { adapter.delete(); fail("Should fail if an exception is thrown on delete"); } catch(FeatureException e) { verifyExpectedFeatureFailure(e, Deletable.class, session); } }
@Test public void creationOnResourceSnapshotFails(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); try { adapter.create(null); fail("Should fail if an exception is thrown on create"); } catch(UnsupportedFeatureException e) { verifyExpectedFeatureException(e, ContainerHandler.class, FailingHandler.class, session); } }
private void verifyExpectedFeatureException(FeatureException failure, Class<?> featureClass, Class<?> handlerClass, final WriteSession session) { assertThat(failure.getFeatureClassName(),equalTo(featureClass.getName())); assertThat(failure.getHandlerClassName(),equalTo(handlerClass.getName())); assertThat(failure.getTemplateId(),equalTo(templateId())); try { new Verifications() {{ session.close(); }}; } catch (Exception e) { } }
private void verifyExpectedFeatureFailure(FeatureException failure, Class<?> featureClass, WriteSession session) { assertThat(failure.getCause(),instanceOf(ApplicationRuntimeException.class)); verifyExpectedFeatureException(failure, featureClass, FailingHandler.class,session); }
private SimpleHandler simpleHandler() { return new SimpleHandler(DataSets.createDataSet(resourceName())); }
@Test public void createdAdapterFailsOnInternalGetFailure(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); try { adapter.get(); fail("Should fail if an exception is thrown on get"); } catch(FeatureException e) { verifyExpectedFeatureFailure(e, ResourceHandler.class, session); } }
private Adapter prepareAdapter( final Resource resource, final WriteSessionService service, final WriteSessionConfiguration configuration, final MockResourceSnapshot snapshot, final ResourceHandler handler, final WriteSession session) { new Expectations() {{ service.createSession(configuration);result=session; resource.id();result=ResourceId.createId(resourceName(), templateId()); service.attach((WriteSession)any,resource,handler.getClass());result=snapshot; }}; snapshot.setTemplateId(templateId()); snapshot.setHandler(handler); return AdapterFactory.newAdapter(resource,handler,service,configuration); }
@Test public void createdAdapterFailsOnQueryIfHandlerIsNotQueryable(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), simpleHandler(),session); try { adapter.query(null); fail("Should fail if an exception is thrown on query"); } catch(FeatureException e) { verifyExpectedFeatureException(e, Queryable.class, SimpleHandler.class, session); } }
@Test public void createdAdapterFailsOnQueryIfHandlerViolatesPostcondition(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockContainerSnapshot(), violationHandler(),session); try { adapter.query(null); fail("Should fail if query postcondition is violated"); } catch(FeaturePostconditionException e) { verifyExpectedFeatureException(e, Queryable.class, ViolationHandler.class, session); } }
@Test public void createdAdapterFailsOnInternalCreateFailure(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockContainerSnapshot(), new FailingHandler(),session); try { adapter.create(null); fail("Should fail if an exception is thrown on create"); } catch(FeatureException e) { verifyExpectedFeatureFailure(e, ContainerHandler.class, session); } }
@Test public void createdAdapterFailsOnUpdateIfHandlerIsNotModifiable(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), simpleHandler(),session); try { adapter.update(null); fail("Should fail if an exception is thrown on update"); } catch(FeatureException e) { verifyExpectedFeatureException(e, Modifiable.class, SimpleHandler.class, session); } }
@Test public void createdAdapterFailsOnGetIfHandlerViolatesPostcondition(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockContainerSnapshot(), violationHandler(),session); try { adapter.get(); fail("Should fail if get postcondition is violated"); } catch(FeaturePostconditionException e) { verifyExpectedFeatureException(e, ResourceHandler.class, ViolationHandler.class, session); } }
@Test public void createdAdapterFailsOnInternalQueryFailure(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); try { adapter.query(null); fail("Should fail if an exception is thrown on query"); } catch(FeatureException e) { verifyExpectedFeatureFailure(e, Queryable.class, session); } }
@Test public void createdAdapterFailsOnDeleteIfHandlerIsNotDeletable(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), simpleHandler(),session); try { adapter.delete(); fail("Should fail if an exception is thrown on delete"); } catch(FeatureException e) { verifyExpectedFeatureException(e, Deletable.class, SimpleHandler.class, session); } }
@Test public void createdAdapterFailsOnInternalUpdateFailure(final @Mocked Resource resource, final @Mocked WriteSessionService service, final @Mocked WriteSessionConfiguration configuration, final @Mocked WriteSession session) throws Exception { Adapter adapter=prepareAdapter(resource, service,configuration, new MockResourceSnapshot(), new FailingHandler(),session); try { adapter.update(null); fail("Should fail if an exception is thrown on update"); } catch(FeatureException e) { verifyExpectedFeatureFailure(e, Modifiable.class, session); } }