I have a test:
def "should get product by id"() {
given:
Product product = getBeer(UPLOADED_FILE_DETAILS_IMG)
productRepository.getByIdOrThrow(product.id().get()) >> product
then:
productRepository.getByIdOrThrow(_) >> { Product found ->
found.name() == product.name()
found.description() == product.description()
found.category() == product.category()
found.price() == product.price()
found.creationDate() == product.creationDate()
}
}
That tests this method:
public Product getProductById(Long productId) {
return productRepository.getByIdOrThrow(productId);
}
And I get this error:
groovy.lang.MissingMethodException: No signature of method: pl.itcraft.domain.products.ProductApplicationServiceIT$__spock_feature_1_2_closure3.doCall() is applicable for argument types: (ArrayList) values: [[1]]
Possible solutions: doCall(pl.itcraft.domain.products.Product), findAll(), findAll(), isCase(java.lang.Object), isCase(java.lang.Object)
at groovy.lang.Closure.call(Closure.java:412)
at org.spockframework.mock.response.CodeResponseGenerator.invokeClosure(CodeResponseGenerator.java:54)
at org.spockframework.mock.response.CodeResponseGenerator.doRespond(CodeResponseGenerator.java:37)
at org.spockframework.mock.response.SingleResponseGenerator.respond(SingleResponseGenerator.java:32)
at org.spockframework.mock.response.ResponseGeneratorChain.respond(ResponseGeneratorChain.java:44)
at org.spockframework.mock.runtime.MockInteraction.accept(MockInteraction.java:73)
at org.spockframework.mock.runtime.MockInteractionDecorator.accept(MockInteractionDecorator.java:50)
at org.spockframework.mock.runtime.InteractionScope$1.accept(InteractionScope.java:57)
at org.spockframework.mock.runtime.MockController.handle(MockController.java:40)
at org.spockframework.mock.runtime.JavaMockInterceptor.intercept(JavaMockInterceptor.java:92)
at org.spockframework.mock.runtime.DynamicProxyMockInterceptorAdapter.invoke(DynamicProxyMockInterceptorAdapter.java:34)
at org.spockframework.spring.mock.DelegatingInterceptor.intercept(DelegatingInterceptor.java:53)
at org.spockframework.mock.runtime.DynamicProxyMockInterceptorAdapter.invoke(DynamicProxyMockInterceptorAdapter.java:34)
at pl.itcraft.domain.products.ProductApplicationService.getProductById(ProductApplicationService.java:38)
at pl.itcraft.domain.products.ProductApplicationServiceIT.should get product by id(ProductApplicationServiceIT.groovy:64)
It doesn't make any sense to me, I am not providing any array here. Can you see what might be wrong with this test?