TBD54566975 / web5-go

Apache License 2.0
10 stars 6 forks source link

adding multiple services to `didweb.Create` doesn't work #30

Closed mistermoe closed 6 months ago

mistermoe commented 6 months ago

the following will fail:

func TestCreate_WithOptions(t *testing.T) {
    bearerDID, err := didweb.Create(
        "localhost:8080",
        didweb.Service("pfi", "PFI", "http://localhost:8080/tbdex"),
        didweb.Service("idv", "IDV", "http://localhost:8080/idv"),
        didweb.AlsoKnownAs("did:example:123"),
        didweb.Controllers("did:example:123"),
    )

    assert.NoError(t, err)
    assert.NotEqual(t, did.BearerDID{}, bearerDID)

    document := bearerDID.Document
    assert.Equal(t, 2, len(document.Service))

    b, e := json.MarshalIndent(document, "", "  ")
    assert.NoError(t, e)
    fmt.Printf("%s", string(b))

    pfisvc := document.Service[0]
    assert.NotEqual(t, didcore.Service{}, *pfisvc)
    assert.Equal(t, "#pfi", pfisvc.ID)
    assert.Equal(t, "PFI", pfisvc.Type)
    assert.Equal(t, "http://localhost:8080/tbdex", pfisvc.ServiceEndpoint)

    idvsvc := document.Service[1]
    assert.NotEqual(t, didcore.Service{}, *idvsvc)
    assert.Equal(t, "#idv", idvsvc.ID)
    assert.Equal(t, "IDV", idvsvc.Type)
    assert.Equal(t, "http://localhost:8080/idv", idvsvc.ServiceEndpoint)

    assert.Equal(t, "did:example:123", document.AlsoKnownAs[0])
    assert.Equal(t, "did:example:123", document.Controller[0])

}

resulting did document is:

{
  "id": "did:web:localhost%3A8080",
  "alsoKnownAs": [
    "did:example:123"
  ],
  "controller": [
    "did:example:123"
  ],
  "verificationMethod": [
    {
      "id": "#0",
      "type": "JsonWebKey2020",
      "controller": "did:web:localhost%3A8080",
      "publicKeyJwk": {
        "kty": "OKP",
        "crv": "Ed25519",
        "x": "bsWQIiylGIWoS_36E136LsPOhJ1N_pZ1dwvIbkIHNJM"
      }
    }
  ],
  "service": [
    {
      "id": "#idv",
      "type": "IDV",
      "serviceEndpoint": "http://localhost:8080/idv"
    },
    {
      "id": "#idv",
      "type": "IDV",
      "serviceEndpoint": "http://localhost:8080/idv"
    }
  ]
} 

notice that the same service is repeated twice