Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
ecom-product
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ashok Kumar K
ecom-product
Commits
1de1a4e1
Commit
1de1a4e1
authored
Jun 04, 2020
by
Ashok Kumar K
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changed url and added integration tests
parent
17d0436f
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
239 additions
and
16 deletions
+239
-16
EcomProductApplication.java
...in/java/com/nisum/ecomproduct/EcomProductApplication.java
+0
-1
ProductController.java
...a/com/nisum/ecomproduct/controller/ProductController.java
+1
-2
application-test.yml
src/main/resources/application-test.yml
+12
-0
ProductControllerIntegrationTest.java
...mproduct/controller/ProductControllerIntegrationTest.java
+119
-0
ProductControllerTest.java
...m/nisum/ecomproduct/controller/ProductControllerTest.java
+9
-13
ProductServiceImplTest.java
...isum/ecomproduct/service/impl/ProductServiceImplTest.java
+98
-0
No files found.
src/main/java/com/nisum/ecomproduct/EcomProductApplication.java
View file @
1de1a4e1
...
...
@@ -4,7 +4,6 @@ import org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
EcomProductApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
src/main/java/com/nisum/ecomproduct/controller/ProductController.java
View file @
1de1a4e1
...
...
@@ -3,7 +3,6 @@ package com.nisum.ecomproduct.controller;
import
com.nisum.ecomproduct.model.Product
;
import
com.nisum.ecomproduct.service.ProductService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.cloud.context.config.annotation.RefreshScope
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.validation.annotation.Validated
;
...
...
@@ -12,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
import
javax.validation.Valid
;
import
java.util.List
;
@RefreshScope
@RestController
@Validated
public
class
ProductController
{
...
...
src/main/resources/application-test.yml
View file @
1de1a4e1
spring
:
data
:
mongodb
:
host
:
localhost
port
:
27017
database
:
ecom-test
cloud
:
config
:
discovery
:
enabled
:
false
config
:
enabled
:
false
src/test/java/com/nisum/ecomproduct/controller/ProductControllerIntegrationTest.java
0 → 100644
View file @
1de1a4e1
package
com
.
nisum
.
ecomproduct
.
controller
;
import
com.nisum.ecomproduct.model.Product
;
import
com.nisum.ecomproduct.repository.ProductRepository
;
import
org.junit.jupiter.api.BeforeAll
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.TestInstance
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.boot.test.web.client.TestRestTemplate
;
import
org.springframework.boot.web.server.LocalServerPort
;
import
org.springframework.core.ParameterizedTypeReference
;
import
org.springframework.http.HttpEntity
;
import
org.springframework.http.HttpMethod
;
import
org.springframework.http.HttpStatus
;
import
org.springframework.http.ResponseEntity
;
import
org.springframework.test.context.ActiveProfiles
;
import
java.util.Arrays
;
import
java.util.List
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertEquals
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertNotNull
;
import
static
org
.
springframework
.
boot
.
test
.
context
.
SpringBootTest
.
WebEnvironment
.
DEFINED_PORT
;
@SpringBootTest
(
webEnvironment
=
DEFINED_PORT
)
@TestInstance
(
TestInstance
.
Lifecycle
.
PER_CLASS
)
@ActiveProfiles
(
"test"
)
public
class
ProductControllerIntegrationTest
{
@LocalServerPort
private
int
port
;
private
String
url
;
private
final
String
randomId
=
"someHexString"
;
@Autowired
TestRestTemplate
testRestTemplate
;
@Autowired
ProductRepository
productRepository
;
@BeforeAll
public
void
setUp
()
{
initializeDb
();
url
=
"http://localhost:"
+
port
;
}
@Test
void
saveProduct_returnsProduct_201
()
{
Product
product
=
getProductRequestObject
();
ResponseEntity
<
Product
>
productResponseEntity
=
testRestTemplate
.
postForEntity
(
"/save"
,
product
,
Product
.
class
);
assertEquals
(
HttpStatus
.
CREATED
,
productResponseEntity
.
getStatusCode
());
Product
productResponse
=
productResponseEntity
.
getBody
();
assertNotNull
(
productResponse
);
assertNotNull
(
productResponse
.
getId
());
}
@Test
void
saveProducts_returnsProducts_201
()
{
List
<
Product
>
products
=
getProductRequestObjectList
();
HttpEntity
<
List
<
Product
>>
productsHttpEntity
=
new
HttpEntity
<>(
products
);
ResponseEntity
<
List
<
Product
>>
productListResponseEntity
=
testRestTemplate
.
exchange
(
"/saveall"
,
HttpMethod
.
POST
,
productsHttpEntity
,
new
ParameterizedTypeReference
<
List
<
Product
>>()
{
});
assertEquals
(
HttpStatus
.
CREATED
,
productListResponseEntity
.
getStatusCode
());
List
<
Product
>
productListResponse
=
productListResponseEntity
.
getBody
();
assertNotNull
(
productListResponse
);
productListResponse
.
forEach
(
product
->
assertNotNull
(
product
.
getId
()));
}
private
Product
getProductRequestObject
()
{
Product
product
=
new
Product
();
product
.
setName
(
"Dell Mouse"
);
product
.
setDescription
(
"Input device of the computer"
);
product
.
setPrice
(
300
D
);
return
product
;
}
private
Product
getProductResponseObject
()
{
Product
product
=
getProductRequestObject
();
product
.
setId
(
randomId
);
return
product
;
}
private
List
<
Product
>
getProductRequestObjectList
()
{
Product
product1
=
new
Product
();
product1
.
setName
(
"Bean bag with beans - L"
);
product1
.
setDescription
(
"Comfortable binge"
);
product1
.
setPrice
(
800
D
);
Product
product2
=
new
Product
();
product2
.
setName
(
"Bean bag with beans - XL"
);
product2
.
setDescription
(
"Comfortable binge"
);
product2
.
setPrice
(
1000
D
);
Product
product3
=
new
Product
();
product3
.
setName
(
"Bean bag with beans - XXL"
);
product3
.
setDescription
(
"IComfortable binge"
);
product3
.
setPrice
(
1600
D
);
return
Arrays
.
asList
(
product1
,
product2
,
product3
);
}
private
List
<
Product
>
getProductResponseObjectList
()
{
List
<
Product
>
products
=
getProductRequestObjectList
();
products
.
forEach
(
product
->
product
.
setId
(
randomId
));
return
products
;
}
private
void
initializeDb
()
{
productRepository
.
deleteAll
();
productRepository
.
saveAll
(
getProductRequestObjectList
());
}
}
src/test/java/com/nisum/ecomproduct/controller/ProductControllerTest.java
View file @
1de1a4e1
...
...
@@ -36,7 +36,7 @@ class ProductControllerTest {
@Autowired
ObjectMapper
objectMapper
;
private
String
randomId
=
"someHexString"
;
private
final
String
randomId
=
"someHexString"
;
@Test
void
saveProduct
()
throws
Exception
{
...
...
@@ -44,7 +44,7 @@ class ProductControllerTest {
Product
productResponseObject
=
getProductResponseObject
();
when
(
productService
.
saveProduct
(
any
())).
thenReturn
(
productResponseObject
);
MvcResult
result
=
mockMvc
.
perform
(
post
(
"/
product/
save"
)
MvcResult
result
=
mockMvc
.
perform
(
post
(
"/save"
)
.
content
(
objectMapper
.
writeValueAsString
(
productRequestObject
))
.
contentType
(
MediaType
.
APPLICATION_JSON
))
.
andExpect
(
status
().
isCreated
())
...
...
@@ -60,7 +60,7 @@ class ProductControllerTest {
List
<
Product
>
productsResponse
=
getProductResponseObjectList
();
when
(
productService
.
saveProducts
(
any
())).
thenReturn
(
productsResponse
);
mockMvc
.
perform
(
post
(
"/
product/
saveall"
)
mockMvc
.
perform
(
post
(
"/saveall"
)
.
content
(
objectMapper
.
writeValueAsString
(
productsRequest
))
.
contentType
(
MediaType
.
APPLICATION_JSON
))
.
andExpect
(
jsonPath
(
"$"
,
hasSize
(
3
)))
...
...
@@ -74,7 +74,7 @@ class ProductControllerTest {
@Test
void
getProductById_returnsProduct_200
()
throws
Exception
{
when
(
productService
.
getProductById
(
randomId
)).
thenReturn
(
getProductResponseObject
());
mockMvc
.
perform
(
get
(
"/
product/
id/"
+
randomId
))
mockMvc
.
perform
(
get
(
"/id/"
+
randomId
))
.
andExpect
(
status
().
isOk
())
.
andExpect
(
jsonPath
(
"$.id"
,
is
(
randomId
)))
.
andReturn
();
...
...
@@ -83,14 +83,10 @@ class ProductControllerTest {
@Test
void
getProductById_throws_404
()
throws
Exception
{
when
(
productService
.
getProductById
(
randomId
)).
thenThrow
(
new
ProductNotFoundException
());
mockMvc
.
perform
(
get
(
"/
product/
id/"
+
randomId
))
mockMvc
.
perform
(
get
(
"/id/"
+
randomId
))
.
andExpect
(
status
().
isNotFound
());
}
@Test
void
getRelatedProducts
()
{
}
@Test
void
updateProduct_returnsProduct_200
()
throws
Exception
{
Product
productRequestObject
=
getProductRequestObject
();
...
...
@@ -98,7 +94,7 @@ class ProductControllerTest {
Product
productResponseObject
=
getProductResponseObject
();
when
(
productService
.
updateProduct
(
any
())).
thenReturn
(
productResponseObject
);
MvcResult
result
=
mockMvc
.
perform
(
put
(
"/
product/
update"
)
MvcResult
result
=
mockMvc
.
perform
(
put
(
"/update"
)
.
content
(
objectMapper
.
writeValueAsString
(
productRequestObject
))
.
contentType
(
MediaType
.
APPLICATION_JSON
))
.
andExpect
(
status
().
isOk
())
...
...
@@ -114,7 +110,7 @@ class ProductControllerTest {
productRequestObject
.
setId
(
randomId
);
when
(
productService
.
updateProduct
(
any
())).
thenThrow
(
new
ProductNotFoundException
());
mockMvc
.
perform
(
put
(
"/
product/
update"
)
mockMvc
.
perform
(
put
(
"/update"
)
.
content
(
objectMapper
.
writeValueAsString
(
productRequestObject
))
.
contentType
(
MediaType
.
APPLICATION_JSON
))
.
andExpect
(
status
().
isNotFound
())
...
...
@@ -124,14 +120,14 @@ class ProductControllerTest {
@Test
void
deleteProductById_204
()
throws
Exception
{
doNothing
().
when
(
productService
).
deleteProductById
(
randomId
);
mockMvc
.
perform
(
delete
(
"/
product/
"
+
randomId
))
mockMvc
.
perform
(
delete
(
"/"
+
randomId
))
.
andExpect
(
status
().
isNoContent
());
}
@Test
void
deleteProductById_throwsProductNotFoundException_404
()
throws
Exception
{
doThrow
(
new
ProductNotFoundException
()).
when
(
productService
).
deleteProductById
(
randomId
);
mockMvc
.
perform
(
delete
(
"/
product/
"
+
randomId
))
mockMvc
.
perform
(
delete
(
"/"
+
randomId
))
.
andExpect
(
status
().
isNotFound
());
}
...
...
src/test/java/com/nisum/ecomproduct/service/impl/ProductServiceImplTest.java
0 → 100644
View file @
1de1a4e1
package
com
.
nisum
.
ecomproduct
.
service
.
impl
;
import
com.nisum.ecomproduct.exception.ProductNotFoundException
;
import
com.nisum.ecomproduct.model.Product
;
import
com.nisum.ecomproduct.repository.ProductRepository
;
import
com.nisum.ecomproduct.service.ProductService
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.context.SpringBootTest
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
import
org.springframework.test.context.ActiveProfiles
;
import
java.util.Arrays
;
import
java.util.List
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertNotNull
;
import
static
org
.
junit
.
jupiter
.
api
.
Assertions
.
assertThrows
;
import
static
org
.
mockito
.
Mockito
.
doReturn
;
import
static
org
.
mockito
.
Mockito
.
when
;
@SpringBootTest
@ActiveProfiles
(
"test"
)
class
ProductServiceImplTest
{
@Autowired
ProductService
productService
;
@MockBean
ProductRepository
productRepository
;
private
final
String
randomId
=
"someHexString"
;
@Test
void
saveProduct
()
{
Product
productToSave
=
getProductRequestObject
();
doReturn
(
getProductResponseObject
()).
when
(
productRepository
).
save
(
productToSave
);
Product
savedProduct
=
productService
.
saveProduct
(
productToSave
);
assertNotNull
(
savedProduct
);
assertNotNull
(
savedProduct
.
getId
());
}
@Test
void
saveProducts
()
{
List
<
Product
>
productsToSave
=
getProductRequestObjectList
();
when
(
productRepository
.
saveAll
(
productsToSave
)).
thenReturn
(
getProductResponseObjectList
());
List
<
Product
>
savedProducts
=
productService
.
saveProducts
(
productsToSave
);
assertNotNull
(
savedProducts
);
savedProducts
.
forEach
(
savedProduct
->
{
assertNotNull
(
savedProduct
);
assertNotNull
(
savedProduct
.
getId
());
});
}
@Test
()
void
deleteProductById_throwsProductNotFoundException
()
{
when
(
productRepository
.
existsById
(
randomId
)).
thenReturn
(
false
);
assertThrows
(
ProductNotFoundException
.
class
,
()
->
productService
.
deleteProductById
(
randomId
));
}
private
Product
getProductRequestObject
()
{
Product
product
=
new
Product
();
product
.
setName
(
"Dell Mouse"
);
product
.
setDescription
(
"Input device of the computer"
);
product
.
setPrice
(
300
D
);
return
product
;
}
private
Product
getProductResponseObject
()
{
Product
product
=
getProductRequestObject
();
product
.
setId
(
randomId
);
return
product
;
}
private
List
<
Product
>
getProductRequestObjectList
()
{
Product
product1
=
new
Product
();
product1
.
setName
(
"Bean bag with beans - L"
);
product1
.
setDescription
(
"Comfortable binge"
);
product1
.
setPrice
(
800
D
);
Product
product2
=
new
Product
();
product2
.
setName
(
"Bean bag with beans - XL"
);
product2
.
setDescription
(
"Comfortable binge"
);
product2
.
setPrice
(
1000
D
);
Product
product3
=
new
Product
();
product3
.
setName
(
"Bean bag with beans - XXL"
);
product3
.
setDescription
(
"IComfortable binge"
);
product3
.
setPrice
(
1600
D
);
return
Arrays
.
asList
(
product1
,
product2
,
product3
);
}
private
List
<
Product
>
getProductResponseObjectList
()
{
List
<
Product
>
products
=
getProductRequestObjectList
();
products
.
forEach
(
product
->
product
.
setId
(
randomId
));
return
products
;
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment