test/Add ETag Response Header

This commit is contained in:
Marko Milić 2023-04-28 10:22:10 +02:00
parent acfbfa2a32
commit 0f7bbf1df2
4 changed files with 91 additions and 5 deletions

View File

@ -0,0 +1,84 @@
package code.api.v5_1_0
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
import code.api.ResponseHeader
import code.api.util.APIUtil.OAuth._
import code.api.util.ApiRole
import code.api.v5_1_0.APIMethods510.Implementations5_1_0
import code.entitlement.Entitlement
import code.setup.{APIResponse, DefaultUsers}
import com.github.dwickern.macros.NameOf.nameOf
import com.openbankproject.commons.util.ApiVersion
import net.liftweb.json.Serialization.write
import org.scalatest.Tag
class ResponseHeadersTest extends V510ServerSetup with DefaultUsers {
override def beforeAll() {
super.beforeAll()
}
override def afterAll() {
super.afterAll()
}
/**
* Test tags
* Example: To run tests with tag "getPermissions":
* mvn test -D tagsToInclude
*
* This is made possible by the scalatest maven plugin
*/
object VersionOfApi extends Tag(ApiVersion.v5_1_0.toString)
object ApiEndpoint1 extends Tag(nameOf(Implementations5_1_0.createAtm))
object ApiEndpoint2 extends Tag(nameOf(Implementations5_1_0.getAtms))
object ApiEndpoint3 extends Tag(nameOf(Implementations5_1_0.deleteAtm))
lazy val bankId = randomBankId
def getETagHeader(response: APIResponse): String = {
response.headers.map(_.get(ResponseHeader.ETag)).getOrElse("")
}
def getAtms() = {
makeGetRequest((v5_1_0_Request / "banks" / bankId / "atms").GET)
}
feature(s"Test ETag Header Response") {
scenario(s"Test ETag Header Response", ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, VersionOfApi) {
val ETag1 = getETagHeader(getAtms())
When("We make the CREATE ATMs")
Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, ApiRole.CanCreateAtmAtAnyBank.toString)
Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, ApiRole.CanDeleteAtmAtAnyBank.toString)
val requestCreate = (v5_1_0_Request / "banks" / bankId / "atms").POST <@ (user1)
val responseCreate = makePostRequest(requestCreate, write(atmJsonV510.copy(
bank_id = bankId,
atm_type = "atm_type1",
phone = "12345")))
Then("We should get a 201")
responseCreate.code should equal(201)
val atmId = responseCreate.body.extract[AtmJsonV510].id.getOrElse("")
val ETag2 = getETagHeader(getAtms())
// If we add atm response MUST be different
ETag1 should not equal ETag2
// If we do not change anything responses MUST be the same
val ETag3 = getETagHeader(getAtms())
val ETag4 = getETagHeader(getAtms())
ETag3 should equal(ETag4)
Then("We Delete the ATM")
val requestOneDelete = (v5_1_0_Request / "banks" / bankId / "atms" / atmId).DELETE<@ (user1)
Then("We should get a 204")
val responseOneDelete = makeDeleteRequest(requestOneDelete)
responseOneDelete.code should equal(204)
// After we delete the atm responses MUST be different
val ETag5 = getETagHeader(getAtms())
ETag4 should not equal ETag5
}
}
}

View File

@ -40,14 +40,16 @@ import net.liftweb.common.Full
import net.liftweb.json.JsonAST.JValue
import net.liftweb.json._
import net.liftweb.util.Helpers._
import java.net.URLDecoder
import io.netty.handler.codec.http.HttpHeaders
import scala.collection.JavaConverters._
import scala.collection.immutable.TreeMap
import scala.concurrent.Await
import scala.concurrent.duration.Duration
case class APIResponse(code: Int, body: JValue)
case class APIResponse(code: Int, body: JValue, headers: Option[HttpHeaders])
/**
* This trait simulate the Rest process, HTTP parameters --> Reset parameters
@ -191,7 +193,7 @@ trait SendServerRequests {
parse(body)
}
parsedBody match {
case Full(b) => APIResponse(response.getStatusCode, b)
case Full(b) => APIResponse(response.getStatusCode, b, Some(response.getHeaders()))
case _ => throw new Exception(s"couldn't parse response from ${req.url} : $body")
}
}

View File

@ -83,7 +83,7 @@ trait ServerSetup extends FeatureSpec with SendServerRequests
val mockCustomerId = "cba6c9ef-73fa-4032-9546-c6f6496b354a"
val emptyJSON : JObject = ("error" -> "empty List")
val errorAPIResponse = new APIResponse(400,emptyJSON)
val errorAPIResponse = new APIResponse(400,emptyJSON, None)
}

View File

@ -73,7 +73,7 @@ trait ServerSetupAsync extends AsyncFeatureSpec with SendServerRequests
val mockCustomerId = "cba6c9ef-73fa-4032-9546-c6f6496b354a"
val emptyJSON : JObject = ("error" -> "empty List")
val errorAPIResponse = new APIResponse(400,emptyJSON)
val errorAPIResponse = new APIResponse(400,emptyJSON, None)
}