Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.net.URI;
import java.util.ArrayList;
import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.web.reactive.function.bodyToMono;

public class ProductControllerTest {

private WebTestClient.Builder testClientBuilder;

@Autowired
public ProductControllerTest(WebTestClient.Builder testClientBuilder) {
this.testClientBuilder = testClientBuilder;
}

@Before
public void setup() {
testClientBuilder.apply(this::configureMockMvc);
}

private void configureMockMvc(WebTestClient.Builder builder) {
builder.mockMvc(new MockMvc(new WebApplicationContext()));
}

@Test
public void testCreateProductSuccessful() {
// Arrange
Product product = new Product();
product.setName("Test Product");
product.setDescription("This is a test product.");
product.setPrice(19.99);

// Act
ResponseEntity<Product> response = testClientBuilder.post()
.contentType(MediaType.APPLICATION_JSON)
.body(bodyToMono(product))
.uri("/api/products")
.exchange();

// Assert
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
assertEquals(product.getName(), response.getBody().getName());
}

@Test
public void testCreateProductFailed() {
// Arrange
Product product = new Product();
product.setName("Invalid Name");
product.setDescription("This is a test product.");
product.setPrice(19.99);

// Act
ResponseEntity<Product> response = testClientBuilder.post()
.contentType(MediaType.APPLICATION_JSON)
.body(bodyToMono(product))
.uri("/api/products")
.exchange();

// Assert
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
assertNotNull(response.getBody());
assertTrue(response.getBody().getMessage().contains("Invalid name"));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@Test
public void testDeleteSuccessfulProduct() {
Long id = 1L;
ResponseEntity<Object> response = restTemplate.deleteProduct(id);
assertEquals(HttpStatus.OK, response.getStatusCode());
}

@Test
public void testDeleteNonExistentProduct() {
Long id = 9999L;
ResponseEntity<Object> response = restTemplate.deleteProduct(id);
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.when;

import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebFlux;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import reactor.core.publisher.Mono;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureWebFlux
public class ProductControllerTest {

@Autowired
private ProductRepository productRepository;

private RestTemplate restTemplate;

@Before
public void setup() {
this.restTemplate = new MockRestTemplate();
}

@Test
public void testGetAllProductsSuccessful() {
// Arrange
List<Product> expectedResults = new ArrayList<>();
expectedResults.add(new Product("Product 1", 10));
expectedResults.add(new Product("Product 2", 20));
when(productRepository.findAll()).thenReturn(expectedResults);

// Act
Mono<ResponseEntity<List<Product>> response = restTemplate.exchange("/api/products", HttpMethod.GET, null, List.class);

// Assert
assertEquals(HttpStatus.OK, response.statusCode());
assertEquals(expectedResults, response.body());
}

@Test
public void testGetAllProductsFailed() {
// Arrange
when(productRepository.findAll()).thenThrow(new RuntimeException("Mock database exception"));

// Act
Mono<ResponseEntity<List<Product>> response = restTemplate.exchange("/api/products", HttpMethod.GET, null, List.class);

// Assert
assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, response.statusCode());
assertNull(response.body());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
@Test
public void testGetProductByIdSuccessful() {
Long id = 1L;
ResponseEntity<Product> response = restTemplate.exchange(
String.format("/products/%d", id),
HttpMethod.GET,
null,
Product.class);
assertThat(response).isNotNull();
assertThat(response.getBody()).isNotNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
}

@Test
public void testGetProductByIdNotFound() {
Long id = 99999L;
ResponseEntity<Product> response = restTemplate.exchange(
String.format("/products/%d", id),
HttpMethod.GET,
null,
Product.class);
assertThat(response).isNotNull();
assertThat(response.getBody()).isNull();
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
@Test
public void testUpdateProductSuccess() {
// Arrange
long id = 1L;
Product product = new Product();

// Act
ResponseEntity<Product> response = restTemplate.exchange(
"/api/products/" + id,
HttpMethod.PUT,
product,
Product.class
);

// Assert
assertEquals(HttpStatus.OK, response.getStatusCode());
assertNotNull(response.getBody());
assertEquals("Updated Name", response.getBody().getName());
assertEquals("Updated Description", response.getBody().getDescription());
assertEquals(10.99, response.getBody().getPrice(), 0.01);
}

@Test
public void testUpdateProductNotFound() {
// Arrange
long id = 9999L;
Product product = new Product();

// Act
ResponseEntity<Product> response = restTemplate.exchange(
"/api/products/" + id,
HttpMethod.PUT,
product,
Product.class
);

// Assert
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
assertNull(response.getBody());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
@Test
public void testGetDescription_Success() {
// Arrange
Employee employee = new Employee(1L, "John Doe", "johndoe@example.com");
employee.setDescription("A software engineer with 5 years of experience.");

// Act
String result = employee.getDescription();

// Assert
assertEquals("A software engineer with 5 years of experience.", result);
}

@Test
public void testGetDescription_Failure() {
// Arrange
Employee employee = new Employee(1L, "John Doe", "johndoe@example.com");

// Act
try {
String result = employee.getDescription();
} catch (IllegalStateException e) {
// Assert
assertEquals("Employee has no description.", e.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@Test
public void testGetId_Success() {
Long expectedId = 1L;
Entity entity = new Entity(1, "name", "description");
when(entityRepository.findById(anyLong())).thenReturn(Optional.of(entity));
assertEquals(expectedId, entityService.getId());
}

@Test
public void testGetId_Failure() {
Long expectedId = null;
when(entityRepository.findById(anyLong())).thenReturn(Optional.empty());
assertNull(entityService.getId());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
@Test
public void testGetName_Success() {
Employee employee = new Employee(1L);
assertEquals("John Doe", employee.getName());
}

@Test
public void testGetName_Failure() {
Employee employee = new Employee(1L, null);
assertNull(employee.getName());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
@Test
public void testGetPriceSuccess() {
// Arrange
Product product = new Product();
product.setPrice(10.99);
// Act
double result = product.getPrice();
// Assert
assertEquals(10.99, result, 0.01);
}

@Test
public void testGetPriceFailure() {
// Arrange
Product product = new Product();
product.setPrice(-1.00);
// Act
double result = product.getPrice();
// Assert
assertEquals(-1.00, result, 0.01);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@Test
public void testSetDescriptionSuccess() {
Employee employee = new Employee();
employee.setDescription("A software developer");
assertEquals("A software developer", employee.getDescription());
}

@Test
public void testSetDescriptionFailureNullInput() {
Employee employee = new Employee();
assertThrows(IllegalArgumentException.class, () -> employee.setDescription(null));
assertEquals("", employee.getDescription());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@Test
public void testSetIdSuccessful() {
Employee employee = new Employee();
Long id = 1L;
employee.setId(id);
assertEquals(id, employee.getId());
}

@Test
public void testSetIdFailure() {
Employee employee = new Employee();
try {
employee.setId(null);
fail("Expected IllegalArgumentException");
} catch (IllegalArgumentException e) {
assertEquals("Invalid id", e.getMessage());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
@Test
public void testSetNameSuccess() {
Employee employee = new Employee();
employee.setName("John Doe");
assertEquals("John Doe", employee.getName());
}

@Test
public void testSetNameFailure() {
Employee employee = new Employee();
try {
employee.setName(null);
fail();
} catch (IllegalArgumentException e) {
assertEquals(" Cannot set null value for 'name'", e.getMessage());
}
assertNull(employee.getName());
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
@Test
public void testSetPriceSuccessful() {
Product product = new Product();
product.setPrice(10.99);
assertEquals(10.99, product.getPrice());
}

@Test
public void testSetPriceFailure() {
Product product = new Product();
try {
product.setPrice(-10.99);
failBecauseNotReached();
} catch (IllegalArgumentException e) {
assertEquals("Price cannot be negative", e.getMessage());
}
}
1 change: 1 addition & 0 deletions target/classes/application.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
com/bootexample4/products/model/Product.class
com/bootexample4/products/controller/ProductController.class
com/bootexample4/products/repository/ProductRepository.class
com/bootexample4/products/ProductsApplication.class
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/main/java/com/bootexample4/products/controller/ProductController.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/main/java/com/bootexample4/products/model/Product.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/main/java/com/bootexample4/products/ProductsApplication.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/main/java/com/bootexample4/products/repository/ProductRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_setId_e7f341730a_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/controller/ProductController_getAllProducts_ce6c2f6265_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_setName_f5bd015150_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_getName_4ad76af4d7_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_setDescription_5d6a2c2267_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/TestMockServer.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/controller/ProductController_getProductById_079f0e7d67_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_getPrice_d97185b3e6_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/cucumber/SpringIntegrationTests.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/controller/ProductController_updateProduct_d88ecc4aa9_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_getDescription_ca387c4bd2_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/controller/ProductController_createProduct_5fee6d5a95_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/ProductsApplicationTests.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/cucumber/CucumberTestRunner.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/cucumber/ProductStepDefinitions.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/controller/ProductController_deleteProduct_8aa83376b7_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_getId_eb19b6a6d6_Test.java
/var/tmp/Roost/RoostGPT/dmopensourcetest/bd2a7256-4ac2-4639-9540-14990381b896/java-springbootunit/src/test/java/com/bootexample4/products/model/Product_setPrice_fa182f5c65_Test.java
Loading