Skip to content

Commit

Permalink
wip: cleanup tests
Browse files Browse the repository at this point in the history
Signed-off-by: Pat Losoponkul <pat.losoponkul@iohk.io>
  • Loading branch information
patlo-iog committed May 10, 2024
1 parent dcc352f commit dc9ce18
Show file tree
Hide file tree
Showing 5 changed files with 186 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ case class CredentialIssuer(id: UUID, authorizationServer: URL, createdAt: Insta
object CredentialIssuer {
def apply(authorizationServer: URL): CredentialIssuer = {
val now = Instant.now
CredentialIssuer(UUID.randomUUID(), authorizationServer, now, now)
CredentialIssuer(UUID.randomUUID(), authorizationServer, now, now).withTruncatedTimestamp()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer1 = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer2 = CredentialIssuer(authorizationServer = authServer2).withTruncatedTimestamp()
issuer1 = CredentialIssuer(authorizationServer = authServer1)
issuer2 = CredentialIssuer(authorizationServer = authServer2)
_ <- repo.createIssuer(issuer1).provide(wallet1)
_ <- repo.createIssuer(issuer2).provide(wallet2)
} yield (issuer1, wallet1, issuer2, wallet2)
Expand All @@ -51,8 +51,8 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer1 = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer2 = CredentialIssuer(authorizationServer = authServer2).withTruncatedTimestamp()
issuer1 = CredentialIssuer(authorizationServer = authServer1)
issuer2 = CredentialIssuer(authorizationServer = authServer2)
_ <- repo.createIssuer(issuer1)
_ <- repo.createIssuer(issuer2)
maybeIssuer1 <- repo.findIssuerById(issuer1.id)
Expand All @@ -64,7 +64,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
issuer1 = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer1 = CredentialIssuer(authorizationServer = authServer1)
_ <- repo.createIssuer(issuer1)
exit <- repo.createIssuer(issuer1).exit
} yield assert(exit)(dies(anything))
Expand All @@ -73,7 +73,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
_ <- repo.createIssuer(issuer)
_ <- repo.deleteIssuer(issuer.id)
maybeIssuer <- repo.findIssuerById(issuer.id)
Expand All @@ -83,7 +83,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
exit <- repo.deleteIssuer(issuer.id).exit
} yield assert(exit)(dies(isSubtype[UnexpectedAffectedRow](anything)))
},
Expand All @@ -92,7 +92,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer1)
_ <- repo.createIssuer(issuer)
_ <- repo.updateIssuer(issuer.id, authorizationServer = Some(authServer2))
updatedIssuer <- repo.findIssuerById(issuer.id).some
Expand All @@ -105,7 +105,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer1)
_ <- repo.createIssuer(issuer)
_ <- repo.updateIssuer(issuer.id) // empty patch
updatedIssuer <- repo.findIssuerById(issuer.id).some
Expand All @@ -125,7 +125,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
_ <- repo.createIssuer(issuer)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig)
maybeCredConfig <- repo.findCredentialConfigurationById(issuer.id, credConfig.configurationId)
Expand All @@ -146,8 +146,8 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer1 = CredentialIssuer(authorizationServer = authServer1).withTruncatedTimestamp()
issuer2 = CredentialIssuer(authorizationServer = authServer2).withTruncatedTimestamp()
issuer1 = CredentialIssuer(authorizationServer = authServer1)
issuer2 = CredentialIssuer(authorizationServer = authServer2)
_ <- repo.createIssuer(issuer1)
_ <- repo.createIssuer(issuer2)
_ <- repo.createCredentialConfiguration(issuer1.id, credConfig)
Expand All @@ -167,21 +167,27 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
test("list credential configurations successfully") {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
authServer1 = URI.create("http://example-1.com").toURL()
issuer1 = CredentialIssuer(authorizationServer = authServer1)
issuer2 = CredentialIssuer(authorizationServer = authServer1)
credConfig1 = credConfig.copy(configurationId = "DrivingLicense")
credConfig2 = credConfig.copy(configurationId = "UniversityDegree")
_ <- repo.createIssuer(issuer)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig1)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig2)
credConfigs <- repo.findCredentialConfigurationsByIssuer(issuer.id)
} yield assert(credConfigs)(hasSameElements(Seq(credConfig1, credConfig2)))
credConfig3 = credConfig.copy(configurationId = "TrainingCertificate")
_ <- repo.createIssuer(issuer1)
_ <- repo.createIssuer(issuer2)
_ <- repo.createCredentialConfiguration(issuer1.id, credConfig1)
_ <- repo.createCredentialConfiguration(issuer1.id, credConfig2)
_ <- repo.createCredentialConfiguration(issuer2.id, credConfig3)
credConfigs1 <- repo.findCredentialConfigurationsByIssuer(issuer1.id)
credConfigs2 <- repo.findCredentialConfigurationsByIssuer(issuer2.id)
} yield assert(credConfigs1)(hasSameElements(Seq(credConfig1, credConfig2))) &&
assert(credConfigs2)(hasSameElements(Seq(credConfig3)))
},
test("find and list return empty result for non-existing configurations") {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
_ <- repo.createIssuer(issuer)
maybeCredConfig <- repo.findCredentialConfigurationById(issuer.id, credConfig.configurationId)
credConfigs <- repo.findCredentialConfigurationsByIssuer(issuer.id)
Expand All @@ -192,7 +198,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
_ <- repo.createIssuer(issuer)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig)
maybeCredConfig1 <- repo.findCredentialConfigurationById(issuer.id, credConfig.configurationId)
Expand All @@ -205,20 +211,20 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
randomId <- ZIO.randomWith(_.nextUUID)
_ <- repo.createIssuer(issuer)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig)
exit1 <- repo.deleteCredentialConfiguration(issuer.id, "ExampleLicense").exit
exit2 <- repo.deleteCredentialConfiguration(randomId, "ExampleLicense").exit
} yield assert(exit1)(dies(isSubtype[UnexpectedAffectedRow](anything))) &&
assert(exit2)(dies(isSubtype[UnexpectedAffectedRow](anything)))
} yield assert(exit1)(diesWithA[UnexpectedAffectedRow]) &&
assert(exit2)(diesWithA[UnexpectedAffectedRow])
},
test("delete issuer also delete credential configuration") {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
authServer = URI.create("http://example-1.com").toURL()
issuer = CredentialIssuer(authorizationServer = authServer).withTruncatedTimestamp()
issuer = CredentialIssuer(authorizationServer = authServer)
_ <- repo.createIssuer(issuer)
_ <- repo.createCredentialConfiguration(issuer.id, credConfig)
_ <- repo.deleteIssuer(issuer.id)
Expand All @@ -244,15 +250,15 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
init <- initMultiWalletIssuers
(issuer1, wallet1, issuer2, wallet2) = init
exit <- repo.updateIssuer(issuer1.id).provide(wallet2).exit
} yield assert(exit)(dies(isSubtype[UnexpectedAffectedRow](anything)))
} yield assert(exit)(diesWithA[UnexpectedAffectedRow])
},
test("delete issuer across wallet is not allowed") {
for {
repo <- ZIO.service[OID4VCIIssuerMetadataRepository]
init <- initMultiWalletIssuers
(issuer1, wallet1, issuer2, wallet2) = init
exit <- repo.deleteIssuer(issuer1.id).provide(wallet2).exit
} yield assert(exit)(dies(isSubtype[UnexpectedAffectedRow](anything)))
} yield assert(exit)(diesWithA[UnexpectedAffectedRow])
},
test("create credential configuration across wallet is not allowed") {
for {
Expand All @@ -268,7 +274,7 @@ object OID4VCIIssuerMetadataRepositorySpecSuite {
init <- initMultiWalletIssuers
(issuer1, wallet1, issuer2, wallet2) = init
exit <- repo.deleteCredentialConfiguration(issuer1.id, credConfig.configurationId).provide(wallet2).exit
} yield assert(exit)(dies(isSubtype[UnexpectedAffectedRow](anything)))
} yield assert(exit)(diesWithA[UnexpectedAffectedRow])
},
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package org.hyperledger.identus.pollux.core.service

import org.hyperledger.identus.pollux.core.model.CredentialFormat
import org.hyperledger.identus.pollux.core.service.OID4VCIIssuerMetadataServiceError.CredentialConfigurationNotFound
import org.hyperledger.identus.pollux.core.service.OID4VCIIssuerMetadataServiceError.InvalidSchemaId
import org.hyperledger.identus.pollux.core.service.OID4VCIIssuerMetadataServiceError.IssuerIdNotFound
import org.hyperledger.identus.shared.models.WalletAccessContext
import org.hyperledger.identus.shared.models.WalletId
import zio.test.*
import zio.test.Assertion.*
import zio.{ZIO, ZLayer}

import java.net.URI

object OID4VCIIssuerMetadataServiceSpecSuite {

val testSuite = suite("OID4VCIssuerMetadataService")(
test("get credential issuer successfully") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
authServer1 = URI.create("http://example-1.com").toURL()
authServer2 = URI.create("http://example-2.com").toURL()
issuer1 <- service.createCredentialIssuer(authServer1)
issuer2 <- service.createCredentialIssuer(authServer2)
getIssuer1 <- service.getCredentialIssuer(issuer1.id)
getIssuer2 <- service.getCredentialIssuer(issuer2.id)
getIssuers <- service.getCredentialIssuers
} yield assert(getIssuer1)(equalTo(issuer1)) &&
assert(getIssuer2)(equalTo(issuer2)) &&
assert(getIssuers)(hasSameElements(Seq(issuer1, issuer2)))
},
test("get non-existing credential issuer should fail") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
issuerId <- ZIO.randomWith(_.nextUUID)
issuers <- service.getCredentialIssuers
exit <- service.getCredentialIssuer(issuerId).exit
} yield assert(exit)(failsWithA[IssuerIdNotFound]) &&
assert(issuers)(isEmpty)
},
test("update credential issuer successfully") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
authServer = URI.create("http://example-1.com").toURL()
issuer <- service.createCredentialIssuer(authServer)
updatedAuthServer = URI.create("http://example-2.com").toURL()
_ <- service.updateCredentialIssuer(issuer.id, authorizationServer = Some(updatedAuthServer))
updatedIssuer <- service.getCredentialIssuer(issuer.id)
} yield assert(updatedIssuer.authorizationServer)(equalTo(updatedAuthServer))
},
test("update non-existing credential issuer should fail") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
issuerId <- ZIO.randomWith(_.nextUUID)
exit <- service.updateCredentialIssuer(issuerId, Some(URI.create("http://example.com").toURL())).exit
} yield assert(exit)(failsWithA[IssuerIdNotFound])
},
test("create credential configuration successfully") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
authServer = URI.create("http://example-1.com").toURL()
issuer <- service.createCredentialIssuer(authServer)
_ <- service
.createCredentialConfiguration(
issuer.id,
CredentialFormat.JWT,
"UniversityDegree",
"resource:///vc-schema-example.json"
)
credConfig <- service.getCredentialConfigurationById(issuer.id, "UniversityDegree")
} yield assert(credConfig.configurationId)(equalTo("UniversityDegree")) &&
assert(credConfig.format)(equalTo(CredentialFormat.JWT)) &&
assert(credConfig.schemaId)(equalTo(URI.create("resource:///vc-schema-example.json")))
},
test("create credential configuration check for schemaId validity") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
authServer = URI.create("http://example-1.com").toURL()
issuer <- service.createCredentialIssuer(authServer)
createCredConfig = (schemaId: String) =>
service
.createCredentialConfiguration(
issuer.id,
CredentialFormat.JWT,
"UniversityDegree",
schemaId
)
exit1 <- createCredConfig("not a uri").exit
exit2 <- createCredConfig("http://localhost/schema").exit
} yield assert(exit1)(failsWithA[InvalidSchemaId]) &&
assert(exit2)(dies(anything))
},
test("list credential configurations for non-existing issuer should fail") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
issuerId <- ZIO.randomWith(_.nextUUID)
exit <- service.getCredentialConfigurations(issuerId).exit
} yield assert(exit)(failsWithA[IssuerIdNotFound])
},
test("get non-existing credential configuration should fail") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
issuerId <- ZIO.randomWith(_.nextUUID)
exit <- service.getCredentialConfigurationById(issuerId, "UniversityDegree").exit
} yield assert(exit)(failsWithA[CredentialConfigurationNotFound])
},
test("delete non-existing credential configuration should fail") {
for {
service <- ZIO.service[OID4VCIIssuerMetadataService]
issuerId <- ZIO.randomWith(_.nextUUID)
exit <- service.deleteCredentialConfiguration(issuerId, "UniversityDegree").exit
} yield assert(exit)(failsWithA[CredentialConfigurationNotFound])
},
).provideSomeLayer(ZLayer.succeed(WalletAccessContext(WalletId.random)))

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package org.hyperledger.identus.pollux.core.service

import org.hyperledger.identus.pollux.sql.repository.JdbcOID4VCIIssuerMetadataRepository
import org.hyperledger.identus.sharedtest.containers.PostgresTestContainerSupport
import org.hyperledger.identus.test.container.MigrationAspects
import zio.*
import zio.test.*

object OID4VCIIssuerMetadataServiceSpec extends ZIOSpecDefault, PostgresTestContainerSupport {

private val migration = MigrationAspects.migrateEach(
schema = "public",
paths = "classpath:sql/pollux"
)

private val testEnvironmentLayer = ZLayer.make[OID4VCIIssuerMetadataService](
OID4VCIIssuerMetadataServiceImpl.layer,
JdbcOID4VCIIssuerMetadataRepository.layer,
ResourceURIDereferencerImpl.layer,
contextAwareTransactorLayer,
systemTransactorLayer
)

override def spec =
(suite("OID4VCIIssuerMetadataService - Jdbc repository")(
OID4VCIIssuerMetadataServiceSpecSuite.testSuite
) @@ migration).provide(
Runtime.removeDefaultLoggers,
testEnvironmentLayer,
pgContainerLayer,
)

}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ object JdbcOID4VCIIssuerMetadataRepositorySpec extends ZIOSpecDefault, PostgresT
paths = "classpath:sql/pollux"
)

private val testEnvironemtnLayer = ZLayer.make[OID4VCIIssuerMetadataRepository](
private val testEnvironmentLayer = ZLayer.make[OID4VCIIssuerMetadataRepository](
JdbcOID4VCIIssuerMetadataRepository.layer,
contextAwareTransactorLayer,
systemTransactorLayer
Expand All @@ -26,7 +26,7 @@ object JdbcOID4VCIIssuerMetadataRepositorySpec extends ZIOSpecDefault, PostgresT
OID4VCIIssuerMetadataRepositorySpecSuite.multitenantTestSuite,
) @@ migration).provide(
Runtime.removeDefaultLoggers,
testEnvironemtnLayer,
testEnvironmentLayer,
pgContainerLayer,
)
}

0 comments on commit dc9ce18

Please sign in to comment.