Skip to content

Commit 5cc0159

Browse files
Robert LeggettRobert Leggett
authored andcommitted
Updated HSQL version
Removed unused code Added additional unit test on service Changed entity primary key type Added import.sql to test
1 parent b48994d commit 5cc0159

6 files changed

Lines changed: 107 additions & 105 deletions

File tree

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
<joda.time.version>2.2</joda.time.version>
3232
<junit.version>4.10</junit.version>
3333
<mockito.version>1.9.5</mockito.version>
34-
<hsqldb.version>1.8.0.7</hsqldb.version>
34+
<hsqldb.version>2.3.2</hsqldb.version>
3535
</properties>
3636

3737
<dependencies>
@@ -207,7 +207,7 @@
207207
<version>${joda.time.version}</version>
208208
</dependency>
209209
<dependency>
210-
<groupId>hsqldb</groupId>
210+
<groupId>org.hsqldb</groupId>
211211
<artifactId>hsqldb</artifactId>
212212
<version>${hsqldb.version}</version>
213213
</dependency>

src/main/java/au/com/example/persistence/dao/BaseDao.java

Lines changed: 0 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -26,33 +26,6 @@ protected EntityManagerFactory getEmf() {
2626

2727
// === Methods ===
2828

29-
@SuppressWarnings("unchecked")
30-
protected <T extends Cloneable> T loadDataSingle(Class<T> oType, QueryString queryString) {
31-
EntityManager entityManager = emf.createEntityManager();
32-
33-
T data = null;
34-
35-
try {
36-
Query query = entityManager.createQuery(queryString.getStatement());
37-
38-
for (QueryParameter parameter : queryString.getParameters()) {
39-
query.setParameter(parameter.getName(), parameter.getValue());
40-
}
41-
42-
T result = (T) query.getSingleResult();
43-
44-
if (result != null) {
45-
data = CopyUtil.clone(result);
46-
}
47-
} catch (NoResultException nre) {
48-
log.warn("No results found: " + nre.getMessage());
49-
} finally {
50-
entityManager.close();
51-
}
52-
53-
return data;
54-
}
55-
5629
@SuppressWarnings("unchecked")
5730
protected <T extends Cloneable> Collection<T> loadData(Class<T> oType, QueryString queryString) {
5831
EntityManager em = emf.createEntityManager();
@@ -80,44 +53,6 @@ protected <T extends Cloneable> Collection<T> loadData(Class<T> oType, QueryStri
8053
}
8154
}
8255

83-
protected int updateDeleteDataSingle(QueryString queryString) throws UpdateDeleteException {
84-
EntityManager entityManager = emf.createEntityManager();
85-
86-
int rowsModified = 0;
87-
88-
try {
89-
EntityTransaction tx = null;
90-
91-
try {
92-
tx = entityManager.getTransaction();
93-
94-
tx.begin();
95-
96-
Query query = entityManager.createQuery(queryString.getStatement());
97-
98-
for (QueryParameter parameter : queryString.getParameters()) {
99-
query.setParameter(parameter.getName(), parameter.getValue());
100-
}
101-
102-
rowsModified = query.executeUpdate();
103-
104-
tx.commit();
105-
} catch (Exception e) {
106-
log.error("Exception during update or delete query: " + e.getMessage());
107-
108-
throw new UpdateDeleteException(e.getMessage());
109-
} finally {
110-
if (tx != null && tx.isActive()) {
111-
tx.rollback();
112-
}
113-
}
114-
} finally {
115-
entityManager.close();
116-
}
117-
118-
return rowsModified;
119-
}
120-
12156
protected <T extends Cloneable> boolean deleteSingleData(Class<T> oType, Long id) throws UpdateDeleteException {
12257
EntityManager entityManager = getEmf().createEntityManager();
12358

@@ -151,39 +86,6 @@ protected <T extends Cloneable> boolean deleteSingleData(Class<T> oType, Long id
15186
return true;
15287
}
15388

154-
protected boolean persistSingleData(Object entity) throws UpdateDeleteException {
155-
EntityManager entityManager = getEmf().createEntityManager();
156-
157-
try {
158-
EntityTransaction tx = null;
159-
160-
try {
161-
tx = entityManager.getTransaction();
162-
163-
tx.begin();
164-
165-
entityManager.persist(entity);
166-
167-
tx.commit();
168-
}
169-
catch (Exception e) {
170-
log.error("Exception during persist: " + e.getMessage());
171-
172-
throw new UpdateDeleteException("Unable to persist data", e);
173-
}
174-
finally {
175-
if (tx != null && tx.isActive()) {
176-
tx.rollback();
177-
}
178-
}
179-
}
180-
finally {
181-
entityManager.close();
182-
}
183-
184-
return true;
185-
}
186-
18789
protected boolean updateSingleData(Object entity) throws UpdateDeleteException {
18890
EntityManager entityManager = getEmf().createEntityManager();
18991

src/main/java/au/com/example/persistence/dao/CustomerDaoImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public boolean saveCustomer(Customer customer) {
5959
boolean success = false;
6060

6161
try {
62-
success = customer.getId() == null ? persistSingleData(toCustomerEntity(customer)) : updateSingleData(toCustomerEntity(customer));
62+
success = updateSingleData(toCustomerEntity(customer));
6363
}
6464
catch(UpdateDeleteException e) {
6565
log.error("Error saving customer with id: " + customer.getId());

src/main/java/au/com/example/persistence/dao/entity/CustomerEntity.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,25 +21,24 @@ public CustomerEntity(Long id, String firstName, String lastName) {
2121
}
2222

2323
@Id
24-
@GeneratedValue(generator = "CustomerSeq")
25-
@SequenceGenerator(name = "CustomerSeq", sequenceName = "CUSTOMER_SEQ", allocationSize = 1, initialValue = 1)
2624
@Column(name = "customer_id")
25+
@GeneratedValue(strategy = GenerationType.IDENTITY)
2726
public Long getId() {
2827
return id;
2928
}
3029
public void setId(Long id) {
3130
this.id = id;
3231
}
3332

34-
@Column(name = "first_name")
33+
@Column(name = "first_name", nullable = false)
3534
public String getFirstName() {
3635
return firstName;
3736
}
3837
public void setFirstName(String firstName) {
3938
this.firstName = firstName;
4039
}
4140

42-
@Column(name = "last_name")
41+
@Column(name = "last_name", nullable = false)
4342
public String getLastName() {
4443
return lastName;
4544
}
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package au.com.example.service;
2+
3+
import au.com.example.mvc.model.customer.Customer;
4+
import au.com.example.persistence.dao.CustomerDao;
5+
import org.junit.Assert;
6+
import org.junit.Before;
7+
import org.junit.Test;
8+
import org.junit.runner.RunWith;
9+
import org.mockito.InjectMocks;
10+
import org.mockito.Mock;
11+
import org.mockito.Mockito;
12+
import org.mockito.MockitoAnnotations;
13+
import org.springframework.test.context.ContextConfiguration;
14+
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
15+
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
19+
@RunWith(SpringJUnit4ClassRunner.class)
20+
@ContextConfiguration(locations = {
21+
"classpath:WEB-INF/spring/test-application-context-config.xml",
22+
"classpath:WEB-INF/spring/test-security-context-config.xml",
23+
"classpath:WEB-INF/spring/test-persistence-context-config.xml" })
24+
public class CustomerServiceUnitTest {
25+
26+
@InjectMocks
27+
private CustomerServiceImpl customerServiceImpl;
28+
29+
@Mock
30+
private CustomerDao customerDao;
31+
32+
@Before
33+
public void setup() {
34+
MockitoAnnotations.initMocks(this);
35+
}
36+
37+
@Test
38+
public void getCustomersSuccess() {
39+
Mockito.when(customerDao.getCustomers()).thenReturn(getTestCustomers());
40+
41+
List<Customer> customers = customerServiceImpl.getCustomers();
42+
43+
Assert.assertNotNull(customers);
44+
Assert.assertEquals(4, customers.size());
45+
}
46+
47+
@Test
48+
public void saveCustomerSuccess() {
49+
Mockito.when(customerDao.saveCustomer(Mockito.any(Customer.class))).thenReturn(true);
50+
51+
boolean saved = customerServiceImpl.saveCustomer(new Customer());
52+
53+
Assert.assertTrue(saved);
54+
}
55+
56+
@Test
57+
public void saveCustomerFailure() {
58+
Mockito.when(customerDao.saveCustomer(Mockito.any(Customer.class))).thenReturn(false);
59+
60+
boolean saved = customerServiceImpl.saveCustomer(new Customer());
61+
62+
Assert.assertFalse(saved);
63+
}
64+
65+
@Test
66+
public void deleteCustomerSuccess() {
67+
Mockito.when(customerDao.deleteCustomer(Mockito.any(Long.class))).thenReturn(true);
68+
69+
boolean deleted = customerServiceImpl.deleteCustomer(1L);
70+
71+
Assert.assertTrue(deleted);
72+
}
73+
74+
@Test
75+
public void deleteCustomerFailure() {
76+
Mockito.when(customerDao.deleteCustomer(Mockito.any(Long.class))).thenReturn(false);
77+
78+
boolean deleted = customerServiceImpl.deleteCustomer(1L);
79+
80+
Assert.assertFalse(deleted);
81+
}
82+
83+
// ========== Helpers ==========
84+
85+
private List<Customer> getTestCustomers() {
86+
List<Customer> customers = new ArrayList<Customer>();
87+
88+
customers.add(new Customer(1L, "Test", "User1"));
89+
customers.add(new Customer(2L, "Test", "User2"));
90+
customers.add(new Customer(3L, "Test", "User3"));
91+
customers.add(new Customer(4L, "Test", "User4"));
92+
93+
return customers;
94+
}
95+
}

src/test/resources/import.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
delete from Customer;
2+
3+
insert into Customer (first_name, last_name) values ('Foo', 'Bar');
4+
insert into Customer (first_name, last_name) values ('Jim', 'Sunny');
5+
insert into Customer (first_name, last_name) values ('Peter', 'Prone');
6+
insert into Customer (first_name, last_name) values ('Sam', 'Sully');

0 commit comments

Comments
 (0)