Commit f1a5fc75 authored by Harshitha Sai Muppala's avatar Harshitha Sai Muppala

Added the spock tests for the update and delete the orders in service layer

parent 4891f8b2
package com.demo.spock
import com.example.ordermangement.order_management.dto.Orderdto
import com.example.ordermangement.order_management.entity.OrderDetails
import com.example.ordermangement.order_management.repository.OrderRepository
import com.example.ordermangement.order_management.service.OrderService
import reactor.core.publisher.Mono
import spock.lang.Specification
import spock.lang.Subject
import com.example.ordermangement.order_management.utils.AppUtils;
import reactor.core.publisher.Flux;
//It is using the gradle for testing this class
class OrderManagement extends Specification{
@Subject //for mocking the class
private OrderService orderService = new OrderService()
def "test getAllOrders"() {
given:
def orderDetailsList = [
new OrderDetails("234","perfume",1, "778"),
new OrderDetails("365","clothes",2, "377")
]
def expectedDtos = orderDetailsList.collect { AppUtils.entityToDto(it) }
and:
OrderRepository orderRepository = Mock(OrderRepository)
orderRepository.findAll() >> Flux.fromIterable(orderDetailsList)
orderService.orderRepository = orderRepository
when:
def result = orderService.getAllOrders().collectList().block()
/**
* Assertions on the result
* **/
then:
result != null
result.size() == expectedDtos.size()
result.containsAll(expectedDtos)
}
def "test getOrderById"() {
given:
def orderId = "234"
def orderEntity = new OrderDetails("234", "perfume", 1, "778")
def expectedDto = AppUtils.entityToDto(orderEntity)
and:
OrderRepository orderRepository = Mock(OrderRepository)
orderRepository.findById(orderId) >> Mono.just(orderEntity)
orderService.orderRepository = orderRepository
when:
def resultMono = orderService.getOrderById(orderId)
then:
def resultDto = resultMono.block()
resultDto != null
resultDto == expectedDto
}
def "test createOrder"(){
given:
def orderDto = new Orderdto("234","perfume",1,"778")
def orderEntity = AppUtils.DtoToentity(orderDto)
/**
*Here, _ is a Spock wildcard that matches any argument
* The as keyword in Groovy is used for typecasting
* So, (_ as OrderDetails) means that the insert method is expected to be called with any argument that can be typecast to OrderDetails
* **/
and:
OrderRepository orderRepository = Mock(OrderRepository)
orderRepository.insert (_ as OrderDetails) >> Mono.just(orderEntity)
orderService.orderRepository = orderRepository
when:
def resultMono = orderService.createOrder (Mono.just(orderDto))
def resultDto = resultMono.block()
then:
resultDto != null
resultDto.orderId == orderDto.orderId
resultDto.itemName == orderDto.itemName
resultDto.qty == orderDto.qty
resultDto.storeNumber == orderDto.storeNumber
}
def "test orderUpdate"() {
given:
def orderId = "234"
def orderDto = new Orderdto(orderId: orderId, itemName: "perfume", qty: 1, storeNumber: "778")
def orderEntity = AppUtils.DtoToentity(orderDto)
and:
OrderRepository orderRepository = Mock(OrderRepository)
orderRepository.findById(orderId) >> Mono.just(orderEntity)
orderRepository.save(_ as OrderDetails) >> Mono.just(orderEntity)
orderService.orderRepository = orderRepository
when:
def resultMono = orderService.orderUpadte(Mono.just(orderDto), orderId)
then:
def updatedOrderDto = resultMono.block() // Blocking to get the result
updatedOrderDto != null
updatedOrderDto.orderId == orderDto.orderId
updatedOrderDto.itemName == orderDto.itemName
updatedOrderDto.qty == orderDto.qty
updatedOrderDto.storeNumber == orderDto.storeNumber
}
def "test orderDelete"() {
given:
def orderId = "234"
and:
OrderRepository orderRepository = Mock(OrderRepository)
orderRepository.deleteById(orderId) >> Mono.empty()
orderService.orderRepository = orderRepository
when:
def resultMono = orderService.orderDelete(orderId)
then:
resultMono == Mono.empty()
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment