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
14 changes: 11 additions & 3 deletions CloudinaryDotNet.IntegrationTests/AdminApi/BrowseResourcesTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,13 +61,22 @@ public void TestListByModerationUpdate()
Assert.True(approved.Resources.Count(r => r.PublicId == uploadResults[1].PublicId) == 0, approved.Error?.Message);
Assert.True(approved.Resources.Count(r => r.PublicId == uploadResults[2].PublicId) == 0, approved.Error?.Message);

Assert.True(approved.Resources.First().ModerationKind == MODERATION_MANUAL, approved.Error?.Message);
Assert.True(approved.Resources.First().ModerationStatus == ModerationStatus.Approved, approved.Error?.Message);

Assert.True(rejected.Resources.Count(r => r.PublicId == uploadResults[0].PublicId) == 0, rejected.Error?.Message);
Assert.True(rejected.Resources.Count(r => r.PublicId == uploadResults[1].PublicId) > 0, rejected.Error?.Message);
Assert.True(rejected.Resources.Count(r => r.PublicId == uploadResults[2].PublicId) == 0, rejected.Error?.Message);

Assert.True(rejected.Resources.First().ModerationKind == MODERATION_MANUAL, approved.Error?.Message);
Assert.True(rejected.Resources.First().ModerationStatus == ModerationStatus.Rejected, approved.Error?.Message);

Assert.True(pending.Resources.Count(r => r.PublicId == uploadResults[0].PublicId) == 0, pending.Error?.Message);
Assert.True(pending.Resources.Count(r => r.PublicId == uploadResults[1].PublicId) == 0, pending.Error?.Message);
Assert.True(pending.Resources.Count(r => r.PublicId == uploadResults[2].PublicId) > 0, pending.Error?.Message);

Assert.True(pending.Resources.First().ModerationKind == MODERATION_MANUAL, approved.Error?.Message);
Assert.True(pending.Resources.First().ModerationStatus == ModerationStatus.Pending, approved.Error?.Message);
}

[Test, Ignore("test needs to be re-written with mocking - it fails when there are many resources")]
Expand Down Expand Up @@ -224,8 +233,7 @@ public void TestListResourcesByPrefix()
Assert.IsTrue(
result
.Resources
.Where(res => (res.Context == null ? false : res.Context["custom"]["context"].ToString() == "abc"))
.Count() > 0, result.Error?.Message);
.Count(res => (res.Context == null ? false : res.Context["custom"]["context"].ToString() == "abc")) > 0, result.Error?.Message);
}

private async Task<string> UploadTestResource(string publicId)
Expand Down Expand Up @@ -300,7 +308,7 @@ public void TestListResourcesByPublicIds()

Assert.NotNull(result);
Assert.AreEqual(2, result.Resources.Length, "expected to find {0} but got {1}", new Object[] { publicIds.Aggregate((current, next) => current + ", " + next), result.Resources.Select(r => r.PublicId).Aggregate((current, next) => current + ", " + next) });
Assert.True(result.Resources.Where(r => r.Context != null).Count() == 2);
Assert.AreEqual(2, result.Resources.Count(r => r.Context != null));
}

[Test, RetryWithDelay]
Expand Down
15 changes: 14 additions & 1 deletion CloudinaryDotNet.IntegrationTests/SearchApi/SearchApiTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,15 @@ public void InitSearchTests()
{
m_singleResourcePublicId = publicId;
uploadParams.Context = new StringDictionary { { "some key", "some value" } };
uploadParams.Moderation = "manual";
}
m_publicIdsSorted[i] = publicId;
var r = m_cloudinary.Upload(uploadParams);
m_assetIds.Add(publicId, r.AssetId);
}

m_cloudinary.UpdateResource(m_singleResourcePublicId, ModerationStatus.Approved);

Array.Sort(m_publicIdsSorted);
m_expressionPublicId = $"public_id: {m_publicIdsSorted[0]}";
Thread.Sleep(IndexingWaitTime);
Expand All @@ -73,8 +76,18 @@ public void InitSearchTests()
public void TestSearchByAssetId(string key)
{
var result = m_cloudinary.Search().Expression($"{key}{m_assetIds[m_singleResourcePublicId]}").Execute();
Assert.AreEqual(1, result.Resources.Count());
Assert.AreEqual(1, result.Resources.Count);
Assert.AreEqual(m_singleResourcePublicId, result.Resources.First().PublicId);
}

[Test, RetryWithDelay]
public void TestSearchByModerationStatus()
{
var result = m_cloudinary.Search().Expression("moderation_status=approved").Execute();
Assert.GreaterOrEqual(result.Resources.Count, 1);
Assert.AreEqual(m_singleResourcePublicId, result.Resources.First().PublicId);
Assert.AreEqual(result.Resources.First().ModerationKind, "manual");
Assert.AreEqual(result.Resources.First().ModerationStatus, ModerationStatus.Approved);
}

[Test, RetryWithDelay]
Expand Down
12 changes: 12 additions & 0 deletions CloudinaryDotNet/Actions/AssetsManagement/GetResourceResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,18 @@ public Dictionary<string, string> Metadata
[DataMember(Name = "moderation")]
public List<Moderation> Moderation { get; set; }

/// <summary>
/// Gets or sets type of moderation service: "manual", "webpurify", "aws_rek", or "metascan".
/// </summary>
[DataMember(Name = "moderation_kind")]
public string ModerationKind { get; set; }

/// <summary>
/// Gets or sets moderation status of asset.
/// </summary>
[DataMember(Name = "moderation_status")]
public ModerationStatus? ModerationStatus { get; set; }

/// <summary>
/// Gets or sets a key-value pairs of context associated with the resource.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,6 @@ public string Created
[DataMember(Name = "backup")]
public bool? Backup { get; set; }

/// <summary>
/// Gets or sets the current moderation status and details if any.
/// </summary>
[DataMember(Name = "moderation_status")]
public ModerationStatus? ModerationStatus { get; set; }

/// <summary>
/// Gets or sets the key-value pairs of general textual context metadata attached to the media asset.
/// </summary>
Expand All @@ -86,4 +80,4 @@ public string Created
[DataMember(Name = "access_mode")]
public string AccessMode { get; set; }
}
}
}
6 changes: 0 additions & 6 deletions CloudinaryDotNet/Actions/AssetsUpload/RawUploadResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,6 @@ public class RawUploadResult : UploadResult
[DataMember(Name = "resource_type")]
public string ResourceType { get; set; }

/// <summary>
/// Gets or sets the array of data received from moderation service.
/// </summary>
[DataMember(Name = "moderation")]
public List<Moderation> Moderation { get; set; }

/// <summary>
/// Gets or sets date when the asset was uploaded.
/// </summary>
Expand Down
19 changes: 19 additions & 0 deletions CloudinaryDotNet/Actions/AssetsUpload/UploadResult.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace CloudinaryDotNet.Actions
{
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using Newtonsoft.Json.Linq;

Expand Down Expand Up @@ -108,6 +109,24 @@ public long Length
[DataMember(Name = "status")]
public string Status { get; set; }

/// <summary>
/// Gets or sets the array of data received from moderation service.
/// </summary>
[DataMember(Name = "moderation")]
public List<Moderation> Moderation { get; set; }

/// <summary>
/// Gets or sets type of moderation service: "manual", "webpurify", "aws_rek", or "metascan".
/// </summary>
[DataMember(Name = "moderation_kind")]
public string ModerationKind { get; set; }

/// <summary>
/// Gets or sets the current moderation status and details if any.
/// </summary>
[DataMember(Name = "moderation_status")]
public ModerationStatus? ModerationStatus { get; set; }

/// <summary>
/// Gets or sets upload hook execution status.
/// </summary>
Expand Down
12 changes: 12 additions & 0 deletions CloudinaryDotNet/Actions/Search/SearchResource.cs
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,18 @@ public long Length
[DataMember(Name = "status")]
public string Status { get; set; }

/// <summary>
/// Gets or sets type of moderation service: "manual", "webpurify", "aws_rek", or "metascan".
/// </summary>
[DataMember(Name = "moderation_kind")]
public string ModerationKind { get; set; }

/// <summary>
/// Gets or sets moderation status of asset.
/// </summary>
[DataMember(Name = "moderation_status")]
public ModerationStatus? ModerationStatus { get; set; }

/// <summary>
/// Gets or sets the authentication level currently set for the resource.
/// Possible values: public, authenticated.
Expand Down