This is a test suite to demonstrate interoperability of issuers using the VC HTTP API.

Conformance Testing Results

Tests passed 145/157 92%

Tests failed 12/157 8%

Failures 12

Tests skipped 11

Total tests 168

These tests were run on

Key

The results of the tests are shown below:

Issue Credential - Data Integrity

Issuer ⇒
Test Name
apicatalog.com Danube Tech Digital Bazaar EWF GS1 US IDLab LearnCard Mavennet SecureKey SpruceID Trinsic
MUST successfully issue a credential.
{
                      "name": "AssertionError",
                      "message": "Expected credentialSubject to be an object.: expected 'did:key:z6MkhTNL7i2etLerDK8Acz5t528gi…' to be an object",
                      "stack": "AssertionError: Expected credentialSubject to be an object.: expected 'did:key:z6MkhTNL7i2etLerDK8Acz5t528gi…' to be an object\n    at _shouldHaveClaims (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:77:21)\n    at _shouldBeValidCredentialSubject (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:64:12)\n    at shouldBeIssuedVc (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:40:3)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:44:9)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
Request body MUST have property "credential".
credential MUST have property "@context".
credential "@context" MUST be an array.
credential "@context" items MUST be strings.
credential MUST have property "type"
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:98:9)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
"credential.type" MUST be an array.
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:108:9)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
"credential.type" items MUST be strings
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:120:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
credential MUST have property "issuer"
{
                      "name": "AssertionError",
                      "message": "Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist",
                      "stack": "AssertionError: Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist\n    at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:9:14)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:131:9)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
"credential.issuer" MUST be a string or an object
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:143:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
{
                      "name": "AssertionError",
                      "message": "Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist",
                      "stack": "AssertionError: Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist\n    at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:9:14)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:143:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
{
                      "name": "AssertionError",
                      "message": "Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist",
                      "stack": "AssertionError: Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist\n    at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:9:14)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:143:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
credential MUST have property "credentialSubject"
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:154:9)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
"credential.credentialSubject" MUST be an object
{
                      "name": "AssertionError",
                      "message": "Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist",
                      "stack": "AssertionError: Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist\n    at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:9:14)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:168:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
{
                      "name": "AssertionError",
                      "message": "Expected status code 400 invalid input!: expected 500 to equal 400",
                      "stack": "AssertionError: Expected status code 400 invalid input!: expected 500 to equal 400\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:14:23)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:168:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
{
                      "name": "AssertionError",
                      "message": "Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist",
                      "stack": "AssertionError: Expected no result from issuer.: expected Response{ data: { …(7) }, …(3) } to not exist\n    at should.not.exist (node_modules/chai/lib/chai/interface/should.js:208:38)\n    at shouldThrowInvalidInput (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/assertions.js:9:14)\n    at Context. (file:///home/runner/work/vc-api-issuer-test-suite/vc-api-issuer-test-suite/tests/10-issuer.js:168:11)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)"
                    }
credential MAY have property "expirationDate"

Issue Credential - JWT

Issuer ⇒
Test Name
SpruceID
MUST successfully issue a credential.
Request body MUST have property "credential".
credential MUST have property "@context".
credential "@context" MUST be an array.
credential "@context" items MUST be strings.
credential MUST have property "type"
"credential.type" MUST be an array.
"credential.type" items MUST be strings
credential MUST have property "issuer"
"credential.issuer" MUST be a string or an object
credential MUST have property "credentialSubject"
"credential.credentialSubject" MUST be an object
credential MAY have property "issuanceDate"
credential MAY have property "expirationDate"