From 8e3769f5063e5841a6e00f8dfd08670c01c09106 Mon Sep 17 00:00:00 2001
From: Rhys Evans <EvansRM17@cardiff.ac.uk>
Date: Thu, 7 Dec 2023 21:46:40 +0000
Subject: [PATCH] Further work attempting to get JUnit test working :( :( :(

---
 build.gradle                                  |   9 +-
 .../Data/locationRepositoryJDBC.java          |  16 +++
 .../SmartTownsApplicationTests.java           | 106 ++++++++++++------
 src/test/java/Team5/SmartTowns/Test3.java     |  26 +++++
 src/test/java/Team5/SmartTowns/Test4.java     |  25 +++++
 src/test/java/Team5/SmartTowns/Test5.java     |  34 ++++++
 6 files changed, 178 insertions(+), 38 deletions(-)
 create mode 100644 src/test/java/Team5/SmartTowns/Test3.java
 create mode 100644 src/test/java/Team5/SmartTowns/Test4.java
 create mode 100644 src/test/java/Team5/SmartTowns/Test5.java

diff --git a/build.gradle b/build.gradle
index 4d5ec10c..dda89b4b 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,6 +22,7 @@ repositories {
 }
 
 dependencies {
+	implementation 'org.springframework:spring-dao:2.0.8'
 	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
 	implementation 'org.springframework.boot:spring-boot-starter-web'
 	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
@@ -34,7 +35,13 @@ dependencies {
 	annotationProcessor 'org.projectlombok:lombok'
 	testImplementation 'org.springframework.boot:spring-boot-starter-test'
 	implementation 'org.springframework.boot:spring-boot-starter-validation'
-	implementation 'org.springframework:spring-dao:2.0.8'
+	// https://mvnrepository.com/artifact/org.springframework/spring-dao
+// https://mvnrepository.com/artifact/org.springframework/spring-dao
+	implementation group: 'org.springframework', name: 'spring-tx', version: '6.1.1'
+//	implementation 'org.springframework.dao.DataAccessException'
+//Thanks for using https://jar-download.com
+
+
 }
 
 tasks.named('bootBuildImage') {
diff --git a/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java b/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java
index a5e79d44..54693251 100644
--- a/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java
+++ b/src/main/java/Team5/SmartTowns/Data/locationRepositoryJDBC.java
@@ -5,6 +5,8 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.jdbc.core.RowMapper;
 import org.springframework.stereotype.Repository;
 
+import javax.print.DocFlavor;
+import javax.sql.DataSource;
 import java.util.List;
 
 @Repository
@@ -26,6 +28,14 @@ public class locationRepositoryJDBC implements locationRepository {
                 rs.getInt("locationTrailID")
         );
     }
+    public String getCountOfEmployees() {
+        return jdbc.queryForObject("SELECT COUNT(*) FROM locations",String.class);
+    }
+
+    public List<Location> getAllLocation2(JdbcTemplate aJdbc){
+        String sql= "SELECT * FROM locations";
+        return aJdbc.query(sql, locationMapper);
+    }
     public List<Location> getAllLocation(){
         String sql= "SELECT * FROM locations";
         return jdbc.query(sql, locationMapper);
@@ -39,4 +49,10 @@ public class locationRepositoryJDBC implements locationRepository {
     }
 
 
+    public void setDataSource(DataSource dataSource) {
+        jdbc = new JdbcTemplate(dataSource);
+    }
+
+    public locationRepositoryJDBC() {
+    }
 }
diff --git a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
index 7a786470..4ef77b7d 100644
--- a/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
+++ b/src/test/java/Team5/SmartTowns/SmartTownsApplicationTests.java
@@ -1,24 +1,20 @@
 package Team5.SmartTowns;
 
-import Team5.SmartTowns.Data.Location;
-import Team5.SmartTowns.Data.Town;
-import Team5.SmartTowns.Data.TownRepository;
+import Team5.SmartTowns.Data.locationRepository;
 import Team5.SmartTowns.Data.locationRepositoryJDBC;
-import Team5.SmartTowns.Towns.TownController;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.data.jdbc.DataJdbcTest;
 import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
 import org.springframework.test.context.jdbc.Sql;
-import org.springframework.test.util.ReflectionTestUtils;
+import org.testng.Assert;
 
-import java.util.List;
+import javax.sql.DataSource;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertSame;
@@ -26,8 +22,44 @@ import static org.mockito.Mockito.mock;
 
 @SpringBootTest
 @JdbcTest
+
 @Sql({"schema.sql", "data.sql"})
 class SmartTownsApplicationTests {
+@Autowired
+	private JdbcTemplate ajdbc;
+
+	@Test
+//	test2
+	public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
+		DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
+				.addScript("classpath:jdbc/schema.sql")
+				.addScript("classpath:jdbc/test-data.sql")
+				.build();
+
+		locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
+		employeeDAO.setDataSource(dataSource);
+
+		assertEquals(4, employeeDAO.getCountOfEmployees());}
+
+	@Test
+//	test 1
+	void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
+		locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
+		employeeDAO.setJdbcTemplate(ajdbc);
+		assertEquals(4, employeeDAO.getAllLocation().size());
+
+//		assertEquals(4, employeeDAO.getCountOfEmployees());
+	}
+//	@Test
+//	void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
+//		EmployeeDAO employeeDAO = new EmployeeDAO();
+//		employeeDAO.setJdbcTemplate(jdbcTemplate);
+//
+//		assertEquals(4, employeeDAO.getCountOfEmployees());
+//	}
+
+
+
 
 //
 //	private static TownController townController;
@@ -36,37 +68,37 @@ class SmartTownsApplicationTests {
 //	private static Team5.SmartTowns.Data.Location location;
 //	@Mock
 //	private static JdbcTemplate jdbc;
-
-	@Autowired
-	private Team5.SmartTowns.Data.locationRepository locationRepo;
-	JdbcTemplate jdbc = Mockito.mock(JdbcTemplate.class);
+//
 //	@Autowired
-//	private static Team5.SmartTowns.Data.TownRepository townRepository;
+//	private Team5.SmartTowns.Data.locationRepository locationRepo;
+//	JdbcTemplate jdbc = Mockito.mock(JdbcTemplate.class);
+////	@Autowired
+////	private static Team5.SmartTowns.Data.TownRepository townRepository;
+////
+////
+////	private static Team5.SmartTowns.Data.Location town;
+////	private static RowMapper<Location> locationMapper;
 //
 //
-//	private static Team5.SmartTowns.Data.Location town;
-//	private static RowMapper<Location> locationMapper;
-
-
-	@BeforeAll
-	public void before() {
-//		MockitoAnnotations.initMocks(this);
-//		location = new Location();
-		locationRepo = mock(new locationRepositoryJDBC(jdbc));
-//		townController = new TownController();
-	}
 //	@BeforeAll
-//	public static void before(){}
-//		location = new Location();
-//}
-
-	@Test
-	void contextLoads() {
-	}
-
-	@Test
-	public void whenFilteringTownsByLocationsReturnOneTown() {
-		List<Location> allLocations = ( locationRepo.getAllLocation());
+//	public void before() {
+////		MockitoAnnotations.initMocks(this);
+////		location = new Location();
+//		locationRepo = mock(new locationRepositoryJDBC(jdbc));
+////		townController = new TownController();
+//	}
+////	@BeforeAll
+////	public static void before(){}
+////		location = new Location();
+////}
+//
+//	@Test
+//	void contextLoads() {
+//	}
+//
+//	@Test
+//	public void whenFilteringTownsByLocationsReturnOneTown() {
+//		List<Location> allLocations = ( locationRepo.getAllLocation());
 //		List<Town> allTowns = townRepository.getAllTowns();
 //		int allLocationNumber=allLocations.size();
 //		int allLocationNumberAfterFilter=0;
diff --git a/src/test/java/Team5/SmartTowns/Test3.java b/src/test/java/Team5/SmartTowns/Test3.java
new file mode 100644
index 00000000..279caf31
--- /dev/null
+++ b/src/test/java/Team5/SmartTowns/Test3.java
@@ -0,0 +1,26 @@
+package Team5.SmartTowns;
+
+import Team5.SmartTowns.Data.locationRepositoryJDBC;
+import org.junit.jupiter.api.Test;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
+import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
+
+import javax.sql.DataSource;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Test3 {
+
+    @Test
+//	test2
+    public void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount1() {
+        DataSource dataSource = new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseType.H2)
+                .addScript("classpath:jdbc/schema.sql")
+                .addScript("classpath:jdbc/test-data.sql")
+                .build();
+
+        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
+        employeeDAO.setDataSource(dataSource);
+
+        assertEquals(4, employeeDAO.getCountOfEmployees());}
+}
diff --git a/src/test/java/Team5/SmartTowns/Test4.java b/src/test/java/Team5/SmartTowns/Test4.java
new file mode 100644
index 00000000..0af9a3a7
--- /dev/null
+++ b/src/test/java/Team5/SmartTowns/Test4.java
@@ -0,0 +1,25 @@
+package Team5.SmartTowns;
+
+import Team5.SmartTowns.Data.locationRepositoryJDBC;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class Test4 {
+    @Mock
+    JdbcTemplate jdbcTemplate;
+    @Test
+
+    public void whenMockJdbcTemplate_thenReturnCorrectEmployeeCount() {
+        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC();
+        ReflectionTestUtils.setField(employeeDAO, "jdbcTemplate", jdbcTemplate);
+        Mockito.when(jdbcTemplate.queryForObject("SELECT COUNT(*) FROM locations", Integer.class))
+                .thenReturn(4);
+
+        assertEquals(4, employeeDAO.getCountOfEmployees());
+    }
+}
diff --git a/src/test/java/Team5/SmartTowns/Test5.java b/src/test/java/Team5/SmartTowns/Test5.java
new file mode 100644
index 00000000..4c19c97d
--- /dev/null
+++ b/src/test/java/Team5/SmartTowns/Test5.java
@@ -0,0 +1,34 @@
+package Team5.SmartTowns;
+
+import Team5.SmartTowns.Data.locationRepositoryJDBC;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.JdbcTest;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.test.context.jdbc.Sql;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+@SpringBootTest
+@JdbcTest
+
+@Sql({"schema.sql", "data.sql"})
+public class Test5 {
+
+    @Autowired
+    private JdbcTemplate ajdbc;
+
+
+    @Test
+//	test 1
+    void whenInjectInMemoryDataSource_thenReturnCorrectEmployeeCount() {
+        locationRepositoryJDBC employeeDAO = new locationRepositoryJDBC(ajdbc);
+//        employeeDAO.setJdbcTemplate(ajdbc);
+        assertEquals(4, employeeDAO.getAllLocation().size());
+
+    }
+
+
+
+}
-- 
GitLab