contacts = personRepository.findAllByClient_Id(clientId);
+ if (contacts.isEmpty()) return new ArrayList<>();
+ return contacts.stream()
+ .map(personMapper::toDto)
+ .collect(Collectors.toList());
+ }
+}
diff --git a/src/main/java/com/aquent/crudapp/utils/Constants.java b/src/main/java/com/aquent/crudapp/utils/Constants.java
new file mode 100644
index 00000000..d4777c61
--- /dev/null
+++ b/src/main/java/com/aquent/crudapp/utils/Constants.java
@@ -0,0 +1,10 @@
+package com.aquent.crudapp.utils;
+
+public class Constants {
+ private Constants() {}
+
+ public static final String CLIENT_NOT_FOUND = "Client with ID = '%s' not found. ";
+ public static final String PERSON_NOT_FOUND = "Person with ID = '%s' not found. ";
+ public static final String CLIENT_DELETED = "Client with ID = '%s' deleted";
+ public static final String PERSON_DELETED = "Person with ID = '%s' deleted";
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index c6ae0b46..2ee6a5bd 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -7,7 +7,16 @@ spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1
-spring.datasource.username=sa
-spring.datasource.password=
+spring.datasource.url=jdbc:mysql://localhost/aquent?createDatabaseIfNotExist=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
+spring.datasource.username=aquent
+spring.datasource.password=aquentPassword
+
+#spring.datasource.driver-class-name=org.h2.Driver
+#spring.datasource.url=jdbc:h2:mem:bootapp;DB_CLOSE_DELAY=-1
+#spring.datasource.username=sa
+#spring.datasource.password=
+
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.format_sql=true
+logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 180faa11..43c7a80b 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,25 +1,10 @@
-INSERT INTO person (
- first_name,
- last_name,
- email_address,
- street_address,
- city,
- state,
- zip_code
-) VALUES (
- 'John',
- 'Smith',
- 'fake1@aquent.com',
- '123 Any St.',
- 'Asheville',
- 'NC',
- '28801'
-), (
- 'Jane',
- 'Smith',
- 'fake2@aquent.com',
- '123 Any St.',
- 'Asheville',
- 'NC',
- '28801'
-);
+INSERT INTO client (company_name, website_uri, phone_number, street_address, city, state, zip_code)
+VALUES ('Aquent', 'aquent', '800-123-4567', '123 Any St.', 'Asheville', 'NC', '28801'),
+ ('Company A', 'company-a', '800-321-9756', '123 Any St.', 'Asheville', 'NC', '28801'),
+ ('Company B', 'company-b', '800-456-977', '123 Any St.', 'Asheville', 'NC', '28801'),
+ ('Company C', 'company-c', '123-432-9876', '456 Any St.', 'Asheville', 'NC', '28812');
+
+INSERT INTO person (first_name, last_name, email_address, street_address, city, state, zip_code, client_id)
+VALUES ('John', 'Smith', 'fake1@aquent.com', '123 Any St.', 'Asheville', 'NC', '28801', 1),
+ ('Jane', 'Smith', 'fake2@aquent.com', '123 Any St.', 'Asheville', 'NC', '28801', 2),
+ ('Anna', 'William', 'fake3@aquent.com', '217 Any St.', 'Asheville', 'NC', '28802', null);
\ No newline at end of file
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 90e05818..0f94efb6 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -1,10 +1,26 @@
-CREATE TABLE person (
- person_id integer IDENTITY,
+CREATE TABLE IF NOT EXISTS client (
+ id int NOT NULL AUTO_INCREMENT,
+ company_name varchar(50) NOT NULL,
+ website_uri varchar(50) NOT NULL,
+ phone_number varchar(20) NOT NULL,
+ street_address varchar(50) NOT NULL,
+ city varchar(50) NOT NULL,
+ state varchar(2) NOT NULL,
+ zip_code varchar(5) NOT NULL,
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE IF NOT EXISTS person (
+ id int NOT NULL AUTO_INCREMENT,
first_name varchar(50) NOT NULL,
last_name varchar(50) NOT NULL,
email_address varchar(50) NOT NULL,
street_address varchar(50) NOT NULL,
city varchar(50) NOT NULL,
state varchar(2) NOT NULL,
- zip_code varchar(5) NOT NULL
+ zip_code varchar(5) NOT NULL,
+ client_id int,
+ PRIMARY KEY (id),
+ CONSTRAINT fk_person_client_id_client_id
+ FOREIGN KEY (client_id) REFERENCES client(id)
);
diff --git a/src/main/resources/templates/person/create.html b/src/main/resources/templates/person/create.html
deleted file mode 100644
index 9fc3f624..00000000
--- a/src/main/resources/templates/person/create.html
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
- Create Person
-
-
- Create Person
-
- Please correct the following errors in your submission:
-
-
-
-
-
diff --git a/src/main/resources/templates/person/delete.html b/src/main/resources/templates/person/delete.html
deleted file mode 100644
index b16879e8..00000000
--- a/src/main/resources/templates/person/delete.html
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
- Delete Person
-
-
- Delete Person
- You are about to delete the person : Are you sure?
-
-
-
diff --git a/src/main/resources/templates/person/edit.html b/src/main/resources/templates/person/edit.html
deleted file mode 100644
index 41ebd157..00000000
--- a/src/main/resources/templates/person/edit.html
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
-
-
- Edit Person
-
-
- Edit Person
-
- Please correct the following errors in your submission:
-
-
-
-
-
diff --git a/src/main/resources/templates/person/list.html b/src/main/resources/templates/person/list.html
deleted file mode 100644
index 10881e75..00000000
--- a/src/main/resources/templates/person/list.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
- Person Listing
-
-
- Person Listing
- Create New Person
-
-
-
-
- First Name |
- Last Name |
- Email Address |
- Actions |
-
-
-
-
-
- First |
- Last |
- first.last@email.com |
-
- Edit Person
- Delete Person
- |
-
-
-
-
-
-
- No results found.
-
-
-
diff --git a/src/test/java/com/aquent/crudapp/services/ClientServiceImplTest.java b/src/test/java/com/aquent/crudapp/services/ClientServiceImplTest.java
new file mode 100644
index 00000000..6fb18d8b
--- /dev/null
+++ b/src/test/java/com/aquent/crudapp/services/ClientServiceImplTest.java
@@ -0,0 +1,96 @@
+package com.aquent.crudapp.services;
+
+import com.aquent.crudapp.dtos.ClientDTO;
+import com.aquent.crudapp.mappers.ClientMapper;
+import com.aquent.crudapp.mappers.PersonMapper;
+import com.aquent.crudapp.models.Client;
+import com.aquent.crudapp.repositories.ClientRepository;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import javax.validation.Validator;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.*;
+
+@RunWith(SpringRunner.class)
+public class ClientServiceImplTest {
+ @Mock
+ private ClientRepository clientRepository;
+
+ @Mock
+ private ClientMapper clientMapper;
+
+ @Mock
+ private Validator validator;
+
+ @Mock
+ private PersonService personService;
+
+ @Mock
+ private PersonMapper personMapper;
+
+ @InjectMocks
+ private ClientServiceImpl clientService;
+
+ private Client client;
+ private Client client2;
+ private List clients;
+ private ClientDTO clientDTO;
+ private ClientDTO clientDTO2;
+ private List expectedClientDTOList;
+
+ @Before
+ public void init() {
+ MockitoAnnotations.openMocks(this.getClass());
+ client = new Client();
+ client.setId(10);
+ client.setCompanyName("Test 1");
+
+ client2 = new Client();
+ client2.setId(11);
+ clients = Arrays.asList(client, client2);
+
+ clientDTO = new ClientDTO();
+ clientDTO.setId(10);
+ clientDTO.setCompanyName("Test 1");
+
+ clientDTO2 = new ClientDTO();
+ clientDTO2.setId(11);
+ expectedClientDTOList = Arrays.asList(clientDTO, clientDTO2);
+ }
+
+ @Test
+ public void test_listClients_return_emptyList() {
+ doReturn(new ArrayList<>()).when(clientRepository).findAll();
+ List clientDTOList = clientService.listClients();
+ assertTrue(clientDTOList.isEmpty());
+ verify(clientRepository, times(1)).findAll();
+ verifyNoMoreInteractions(clientRepository);
+ }
+
+ @Test
+ public void test_listClients_return_list() {
+ doReturn(clients).when(clientRepository).findAll();
+ doReturn(clientDTO).when(clientMapper).toDto(client);
+ doReturn(clientDTO2).when(clientMapper).toDto(client2);
+ List clientDTOList = clientService.listClients();
+ assertEquals(expectedClientDTOList, clientDTOList);
+ assertEquals(2, clientDTOList.size());
+ verify(clientRepository, times(1)).findAll();
+ verify(clientMapper, times(2)).toDto(any());
+ verifyNoMoreInteractions(clientRepository);
+ verifyNoMoreInteractions(clientMapper);
+ }
+
+}