@Test public void testConfiguration() throws Exception { JpaItemWriter<String> itemWriter = new JpaItemWriterBuilder<String>() .entityManagerFactory(this.entityManagerFactory) .build(); itemWriter.afterPropertiesSet(); List<String> items = Arrays.asList("foo", "bar"); itemWriter.write(items); verify(this.entityManager).merge(items.get(0)); verify(this.entityManager).merge(items.get(1)); }
@Test public void testWriteAndFlushSunnyDay() throws Exception { EntityManager em = mock(EntityManager.class,"em"); em.contains("foo"); em.contains("bar"); em.merge("bar"); em.flush(); TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em)); List<String> items = Arrays.asList(new String[] { "foo", "bar" }); writer.write(items); TransactionSynchronizationManager.unbindResource(emf); }
@Test public void testWriteAndFlushWithFailure() throws Exception { final RuntimeException ex = new RuntimeException("ERROR"); EntityManager em = mock(EntityManager.class,"em"); em.contains("foo"); em.contains("bar"); em.merge("bar"); when(em).thenThrow(ex); TransactionSynchronizationManager.bindResource(emf, new EntityManagerHolder(em)); List<String> items = Arrays.asList(new String[] { "foo", "bar" }); try { writer.write(items); fail("Expected RuntimeException"); } catch (RuntimeException e) { assertEquals("ERROR", e.getMessage()); } TransactionSynchronizationManager.unbindResource(emf); }