diff --git a/assets/key.go b/assets/key.go index abd970b..10f19b0 100644 --- a/assets/key.go +++ b/assets/key.go @@ -59,6 +59,14 @@ func NewKey(m map[string]interface{}) (k Key, err errors.ICCError) { if index != 0 { keyExists = false } + } else { + // Get asset type from @key + parts := strings.Split(k["@key"].(string), ":") + if len(parts) < 2 { + err = errors.NewCCError("cannot determine asset type from key", 400) + return + } + k["@assetType"] = parts[0] } } diff --git a/test/assets_key_test.go b/test/assets_key_test.go index 4319ec9..3c07c17 100644 --- a/test/assets_key_test.go +++ b/test/assets_key_test.go @@ -39,3 +39,52 @@ func TestKeyJSON(t *testing.T) { t.FailNow() } } + +func TestKeyGenUsingAssetType(t *testing.T) { + m := map[string]interface{}{ + "@assetType": "person", + "id": "31820792048", + } + + key, err := assets.NewKey(m) + if err != nil { + log.Println(err) + t.FailNow() + } + + expectedKey := assets.Key{ + "@assetType": "person", + "@key": "person:47061146-c642-51a1-844a-bf0b17cb5e19", + } + + if !reflect.DeepEqual(key, expectedKey) { + log.Println("these should be deeply equal") + log.Println(key) + log.Println(expectedKey) + t.FailNow() + } +} + +func TestKeyGenUsingKey(t *testing.T) { + m := map[string]interface{}{ + "@key": "person:47061146-c642-51a1-844a-bf0b17cb5e19", + } + + key, err := assets.NewKey(m) + if err != nil { + log.Println(err) + t.FailNow() + } + + expectedKey := assets.Key{ + "@assetType": "person", + "@key": "person:47061146-c642-51a1-844a-bf0b17cb5e19", + } + + if !reflect.DeepEqual(key, expectedKey) { + log.Println("these should be deeply equal") + log.Println(key) + log.Println(expectedKey) + t.FailNow() + } +}