/* * Copyright (c) [2011-2016] "Pivotal Software, Inc." / "Neo Technology" / "Graph Aware Ltd." * * This product is licensed to you under the Apache License, Version 2.0 (the "License"). * You may not use this product except in compliance with the License. * * This product may include a number of subcomponents with * separate copyright notices and license terms. Your use of the source * code for these subcomponents is subject to the terms and * conditions of the subcomponent's license, as noted in the LICENSE file. * */ package org.springframework.data.neo4j.transactions; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.neo4j.graphdb.event.TransactionData; import org.neo4j.graphdb.event.TransactionEventHandler; import org.neo4j.ogm.session.SessionFactory; import org.neo4j.ogm.testutil.MultiDriverTestClass; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.data.neo4j.examples.movies.domain.User; import org.springframework.data.neo4j.examples.movies.repo.UserRepository; import org.springframework.data.neo4j.examples.movies.service.UserService; import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; import org.springframework.data.neo4j.transaction.Neo4jTransactionManager; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /** * @author Michal Bachman */ @ContextConfiguration(classes = {TransactionIntegrationTests.MoviesContext.class}) @RunWith(SpringJUnit4ClassRunner.class) public class TransactionIntegrationTests extends MultiDriverTestClass { @Autowired private UserRepository userRepository; @Autowired private UserService userService; private TransactionEventHandler.Adapter<Object> handler; @Before public void populateDatabase() { handler = new TransactionEventHandler.Adapter<Object>() { @Override public Object beforeCommit(TransactionData data) throws Exception { throw new TransactionInterceptException("Deliberate testing exception"); } }; getGraphDatabaseService().registerTransactionEventHandler(handler); } @After public void cleanupHandler() { getGraphDatabaseService().unregisterTransactionEventHandler(handler); } @Test(expected = Exception.class) public void whenImplicitTransactionFailsNothingShouldBeCreated() { userRepository.save(new User("Michal")); } @Test(expected = Exception.class) public void whenExplicitTransactionFailsNothingShouldBeCreated() { userService.saveWithTxAnnotationOnInterface(new User("Michal")); } @Test(expected = Exception.class) public void whenExplicitTransactionFailsNothingShouldBeCreated2() { userService.saveWithTxAnnotationOnImpl(new User("Michal")); } static class TransactionInterceptException extends Exception { public TransactionInterceptException(String msg) { super(msg); } } @Configuration @ComponentScan({"org.springframework.data.neo4j.examples.movies.service"}) @EnableNeo4jRepositories("org.springframework.data.neo4j.examples.movies.repo") @EnableTransactionManagement static class MoviesContext { @Bean public PlatformTransactionManager transactionManager() { return new Neo4jTransactionManager(sessionFactory()); } @Bean public SessionFactory sessionFactory() { return new SessionFactory(getBaseConfiguration().build(), "org.springframework.data.neo4j.examples.movies.domain"); } } }