Skip to content

Commit 9eca793

Browse files
authored
Merge pull request #28 from codeurjc-students/testing/add-unit-integration-tests
Testing/add unit integration tests
2 parents 349143c + a6fccae commit 9eca793

File tree

20 files changed

+398
-13
lines changed

20 files changed

+398
-13
lines changed

backend/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,12 @@
8484
<scope>test</scope>
8585
</dependency>
8686

87+
<dependency>
88+
<groupId>org.mockito</groupId>
89+
<artifactId>mockito-core</artifactId>
90+
<version>5.18.0</version>
91+
<scope>test</scope>
92+
</dependency>
8793

8894
</dependencies>
8995

backend/src/main/java/com/skyapartments/backend/controller/ApartmentController.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ public ResponseEntity<ApartmentDTO> getApartments(@PathVariable Long id) {
3939
return apartmentService.getApartmentById(id)
4040
.map(ResponseEntity::ok)
4141
.orElse(ResponseEntity.notFound().build());
42-
}
42+
}
43+
}

backend/src/test/java/com/skyapartments/backend/ApartmentApiTest.java renamed to backend/src/test/java/com/skyapartments/backend/e2e/ApartmentApiTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.skyapartments.backend;
1+
package com.skyapartments.backend.e2e;
22

33
import org.junit.jupiter.api.BeforeEach;
44
import org.junit.jupiter.api.Test;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.skyapartments.backend.integration;
2+
3+
import com.skyapartments.backend.dto.ApartmentDTO;
4+
import com.skyapartments.backend.model.Apartment;
5+
import com.skyapartments.backend.repository.ApartmentRepository;
6+
import com.skyapartments.backend.service.ApartmentService;
7+
import com.skyapartments.backend.testutils.AbstractMySQLTest;
8+
9+
10+
import org.junit.jupiter.api.BeforeEach;
11+
import org.junit.jupiter.api.Test;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.boot.test.context.SpringBootTest;
14+
15+
import java.util.List;
16+
import java.util.Optional;
17+
18+
import static org.assertj.core.api.Assertions.assertThat;
19+
20+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
21+
public class ApartmentServiceIntegrationTest extends AbstractMySQLTest {
22+
23+
@Autowired
24+
private ApartmentRepository apartmentRepository;
25+
26+
private ApartmentService apartmentService;
27+
28+
private Apartment savedApartment;
29+
30+
@BeforeEach
31+
void setUp() {
32+
apartmentRepository.deleteAll();
33+
apartmentService = new ApartmentService(apartmentRepository);
34+
35+
savedApartment = apartmentRepository.save(
36+
new Apartment("Test Apartment 1", "Nice view", "123 Fake St")
37+
);
38+
}
39+
40+
@Test
41+
void shouldReturnAllApartments() {
42+
List<ApartmentDTO> apartments = apartmentService.getAllApartments();
43+
44+
assertThat(apartments).hasSize(1);
45+
assertThat(apartments.get(0).getName()).isEqualTo("Test Apartment 1");
46+
assertThat(apartments.get(0).getDescription()).isEqualTo("Nice view");
47+
assertThat(apartments.get(0).getAddress()).isEqualTo("123 Fake St");
48+
}
49+
50+
@Test
51+
void shouldReturnApartmentById() {
52+
Optional<ApartmentDTO> apartmentOpt = apartmentService.getApartmentById(savedApartment.getId());
53+
54+
assertThat(apartmentOpt).isPresent();
55+
ApartmentDTO apartment = apartmentOpt.get();
56+
assertThat(apartment.getName()).isEqualTo("Test Apartment 1");
57+
assertThat(apartment.getDescription()).isEqualTo("Nice view");
58+
assertThat(apartment.getAddress()).isEqualTo("123 Fake St");
59+
}
60+
61+
@Test
62+
void shouldReturnEmptyWhenApartmentNotFound() {
63+
Optional<ApartmentDTO> apartmentOpt = apartmentService.getApartmentById(9999L);
64+
65+
assertThat(apartmentOpt).isNotPresent();
66+
}
67+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.skyapartments.backend.testutils;
2+
3+
import org.springframework.test.context.DynamicPropertyRegistry;
4+
import org.springframework.test.context.DynamicPropertySource;
5+
import org.testcontainers.containers.MySQLContainer;
6+
import org.testcontainers.junit.jupiter.Container;
7+
import org.testcontainers.junit.jupiter.Testcontainers;
8+
9+
@Testcontainers
10+
public abstract class AbstractMySQLTest {
11+
12+
@Container
13+
public static final MySQLContainer<?> mysqlContainer = new MySQLContainer<>("mysql:8.0")
14+
.withDatabaseName("testdb")
15+
.withUsername("testuser")
16+
.withPassword("testpass");
17+
18+
@DynamicPropertySource
19+
static void configureProperties(DynamicPropertyRegistry registry) {
20+
registry.add("spring.datasource.url", mysqlContainer::getJdbcUrl);
21+
registry.add("spring.datasource.username", mysqlContainer::getUsername);
22+
registry.add("spring.datasource.password", mysqlContainer::getPassword);
23+
registry.add("spring.datasource.driver-class-name", mysqlContainer::getDriverClassName);
24+
}
25+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.skyapartments.backend.unit;
2+
3+
import com.skyapartments.backend.dto.ApartmentDTO;
4+
import com.skyapartments.backend.model.Apartment;
5+
import com.skyapartments.backend.repository.ApartmentRepository;
6+
import com.skyapartments.backend.service.ApartmentService;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
import static org.junit.jupiter.api.Assertions.assertEquals;
10+
import static org.mockito.Mockito.mock;
11+
import static org.mockito.Mockito.when;
12+
13+
import java.util.List;
14+
import java.util.Optional;
15+
16+
import org.junit.Test;
17+
18+
public class ApartmentServiceTest {
19+
20+
private ApartmentService apartmentService;
21+
private ApartmentRepository apartmentRepository = mock(ApartmentRepository.class);
22+
23+
public ApartmentServiceTest() {
24+
apartmentService = new ApartmentService(apartmentRepository);
25+
}
26+
27+
@Test
28+
public void testGetAllApartments() {
29+
Apartment apt1 = new Apartment("Test Apartment 1", "Nice view", "123 Fake St");
30+
Apartment apt2 = new Apartment("Test Apartment 2", "Cozy place", "456 Real Ave");
31+
32+
when(apartmentRepository.findAll()).thenReturn(List.of(apt1, apt2));
33+
34+
List<ApartmentDTO> apartments = apartmentService.getAllApartments();
35+
36+
assertThat(apartments).hasSize(2);
37+
38+
assertThat(apartments.get(0).getName()).isEqualTo("Test Apartment 1");
39+
assertThat(apartments.get(0).getDescription()).isEqualTo("Nice view");
40+
assertThat(apartments.get(0).getAddress()).isEqualTo("123 Fake St");
41+
42+
assertThat(apartments.get(1).getName()).isEqualTo("Test Apartment 2");
43+
assertThat(apartments.get(1).getDescription()).isEqualTo("Cozy place");
44+
assertThat(apartments.get(1).getAddress()).isEqualTo("456 Real Ave");
45+
}
46+
47+
@Test
48+
public void testGetApartmentByIdFound() {
49+
Apartment apt = new Apartment("Test", "Nice", "Street 1");
50+
when(apartmentRepository.findById(1L)).thenReturn(Optional.of(apt));
51+
52+
Optional<ApartmentDTO> result = apartmentService.getApartmentById(1L);
53+
assertThat(result).isPresent();
54+
assertEquals("Test", result.get().getName());
55+
assertEquals("Nice", result.get().getDescription());
56+
assertEquals("Street 1", result.get().getAddress());
57+
}
58+
59+
@Test
60+
public void testGetApartmentByIdNotFound() {
61+
when(apartmentRepository.findById(1L)).thenReturn(Optional.empty());
62+
63+
Optional<ApartmentDTO> result = apartmentService.getApartmentById(1L);
64+
assertThat(result).isNotPresent();
65+
}
66+
67+
}
Binary file not shown.

frontend/angular.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@
8888
"styles": [
8989
"src/styles.css"
9090
],
91-
"scripts": []
91+
"scripts": [],
92+
"karmaConfig": "karma.conf.js"
9293
}
9394
}
9495
}

frontend/karma.conf.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
module.exports = function (config) {
2+
config.set({
3+
basePath: '',
4+
frameworks: ['jasmine', '@angular-devkit/build-angular'],
5+
plugins: [
6+
require('karma-jasmine'),
7+
require('karma-chrome-launcher'),
8+
require('karma-jasmine-html-reporter'),
9+
require('karma-coverage'),
10+
require('@angular-devkit/build-angular/plugins/karma')
11+
],
12+
client: {
13+
clearContext: false // leave Jasmine Spec Runner output visible in browser
14+
},
15+
reporters: ['progress', 'kjhtml'],
16+
browsers: ['Chrome'], //ChromeHeadless for non-GUI environments
17+
restartOnFileChange: true,
18+
proxies: {
19+
'/api/': 'http://localhost:8080/api/'
20+
},
21+
});
22+
};

0 commit comments

Comments
 (0)