Skip to content

Commit e3f018e

Browse files
Add support for AdminContext
1 parent 6b59529 commit e3f018e

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed

api/admin/asset.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ type AssetResult struct {
9898
Usage interface{} `json:"usage"`
9999
OriginalFilename string `json:"original_filename"`
100100
Context AssetContextResult `json:"context"`
101+
AdminContext []AssetAdminContextResult `json:"admin_context"`
101102
Error api.ErrorResp `json:"error,omitempty"`
102103
Response interface{}
103104
}
@@ -194,6 +195,11 @@ func (m *AssetContextResult) UnmarshalJSON(data []byte) error {
194195
return nil
195196
}
196197

198+
type AssetAdminContextResult struct {
199+
Name string `json:"name"`
200+
Value interface{} `json:"value"`
201+
}
202+
197203
// UpdateAssetParams are the parameters for UpdateAsset.
198204
type UpdateAssetParams struct {
199205
AssetType api.AssetType `json:"-"`
@@ -215,6 +221,7 @@ type UpdateAssetParams struct {
215221
NotificationURL string `json:"notification_url,omitempty"`
216222
Tags api.CldAPIArray `json:"tags,omitempty,omitempty"`
217223
Context api.CldAPIMap `json:"context,omitempty"`
224+
AdminContext []api.AdminContext `json:"admin_context,omitempty"`
218225
FaceCoordinates api.Coordinates `json:"face_coordinates,omitempty"`
219226
CustomCoordinates api.Coordinates `json:"custom_coordinates,omitempty"`
220227
AccessControl interface{} `json:"access_control,omitempty"`

api/admin/asset_acceptance_test.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,47 @@ func getAssetTestCases() []AdminAPIAcceptanceTestCase {
185185
ExpectedCallCount: 1,
186186
})
187187

188+
assetWithAdminContext := admin.AssetResult{
189+
AssetID: "1",
190+
PublicID: cldtest.PublicID,
191+
AdminContext: []admin.AssetAdminContextResult{
192+
{
193+
Name: "key1",
194+
Value: []interface{}{"value1", "value2"},
195+
},
196+
},
197+
}
198+
responseJsonAdminContext, _ := json.Marshal(map[string]interface{}{
199+
"asset_id": "1",
200+
"public_id": cldtest.PublicID,
201+
"admin_context": []map[string]interface{}{
202+
{"name": "key1", "value": []string{"value1", "value2"}},
203+
},
204+
})
205+
206+
testCases = append(testCases, AdminAPIAcceptanceTestCase{
207+
Name: "Asset response with admin context",
208+
RequestTest: func(api *admin.API, ctx context.Context) (interface{}, error) {
209+
return api.Asset(ctx, admin.AssetParams{PublicID: cldtest.PublicID})
210+
},
211+
ResponseTest: func(response interface{}, t *testing.T) {
212+
v, ok := response.(*admin.AssetResult)
213+
if !ok {
214+
t.Errorf("Response should be type of AssetResult, %s given", reflect.TypeOf(response))
215+
}
216+
v.Response = nil // omit raw response comparison
217+
if !reflect.DeepEqual(*v, assetWithAdminContext) {
218+
t.Errorf("Response asset should be %+v\n%+v given", assetWithAdminContext, *v)
219+
}
220+
},
221+
ExpectedRequest: cldtest.ExpectedRequestParams{
222+
Method: "GET",
223+
URI: "/resources/image/upload/" + cldtest.PublicID,
224+
},
225+
JsonResponse: string(responseJsonAdminContext),
226+
ExpectedCallCount: 1,
227+
})
228+
188229
return testCases
189230
}
190231

api/api.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,26 @@ type Metadata map[string]interface{}
171171
// HookExecution is the result of a hook execution.
172172
type HookExecution map[string]interface{}
173173

174+
type AdminContextOp string
175+
176+
const (
177+
AdminContextOpAdd AdminContextOp = "+"
178+
AdminContextOpRemove AdminContextOp = "-"
179+
AdminContextOpReplace AdminContextOp = "="
180+
)
181+
182+
type AdminContextType string
183+
184+
const AdminContextTypeArray AdminContextType = "array"
185+
186+
// AdminContext is the Cloudinary admin contextual metadata payload
187+
type AdminContext struct {
188+
Name string `json:"name"`
189+
Value []string `json:"value"`
190+
Type AdminContextType `json:"type"`
191+
Op AdminContextOp `json:"op"`
192+
}
193+
174194
// AutoTranscription represents the auto transcription params.
175195
type AutoTranscription struct {
176196
Translate []string `json:"translate,omitempty"`

0 commit comments

Comments
 (0)