• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

input-output-hk / atala-prism-building-blocks / 7295755663

22 Dec 2023 03:08AM UTC coverage: 30.564% (-0.5%) from 31.05%
7295755663

Pull #829

web-flow
Merge branch 'epic/ATL-4095-revocation-for-jwt-creds' into ATL-6136-get-credential-status-list-cred-endpoint
Pull Request #829: feat(pollux): Implement endpoint that returns status list credential

1 of 92 new or added lines in 10 files covered. (1.09%)

376 existing lines in 112 files now uncovered.

4061 of 13287 relevant lines covered (30.56%)

0.31 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.0
/castor/lib/core/src/main/scala/io/iohk/atala/castor/core/service/MockDIDService.scala
1
package io.iohk.atala.castor.core.service
2

3
import io.iohk.atala.castor.core.model.did.*
4
import io.iohk.atala.castor.core.model.error
5
import io.iohk.atala.prism.crypto.EC
6
import io.iohk.atala.prism.crypto.keys.ECKeyPair
7
import io.iohk.atala.shared.models.Base64UrlString
8
import zio.mock.{Expectation, Mock, Proxy}
9
import zio.test.Assertion
10
import zio.{IO, URLayer, ZIO, ZLayer, mock}
11

12
import scala.collection.immutable.ArraySeq
13

14
object MockDIDService extends Mock[DIDService] {
15

16
  object ScheduleOperation extends Effect[SignedPrismDIDOperation, error.DIDOperationError, ScheduleDIDOperationOutcome]
17
  // FIXME leaving this out for now as it gives a "java.lang.AssertionError: assertion failed: class Array" compilation error
18
  // object GetScheduledDIDOperationDetail extends Effect[Array[Byte], error.DIDOperationError, Option[ScheduledDIDOperationDetail]]
19
  object ResolveDID extends Effect[PrismDID, error.DIDResolutionError, Option[(DIDMetadata, DIDData)]]
20

21
  override val compose: URLayer[mock.Proxy, DIDService] =
1✔
22
    ZLayer {
1✔
23
      for {
×
24
        proxy <- ZIO.service[Proxy]
25
      } yield new DIDService {
×
26
        override def scheduleOperation(
27
            operation: SignedPrismDIDOperation
28
        ): IO[error.DIDOperationError, ScheduleDIDOperationOutcome] =
×
29
          proxy(ScheduleOperation, operation)
30

×
31
        override def getScheduledDIDOperationDetail(
32
            operationId: Array[Byte]
33
        ): IO[error.DIDOperationError, Option[ScheduledDIDOperationDetail]] =
×
34
          ???
35

1✔
36
        override def resolveDID(did: PrismDID): IO[error.DIDResolutionError, Option[(DIDMetadata, DIDData)]] =
1✔
37
          proxy(ResolveDID, did)
38
      }
39
    }
40

1✔
41
  def createDID(
42
      verificationRelationship: VerificationRelationship
43
  ): (PrismDIDOperation.Create, ECKeyPair, DIDMetadata, DIDData) = {
1✔
44
    val masterKeyPair = EC.INSTANCE.generateKeyPair()
1✔
45
    val keyPair = EC.INSTANCE.generateKeyPair()
UNCOV
46
    val createOperation = PrismDIDOperation.Create(
×
47
      publicKeys = Seq(
48
        InternalPublicKey(
49
          id = "master-0",
50
          purpose = InternalKeyPurpose.Master,
51
          publicKeyData = PublicKeyData.ECCompressedKeyData(
52
            crv = EllipticCurve.SECP256K1,
1✔
53
            data = Base64UrlString.fromByteArray(masterKeyPair.getPublicKey.getEncodedCompressed)
54
          )
55
        ),
56
        PublicKey(
57
          id = "key-0",
58
          purpose = verificationRelationship,
59
          publicKeyData = PublicKeyData.ECCompressedKeyData(
60
            crv = EllipticCurve.SECP256K1,
1✔
61
            data = Base64UrlString.fromByteArray(keyPair.getPublicKey.getEncodedCompressed)
62
          )
63
        ),
64
      ),
1✔
65
      services = Nil,
1✔
66
      context = Nil,
67
    )
1✔
68
    val longFormDid = PrismDID.buildLongFormFromOperation(createOperation)
69
    // val canonicalDid = longFormDid.asCanonical
70

71
    val didMetadata =
72
      DIDMetadata(
1✔
73
        lastOperationHash = ArraySeq.from(longFormDid.stateHash.toByteArray),
74
        canonicalId = None, // unpublished DID must not contain canonicalId
75
        deactivated = false, // unpublished DID cannot be deactivated
76
        created = None, // unpublished DID cannot have timestamp
77
        updated = None // unpublished DID cannot have timestamp
78
      )
79
    val didData = DIDData(
1✔
80
      id = longFormDid.asCanonical,
1✔
81
      publicKeys = createOperation.publicKeys.collect { case pk: PublicKey => pk },
82
      services = createOperation.services,
1✔
83
      internalKeys = createOperation.publicKeys.collect { case pk: InternalPublicKey => pk },
84
      context = createOperation.context
85
    )
86
    (createOperation, keyPair, didMetadata, didData)
87
  }
88

1✔
89
  def resolveDIDExpectation(didMetadata: DIDMetadata, didData: DIDData): Expectation[DIDService] =
1✔
90
    MockDIDService.ResolveDID(
91
      assertion = Assertion.anything,
1✔
92
      result = Expectation.value(Some(didMetadata, didData))
93
    )
94
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc