From fa2dcf56cdb27a3240b66c1948fd5dd4aa8ab5df Mon Sep 17 00:00:00 2001 From: Alex Deem Date: Sun, 9 Jun 2024 22:17:42 +1000 Subject: [PATCH] Sort variables provided as a dictionary for stability --- Sources/ScreamURITemplate/VariableValue.swift | 2 +- Tests/ScreamURITemplateTests/TestModels.swift | 13 +------------ Tests/ScreamURITemplateTests/Tests.swift | 9 +-------- 3 files changed, 3 insertions(+), 21 deletions(-) diff --git a/Sources/ScreamURITemplate/VariableValue.swift b/Sources/ScreamURITemplate/VariableValue.swift index dd94079..a2f05b6 100644 --- a/Sources/ScreamURITemplate/VariableValue.swift +++ b/Sources/ScreamURITemplate/VariableValue.swift @@ -50,7 +50,7 @@ extension KeyValuePairs: VariableValue { extension [String: StringVariableValue]: VariableValue { public func asTypedVariableValue() -> TypedVariableValue? { - .associativeArray(map { ($0, $1.asStringVariableValue()) }) + .associativeArray(map { ($0, $1.asStringVariableValue()) }.sorted { $0.0 < $1.0 }) } } diff --git a/Tests/ScreamURITemplateTests/TestModels.swift b/Tests/ScreamURITemplateTests/TestModels.swift index 7b7feab..b3ac1d2 100644 --- a/Tests/ScreamURITemplateTests/TestModels.swift +++ b/Tests/ScreamURITemplateTests/TestModels.swift @@ -84,18 +84,7 @@ extension TestCase { let expansionsData = data[1] switch expansionsData { case let .string(string): - // HACK: ensure the tests support alternate ordering for dictionary explode tests - // A PR has been raised to add support for the alternate ordering https://github.com/uri-templates/uritemplate-test/pull/58 - switch string { - case "key1,val1%2F,key2,val2%2F": - acceptableExpansions = [string, "key2,val2%2F,key1,val1%2F"] - case "#key1,val1%2F,key2,val2%2F": - acceptableExpansions = [string, "#key2,val2%2F,key1,val1%2F"] - case "key1,val1%252F,key2,val2%252F": - acceptableExpansions = [string, "key2,val2%252F,key1,val1%252F"] - default: - acceptableExpansions = [string] - } + acceptableExpansions = [string] shouldFail = false case let .array(array): acceptableExpansions = array.compactMap { value in diff --git a/Tests/ScreamURITemplateTests/Tests.swift b/Tests/ScreamURITemplateTests/Tests.swift index 2c093d0..681c762 100644 --- a/Tests/ScreamURITemplateTests/Tests.swift +++ b/Tests/ScreamURITemplateTests/Tests.swift @@ -72,14 +72,7 @@ class Tests: XCTestCase { ] as KeyValuePairs, ] let urlString = try template.process(variables: variables) - XCTAssertTrue([ - "https://api.example.com/path?a=A&b=42&c=true&b2=42&a2=A&c2=true", - "https://api.example.com/path?a=A&c=true&b=42&b2=42&a2=A&c2=true", - "https://api.example.com/path?b=42&a=A&c=true&b2=42&a2=A&c2=true", - "https://api.example.com/path?b=42&c=true&a=A&b2=42&a2=A&c2=true", - "https://api.example.com/path?c=true&a=A&b=42&b2=42&a2=A&c2=true", - "https://api.example.com/path?c=true&b=42&a=A&b2=42&a2=A&c2=true", - ].contains(urlString)) + XCTAssertEqual("https://api.example.com/path?a=A&b=42&c=true&b2=42&a2=A&c2=true", urlString) } func testUUIDVariable() throws {