Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
O
order-management-webflux-mongodb
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
Sarika Sama
order-management-webflux-mongodb
Commits
b221af2b
Commit
b221af2b
authored
Jul 15, 2023
by
Sarika Sama
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'int-tests' into 'master'
Int tests See merge request
!1
parents
ea59d826
a7a7171d
Changes
28
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
840 additions
and
78 deletions
+840
-78
README.md
README.md
+3
-0
pom.xml
pom.xml
+87
-2
readme.txt
readme.txt
+40
-0
KafkaConsumerConfig.java
...luxmongodbordermanagement/config/KafkaConsumerConfig.java
+52
-0
KafkaListeners.java
.../webfluxmongodbordermanagement/config/KafkaListeners.java
+24
-0
KafkaProducer.java
...m/webfluxmongodbordermanagement/config/KafkaProducer.java
+32
-0
KafkaProducerConfig.java
...luxmongodbordermanagement/config/KafkaProducerConfig.java
+35
-0
OrderConfigController.java
...godbordermanagement/controller/OrderConfigController.java
+26
-0
OrdersController.java
...uxmongodbordermanagement/controller/OrdersController.java
+6
-3
UserController.java
...fluxmongodbordermanagement/controller/UserController.java
+3
-15
UserOrdersController.java
...ngodbordermanagement/controller/UserOrdersController.java
+11
-1
Order.java
...com/nisum/webfluxmongodbordermanagement/entity/Order.java
+6
-11
User.java
.../com/nisum/webfluxmongodbordermanagement/entity/User.java
+1
-1
OrdersService.java
.../webfluxmongodbordermanagement/service/OrdersService.java
+31
-2
UserOrdersService.java
...fluxmongodbordermanagement/service/UserOrdersService.java
+34
-2
UserService.java
...um/webfluxmongodbordermanagement/service/UserService.java
+39
-3
application.properties
src/main/resources/application.properties
+3
-8
OrderControllerIntTest.java
...odbordermanagement/controller/OrderControllerIntTest.java
+79
-0
OrderControllerIntegrationTest.java
...management/controller/OrderControllerIntegrationTest.java
+84
-0
OrderControllerTest.java
...ongodbordermanagement/controller/OrderControllerTest.java
+9
-9
UserControllerTest.java
...mongodbordermanagement/controller/UserControllerTest.java
+3
-6
UserOrderControllerTest.java
...dbordermanagement/controller/UserOrderControllerTest.java
+6
-7
OrdersServiceIntTest.java
...xmongodbordermanagement/service/OrdersServiceIntTest.java
+54
-0
OrdersServiceTest.java
...fluxmongodbordermanagement/service/OrdersServiceTest.java
+8
-4
UserServiceTest.java
...ebfluxmongodbordermanagement/service/UserServiceTest.java
+11
-4
UsersOrderServiceIntTest.java
...godbordermanagement/service/UsersOrderServiceIntTest.java
+85
-0
UsersServiceIntTest.java
...uxmongodbordermanagement/service/UsersServiceIntTest.java
+62
-0
application-test.properties
src/test/resources/application-test.properties
+6
-0
No files found.
README.md
0 → 100644
View file @
b221af2b
spring-cloud-config:
spring cloud config provides server and client-side support for externalized configuration in a distributed system.
With the Config Server you have a central place to manage external properties for applications across all environments
\ No newline at end of file
pom.xml
View file @
b221af2b
...
...
@@ -5,7 +5,7 @@
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.
7.12
</version>
<version>
2.
3.4.RELEASE
</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>
com.nisum
</groupId>
...
...
@@ -21,11 +21,71 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb-reactive
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-mongodb
</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.testcontainers/testcontainers -->
<!-- <dependency>-->
<!-- <groupId>org.testcontainers</groupId>-->
<!-- <artifactId>testcontainers</artifactId>-->
<!-- <version>1.18.0</version>-->
<!-- <scope>test</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>
de.flapdoodle.embed
</groupId>
<artifactId>
de.flapdoodle.embed.mongo
</artifactId>
</dependency>
<dependency>
<groupId>
cz.jirutka.spring
</groupId>
<artifactId>
embedmongo-spring
</artifactId>
<version>
RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-thymeleaf
</artifactId>
</dependency>
<dependency>
<groupId>
org.springdoc
</groupId>
<artifactId>
springdoc-openapi-webflux-ui
</artifactId>
<version>
1.6.14
</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springdoc</groupId>-->
<!-- <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>-->
<!-- <version>1.6.14</version>-->
<!-- </dependency>-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.cloud</groupId>-->
<!-- <artifactId>spring-cloud-openfeign-core</artifactId>-->
<!-- <version>3.0.2</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-config-client -->
<dependency>
<groupId>
org.springframework.cloud
</groupId>
<artifactId>
spring-cloud-config-client
</artifactId>
<version>
2.2.8.RELEASE
</version>
</dependency>
<dependency>
<groupId>
org.springframework.kafka
</groupId>
<artifactId>
spring-kafka
</artifactId>
</dependency>
<dependency>
<groupId>
org.apache.kafka
</groupId>
<artifactId>
kafka-clients
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
</dependency>
<dependency>
<groupId>
org.springdoc
</groupId>
<artifactId>
springdoc-openapi-webflux-core
</artifactId>
...
...
@@ -35,7 +95,24 @@
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-webflux
</artifactId>
</dependency>
<dependency>
<groupId>
de.flapdoodle.embed
</groupId>
<artifactId>
de.flapdoodle.embed.mongo
</artifactId>
<version>
2.2.0
</version>
<scope>
test
</scope>
<exclusions>
<exclusion>
<groupId>
org.mongodb
</groupId>
<artifactId>
mongo-java-driver
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
org.junit.jupiter
</groupId>
<artifactId>
junit-jupiter-api
</artifactId>
<version>
5.9.1
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
...
...
@@ -73,6 +150,14 @@
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>
org.apache.maven.plugins
</groupId>
<artifactId>
maven-compiler-plugin
</artifactId>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
</configuration>
</plugin>
</plugins>
</build>
...
...
readme.txt
0 → 100644
View file @
b221af2b
C:\kafka\bin\windows\zookeeper-server-start.bat C:\kafka\config\zookeeper.properties
C:\kafka\bin\windows\kafka-server-start.bat C:\kafka\config\server.properties
##C:\kafka\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 -topic nisum-stream
Run server properties of kafka:
-------------------------------
C:\kafka\bin\windows\kafka-server-start.bat .\config\server.properties
Run on cmd for zookeeper properties of kafka:
---------------------------------------------
C:\kafka\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties
To create a Topic in new terminal
---------------------------------
C:\kafka\bin\windows\kafka-topics.bat --create --topic library-events1 --bootstrap-server localhost:9092
C:\kafka\bin\windows\kafka-topics.bat --create --topic order_topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
C:\kafka\bin\windows\kafka-topics.bat --delete --topic order_topic --bootstrap-server localhost:9092
List of Topics:
----------------
C:\kafka\bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
Add messages into the topics in producer
---------------------------------------------
C:\kafka\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic library-events
To see messages from the topic in consumer
-------------------------------------------
c:\kafka\bin\windows\kafka-console-consumer.bat --topic library-events1 --from-beginning --bootstrap-server localhost:9092
c:\kafka\bin\windows\kafka-console-consumer.bat --topic order_topic --from-beginning --bootstrap-server localhost:9092
http://localhost:9090/webjars/swagger-ui/index.html
\ No newline at end of file
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaConsumerConfig.java
0 → 100644
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.kafka.clients.consumer.ConsumerConfig
;
import
org.apache.kafka.common.serialization.StringDeserializer
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.kafka.annotation.EnableKafka
;
import
org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory
;
import
org.springframework.kafka.core.ConsumerFactory
;
import
org.springframework.kafka.core.DefaultKafkaConsumerFactory
;
import
org.springframework.kafka.support.serializer.ErrorHandlingDeserializer
;
import
java.util.HashMap
;
import
java.util.Map
;
@Configuration
@EnableKafka
@Slf4j
public
class
KafkaConsumerConfig
{
@Bean
public
ConsumerFactory
<
String
,
String
>
consumerFatory
()
{
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
config
.
put
(
ConsumerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ConsumerConfig
.
KEY_DESERIALIZER_CLASS_CONFIG
,
StringDeserializer
.
class
);
config
.
put
(
ConsumerConfig
.
VALUE_DESERIALIZER_CLASS_CONFIG
,
StringDeserializer
.
class
);
config
.
put
(
ErrorHandlingDeserializer
.
KEY_DESERIALIZER_CLASS
,
ErrorHandlingDeserializer
.
class
);
config
.
put
(
ErrorHandlingDeserializer
.
VALUE_DESERIALIZER_CLASS
,
ErrorHandlingDeserializer
.
class
);
config
.
put
(
ConsumerConfig
.
GROUP_ID_CONFIG
,
"orders_group"
);
config
.
put
(
ConsumerConfig
.
AUTO_OFFSET_RESET_CONFIG
,
"latest"
);
config
.
put
(
ConsumerConfig
.
ENABLE_AUTO_COMMIT_CONFIG
,
false
);
//return new DefaultKafkaConsumerFactory<>(config, new StringDeserializer(), new StringDeserializer());
DefaultKafkaConsumerFactory
<
String
,
String
>
consumerFactory
=
new
DefaultKafkaConsumerFactory
<>(
config
);
log
.
info
(
"consumer config is ready {}"
,
consumerFactory
.
getConfigurationProperties
());
return
consumerFactory
;
}
@Bean
(
name
=
"consumer_factory"
)
public
ConcurrentKafkaListenerContainerFactory
<
String
,
String
>
kafkaListenerContainerFactory
()
{
ConcurrentKafkaListenerContainerFactory
<
String
,
String
>
concurrentKafkaListenerContainerFactory
=
new
ConcurrentKafkaListenerContainerFactory
<>();
concurrentKafkaListenerContainerFactory
.
setConsumerFactory
(
consumerFatory
());
concurrentKafkaListenerContainerFactory
.
setMissingTopicsFatal
(
false
);
return
concurrentKafkaListenerContainerFactory
;
}
}
\ No newline at end of file
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaListeners.java
0 → 100644
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.kafka.clients.consumer.ConsumerRecord
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.kafka.annotation.KafkaListener
;
import
org.springframework.stereotype.Component
;
@Component
@Slf4j
public
class
KafkaListeners
{
@Value
(
"${order_topic}"
)
private
String
topicName
;
@KafkaListener
(
topics
=
"${order_topic}"
,
groupId
=
"orders_group"
,
containerFactory
=
"consumer_factory"
)
public
void
consume
(
ConsumerRecord
<
String
,
String
>
record
){
log
.
info
(
"record consumed to topic: {}, offset {}, partitionkey {}, message {}"
,
record
.
topic
(),
record
.
offset
(),
record
.
key
(),
record
.
value
());
}
}
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaProducer.java
0 → 100644
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.kafka.clients.producer.RecordMetadata
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.kafka.core.KafkaTemplate
;
import
org.springframework.stereotype.Component
;
@Component
@Slf4j
public
class
KafkaProducer
{
private
final
KafkaTemplate
<
String
,
String
>
kafkaTemplate
;
@Autowired
public
KafkaProducer
(
KafkaTemplate
<
String
,
String
>
kafkaTemplate
)
{
this
.
kafkaTemplate
=
kafkaTemplate
;
}
public
void
sendMessage
(
String
topic
,
String
partitionKey
,
String
message
)
{
kafkaTemplate
.
send
(
topic
,
partitionKey
,
message
)
.
addCallback
(
result
->
{
RecordMetadata
record
=
result
.
getRecordMetadata
();
log
.
info
(
"record sent to topic {}, partition {}, offset {}, partitionkey {}, record {}"
,
record
.
topic
(),
record
.
partition
(),
record
.
offset
(),
partitionKey
,
message
);
},
ex
->
log
.
error
(
"failed to send message to topic {}, partitionkey {}, message {}"
,
topic
,
partitionKey
,
message
)
);
}
}
src/main/java/com/nisum/webfluxmongodbordermanagement/config/KafkaProducerConfig.java
0 → 100644
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.kafka.clients.producer.ProducerConfig
;
import
org.apache.kafka.common.serialization.StringSerializer
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.kafka.core.DefaultKafkaProducerFactory
;
import
org.springframework.kafka.core.KafkaTemplate
;
import
org.springframework.kafka.core.ProducerFactory
;
import
java.util.HashMap
;
import
java.util.Map
;
@Configuration
@Slf4j
public
class
KafkaProducerConfig
{
@Bean
ProducerFactory
<
String
,
String
>
producerFactory
()
{
Map
<
String
,
Object
>
config
=
new
HashMap
<>();
config
.
put
(
ProducerConfig
.
BOOTSTRAP_SERVERS_CONFIG
,
"localhost:9092"
);
config
.
put
(
ProducerConfig
.
KEY_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
config
.
put
(
ProducerConfig
.
VALUE_SERIALIZER_CLASS_CONFIG
,
StringSerializer
.
class
);
DefaultKafkaProducerFactory
<
String
,
String
>
producerFactory
=
new
DefaultKafkaProducerFactory
<
String
,
String
>(
config
);
log
.
info
(
"producer config is ready {}"
,
producerFactory
.
getConfigurationProperties
());
return
producerFactory
;
}
@Bean
KafkaTemplate
<
String
,
String
>
kafkaTemplate
()
{
return
new
KafkaTemplate
<
String
,
String
>(
producerFactory
());
}
}
\ No newline at end of file
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/OrderConfigController.java
0 → 100644
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
controller
;
import
com.nisum.webfluxmongodbordermanagement.entity.Order
;
import
com.nisum.webfluxmongodbordermanagement.service.OrdersService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
@RestController
public
class
OrderConfigController
{
@Value
(
"${app.order}"
)
private
String
orderNumber
;
@GetMapping
(
"/getOrderNumber"
)
public
Mono
<
String
>
getOrderNumbers
()
{
return
Mono
.
just
(
orderNumber
);
}
}
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/OrdersController.java
View file @
b221af2b
...
...
@@ -3,7 +3,9 @@ package com.nisum.webfluxmongodbordermanagement.controller;
import
com.nisum.webfluxmongodbordermanagement.entity.Order
;
import
com.nisum.webfluxmongodbordermanagement.service.OrdersService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
reactor.core.publisher.Flux
;
...
...
@@ -13,9 +15,10 @@ public class OrdersController {
@Autowired
private
OrdersService
ordersService
;
@GetMapping
(
"/orders"
)
public
Flux
<
Order
>
getOrders
(){
return
ordersService
.
getOrders
();
@GetMapping
(
"/publish-orders"
)
public
Flux
<
Order
>
publishToKafka
()
{
Flux
<
Order
>
orders
=
ordersService
.
fetchOrdersAndPublish
();
return
orders
;
}
}
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/UserController.java
View file @
b221af2b
...
...
@@ -17,9 +17,10 @@ public class UserController {
@Autowired
UserService
userService
;
@GetMapping
(
"/users"
)
@GetMapping
(
"/
publish-
users"
)
public
Flux
<
User
>
getUsers
()
{
return
userService
.
getUsers
();
Flux
<
User
>
user
=
userService
.
fetchUsersAndPublish
();
return
user
;
}
}
...
...
@@ -27,16 +28,3 @@ public class UserController {
//
//@PostMapping("/userDetails")
// public Mono<User> saveUser(@RequestBody User user){
// return userService.addUser(user);
// }
// @GetMapping("/{userId}")
// public Mono<ResponseEntity<User>> getUserWithOrders(@PathVariable String userId) {
// return userService.getUserWithOrders(userId)
// .map(user -> ResponseEntity.ok(user))
// .defaultIfEmpty(ResponseEntity.notFound().build());
// }
\ No newline at end of file
src/main/java/com/nisum/webfluxmongodbordermanagement/controller/UserOrdersController.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
controller
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.entity.UserOrders
;
import
com.nisum.webfluxmongodbordermanagement.service.UserOrdersService
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RestController
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@RestController
@Slf4j
public
class
UserOrdersController
{
@Autowired
private
UserOrdersService
userOrdersService
;
@GetMapping
(
"/user-orders"
)
public
Flux
<
UserOrders
>
getAllUsersWithOrders
(){
public
Flux
<
UserOrders
>
fetchUserOrdersAndPublish
(){
Flux
<
UserOrders
>
userOrdersFlux
=
userOrdersService
.
getAllUsersWithOrders
();
userOrdersService
.
fetchUserOrdersAndPublish
(
userOrdersFlux
);
return
userOrdersFlux
;
}
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/entity/Order.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
entity
;
import
lombok.*
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
import
org.springframework.data.annotation.Id
;
import
org.springframework.data.mongodb.core.mapping.Document
;
import
org.springframework.data.mongodb.core.mapping.Field
;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Document
(
collection
=
"orders"
)
public
class
Order
{
@Id
private
String
_id
;
private
String
orderId
;
private
String
userId
;
private
String
transactionId
;
private
String
trackingId
;
private
String
status
;
}
src/main/java/com/nisum/webfluxmongodbordermanagement/entity/User.java
View file @
b221af2b
...
...
@@ -18,6 +18,6 @@ public class User {
private
String
userId
;
private
String
userName
;
private
String
emailId
;
private
String
orderId
;
//
private String orderId;
}
src/main/java/com/nisum/webfluxmongodbordermanagement/service/OrdersService.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.Order
;
import
com.nisum.webfluxmongodbordermanagement.repository.OrderRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@Service
@Slf4j
public
class
OrdersService
{
@Autowired
private
OrderRepository
orderRepository
;
public
Flux
<
Order
>
getOrders
(){
return
orderRepository
.
findAll
();
@Autowired
private
KafkaProducer
kafkaProducer
;
@Value
(
"${order_topic}"
)
private
String
topicName
;
public
Flux
<
Order
>
fetchOrdersAndPublish
(){
Flux
<
Order
>
orders
=
orderRepository
.
findAll
();
Mono
<
List
<
Order
>>
ordersMono
=
orders
.
collectList
()
.
subscribeOn
(
Schedulers
.
boundedElastic
());
ordersMono
.
subscribe
(
resultList
->
{
log
.
info
(
"sending orders to kafka"
);
for
(
Order
order
:
resultList
)
{
kafkaProducer
.
sendMessage
(
topicName
,
"order-"
+
order
.
getOrderId
(),
order
.
toString
());
}
},
throwable
->
log
.
error
(
"Error occurred: {}"
,
throwable
.
getMessage
())
);
return
orders
;
}
}
src/main/java/com/nisum/webfluxmongodbordermanagement/service/UserOrdersService.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.UserOrders
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.mongodb.core.ReactiveMongoTemplate
;
import
org.springframework.data.mongodb.core.aggregation.Aggregation
;
import
org.springframework.data.mongodb.core.aggregation.AggregationOperation
;
...
...
@@ -9,21 +12,34 @@ import org.springframework.data.mongodb.core.aggregation.LookupOperation;
import
org.springframework.data.mongodb.core.query.Criteria
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@Service
@Slf4j
public
class
UserOrdersService
{
@Autowired
private
ReactiveMongoTemplate
reactiveMongoTemplate
;
ReactiveMongoTemplate
reactiveMongoTemplate
;
@Autowired
private
KafkaProducer
kafkaProducer
;
@Value
(
"${order_topic}"
)
private
String
topicName
;
public
Flux
<
UserOrders
>
getAllUsersWithOrders
()
{
LookupOperation
lookupOperation
=
LookupOperation
.
newLookup
().
from
(
"orders"
).
localField
(
"userId"
).
foreignField
(
"userId"
).
as
(
"order"
);
Aggregation
aggregation
=
Aggregation
.
newAggregation
(
lookupOperation
);
return
reactiveMongoTemplate
.
aggregate
(
aggregation
,
"user"
,
UserOrders
.
class
);
}
...
...
@@ -42,8 +58,24 @@ public class UserOrdersService {
return
reactiveMongoTemplate
.
aggregate
(
aggregation
,
"user"
,
UserOrders
.
class
);
}
public
void
fetchUserOrdersAndPublish
(
Flux
<
UserOrders
>
userOrdersFlux
){
Mono
<
List
<
UserOrders
>>
usersMono
=
userOrdersFlux
.
collectList
()
.
subscribeOn
(
Schedulers
.
boundedElastic
());
usersMono
.
subscribe
(
resultList
->
{
log
.
info
(
"sending userOrders to kafka"
);
for
(
UserOrders
user
:
resultList
)
{
kafkaProducer
.
sendMessage
(
topicName
,
"userOrders-"
+
user
.
getUserId
(),
user
.
toString
());
}
},
throwable
->
log
.
error
(
"Error occurred: {}"
,
throwable
.
getMessage
())
);
}
}
...
...
src/main/java/com/nisum/webfluxmongodbordermanagement/service/UserService.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.repository.UserRepository
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Service
;
import
reactor.core.publisher.Flux
;
import
reactor.core.publisher.Mono
;
import
reactor.core.scheduler.Schedulers
;
import
java.util.List
;
@Service
@Slf4j
public
class
UserService
{
@Autowired
private
UserRepository
userRepository
;
public
Flux
<
User
>
getUsers
(){
return
userRepository
.
findAll
();
}
@Autowired
private
KafkaProducer
kafkaProducer
;
@Value
(
"${order_topic}"
)
private
String
topicName
;
// public Flux<User> getUsers(){
//
// return userRepository.findAll();
// }
public
Flux
<
User
>
fetchUsersAndPublish
(){
Flux
<
User
>
users
=
userRepository
.
findAll
();
Mono
<
List
<
User
>>
usersMono
=
users
.
collectList
()
.
subscribeOn
(
Schedulers
.
boundedElastic
());
usersMono
.
subscribe
(
resultList
->
{
log
.
info
(
"sending users to kafka"
);
for
(
User
user
:
resultList
)
{
kafkaProducer
.
sendMessage
(
topicName
,
"user-"
+
user
.
getUserId
(),
user
.
toString
());
}
},
throwable
->
log
.
error
(
"Error occurred: {}"
,
throwable
.
getMessage
())
);
return
users
;
}
}
\ No newline at end of file
src/main/resources/application.properties
View file @
b221af2b
#server.port=9090
#spring.data.mongodb.user-orders-db.uri=mongodb://localhost:27017/user-orders-db
#spring.data.mongodb.user-orders-db.database=user-orders-db
server.port
=
9090
spring.data.mongodb.host
=
localhost
spring.data.mongodb.port
=
27017
spring.data.mongodb.database
=
user-orders-db
order_topic
=
order_topic
#spring.data.mongodb.orders-db.uri=mongodb://localhost:27017/orders-db
#spring.data.mongodb.orders-db.database=orders-db
spring.cloud.config.uri
=
http://localhost:8888
src/test/java/com/nisum/webfluxmongodbordermanagement/controller/OrderControllerIntTest.java
0 → 100644
View file @
b221af2b
//package com.nisum.webfluxmongodbordermanagement.controller;
//
//import com.nisum.webfluxmongodbordermanagement.entity.Order;
//import com.nisum.webfluxmongodbordermanagement.repository.OrderRepository;
//import com.nisum.webfluxmongodbordermanagement.service.OrdersService;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Disabled;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
//import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.test.context.ActiveProfiles;
//import org.springframework.test.context.junit.jupiter.SpringExtension;
//import org.springframework.test.web.reactive.server.WebTestClient;
//import reactor.core.publisher.Flux;
//import reactor.test.StepVerifier;
//
//import java.io.IOException;
//
////@DataMongoTest
//@WebFluxTest
//@ExtendWith(SpringExtension.class)
//@ActiveProfiles("test")
//public class OrderControllerIntTest {
//
// static {
// System.setProperty("spring.mongodb.embedded.version","5.0.0");
// }
//
// @Autowired
// OrdersService ordersService;
//
// @Autowired
// OrderRepository orderRepository;
//
// @Autowired
// WebTestClient webTestClient ;
//// .bindToServer()
//// .baseUrl("http://localhost:9090")
//// .build();
//
//
// @BeforeEach
// public void setup() throws IOException {
//// mongoTemplate.getCollection("orders").drop();
//// //mongoTemplate.insert(new User("23563456", "01", "samab12344","sarika@123456","1"));
//// mongoTemplate.insert(new Order("2356781", "01", "1","ooppo122356","oppo123456","sucess"));
//
// }
//
// @Test
// public void getOrderControllerTest(@Autowired MongoTemplate mongoTemplate) {
// mongoTemplate.getCollection("orders").drop();
//
// mongoTemplate.insert(new Order("2356781", "01", "1","ooppo122356","oppo123456","sucess"));
// Flux<Order> result = ordersService.fetchOrdersAndPublish();
// StepVerifier.create(result)
// .expectNextMatches(order -> order.getOrderId().equals("01"))
// .expectComplete()
// .verify();
// }
//// mongoTemplate.insert(new Order("2356781", "01", "1","ooppo122356","oppo123456","sucess"));
////
//// Flux<Order> responseBody = webTestClient.get().uri("/orders")
//// .exchange()
//// .expectStatus().isOk()
//// .returnResult(Order.class)
//// .getResponseBody();
//////
//// StepVerifier.create(responseBody)
//// .expectSubscription()
//// .expectNextMatches(order -> order.getUserId().equals("1"))
//// .verifyComplete();
////}
//
//
//}
src/test/java/com/nisum/webfluxmongodbordermanagement/controller/OrderControllerIntegrationTest.java
0 → 100644
View file @
b221af2b
//package com.nisum.webfluxmongodbordermanagement.controller;
//
//import com.nisum.webfluxmongodbordermanagement.entity.Order;
//import com.nisum.webfluxmongodbordermanagement.service.OrdersService;
//import de.flapdoodle.embed.mongo.MongodExecutable;
//import de.flapdoodle.embed.mongo.MongodStarter;
//import de.flapdoodle.embed.mongo.config.IMongodConfig;
//import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
//import de.flapdoodle.embed.mongo.config.Net;
//import de.flapdoodle.embed.mongo.distribution.Version;
//import de.flapdoodle.embed.process.runtime.Network;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.data.mongodb.core.ReactiveMongoOperations;
//import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
//import org.springframework.test.context.ActiveProfiles;
//import org.springframework.test.context.junit.jupiter.SpringExtension;
//import org.springframework.test.util.TestSocketUtils;
//import org.springframework.test.web.reactive.server.WebTestClient;
//
//import java.io.IOException;
//
////@SpringJUnitConfig
//@ExtendWith(SpringExtension.class)
//@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
//@AutoConfigureWebTestClient(timeout = "30000")
//@ActiveProfiles("test")
//public class OrderControllerIntegrationTest {
// static int port = TestSocketUtils.findAvailableTcpPort();
// public static final String MONGODB_URL = "mongodb://localhost:" + port;
// static MongodExecutable mongodExecutable = null;
//
// static {
// System.setProperty("spring.mongodb.embedded.version","5.0.0");
// }
//
// @Autowired
// ReactiveMongoOperations mongoOperations;
//
// @Autowired
// WebTestClient webTestClient;
//
// @Autowired
// OrdersService ordersService;
//
// @BeforeEach
// public void setup() throws IOException {
// MongodStarter starter = MongodStarter.getDefaultInstance();
// IMongodConfig mongodConfig = new MongodConfigBuilder().version(Version.Main.PRODUCTION)
// .net(new Net(port, Network.localhostIsIPv6())).build();
// mongodExecutable = starter.prepare(mongodConfig);
// mongodExecutable.start();
// }
//
// @Test
// public void getOrderControllerTest() {
//
// Order order = new Order("2356781", "01", "1", "ooppo122356", "oppo123456", "sucess");
// //mongoTemplate.insert(order, "orders").block();
// webTestClient.get().uri("/orders")
// .exchange()
// .expectStatus().isOk()
// .returnResult(Order.class)
// .getResponseBody();
//
// }
//
//}
//// public void testGetUserByEmailId() {
//// UserDto userDto = ReadJson.read("userDetails.json", UserDto.class);
//// reactiveMongoTemplate.insert(userDto, USER_COLLECTION).block();
////
//// webTestClient.get().uri("/api/user/v1/login/amit@gmail.com")
//// .exchange()
//// .expectStatus().isOk()
//// .expectBody(UserDto.class)
//// .value(userDto1 ->
//// assertEquals("amit@gmail.com", userDto.getEmailId())
//// );
//// }
\ No newline at end of file
src/test/java/com/nisum/webfluxmongodbordermanagement/controller/OrderControllerTest.java
View file @
b221af2b
...
...
@@ -46,19 +46,19 @@ public class OrderControllerTest {
// Mock data
Flux
<
Order
>
order
=
Flux
.
just
(
new
Order
(
"1"
,
"1123"
,
"01"
,
"ooppo01234"
,
"ooppo12345678"
,
"success"
));
when
(
ordersService
.
getOrders
()).
thenReturn
(
order
);
when
(
ordersService
.
fetchOrdersAndPublish
()).
thenReturn
(
order
);
Flux
<
Order
>
responseBody
=
webTestClient
.
get
().
uri
(
"/orders"
)
.
exchange
()
.
expectStatus
().
isOk
()
.
returnResult
(
Order
.
class
)
.
getResponseBody
();
Flux
<
Order
>
responseBody
=
webTestClient
.
get
().
uri
(
"/
publish-
orders"
)
.
exchange
()
.
expectStatus
().
isOk
()
.
returnResult
(
Order
.
class
)
.
getResponseBody
();
//
StepVerifier
.
create
(
responseBody
)
.
expectSubscription
()
.
expectSubscription
()
.
expectNextMatches
(
p
->
p
.
getUserId
().
equals
(
"01"
))
.
verifyComplete
();
}
.
verifyComplete
();
}
}
src/test/java/com/nisum/webfluxmongodbordermanagement/controller/UserControllerTest.java
View file @
b221af2b
...
...
@@ -6,9 +6,6 @@ import org.junit.jupiter.api.AfterEach;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.mockito.InjectMocks
;
import
org.mockito.Mock
;
import
org.mockito.MockitoAnnotations
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
...
...
@@ -47,10 +44,10 @@ public class UserControllerTest {
public
void
testGetUsers
()
{
// Mock data
Flux
<
User
>
user
=
Flux
.
just
(
new
User
(
"1"
,
"1"
,
"sama"
,
"sama@gmail.com"
,
"01"
));
when
(
userService
.
getUsers
()).
thenReturn
(
user
);
Flux
<
User
>
user
=
Flux
.
just
(
new
User
(
"1"
,
"1"
,
"sama"
,
"sama@gmail.com"
));
when
(
userService
.
fetchUsersAndPublish
()).
thenReturn
(
user
);
Flux
<
User
>
responseBody
=
webTestClient
.
get
().
uri
(
"/users"
)
Flux
<
User
>
responseBody
=
webTestClient
.
get
().
uri
(
"/
publish-
users"
)
.
exchange
()
.
expectStatus
().
isOk
()
.
returnResult
(
User
.
class
)
...
...
src/test/java/com/nisum/webfluxmongodbordermanagement/controller/UserOrderControllerTest.java
View file @
b221af2b
...
...
@@ -8,6 +8,7 @@ import org.junit.jupiter.api.AfterEach;
import
org.junit.jupiter.api.BeforeEach
;
import
org.junit.jupiter.api.Test
;
import
org.junit.jupiter.api.extension.ExtendWith
;
import
org.mockito.InjectMocks
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest
;
import
org.springframework.boot.test.mock.mockito.MockBean
;
...
...
@@ -19,6 +20,8 @@ import reactor.test.StepVerifier;
import
java.util.Arrays
;
import
java.util.List
;
import
static
org
.
mockito
.
ArgumentMatchers
.
any
;
import
static
org
.
mockito
.
Mockito
.
doNothing
;
import
static
org
.
mockito
.
Mockito
.
when
;
@ExtendWith
(
SpringExtension
.
class
)
...
...
@@ -26,6 +29,8 @@ import static org.mockito.Mockito.when;
public
class
UserOrderControllerTest
{
@InjectMocks
UserOrdersController
controller
;
@Autowired
private
WebTestClient
webTestClient
;
...
...
@@ -38,13 +43,6 @@ public class UserOrderControllerTest {
void
setUp
()
{
}
@AfterEach
void
tearDown
()
{
}
@Test
void
getAllUsers
()
{
}
@Test
public
void
testGetUsersAndOrders
()
{
...
...
@@ -53,6 +51,7 @@ public class UserOrderControllerTest {
Arrays
.
asList
(
new
Order
(
"1"
,
"123"
,
"01"
,
"oppo1234"
,
"oppo23bvn1"
,
"success"
),
new
Order
(
"2"
,
"1234"
,
"01"
,
"vivo1234"
,
"vivo23bvn1"
,
"success"
))));
when
(
userOrdersService
.
getAllUsersWithOrders
()).
thenReturn
(
order
);
doNothing
().
when
(
userOrdersService
).
fetchUserOrdersAndPublish
(
any
());
Flux
<
UserOrders
>
responseBody
=
webTestClient
.
get
().
uri
(
"/user-orders"
)
.
exchange
()
...
...
src/test/java/com/nisum/webfluxmongodbordermanagement/service/OrdersServiceIntTest.java
0 → 100644
View file @
b221af2b
//package com.nisum.webfluxmongodbordermanagement.service;
//
//import com.nisum.webfluxmongodbordermanagement.entity.Order;
//import com.nisum.webfluxmongodbordermanagement.repository.OrderRepository;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.test.context.ActiveProfiles;
//import org.springframework.test.context.junit.jupiter.SpringExtension;
//import reactor.core.publisher.Flux;
//import reactor.test.StepVerifier;
//
//import java.io.IOException;
//@DataMongoTest
//@ExtendWith(SpringExtension.class)
//@ActiveProfiles("test")
//public class OrdersServiceIntTest {
//
// static {
// System.setProperty("spring.mongodb.embedded.version","5.0.0");
// }
//
// /*@Autowired
// MongoTemplate mongoTemplate;*/
// @Autowired
// OrderRepository orderRepository;
//
// @BeforeEach
// public void setup() throws IOException {
//
// // mongoTemplate.getCollection("orders").drop();
// //mongoTemplate.insert(new User("23563456", "01", "samab12344","sarika@123456","1"));
// //mongoTemplate.insert(new Order("2356781", "01", "1","ooppo122356","oppo123456","sucess"));
//
// }
//
// @Test
// public void testGetOrders(@Autowired MongoTemplate mongoTemplate) {
// mongoTemplate.getCollection("orders").drop();
// Flux<Order> result = orderRepository.findAll();
// mongoTemplate.insert(new Order("2356781", "01", "1","ooppo122356","oppo123456","sucess"));
// mongoTemplate.insert(new Order("2356782", "02", "2","ooppo122356","oppo123456","sucess"));
// StepVerifier.create(result)
// .expectNextMatches(order -> order.getUserId().equals("1"))
// .expectNextMatches(o -> o.getUserId().equals("2"))
// .expectComplete()
// .verify();
// }
//
//}
src/test/java/com/nisum/webfluxmongodbordermanagement/service/OrdersServiceTest.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.Order
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.repository.OrderRepository
;
...
...
@@ -15,6 +16,8 @@ import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import
reactor.core.publisher.Flux
;
import
reactor.test.StepVerifier
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
doNothing
;
import
static
org
.
mockito
.
Mockito
.
when
;
public
class
OrdersServiceTest
{
...
...
@@ -26,12 +29,13 @@ public class OrdersServiceTest {
@InjectMocks
OrdersService
ordersService
;
@Mock
KafkaProducer
kafkaProducer
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
open
Mocks
(
this
);
MockitoAnnotations
.
init
Mocks
(
this
);
}
...
...
@@ -41,9 +45,9 @@ public class OrdersServiceTest {
Order
order1
=
new
Order
(
"1123v34"
,
"1"
,
"1"
,
"oppo123445"
,
"oppo123"
,
"success"
);
Order
order2
=
new
Order
(
"112345"
,
"2"
,
"1"
,
"vivo123445"
,
"vivo123"
,
"success"
);
when
(
orderRepository
.
findAll
()).
thenReturn
(
Flux
.
just
(
order1
,
order2
));
doNothing
().
when
(
kafkaProducer
).
sendMessage
(
anyString
(),
anyString
(),
anyString
());
// Call the method
Flux
<
Order
>
result
=
ordersService
.
getOrders
();
Flux
<
Order
>
result
=
ordersService
.
fetchOrdersAndPublish
();
// Verify the output
StepVerifier
.
create
(
result
)
...
...
src/test/java/com/nisum/webfluxmongodbordermanagement/service/UserServiceTest.java
View file @
b221af2b
package
com
.
nisum
.
webfluxmongodbordermanagement
.
service
;
import
com.nisum.webfluxmongodbordermanagement.config.KafkaProducer
;
import
com.nisum.webfluxmongodbordermanagement.entity.User
;
import
com.nisum.webfluxmongodbordermanagement.repository.UserRepository
;
import
org.junit.jupiter.api.BeforeEach
;
...
...
@@ -13,6 +14,8 @@ import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import
reactor.core.publisher.Flux
;
import
reactor.test.StepVerifier
;
import
static
org
.
mockito
.
ArgumentMatchers
.
anyString
;
import
static
org
.
mockito
.
Mockito
.
doNothing
;
import
static
org
.
mockito
.
Mockito
.
when
;
class
UserServiceTest
{
...
...
@@ -25,23 +28,27 @@ class UserServiceTest {
@InjectMocks
UserService
userService
;
@Mock
KafkaProducer
kafkaProducer
;
@BeforeEach
void
setUp
()
{
MockitoAnnotations
.
open
Mocks
(
this
);
MockitoAnnotations
.
init
Mocks
(
this
);
}
@Test
@DisplayName
(
"get all users "
)
void
getAllUsers
()
{
User
user1
=
new
User
(
"1"
,
"01"
,
"John"
,
"john@example.com"
,
"order1"
);
User
user2
=
new
User
(
"2"
,
"02"
,
"Jane"
,
"jane@example.com"
,
"order2"
);
User
user1
=
new
User
(
"1"
,
"01"
,
"John"
,
"john@example.com"
);
User
user2
=
new
User
(
"2"
,
"02"
,
"Jane"
,
"jane@example.com"
);
when
(
userRepository
.
findAll
()).
thenReturn
(
Flux
.
just
(
user1
,
user2
));
doNothing
().
when
(
kafkaProducer
).
sendMessage
(
anyString
(),
anyString
(),
anyString
());
// Call the method
Flux
<
User
>
result
=
userService
.
getUsers
();
Flux
<
User
>
result
=
userService
.
fetchUsersAndPublish
();
// Verify the output
StepVerifier
.
create
(
result
)
...
...
src/test/java/com/nisum/webfluxmongodbordermanagement/service/UsersOrderServiceIntTest.java
0 → 100644
View file @
b221af2b
//package com.nisum.webfluxmongodbordermanagement.service;
//
//import com.nisum.webfluxmongodbordermanagement.entity.Order;
//import com.nisum.webfluxmongodbordermanagement.entity.User;
//import com.nisum.webfluxmongodbordermanagement.entity.UserOrders;
//import com.nisum.webfluxmongodbordermanagement.repository.UserRepository;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
//import org.springframework.test.context.ActiveProfiles;
//import org.springframework.test.context.junit.jupiter.SpringExtension;
//import reactor.core.publisher.Flux;
//import reactor.test.StepVerifier;
//
//import java.io.IOException;
//
//
//@DataMongoTest
//@ExtendWith(SpringExtension.class)
//@ActiveProfiles("test")
//public class UsersOrderServiceIntTest {
//
// static {
// System.setProperty("spring.mongodb.embedded.version","5.0.0");
// }
//
// UserOrdersService userOrdersService;
//
// @Autowired
// private ReactiveMongoTemplate reactiveMongoTemplate;
//
// @Autowired
// MongoTemplate mongoTemplate;
// @Autowired
// UserRepository userRepository;
//
// @BeforeEach
// public void setup() throws IOException {
// userOrdersService = new UserOrdersService();
// userOrdersService.reactiveMongoTemplate = reactiveMongoTemplate;
// mongoTemplate.getCollection("user").drop();
// mongoTemplate.getCollection("orders").drop();
//
// //mongoTemplate.insert(new User("23563456", "01", "samab12344","sarika@123456","1"));
// mongoTemplate.insert(new Order("2356781", "01", "user1","ooppo122356","oppo123456","sucess"));
// mongoTemplate.insert(new Order("2356782", "02", "user1","vivo122356","vivo123456","sucess"));
// mongoTemplate.insert(new Order("2356783", "03", "user2","sam122356","sam123456","sucess"));
//
// mongoTemplate.insert(new User("2356781", "user1", "sarika","sarika@123456"));
// mongoTemplate.insert(new User("2356782", "user2", "sama","sama@123456"));
// mongoTemplate.insert(new User("2356783", "user3", "samasarika","sama@123456"));
//
//
//
// }
//
//
// @Test
// public void testGetUsers(@Autowired MongoTemplate mongoTemplate) {
//
// // Flux<User> result = userRepository.findAll();
// Flux<UserOrders> result = userOrdersService.getAllUsersWithOrders();
//
//
// StepVerifier.create(result)
// .expectNextMatches(uo -> uo.getUserId().equals("user1") && uo.getOrder().size()==2)
// .expectNextMatches(uo -> uo.getUserId().equals("user2") && uo.getOrder().size() == 1)
// .expectNextMatches(uo -> uo.getUserId().equals("user3") && uo.getOrder().size() == 0)
// .expectComplete()
// .verify();
// }
//
//}
//
//
//
//
//
src/test/java/com/nisum/webfluxmongodbordermanagement/service/UsersServiceIntTest.java
0 → 100644
View file @
b221af2b
//package com.nisum.webfluxmongodbordermanagement.service;
//
//import com.nisum.webfluxmongodbordermanagement.entity.User;
//import com.nisum.webfluxmongodbordermanagement.repository.UserRepository;
//import org.junit.jupiter.api.BeforeEach;
//import org.junit.jupiter.api.Test;
//import org.junit.jupiter.api.extension.ExtendWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
//import org.springframework.data.mongodb.core.MongoTemplate;
//import org.springframework.test.context.ActiveProfiles;
//import org.springframework.test.context.junit.jupiter.SpringExtension;
//import reactor.core.publisher.Flux;
//import reactor.test.StepVerifier;
//
//import java.io.IOException;
//
//
//@DataMongoTest
//@ExtendWith(SpringExtension.class)
//@ActiveProfiles("test")
//public class UsersServiceIntTest {
//
// static {
// System.setProperty("spring.mongodb.embedded.version","5.0.0");
// }
//
//
// @Autowired
// MongoTemplate mongoTemplate;
// @Autowired
// UserRepository userRepository;
//
// @BeforeEach
// public void setup() throws IOException {
//
// mongoTemplate.getCollection("user").drop();
// //mongoTemplate.insert(new User("23563456", "01", "samab12344","sarika@123456"));
// mongoTemplate.insert(new User("2356781", "01", "samasarika","sama@123456"));
//
// }
//
//
// @Test
// public void testGetUsers(@Autowired MongoTemplate mongoTemplate) {
//
// Flux<User> result = userRepository.findAll();
//
// StepVerifier.create(result)
// .expectNextMatches(user -> user.getUserId().equals("01"))
// .expectComplete()
// .verify();
// }
//
// }
//
//
src/test/resources/application-test.properties
0 → 100644
View file @
b221af2b
server.port
=
9090
spring.mongodb.embedded.version
=
5.0.0
spring.data.mongodb.database
=
user-orders-test-db
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