From 20d838491a0e32b5e6f139d1938e8e69c02a6b6c Mon Sep 17 00:00:00 2001 From: Marat Alekperov Date: Fri, 9 Jan 2026 10:55:36 +0000 Subject: [PATCH] Fix original request propagation bug. Add test for checking request id when connecting via fallback hosts. `appendQueryItem:` adds request_id each time, so to avoid multiple additions I've replaced it with `setQueryItemNamed:`. --- Source/ARTNSMutableURLRequest+ARTUtils.m | 21 +++++++-- Source/ARTRest.m | 4 +- .../Ably/ARTNSMutableURLRequest+ARTUtils.h | 2 +- .../Test Utilities/TestUtilities.swift | 30 ++++++++++++- Test/AblyTests/Tests/RestClientTests.swift | 45 ++++++++----------- 5 files changed, 67 insertions(+), 35 deletions(-) diff --git a/Source/ARTNSMutableURLRequest+ARTUtils.m b/Source/ARTNSMutableURLRequest+ARTUtils.m index cfe381ed6..7a0770511 100644 --- a/Source/ARTNSMutableURLRequest+ARTUtils.m +++ b/Source/ARTNSMutableURLRequest+ARTUtils.m @@ -2,14 +2,27 @@ @implementation NSMutableURLRequest (ARTUtils) -- (void)appendQueryItem:(NSURLQueryItem *)item { +- (void)setQueryItemNamed:(NSString *)name withValue:(NSString *)value { NSURLComponents *components = [NSURLComponents componentsWithURL:self.URL resolvingAgainstBaseURL:YES]; - if(components == nil) { + if (components == nil) { return; } - NSMutableArray *mutableQueryItems = [NSMutableArray arrayWithArray:components.queryItems]; - [mutableQueryItems addObject:item]; + NSMutableArray *mutableQueryItems = [NSMutableArray arrayWithArray:components.queryItems ?: @[]]; + + // Remove existing query item with the same name if it exists + NSMutableIndexSet *indicesToRemove = [NSMutableIndexSet indexSet]; + for (NSUInteger i = 0; i < mutableQueryItems.count; i++) { + if ([mutableQueryItems[i].name isEqualToString:name]) { + [indicesToRemove addIndex:i]; + } + } + [mutableQueryItems removeObjectsAtIndexes:indicesToRemove]; + + // Add the new query item + NSURLQueryItem *newItem = [NSURLQueryItem queryItemWithName:name value:value]; + [mutableQueryItems addObject:newItem]; + components.queryItems = mutableQueryItems; NSURL *modifiedURL = components.URL; diff --git a/Source/ARTRest.m b/Source/ARTRest.m index b17792a3e..2e2e14325 100644 --- a/Source/ARTRest.m +++ b/Source/ARTRest.m @@ -368,7 +368,7 @@ - (NSString *)agentIdentifierWithWrapperSDKAgents:(nullable NSDictionary String { return self.replacingOccurrences(of: value, with: string, options: NSString.CompareOptions.literal, range: nil) } - + + func substring(after: String) -> String? { + guard let range = self.range(of: after) else { + return nil + } + let startIndex = range.upperBound + return String(self[startIndex...]) + } + + func substring(before: String) -> String? { + guard let range = self.range(of: before) else { + return nil + } + let endIndex = range.lowerBound + return String(self[.. String? { + guard let startRange = self.range(of: between) else { + return nil + } + let searchStartIndex = startRange.upperBound + let remainingString = String(self[searchStartIndex...]) + guard let endRange = remainingString.range(of: andString) else { + return nil + } + let endIndex = endRange.lowerBound + return String(remainingString[..