From f2c05fb68f118fade9e96b34e53a7960cd461752 Mon Sep 17 00:00:00 2001 From: atusa17 Date: Sat, 23 Feb 2019 23:13:45 -0700 Subject: [PATCH] PAN-7 Wrote CRUD integration test --- .../DefinitionsIntegrationTest.java | 42 +++++++-- .../persistence/PersistenceTestConfig.java | 93 +++++++++++++++++++ 2 files changed, 128 insertions(+), 7 deletions(-) create mode 100644 pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/PersistenceTestConfig.java diff --git a/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/DefinitionsIntegrationTest.java b/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/DefinitionsIntegrationTest.java index 62aba09..824d5a8 100644 --- a/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/DefinitionsIntegrationTest.java +++ b/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/DefinitionsIntegrationTest.java @@ -5,39 +5,67 @@ import edu.msudenver.tsp.persistence.dto.DefinitionDto; import edu.msudenver.tsp.persistence.dto.Notation; import edu.msudenver.tsp.persistence.repository.DefinitionRepository; import org.junit.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import static org.junit.Assert.*; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = PersistenceTestConfig.class) public class DefinitionsIntegrationTest { - private final DefinitionRepository definitionRepository; - - @Autowired DefinitionsIntegrationTest(final DefinitionRepository definitionRepository) { - this.definitionRepository = definitionRepository; - } + @Autowired private DefinitionRepository definitionRepository; @Test public void testCRUDFunctionality() { // Create a new definition final DefinitionDto definitionDto = createDefinition(); final DefinitionDto savedDefinition = definitionRepository.save(definitionDto); + + assertNotNull(savedDefinition); + assertEquals(Integer.valueOf(0), savedDefinition.getVersion()); + + final int id = savedDefinition.getId(); + + assertEquals("Test Name", savedDefinition.getName()); + assertNotNull(savedDefinition.getDefinition()); + assertNotNull(savedDefinition.getNotation()); + + final List definitionsList = savedDefinition.getDefinition().getDefinitions(); + final List notationList = savedDefinition.getNotation().getNotations(); + + assertEquals(2, definitionsList.size()); + assertEquals(1, notationList.size()); + assertEquals("Test definition 1", definitionsList.get(0)); + assertEquals("Test definition 2", definitionsList.get(1)); + assertEquals("\\testLaTeX", notationList.get(0)); + + definitionRepository.delete(savedDefinition); + final Optional deletedDefinition = definitionRepository.findById(id); + assertFalse(deletedDefinition.isPresent()); } private DefinitionDto createDefinition() { final List definitionList = new ArrayList<>(); - definitionList.add("testDefinition1"); + definitionList.add("Test definition 1"); + definitionList.add("Test definition 2"); final Definition definition = new Definition(); definition.setDefinitions(definitionList); final List notationList = new ArrayList<>(); - notationList.add("\\textLaTeX"); + notationList.add("\\testLaTeX"); final Notation notation = new Notation(); notation.setNotations(notationList); final DefinitionDto definitionDto = new DefinitionDto(); + definitionDto.setName("Test Name"); definitionDto.setDefinition(definition); definitionDto.setNotation(notation); diff --git a/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/PersistenceTestConfig.java b/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/PersistenceTestConfig.java new file mode 100644 index 0000000..af3f81a --- /dev/null +++ b/pandamonium-theorem-prover/persistence/src/integrationTest/java/edu/msudenver/tsp/persistence/PersistenceTestConfig.java @@ -0,0 +1,93 @@ +package edu.msudenver.tsp.persistence; + +import org.hibernate.SessionFactory; +import org.hibernate.jpa.HibernatePersistenceProvider; +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.boot.jdbc.DataSourceBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.jdbc.datasource.init.DataSourceInitializer; +import org.springframework.orm.hibernate5.HibernateTransactionManager; +import org.springframework.orm.hibernate5.LocalSessionFactoryBuilder; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; + +import javax.sql.DataSource; +import java.util.Properties; + +@Configuration +@EnableJpaRepositories +@EnableJpaAuditing +@EntityScan(basePackages = "edu.msudenver.tsp.persistence") +public class PersistenceTestConfig { + @Bean + @Primary + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setJpaVendorAdapter(vendorAdapter()); + em.setDataSource(getDataSource()); + em.setPersistenceProviderClass(HibernatePersistenceProvider.class); + em.setPackagesToScan("edu.msudenver.tsp.persistence"); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public JpaTransactionManager jpaTransactionManager() { + final JpaTransactionManager jpaTransactionManager = new JpaTransactionManager(); + jpaTransactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); + return jpaTransactionManager; + } + + private HibernateJpaVendorAdapter vendorAdapter() { + final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + vendorAdapter.setShowSql(true); + return vendorAdapter; + } + + @Bean(name = "dataSource") + public DataSource getDataSource(){ + return DataSourceBuilder + .create() + .username("panda") + .password("secret") + .url("jdbc:mysql://127.0.0.1:3306/pandamonium?autoReconnect=true&useSSL=false") + .driverClassName("com.mysql.cj.jdbc.Driver") + .build(); + } + + @Bean(name = "sessionFactory") + public SessionFactory getSessionFactory(final DataSource dataSource) { + final LocalSessionFactoryBuilder sessionFactoryBuilder = new LocalSessionFactoryBuilder(dataSource); + sessionFactoryBuilder.scanPackages("edu.msudenver.tsp.persistence.dto"); + return sessionFactoryBuilder.buildSessionFactory(); + } + + @Bean(name = "transactionManager") + public HibernateTransactionManager getTransactionManager(final SessionFactory sessionFactory) { + return new HibernateTransactionManager(sessionFactory); + } + + @Bean + public DataSourceInitializer dataSourceInitializer(final DataSource dataSource) { + final DataSourceInitializer initializer = new DataSourceInitializer(); + initializer.setDataSource(dataSource); + return initializer; + } + + private Properties additionalProperties() { + final Properties properties = new Properties(); + properties.setProperty("hibernate.hbm2ddl.auto", "update"); + properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL8Dialect"); + properties.setProperty("spring.jpa.show-sql", "true"); + properties.setProperty("spring.datasource.tomcat.max-active", "1"); + properties.setProperty("hibernate.id.new_generator_mappings","false"); + + return properties; + } +}