testing restassured for mock
This commit is contained in:
@@ -398,6 +398,9 @@ dependencies {
|
||||
// For local unit tests
|
||||
testImplementation 'com.google.dagger:hilt-android-testing:2.38.1'
|
||||
kaptTest 'com.google.dagger:hilt-compiler:2.38.1'
|
||||
|
||||
// RestAssured
|
||||
implementation(group: 'io.rest-assured', name: 'rest-assured', version: '4.3.0')
|
||||
}
|
||||
|
||||
tasks.withType(Compiler) {
|
||||
|
||||
@@ -6,33 +6,34 @@ import com.naviapp.jsonOperations.JsonParser
|
||||
import com.naviapp.DbCore.clients.CustomerReadDbClient
|
||||
import com.naviapp.DbCore.clients.CustomersDbClient
|
||||
import com.naviapp.DbCore.clients.LoanAccountsDbClient
|
||||
import com.naviapp.clients.OtpClient
|
||||
import org.junit.Test
|
||||
import java.io.File
|
||||
import java.nio.file.Paths
|
||||
import kotlin.math.pow
|
||||
import kotlin.random.Random
|
||||
|
||||
class CustomerDataCleanup {
|
||||
val RootDirectory: String = Paths.get(System.getProperty("user.dir")).toString()
|
||||
val browserStackFilePath = File(Paths.get(RootDirectory, "BrowserStackConfig.json").toString()).toString()
|
||||
val browserStackFilePath =
|
||||
File(Paths.get(RootDirectory, "BrowserStackConfig.json").toString()).toString()
|
||||
val browserStack: BrowserStack = JsonParser.getData(browserStackFilePath)
|
||||
|
||||
@Test
|
||||
fun cleanUpCustomer(){
|
||||
fun cleanUpCustomer() {
|
||||
val gson = Gson()
|
||||
for (i in 1..4) {
|
||||
val phoneNumber = getRandomMockedPhoneNumber()
|
||||
when(i){
|
||||
1 ->{
|
||||
when (i) {
|
||||
1 -> {
|
||||
browserStack.e2e.phoneNumberNewLoan = phoneNumber
|
||||
}
|
||||
2 ->{
|
||||
2 -> {
|
||||
browserStack.e2e.phoneNumberForeclosureLoan = phoneNumber
|
||||
}
|
||||
3 ->{
|
||||
3 -> {
|
||||
browserStack.e2e.phoneNumberHomeLoan = phoneNumber
|
||||
}
|
||||
4 ->{
|
||||
4 -> {
|
||||
browserStack.e2e.phoneNumberBalanceTransfer = phoneNumber
|
||||
}
|
||||
}
|
||||
@@ -64,8 +65,23 @@ class CustomerDataCleanup {
|
||||
return m + Random.nextLong(9 * m)
|
||||
}
|
||||
|
||||
public fun getPhoneNumber(): String {
|
||||
return getRandomMockedPhoneNumber()
|
||||
@Test
|
||||
fun `Validate Loan Closure`() {
|
||||
val appVersionCode = "73"
|
||||
val androidVersion = "Android_10"
|
||||
val phoneNumber = getRandomMockedPhoneNumber()
|
||||
var loanApplicationId: String
|
||||
var disbursementBankReferenceId: String
|
||||
var customerId: String
|
||||
|
||||
val deviceId = generateDigits(16).toString()
|
||||
|
||||
var sessionToken: String
|
||||
|
||||
with(OtpClient(phoneNumber, deviceId, appVersionCode, androidVersion)) {
|
||||
registerDevice()
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
44
app/src/test/java/com/naviapp/RequestWrapper.kt
Normal file
44
app/src/test/java/com/naviapp/RequestWrapper.kt
Normal file
@@ -0,0 +1,44 @@
|
||||
package com.naviapp
|
||||
|
||||
import com.naviapp.constants.ContentType
|
||||
import com.naviapp.entity.MultiPartParams
|
||||
|
||||
|
||||
data class RequestWrapper(
|
||||
val endPoint: String,
|
||||
val method: String,
|
||||
val body: Any?,
|
||||
val headers: Map<String, String>?,
|
||||
val contentType: String?,
|
||||
val queryParams: Any?,
|
||||
val formParams: Any?,
|
||||
val multiPartParams: MultiPartParams?
|
||||
) {
|
||||
private constructor(builder: Builder) : this(
|
||||
endPoint = builder.endPoint,
|
||||
method = builder.method,
|
||||
body = builder.body,
|
||||
headers = builder.headers,
|
||||
contentType = builder.contentType,
|
||||
queryParams = builder.queryParams,
|
||||
formParams = builder.formParams,
|
||||
multiPartParams = builder.multiPartParams
|
||||
)
|
||||
|
||||
companion object {
|
||||
inline fun build(block: Builder.() -> Unit) = Builder().apply(block).build()
|
||||
}
|
||||
|
||||
class Builder {
|
||||
lateinit var endPoint: String
|
||||
lateinit var method: String
|
||||
var body: Any? = null
|
||||
var headers: Map<String, String>? = null
|
||||
var contentType: String? = ContentType.Json
|
||||
var queryParams: Any? = null
|
||||
var formParams: Any? = null
|
||||
var multiPartParams: MultiPartParams? = null
|
||||
|
||||
fun build() = RequestWrapper(this)
|
||||
}
|
||||
}
|
||||
71
app/src/test/java/com/naviapp/ServiceWrapper.kt
Normal file
71
app/src/test/java/com/naviapp/ServiceWrapper.kt
Normal file
@@ -0,0 +1,71 @@
|
||||
package com.naviapp
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.naviapp.constants.ContentType
|
||||
import com.naviapp.constants.HttpMethods
|
||||
import io.restassured.RestAssured.given
|
||||
import io.restassured.response.Response
|
||||
import io.restassured.response.ResponseBodyExtractionOptions
|
||||
import io.restassured.specification.RequestSpecification
|
||||
|
||||
object ServiceWrapper {
|
||||
|
||||
inline fun <reified T> getResponse(requestSpecification: RequestWrapper): T {
|
||||
val gson = Gson()
|
||||
|
||||
val request: RequestSpecification = given().apply {
|
||||
requestSpecification.body?.let { body(gson.toJson(requestSpecification.body)) }
|
||||
|
||||
requestSpecification.queryParams?.let {
|
||||
val json = gson.toJson(requestSpecification.queryParams)
|
||||
val queryParams: Map<String, Any> = gson.fromJson(json, object : TypeToken<Map<String, Any>>() {}.type)
|
||||
queryParams(queryParams)
|
||||
}
|
||||
|
||||
requestSpecification.formParams?.let {
|
||||
val json = gson.toJson(requestSpecification.formParams)
|
||||
val formParams: Map<String, Any> =
|
||||
gson.fromJson(json, object : TypeToken<Map<String, String>>() {}.type)
|
||||
formParams(formParams)
|
||||
}
|
||||
|
||||
requestSpecification.multiPartParams?.let {
|
||||
multiPart(
|
||||
requestSpecification.multiPartParams.controlName,
|
||||
requestSpecification.multiPartParams.file,
|
||||
requestSpecification.multiPartParams.mimeType
|
||||
)
|
||||
}
|
||||
|
||||
requestSpecification.headers?.let { headers(requestSpecification.headers) }
|
||||
|
||||
contentType(requestSpecification.contentType)
|
||||
}
|
||||
|
||||
val endPoint = requestSpecification.endPoint
|
||||
|
||||
val response = when (requestSpecification.method) {
|
||||
HttpMethods.GET -> request.get(endPoint)
|
||||
HttpMethods.POST -> request.post(endPoint)
|
||||
HttpMethods.PATCH -> request.patch(endPoint)
|
||||
HttpMethods.PUT -> request.put(endPoint)
|
||||
else -> throw Exception("METHOD: ${requestSpecification.method} not valid")
|
||||
}
|
||||
|
||||
if (response.statusCode >= 400 || response.contentType.contains(ContentType.Html)) {
|
||||
throw error("Response: ${response.body.prettyPrint()}")
|
||||
}
|
||||
|
||||
return if (T::class == Response::class) response as T
|
||||
else response.body.deserialize()
|
||||
}
|
||||
|
||||
inline fun <reified T> ResponseBodyExtractionOptions.deserialize(): T {
|
||||
return this.`as`(T::class.java)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
28
app/src/test/java/com/naviapp/clients/OtpClient.kt
Normal file
28
app/src/test/java/com/naviapp/clients/OtpClient.kt
Normal file
@@ -0,0 +1,28 @@
|
||||
package com.naviapp.clients
|
||||
|
||||
import com.naviapp.RequestWrapper
|
||||
import com.naviapp.ServiceWrapper
|
||||
import com.naviapp.constants.BaseUrls
|
||||
import com.naviapp.constants.Endpoints
|
||||
import com.naviapp.constants.HttpMethods
|
||||
import com.naviapp.entity.RegisterDeviceRequest
|
||||
import io.restassured.response.Response
|
||||
|
||||
class OtpClient(
|
||||
private val phoneNumber: String, private val deviceId: String,
|
||||
private val appVersionCode: String, private val androidVersion: String, private val otp: String = "1234"
|
||||
) {
|
||||
|
||||
fun registerDevice() {
|
||||
val registerRequest = RegisterDeviceRequest(deviceId)
|
||||
val endpoint =
|
||||
"${BaseUrls.MobileApplicationService}${Endpoints.MobileApplication.RegisterDevice}"
|
||||
val request = RequestWrapper.build {
|
||||
endPoint = endpoint
|
||||
body = registerRequest
|
||||
method = HttpMethods.PUT
|
||||
}
|
||||
|
||||
ServiceWrapper.getResponse<Response>(request)
|
||||
}
|
||||
}
|
||||
7
app/src/test/java/com/naviapp/constants/BaseUrls.kt
Normal file
7
app/src/test/java/com/naviapp/constants/BaseUrls.kt
Normal file
@@ -0,0 +1,7 @@
|
||||
package com.naviapp.constants
|
||||
|
||||
object BaseUrls {
|
||||
|
||||
val MobileApplicationService = "https://dev-api.navi.com"
|
||||
|
||||
}
|
||||
8
app/src/test/java/com/naviapp/constants/ContentType.kt
Normal file
8
app/src/test/java/com/naviapp/constants/ContentType.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package com.naviapp.constants
|
||||
|
||||
object ContentType {
|
||||
const val Json = "application/json"
|
||||
const val FormUrlEncoded = "application/x-www-form-urlencoded"
|
||||
const val MultiPartFormData = "multipart/form-data"
|
||||
const val Html = "text/html"
|
||||
}
|
||||
8
app/src/test/java/com/naviapp/constants/Endpoints.kt
Normal file
8
app/src/test/java/com/naviapp/constants/Endpoints.kt
Normal file
@@ -0,0 +1,8 @@
|
||||
package com.naviapp.constants
|
||||
|
||||
class Endpoints {
|
||||
|
||||
object MobileApplication {
|
||||
const val RegisterDevice = "/app-installations/register"
|
||||
}
|
||||
}
|
||||
9
app/src/test/java/com/naviapp/constants/HttpMethods.kt
Normal file
9
app/src/test/java/com/naviapp/constants/HttpMethods.kt
Normal file
@@ -0,0 +1,9 @@
|
||||
package com.naviapp.constants
|
||||
|
||||
|
||||
object HttpMethods {
|
||||
const val GET = "GET"
|
||||
const val POST = "POST"
|
||||
const val PATCH = "PATCH"
|
||||
const val PUT = "PUT"
|
||||
}
|
||||
9
app/src/test/java/com/naviapp/entity/MultiPartParams.kt
Normal file
9
app/src/test/java/com/naviapp/entity/MultiPartParams.kt
Normal file
@@ -0,0 +1,9 @@
|
||||
package com.naviapp.entity
|
||||
|
||||
import java.io.File
|
||||
|
||||
data class MultiPartParams(
|
||||
val controlName: String,
|
||||
val file: File,
|
||||
val mimeType: String
|
||||
)
|
||||
@@ -0,0 +1,6 @@
|
||||
package com.naviapp.entity
|
||||
|
||||
data class RegisterDeviceRequest(
|
||||
val deviceId: String,
|
||||
val channelId: String = "channel-8"
|
||||
)
|
||||
Reference in New Issue
Block a user