У меня проблема с тестом в Споке:
@Subject
def mutation = new OrderedServicesMutation(long list of constructor elements here)
def "should order service and create address"() {
given:
def command = new OrderServiceCommand(1L, 2L, new Date(), "SomeAddress")
def user = new User(id: command.userId)
def address = new String()
def service = new Service(id: command.serviceId)
and:
userRepository.findById(command.userId) >> Optional.of(user)
serviceRepository.findById(command.serviceId) >> Optional.of(service)
when:
def result = mutation.orderService(command)
then:
with(result) {
user == user
address == address
service == service
}
}
OrderedServicesMutation.java:
@Component
@AllArgsConstructor
public class OrderedServicesMutation implements GraphQLMutationResolver {
// imports removed for readibility
@Transactional
@PreAuthorize("hasAnyAuthority('ACCOUNT_OWNER','USER')")
public OrderedService orderService(OrderServiceCommand command) {
OrderedService orderedService = orderedServiceRepository.save(
orderedServiceMapper.mapWithHistory(
userRepository.findById(command.getUserId()).orElseThrow(() -> new NotFoundException(User.class)),
command.getAddress(),
serviceRepository.findById(command.getServiceId()).orElseThrow(() -> new NotFoundException(Service.class)),
command.getDate()
)
);
orderedServicePublisher.publish(orderedService);
return orderedService;
}
Метод должен возвращать объект типа OrderedService
, и обычно это происходит во время выполнения, но когда я запускаю этот тест, я получаю:
Target of 'with' block must not be null
Отладка теста показывает, что переменная result
равна нулю ...
Почему Спок не присваивает результат mutation.orderService(command)
переменной result
?