From c81c3f22e06b442a0bc266eb92c1db989bbd458c Mon Sep 17 00:00:00 2001 From: Anton Baliasnikov Date: Thu, 20 Jul 2023 11:45:15 +0100 Subject: [PATCH] test: add basic keylist-query integration test (#58) --- .../kotlin/models/MediationCoordination.kt | 12 ++++++++++- .../test/kotlin/common/DidcommMessageTypes.kt | 3 ++- .../MediationCoordinationSteps.kt | 20 ++++++++++--------- .../mediation_coordination.feature | 8 ++++---- 4 files changed, 28 insertions(+), 15 deletions(-) diff --git a/tests/mediator-integration-tests/src/main/kotlin/models/MediationCoordination.kt b/tests/mediator-integration-tests/src/main/kotlin/models/MediationCoordination.kt index 1a5b09c1..aeeaac66 100644 --- a/tests/mediator-integration-tests/src/main/kotlin/models/MediationCoordination.kt +++ b/tests/mediator-integration-tests/src/main/kotlin/models/MediationCoordination.kt @@ -13,10 +13,20 @@ data class MediationKeylistRequest( ): JsonEncoded @Serializable -data class MediationKeylistResponse( +data class MediationKeylistUpdateResponse( val updated: List ): JsonEncoded +@Serializable +data class MediationKeylistResponse( + val keys: List +): JsonEncoded + +@Serializable +data class MediationKeylistKey( + val recipient_did: String +): JsonEncoded + @Serializable data class MediationKeylistRequestMessage( val action: String, diff --git a/tests/mediator-integration-tests/src/test/kotlin/common/DidcommMessageTypes.kt b/tests/mediator-integration-tests/src/test/kotlin/common/DidcommMessageTypes.kt index 5a9d64fc..9ceda90f 100644 --- a/tests/mediator-integration-tests/src/test/kotlin/common/DidcommMessageTypes.kt +++ b/tests/mediator-integration-tests/src/test/kotlin/common/DidcommMessageTypes.kt @@ -6,7 +6,8 @@ object DidcommMessageTypes { const val MEDIATE_REQUEST = "https://didcomm.org/coordinate-mediation/2.0/mediate-request" const val MEDIATE_GRANT = "https://didcomm.org/coordinate-mediation/2.0/mediate-grant" const val MEDIATE_KEYLIST_UPDATE = "https://didcomm.org/coordinate-mediation/2.0/keylist-update" - const val MEDIATE_KEYLIST_RESPONSE = "https://didcomm.org/coordinate-mediation/2.0/keylist-update-response" + const val MEDIATE_KEYLIST_UPDATE_RESPONSE = "https://didcomm.org/coordinate-mediation/2.0/keylist-update-response" + const val MEDIATE_KEYLIST = "https://didcomm.org/coordinate-mediation/2.0/keylist" const val MEDIATE_KEYLIST_QUERY = "https://didcomm.org/coordinate-mediation/2.0/keylist-query" const val FORWARD_REQUEST = "https://didcomm.org/routing/2.0/forward" const val BASIC_MESSAGE = "https://didcomm.org/basicmessage/2.0/message" diff --git a/tests/mediator-integration-tests/src/test/kotlin/features/mediation_coordination/MediationCoordinationSteps.kt b/tests/mediator-integration-tests/src/test/kotlin/features/mediation_coordination/MediationCoordinationSteps.kt index b8633ee8..3d501249 100644 --- a/tests/mediator-integration-tests/src/test/kotlin/features/mediation_coordination/MediationCoordinationSteps.kt +++ b/tests/mediator-integration-tests/src/test/kotlin/features/mediation_coordination/MediationCoordinationSteps.kt @@ -12,7 +12,6 @@ import io.iohk.atala.prism.walletsdk.domain.models.DID import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import models.* -import net.serenitybdd.core.Serenity class MediationCoordinationSteps { @@ -81,9 +80,9 @@ class MediationCoordinationSteps { @Then("Mediator responds to {actor} with a correct keylist update add message") fun mediatorRespondsToHimWithACorrectKeylistUpdateAddMessage(recipient: Actor) { val didcommMessage = EdgeAgent.unpackLastDidcommMessage() - val didcommBody = Json.decodeFromString(didcommMessage.body) + val didcommBody = Json.decodeFromString(didcommMessage.body) recipient.attemptsTo( - Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_RESPONSE), + Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_UPDATE_RESPONSE), Ensure.that(didcommBody.updated.size).isGreaterThan(0), Ensure.that(didcommBody.updated[0].result).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_RESULT_SUCCESS), Ensure.that(didcommBody.updated[0].action).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_ADD), @@ -97,7 +96,7 @@ class MediationCoordinationSteps { fun recipientSendsAKeylistQueryMessageToTheMediator(recipient: Actor) { val keyListQueryMessage = Message( piuri = DidcommMessageTypes.MEDIATE_KEYLIST_QUERY, - from = EdgeAgent.peerDID, + from = recipient.recall("peerDid"), to = Environments.MEDIATOR_PEER_DID, body = MediationKeylistQueryRequest( paginate = Paginate( @@ -114,8 +113,11 @@ class MediationCoordinationSteps { @Then("Mediator responds to {actor} with keylist message containing the current list of keys") fun mediatorRespondsToRecipientWithKeylistMessageContainingTheCurrentListOfKeys(recipient: Actor) { val didcommMessage = EdgeAgent.unpackLastDidcommMessage() + val didcommBody = Json.decodeFromString(didcommMessage.body) recipient.attemptsTo( - Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_RESPONSE) + Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST), + Ensure.that(didcommBody.keys.size).isGreaterThan(0), + Ensure.that(didcommBody.keys.last().recipient_did).isEqualTo(recipient.recall("peerDid").toString()) ) } @@ -162,9 +164,9 @@ class MediationCoordinationSteps { @Then("Mediator responds to {actor} with a correct keylist update remove message") fun mediatorRespondsToRecipientWithACorrectKeylistUpdateRemoveMessage(recipient: Actor) { val didcommMessage = EdgeAgent.unpackLastDidcommMessage() - val didcommBody = Json.decodeFromString(didcommMessage.body) + val didcommBody = Json.decodeFromString(didcommMessage.body) recipient.attemptsTo( - Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_RESPONSE), + Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_UPDATE_RESPONSE), Ensure.that(didcommBody.updated.size).isGreaterThan(0), Ensure.that(didcommBody.updated[0].result).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_RESULT_SUCCESS), Ensure.that(didcommBody.updated[0].action).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_REMOVE), @@ -196,9 +198,9 @@ class MediationCoordinationSteps { @Then("Mediator responds to {actor} with a message with no_change status") fun mediatorRespondsToRecipientWithAMessageWithNo_changeStatus(recipient: Actor) { val didcommMessage = EdgeAgent.unpackLastDidcommMessage() - val didcommBody = Json.decodeFromString(didcommMessage.body) + val didcommBody = Json.decodeFromString(didcommMessage.body) recipient.attemptsTo( - Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_RESPONSE), + Ensure.that(didcommMessage.piuri).isEqualTo(DidcommMessageTypes.MEDIATE_KEYLIST_UPDATE_RESPONSE), Ensure.that(didcommBody.updated.size).isGreaterThan(0), Ensure.that(didcommBody.updated[0].result).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_RESULT_NO_CHANGE), Ensure.that(didcommBody.updated[0].action).isEqualTo(TestConstants.MEDIATOR_COORDINATION_ACTION_REMOVE), diff --git a/tests/mediator-integration-tests/src/test/resources/features/mediation_coordination/mediation_coordination.feature b/tests/mediator-integration-tests/src/test/resources/features/mediation_coordination/mediation_coordination.feature index c9e0b233..afd7340e 100644 --- a/tests/mediator-integration-tests/src/test/resources/features/mediation_coordination/mediation_coordination.feature +++ b/tests/mediator-integration-tests/src/test/resources/features/mediation_coordination/mediation_coordination.feature @@ -26,7 +26,7 @@ Scenario: Recipient removes the last alias from keylist Then Mediator responds to Recipient with a correct keylist update remove message # NOT SUPPORTED YET -#Scenario: Recipient query keylist -# Given Recipient successfully set up a connection with the mediator -# When Recipient sends a keylist query message to the mediator -# Then Mediator responds to Recipient with keylist message containing the current list of keys +Scenario: Recipient query keylist + Given Recipient successfully set up a connection with the mediator + When Recipient sends a keylist query message to the mediator + Then Mediator responds to Recipient with keylist message containing the current list of keys