dave08
05/04/2021, 1:42 PMdave08
05/04/2021, 1:42 PMinterface ResultUseCase<in Request : Any, out Response> : UseCase<Request, Result<Response, DomainError>> {
override suspend fun invoke(request: Request): Result<Response, DomainError>
}
dave08
05/04/2021, 1:43 PMinterface UseCase<in Request : Any, out Response> {
suspend operator fun invoke(request: Request): Response?
}
dave08
05/04/2021, 1:43 PMclass ResultUseCaseSpy<Request : Any, Response>(
var block: (suspend (Request) -> Result<Response, DomainError>)? = null
): ResultUseCase<Request, Response> {
var request: Request? = null
private set
override suspend fun invoke(request: Request): Result<Response, DomainError> {
this.request = request
return block?.invoke(request) ?: error("No response provided for $request.")
}
}
dave08
05/04/2021, 1:45 PMResultUseCase
an interface that provides the generic params:
interface SomeUseCase : ResultUseCase<SomeRequest, SomeResult>
, and still be able to spy that in my tests with one Spy implementation...