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
8 changes: 4 additions & 4 deletions .talismanrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,15 @@ fileignoreconfig:
ignore_detectors:
- filecontent
- filename: Contentstack.Core/Internals/HttpRequestHandler.cs
checksum: 94288e483056f41ff3a4c2ab652c3ce9ecb53dc0b9d4029456b34baed4f34891
checksum: 62053e1b8772f44db054efc504d5d57f28fb7962c81021325854d478f570de09
- filename: Contentstack.Core/Models/Entry.cs
checksum: 78a09b03b9fd6aefd0251353b2d8c70962bdfced16a6e1e28d10dc9af43da244
- filename: Contentstack.Core/ContentstackClient.cs
checksum: 687dc0a5f20037509731cfe540dcec9c3cc2b6cf50373cd183ece4f3249dc88e
- filename: Contentstack.Core/Models/AssetLibrary.cs
checksum: 7e05fd0bbb43b15e6b7f387d746cc64d709e17e0e8e26a7495a99025077ff507
checksum: 0c67f8bb3b7ffdb9b04cd38ae096904b53d6d4372e86c91c1f935e36b6b0ce56
- filename: Contentstack.Core.Tests/AssetTest.cs
checksum: 9e197065aa6ea46af795a8ddb9d652a4972d9d4b4bfc7b1772d304d848f1c3e1
- filename: Contentstack.Core/Models/Asset.cs
checksum: d192718723e6cb2aa8f08f873d3a7ea7268c89cc15da3bdeea4c16fd304c410e
- filename: Contentstack.Core/Models/Query.cs
Expand All @@ -20,7 +22,5 @@ fileignoreconfig:
checksum: 53ba4ce874c4d2362ad00deb23f5a6ec219318860352f997b945e9161a580651
- filename: Contentstack.Core.Tests/ContentstackClientTest.cs
checksum: b63897181a8cb5993d1305248cfc3e711c4039b5677b6c1e4e2a639e4ecb391b
- filename: Contentstack.Core.Tests/AssetTest.cs
checksum: 3e7bf50c7223c458561f0217484d5e70cf3770490c569e0a7083b0a12af9ab86
- filename: Contentstack.Core.Tests/RegionHandlerTest.cs
checksum: 69899138754908e156aa477d775d12fd6b3fefc1a6c2afec22cb409bd6e6446c
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
### Version: 2.25.0
#### Date: Jan-07-2025

##### Feat:
- AssetLibrary
- Added new `Where` method for simple key-value pair queries
- Enhanced `Query` method to support multiple calls with intelligent merging
- Improved query handling with better null safety and error handling

### Version: 2.24.0
#### Date: Sep-29-2025

Expand Down
290 changes: 290 additions & 0 deletions Contentstack.Core.Tests/AssetTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -661,5 +661,295 @@ public async Task AssetTags_CaseSensitivityVerification_ShouldTestCaseBehavior_T
}
}
}

[Fact]
public void Query_MultipleCalls_ShouldMergeQueries_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject firstQuery = new JObject
{
{ "filename", "test1.png" },
{ "content_type", "image/png" }
};
JObject secondQuery = new JObject
{
{ "file_size", 1024 },
{ "tags", new JArray { "test", "image" } }
};

// Act
var result = assetLibrary.Query(firstQuery).Query(secondQuery);

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
// The method should not throw an exception when called multiple times
}

[Fact]
public void Query_SingleCall_ShouldWorkAsBefore_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject queryObject = new JObject
{
{ "filename", "test.png" }
};

// Act
var result = assetLibrary.Query(queryObject);

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Query_WithEmptyObject_ShouldNotThrowException_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject emptyQuery = new JObject();

// Act & Assert
var result = assetLibrary.Query(emptyQuery);
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Query_WithNullValues_ShouldHandleGracefully_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject queryWithNulls = new JObject
{
{ "filename", "test.png" },
{ "null_field", null }
};

// Act & Assert
var result = assetLibrary.Query(queryWithNulls);
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Query_ChainedWithOtherMethods_ShouldWork_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject queryObject = new JObject
{
{ "filename", "test.png" }
};

// Act
var result = assetLibrary
.Query(queryObject)
.Limit(10)
.Skip(0)
.IncludeMetadata();

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Query_MultipleCallsWithSameKeys_ShouldMergeValues_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject firstQuery = new JObject
{
{ "tags", new JArray { "tag1", "tag2" } }
};
JObject secondQuery = new JObject
{
{ "tags", new JArray { "tag3", "tag4" } }
};

// Act
var result = assetLibrary.Query(firstQuery).Query(secondQuery);

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
// The method should handle merging arrays without throwing exceptions
}

[Fact]
public void Query_WithComplexNestedObjects_ShouldMergeCorrectly_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject firstQuery = new JObject
{
{ "metadata", new JObject
{
{ "author", "John Doe" },
{ "version", 1 }
}
}
};
JObject secondQuery = new JObject
{
{ "metadata", new JObject
{
{ "department", "IT" }
}
},
{ "filename", "test.png" }
};

// Act
var result = assetLibrary.Query(firstQuery).Query(secondQuery);

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_SingleCall_ShouldAddKeyValuePair_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
string key = "filename";
string value = "test.png";

// Act
var result = assetLibrary.Where(key, value);

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_MultipleCalls_ShouldAddMultipleKeyValuePairs_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act
var result = assetLibrary
.Where("filename", "test.png")
.Where("content_type", "image/png")
.Where("file_size", "1024");

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_WithEmptyStrings_ShouldHandleGracefully_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act & Assert
var result = assetLibrary.Where("", "");
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_WithNullKey_ShouldHandleGracefully_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act & Assert
var result = assetLibrary.Where(null, "value");
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_WithNullValue_ShouldHandleGracefully_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act & Assert
var result = assetLibrary.Where("key", null);
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_ChainedWithOtherMethods_ShouldWork_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act
var result = assetLibrary
.Where("filename", "test.png")
.Limit(10)
.Skip(0)
.IncludeMetadata();

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_WithQueryMethod_ShouldWorkTogether_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();
JObject queryObject = new JObject
{
{ "content_type", "image/png" }
};

// Act
var result = assetLibrary
.Query(queryObject)
.Where("filename", "test.png")
.Where("file_size", "1024");

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_OverwritesExistingKey_ShouldReplaceValue_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act
var result = assetLibrary
.Where("filename", "original.png")
.Where("filename", "updated.png");

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}

[Fact]
public void Where_WithSpecialCharacters_ShouldHandleCorrectly_Test()
{
// Arrange
AssetLibrary assetLibrary = client.AssetLibrary();

// Act
var result = assetLibrary
.Where("file_name", "test-file_123.png")
.Where("description", "File with special chars: @#$%");

// Assert
Assert.NotNull(result);
Assert.IsType<AssetLibrary>(result);
}
}
}
Loading
Loading