Skip to content

Commit

Permalink
Update CustomerControllerTest.java
Browse files Browse the repository at this point in the history
Added CustomerController test cases.
  • Loading branch information
nhkhai committed Mar 30, 2024
1 parent 1ce7223 commit 518c4c8
Showing 1 changed file with 115 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
import com.fasterxml.jackson.databind.ObjectMapper;

import sg.com.smartinventory.entities.Customer;
import sg.com.smartinventory.entities.Product;
import sg.com.smartinventory.entities.Review;

@SpringBootTest
@AutoConfigureMockMvc
Expand Down Expand Up @@ -98,8 +100,120 @@ public void createCustomerTest() throws Exception {
test_logger.info("Ending test: " + getCurrentMethodName() + ". ");
}

@DisplayName("Create Customer")
@DisplayName("Add Review To Customer")
@Test
public void addReviewToCustomerTest() throws Exception {
test_logger.info("Starting test: " + getCurrentMethodName() + ". ");

// Step 1: Create the test objects.
Customer newCustomer = Customer.builder().firstName("Jackie").lastName("Chan").country("Hong Kong")
.address("123 HK St").postalCode(654321).phoneNumber(87654321)
.email("[email protected]").build();

Product newProduct = Product.builder().category("Electronics").name("Smartphone")
.description("High-end smartphone with advanced features. ")
.price(999.99).stockQuantity(100).build();

Review newReview = Review.builder().category("Electronics")
.reviewContent("Great smartphone with excellent features. ").rating(5)
.customer(newCustomer)
.product(newProduct).build();

// Step 2: Convert the Java object to JSON using ObjectMapper.
String newCustomerAsJSON = objectMapper.writeValueAsString(newCustomer);
String newProductAsJSON = objectMapper.writeValueAsString(newProduct);
String newReviewAsJSON = objectMapper.writeValueAsString(newReview);

// Step 3: Build the request.
RequestBuilder request = MockMvcRequestBuilders.post("/customers")
.contentType(MediaType.APPLICATION_JSON)
.content(newCustomerAsJSON);

RequestBuilder request2 = MockMvcRequestBuilders.post("/products")
.contentType(MediaType.APPLICATION_JSON)
.content(newProductAsJSON);

RequestBuilder request3 = MockMvcRequestBuilders
.post("/customers/{id}/products/{productId}/reviews", "1", "1")
.contentType(MediaType.APPLICATION_JSON)
// .sessionAttr("review", newReview)
// .param("id", "1")
.content(newReviewAsJSON);

// Step 4: Perform the request and get the response and assert.
mockMvc.perform(request)
.andDo(print())
.andExpect(status().isCreated());

mockMvc.perform(request2)
.andDo(print())
.andExpect(status().isCreated());

mockMvc.perform(request3).andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
// .andExpect(jsonPath("$[0].id").exists())
.andExpect(jsonPath("$.category").value("Electronics"))
.andExpect(jsonPath("$.rating").value(5));

test_logger.info("Ending test: " + getCurrentMethodName() + ". ");
}

@DisplayName("Get All Customers")
@Test
public void getAllCustomersTest() throws Exception {
test_logger.info("Starting test: " + getCurrentMethodName() + ". ");

// Step 1: Create the test objects.
Customer newCustomer = Customer.builder().firstName("Jackie").lastName("Chan").country("Hong Kong")
.address("123 HK St").postalCode(654321).phoneNumber(87654321)
.email("[email protected]").build();

Customer newCustomer2 = Customer.builder().firstName("Jack").lastName("Chang").country("China")
.address("321 HK St").postalCode(123456).phoneNumber(12345678)
.email("[email protected]").build();

// Step 2: Convert the Java objects to JSON using ObjectMapper.
String newCustomerAsJSON = objectMapper.writeValueAsString(newCustomer);
String newCustomerAsJSON2 = objectMapper.writeValueAsString(newCustomer2);

// Step 3: Build the request.
RequestBuilder request = MockMvcRequestBuilders.post("/customers")
.contentType(MediaType.APPLICATION_JSON)
.content(newCustomerAsJSON);

RequestBuilder request2 = MockMvcRequestBuilders.post("/customers")
.contentType(MediaType.APPLICATION_JSON)
.content(newCustomerAsJSON2);

RequestBuilder request3 = MockMvcRequestBuilders.get("/customers")
.contentType(MediaType.APPLICATION_JSON);

// Step 4: Perform the request and get the response and assert.
mockMvc.perform(request)
.andDo(print())
.andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.firstName").value("Jackie"))
.andExpect(jsonPath("$.lastName").value("Chan"));

mockMvc.perform(request2)
.andDo(print())
.andExpect(status().isCreated())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.firstName").value("Jack"))
.andExpect(jsonPath("$.lastName").value("Chang"));

mockMvc.perform(request3)
.andDo(print())
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$[0].firstName").value("Jackie"))
.andExpect(jsonPath("$[0].lastName").value("Chan"))
.andExpect(jsonPath("$[1].firstName").value("Jack"))
.andExpect(jsonPath("$[1].lastName").value("Chang"));

test_logger.info("Ending test: " + getCurrentMethodName() + ". ");
}
}
}

0 comments on commit 518c4c8

Please sign in to comment.