Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions api/admin/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ type AssetResult struct {
Usage interface{} `json:"usage"`
OriginalFilename string `json:"original_filename"`
Context AssetContextResult `json:"context"`
AdminContext []AssetAdminContextResult `json:"admin_context"`
Error api.ErrorResp `json:"error,omitempty"`
Response interface{}
}
Expand Down Expand Up @@ -194,6 +195,11 @@ func (m *AssetContextResult) UnmarshalJSON(data []byte) error {
return nil
}

type AssetAdminContextResult struct {
Name string `json:"name"`
Value interface{} `json:"value"`
}

// UpdateAssetParams are the parameters for UpdateAsset.
type UpdateAssetParams struct {
AssetType api.AssetType `json:"-"`
Expand All @@ -215,6 +221,7 @@ type UpdateAssetParams struct {
NotificationURL string `json:"notification_url,omitempty"`
Tags api.CldAPIArray `json:"tags,omitempty,omitempty"`
Context api.CldAPIMap `json:"context,omitempty"`
AdminContext []api.AdminContext `json:"admin_context,omitempty"`
FaceCoordinates api.Coordinates `json:"face_coordinates,omitempty"`
CustomCoordinates api.Coordinates `json:"custom_coordinates,omitempty"`
AccessControl interface{} `json:"access_control,omitempty"`
Expand Down
41 changes: 41 additions & 0 deletions api/admin/asset_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,47 @@ func getAssetTestCases() []AdminAPIAcceptanceTestCase {
ExpectedCallCount: 1,
})

assetWithAdminContext := admin.AssetResult{
AssetID: "1",
PublicID: cldtest.PublicID,
AdminContext: []admin.AssetAdminContextResult{
{
Name: "key1",
Value: []interface{}{"value1", "value2"},
},
},
}
responseJsonAdminContext, _ := json.Marshal(map[string]interface{}{
"asset_id": "1",
"public_id": cldtest.PublicID,
"admin_context": []map[string]interface{}{
{"name": "key1", "value": []string{"value1", "value2"}},
},
})

testCases = append(testCases, AdminAPIAcceptanceTestCase{
Name: "Asset response with admin context",
RequestTest: func(api *admin.API, ctx context.Context) (interface{}, error) {
return api.Asset(ctx, admin.AssetParams{PublicID: cldtest.PublicID})
},
ResponseTest: func(response interface{}, t *testing.T) {
v, ok := response.(*admin.AssetResult)
if !ok {
t.Errorf("Response should be type of AssetResult, %s given", reflect.TypeOf(response))
}
v.Response = nil // omit raw response comparison
if !reflect.DeepEqual(*v, assetWithAdminContext) {
t.Errorf("Response asset should be %+v\n%+v given", assetWithAdminContext, *v)
}
},
ExpectedRequest: cldtest.ExpectedRequestParams{
Method: "GET",
URI: "/resources/image/upload/" + cldtest.PublicID,
},
JsonResponse: string(responseJsonAdminContext),
ExpectedCallCount: 1,
})

return testCases
}

Expand Down
20 changes: 20 additions & 0 deletions api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,26 @@ type Metadata map[string]interface{}
// HookExecution is the result of a hook execution.
type HookExecution map[string]interface{}

type AdminContextOp string

const (
AdminContextOpAdd AdminContextOp = "+"
AdminContextOpRemove AdminContextOp = "-"
AdminContextOpReplace AdminContextOp = "="
)

type AdminContextType string

const AdminContextTypeArray AdminContextType = "array"

// AdminContext is the Cloudinary admin contextual metadata payload
type AdminContext struct {
Name string `json:"name"`
Value []string `json:"value"`
Type AdminContextType `json:"type"`
Op AdminContextOp `json:"op"`
}

// AutoTranscription represents the auto transcription params.
type AutoTranscription struct {
Translate []string `json:"translate,omitempty"`
Expand Down