Skip to content

Commit fd47eea

Browse files
committed
Address review comments
1 parent 0b2e134 commit fd47eea

27 files changed

+900
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
using CloudinaryDotNet.Actions;
7+
using NUnit.Framework;
8+
9+
namespace CloudinaryDotNet.IntegrationTests.AdminApi
10+
{
11+
public class BrowseResourcesWithStructuredMetadataTest : IntegrationTestBase
12+
{
13+
private const string MODERATION_MANUAL = "manual";
14+
private static string m_contextKey;
15+
private static string m_contextValue;
16+
private static string m_publicId;
17+
18+
public override void Initialize()
19+
{
20+
base.Initialize();
21+
22+
m_contextKey = $"{m_uniqueTestId}_context_key";
23+
m_contextValue = $"{m_uniqueTestId}_context_value";
24+
var context = $"{m_contextKey}={m_contextValue}";
25+
26+
CreateMetadataField("resource_with_metadata", p => p.DefaultValue = p.Label);
27+
var uploadResult = UploadTestImageResource(p =>
28+
{
29+
p.Context = new StringDictionary(context);
30+
p.Moderation = MODERATION_MANUAL;
31+
});
32+
33+
m_publicId = uploadResult.PublicId;
34+
}
35+
36+
[Test, RetryWithDelay]
37+
public async Task TestListResources()
38+
{
39+
var @params = new ListResourcesParams
40+
{
41+
};
42+
await AssertMetadataFlagBehavior(@params);
43+
}
44+
45+
[Test, RetryWithDelay]
46+
public async Task TestListResourcesByTag()
47+
{
48+
var @params = new ListResourcesByTagParams
49+
{
50+
Tag = m_apiTag,
51+
};
52+
await AssertMetadataFlagBehavior(@params);
53+
}
54+
55+
[Test, RetryWithDelay]
56+
public async Task TestListResourcesByModerationStatus()
57+
{
58+
var @params = new ListResourcesByModerationParams
59+
{
60+
ModerationStatus = ModerationStatus.Pending,
61+
ModerationKind = MODERATION_MANUAL,
62+
};
63+
await AssertMetadataFlagBehavior(@params);
64+
}
65+
66+
[Test, RetryWithDelay]
67+
public async Task TestListResourcesByPrefix()
68+
{
69+
var @params = new ListResourcesByPrefixParams
70+
{
71+
Type = "upload",
72+
Prefix = m_test_prefix,
73+
};
74+
await AssertMetadataFlagBehavior(@params);
75+
}
76+
77+
private async Task AssertMetadataFlagBehavior(ListResourcesParams @params)
78+
{
79+
@params.Metadata = true;
80+
CommonAssertions(await m_cloudinary.ListResourcesAsync(@params), true);
81+
82+
@params.Metadata = false;
83+
CommonAssertions(await m_cloudinary.ListResourcesAsync(@params), false);
84+
}
85+
86+
private void CommonAssertions(ListResourcesResult result, bool shouldHaveMetadata)
87+
{
88+
Assert.IsNotNull(result);
89+
Assert.IsNotNull(result.Resources, result.Error?.Message);
90+
91+
var resourceWithMetadata = result.Resources.FirstOrDefault(r => r.PublicId == m_publicId);
92+
Assert.IsNotNull(resourceWithMetadata);
93+
94+
if (shouldHaveMetadata)
95+
{
96+
Assert.IsNotNull(resourceWithMetadata.MetadataFields);
97+
}
98+
else
99+
{
100+
Assert.IsNull(resourceWithMetadata.MetadataFields);
101+
}
102+
}
103+
}
104+
}

CloudinaryDotNet.IntegrationTests/IntegrationTestBase.cs

+5-3
Original file line numberDiff line numberDiff line change
@@ -200,9 +200,9 @@ private void SaveEmbeddedToDisk(Assembly assembly, string sourcePath, string des
200200
stream.CopyTo(fileStream);
201201
}
202202
}
203-
catch (IOException e)
203+
catch (IOException)
204204
{
205-
205+
206206
}
207207
}
208208

@@ -308,11 +308,13 @@ protected Task<RawUploadResult> UploadTestRawResourceAsync(
308308
/// A convenient method for creating a structured metadata field before testing.
309309
/// </summary>
310310
/// <param name="fieldLabelSuffix">The distinguishable suffix.</param>
311+
/// <param name="setParamsAction">Action to set custom metadata field parameters.</param>
311312
/// <returns>The ExternalId of the structured metadata field.</returns>
312-
protected string CreateMetadataField(string fieldLabelSuffix)
313+
protected string CreateMetadataField(string fieldLabelSuffix, Action<StringMetadataFieldCreateParams> setParamsAction = null)
313314
{
314315
var metadataLabel = GetUniqueMetadataFieldLabel(fieldLabelSuffix);
315316
var metadataParameters = new StringMetadataFieldCreateParams(metadataLabel);
317+
setParamsAction?.Invoke(metadataParameters);
316318
var metadataResult = m_cloudinary.AddMetadataField(metadataParameters);
317319

318320
Assert.NotNull(metadataResult, metadataResult.Error?.Message);

CloudinaryDotNet.IntegrationTests/Provisioning/ProvisioningIntegrationTestBase.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ private string CreateUser(string userName, string userEmail)
7676
{
7777
var createUserParams = new CreateUserParams(userName, userEmail, m_userRole)
7878
{
79-
SubAccountIds = new List<string> {m_cloudId1}
79+
SubAccountIds = new List<string> { m_cloudId1 }
8080
};
8181
var createUserResult = AccountProvisioning.CreateUserAsync(createUserParams).GetAwaiter().GetResult();
82-
Assert.AreEqual(HttpStatusCode.OK, createUserResult.StatusCode);
82+
Assert.AreEqual(HttpStatusCode.OK, createUserResult.StatusCode, createUserResult?.Error?.Message);
8383
Assert.AreEqual(1, createUserResult.SubAccountIds.Length);
8484
Assert.AreEqual(m_cloudId1, createUserResult.SubAccountIds[0]);
8585

Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
1-
using System.Net;
1+
using System.Linq;
2+
using System.Net;
3+
using System.Threading.Tasks;
24
using CloudinaryDotNet.Actions;
35
using NUnit.Framework;
46

57
namespace CloudinaryDotNet.IntegrationTests.UploadApi
68
{
79
public class RenameMethodsTest : IntegrationTestBase
810
{
11+
private static string m_context;
12+
13+
public override void Initialize()
14+
{
15+
base.Initialize();
16+
17+
var contextKey = $"{m_uniqueTestId}_context_key";
18+
var contextValue = $"{m_uniqueTestId}_context_value";
19+
m_context = $"{contextKey}={contextValue}";
20+
}
21+
922
[Test, RetryWithDelay]
10-
public void TestRename()
23+
public async Task TestRename()
1124
{
1225
var toPublicId = GetUniquePublicId();
1326

@@ -16,29 +29,29 @@ public void TestRename()
1629
File = new FileDescription(m_testImagePath),
1730
Tags = m_apiTag
1831
};
19-
var uploadResult1 = m_cloudinary.Upload(uploadParams);
32+
var uploadResult1 = await m_cloudinary.UploadAsync(uploadParams);
2033

2134
uploadParams.File = new FileDescription(m_testIconPath);
22-
var uploadResult2 = m_cloudinary.Upload(uploadParams);
35+
var uploadResult2 = await m_cloudinary.UploadAsync(uploadParams);
2336

24-
var renameResult = m_cloudinary.Rename(uploadResult1.PublicId, toPublicId);
37+
var renameResult = await m_cloudinary.RenameAsync(uploadResult1.PublicId, toPublicId);
2538
Assert.AreEqual(HttpStatusCode.OK, renameResult.StatusCode, renameResult.Error?.Message);
2639

27-
var getResult = m_cloudinary.GetResource(toPublicId);
40+
var getResult = await m_cloudinary.GetResourceAsync(toPublicId);
2841
Assert.NotNull(getResult);
2942

30-
renameResult = m_cloudinary.Rename(uploadResult2.PublicId, toPublicId);
43+
renameResult = await m_cloudinary.RenameAsync(uploadResult2.PublicId, toPublicId);
3144
Assert.True(renameResult.StatusCode == HttpStatusCode.BadRequest, renameResult.Error?.Message);
3245

33-
m_cloudinary.Rename(uploadResult2.PublicId, toPublicId, true);
46+
await m_cloudinary.RenameAsync(uploadResult2.PublicId, toPublicId, true);
3447

35-
getResult = m_cloudinary.GetResource(toPublicId);
48+
getResult = await m_cloudinary.GetResourceAsync(toPublicId);
3649
Assert.NotNull(getResult);
3750
Assert.AreEqual(FILE_FORMAT_ICO, getResult.Format, getResult.Error?.Message);
3851
}
3952

4053
[Test, RetryWithDelay]
41-
public void TestRenameToType()
54+
public async Task TestRenameToType()
4255
{
4356
string publicId = GetUniquePublicId();
4457
string newPublicId = GetUniquePublicId();
@@ -51,18 +64,78 @@ public void TestRenameToType()
5164
Type = STORAGE_TYPE_UPLOAD
5265
};
5366

54-
var uploadResult = m_cloudinary.Upload(uploadParams);
67+
var uploadResult = await m_cloudinary.UploadAsync(uploadParams);
5568
Assert.AreEqual(uploadResult.StatusCode, HttpStatusCode.OK, uploadResult.Error?.Message);
5669

5770
RenameParams renameParams = new RenameParams(publicId, newPublicId)
5871
{
5972
ToType = STORAGE_TYPE_UPLOAD
6073
};
6174

62-
var renameResult = m_cloudinary.Rename(renameParams);
75+
var renameResult = await m_cloudinary.RenameAsync(renameParams);
6376
Assert.AreEqual(renameResult.StatusCode, HttpStatusCode.OK, renameResult.Error?.Message);
6477
Assert.AreEqual(renameResult.Type, STORAGE_TYPE_UPLOAD);
6578
Assert.AreEqual(renameResult.PublicId, newPublicId);
6679
}
80+
81+
[Test]
82+
public async Task TestRenameReturnsContext()
83+
{
84+
string publicId = GetUniquePublicId();
85+
string newPublicId = GetUniquePublicId();
86+
87+
await UploadImage(publicId);
88+
89+
var @params = new RenameParams(publicId, newPublicId)
90+
{
91+
Context = true
92+
};
93+
var renameResult = await m_cloudinary.RenameAsync(@params);
94+
Assert.IsTrue(renameResult.Context.HasValues);
95+
96+
@params.Context = false;
97+
renameResult = await m_cloudinary.RenameAsync(@params);
98+
Assert.IsNull(renameResult.Context);
99+
}
100+
101+
[Test]
102+
public async Task TestRenameReturnsMetadata()
103+
{
104+
string publicId = GetUniquePublicId();
105+
string newPublicId = GetUniquePublicId();
106+
107+
await UploadImage(publicId, true);
108+
109+
var @params = new RenameParams(publicId, newPublicId)
110+
{
111+
Metadata = true
112+
};
113+
var renameResult = await m_cloudinary.RenameAsync(@params);
114+
Assert.IsTrue(renameResult.MetadataFields.HasValues);
115+
116+
@params.Metadata = false;
117+
renameResult = await m_cloudinary.RenameAsync(@params);
118+
Assert.IsNull(renameResult.MetadataFields);
119+
}
120+
121+
private async Task UploadImage(string publicId, bool withMetadata = false)
122+
{
123+
if (withMetadata)
124+
{
125+
CreateMetadataField("rename_with_metadata", p => p.DefaultValue = p.Label);
126+
}
127+
128+
var uploadParams = new ImageUploadParams()
129+
{
130+
PublicId = publicId,
131+
File = new FileDescription(m_testImagePath),
132+
Tags = m_apiTag,
133+
Type = STORAGE_TYPE_UPLOAD,
134+
Context = new StringDictionary(m_context),
135+
};
136+
137+
var uploadResult = await m_cloudinary.UploadAsync(uploadParams);
138+
Assert.AreEqual(uploadResult.StatusCode, HttpStatusCode.OK, uploadResult.Error?.Message);
139+
}
67140
}
68141
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#if NETSTANDARD2_0
2+
using NUnit.Framework;
3+
4+
namespace CloudinaryDotNet.Tests
5+
{
6+
public class ApiSharedProxyTest
7+
{
8+
private ApiShared _apiShared;
9+
10+
[SetUp]
11+
public void SetUp()
12+
{
13+
_apiShared = new ApiShared();
14+
}
15+
16+
[Test]
17+
public void TestDoesNotRecreateClientOnEmptyProxy([Values(null, "")] string proxy)
18+
{
19+
var originalClient = _apiShared.Client;
20+
_apiShared.ApiProxy = proxy;
21+
22+
Assert.AreEqual(originalClient, _apiShared.Client);
23+
}
24+
25+
[Test]
26+
public void TestDoesNotRecreateClientOnTheSameProxy()
27+
{
28+
var proxy = "http://proxy.com";
29+
30+
_apiShared.ApiProxy = proxy;
31+
var originalClient = _apiShared.Client;
32+
33+
_apiShared.ApiProxy = proxy;
34+
35+
Assert.AreEqual(originalClient, _apiShared.Client);
36+
}
37+
38+
[Test]
39+
public void TestRecreatesClientWhenNewProxyIsSet()
40+
{
41+
var proxy = "http://proxy.com";
42+
var originalClient = _apiShared.Client;
43+
44+
_apiShared.ApiProxy = proxy;
45+
46+
Assert.AreNotEqual(originalClient, _apiShared.Client);
47+
}
48+
}
49+
}
50+
#endif

0 commit comments

Comments
 (0)