CMDQueryStringSerialization icon indicating copy to clipboard operation
CMDQueryStringSerialization copied to clipboard

Support for nested collections

Open segiddins opened this issue 11 years ago • 1 comments

All three of the following tests dealing with nested collections fail, even under 0.3.0.

NSString *RKURLEncodedStringFromDictionaryWithEncoding(NSDictionary *dictionary, NSStringEncoding encoding)
{
    return [CMDQueryStringSerialization queryStringWithDictionary:dictionary];
}

- (void)testShouldEncodeDictionaries
{
    NSDictionary *subDictionary = [NSDictionary dictionaryWithObject:@"value1" forKey:@"key1"];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObject:subDictionary forKey:@"aDictionary"];
    NSString *expected = @"aDictionary[key1]=value1";
    NSString *actual = RKURLEncodedStringFromDictionaryWithEncoding(dictionary, NSUTF8StringEncoding);
    expect(actual).to.equal(expected);
}

- (void)testShouldEncodeArrayOfDictionaries
{
    NSDictionary *dictA = @{@"a": @"x", @"b": @"y"};
    NSDictionary *dictB = @{@"a": @"1", @"b": @"2"};

    NSArray *array = [NSArray arrayWithObjects:dictA, dictB, nil];
    NSDictionary *dictRoot = @{@"root" : array};

    NSString *expected = @"root[][a]=x&root[][b]=y&root[][a]=1&root[][b]=2";
    NSString *actual = RKURLEncodedStringFromDictionaryWithEncoding(dictRoot, NSUTF8StringEncoding);
    expect(actual).to.equal(expected);
}

- (void)testShouldEncodeRecursiveArrays
{
    NSArray *recursiveArray3 = [NSArray arrayWithObjects:@"item1", @"item2", nil];
    NSArray *recursiveArray2 = [NSArray arrayWithObject:recursiveArray3];
    NSArray *recursiveArray1 = [NSArray arrayWithObject:recursiveArray2];
    NSDictionary *dictionary = [NSDictionary dictionaryWithObject:recursiveArray1 forKey:@"recursiveArray"];
    NSString *expected = @"recursiveArray[][][]=item1&recursiveArray[][][]=item2";
    NSString *actual = RKURLEncodedStringFromDictionaryWithEncoding(dictionary, NSUTF8StringEncoding);
    expect(actual).to.equal(expected);
}

segiddins avatar Jul 16 '14 00:07 segiddins

@calebd feel free to close if you don't want to support this. RestKit is temporarily addressing this with https://github.com/RestKit/RestKit/pull/1973.

segiddins avatar Jul 16 '14 03:07 segiddins