diff --git a/Contentstack/AssetLibrary.h b/Contentstack/AssetLibrary.h index efcbfb4..eaa7d81 100644 --- a/Contentstack/AssetLibrary.h +++ b/Contentstack/AssetLibrary.h @@ -230,6 +230,24 @@ typedef NS_ENUM(NSUInteger, OrderBy) { */ - (void)fetchAll:(void (^) (ResponseType type,NSArray * BUILT_NULLABLE_P result,NSError * BUILT_NULLABLE_P error))completionBlock; + +/** + This method fetches assets using other fields than UID.. + + //Obj-C + [assetLib where:(NSString *)field equalTo:(NSObject *)value]; + + //Swift + assetLib.where("fieldName","value"); + + This allows filtering assets by specifying the field name and the value to match. + @param field The name of the field to filter by. + @param value The value that the field should match. + */ +- (void)where:(NSString *)field equalTo:(NSObject *)value ; + +- (NSDictionary*)getPostParamDictionary; + @end BUILT_ASSUME_NONNULL_END diff --git a/Contentstack/AssetLibrary.m b/Contentstack/AssetLibrary.m index 990ba5e..4a861d0 100644 --- a/Contentstack/AssetLibrary.m +++ b/Contentstack/AssetLibrary.m @@ -156,6 +156,25 @@ - (void)cancelRequest { [self.requestOperation cancel]; } } +// MARK: - Where Query - +- (NSDictionary*) getPostParamDictionary { + return [self.postParamDictionary copy]; +} + +- (void)where:(NSString *)field equalTo:(NSObject *)value { + if (field.length == 0 || !value) { + NSLog(@"Field or value cannot be empty"); + return; + } + NSMutableDictionary *queryDict = [NSMutableDictionary dictionary]; + NSDictionary *existingQuery = self.postParamDictionary[@"query"]; + // If an existing query exists, merge it + if (existingQuery) { + [queryDict addEntriesFromDictionary:existingQuery]; + } + queryDict[field] = value; + [self.postParamDictionary setObject:queryDict forKey:@"query"]; +} @end diff --git a/ContentstackTest/ContentstackTest.m b/ContentstackTest/ContentstackTest.m index bd85fe9..08a5c32 100644 --- a/ContentstackTest/ContentstackTest.m +++ b/ContentstackTest/ContentstackTest.m @@ -203,6 +203,88 @@ - (void)test04FetchAssets { [self waitForRequest]; } +- (void)testFetchAssetByQuery01{ + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By where method"]; + AssetLibrary* assets = [csStack assetLibrary]; + [assets where:@"title" equalTo:@"image1"]; + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + if (error) { + XCTFail(@"~ ERR: %@, Message = %@", error.userInfo, error.description); + } else { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + } + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByValidFileSize02 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By valid file size"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(53986)]; // Valid file size + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByNonExistentFileSize03 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By non-existent file size"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(9999999)]; // Non-existent file size + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results, but got some."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByNonExistentTitle04 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By non-existent title"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"title" equalTo:@"non-existent-title.png"]; // Non-existent title + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results, but got some."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByMultipleConditions05 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By multiple conditions"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"file_size" equalTo:@(6884)]; // Valid file size + [assets where:@"title" equalTo:@"image4"]; // Valid title + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssert(result.count > 0, @"Expected results, but got none."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} + +- (void)testFetchAssetsByInvalidFieldName06 { + XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Asset By invalid field name"]; + AssetLibrary *assets = [csStack assetLibrary]; + [assets where:@"invalid_field" equalTo:@"value"]; // Invalid field name + [assets fetchAll:^(ResponseType type, NSArray *result, NSError *error) { + XCTAssert(type == NETWORK, @"Pass"); + XCTAssertNil(error, @"Expected no error, but got: %@", error.userInfo); + XCTAssertEqual(result.count, 0, @"Expected no results."); + [expectation fulfill]; + }]; + [self waitForRequest]; +} - (void)testGetHeader { XCTestExpectation *expectation = [self expectationWithDescription:@"Fetch Set Header"];