TM-SGNL-iOS/SignalServiceKit/tests/Network/OWSURLBuilderUtilTest.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

220 lines
6.9 KiB
Swift

//
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
import XCTest
@testable import SignalServiceKit
class OWSURLBuilderUtilTest: XCTestCase {
func test_buildUrl() {
// No base url
XCTAssertEqual(
URL(string: "https://e.f.com")!,
OWSURLBuilderUtil.joinUrl(
urlString: "https://e.f.com",
baseUrl: nil
)!
)
XCTAssertEqual(
URL(string: "https://e.f.com/")!,
OWSURLBuilderUtil.joinUrl(
urlString: "https://e.f.com/",
baseUrl: nil
)!
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "https://e.f.com/a/b/c",
baseUrl: nil
)!
)
// * baseUrl with just host, no trailing /.
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c",
baseUrl: URL(string: "https://e.f.com")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c/")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c/",
baseUrl: URL(string: "https://e.f.com")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "/a/b/c",
baseUrl: URL(string: "https://e.f.com")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com")
)
)
// * baseUrl with host & trailing /.
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c",
baseUrl: URL(string: "https://e.f.com/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c/")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c/",
baseUrl: URL(string: "https://e.f.com/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "/a/b/c",
baseUrl: URL(string: "https://e.f.com/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com/")
)
)
// * baseUrl with host and path, no trailing /.
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c",
baseUrl: URL(string: "https://e.f.com/x")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c/")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c/",
baseUrl: URL(string: "https://e.f.com/x")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "/a/b/c",
baseUrl: URL(string: "https://e.f.com/x")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com/x")
)
)
// * baseUrl with host and path & trailing /.
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c/")!,
OWSURLBuilderUtil.joinUrl(
urlString: "a/b/c/",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "/a/b/c",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
// Querystring
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c?i=j&k=l")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c?i=j&k=l",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c?i=j&k=l")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c?i=j&k=l",
baseUrl: URL(string: "https://e.f.com/x/?m=m")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com/x/?m=m")
)
)
// Fragment
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c#ooo")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c#ooo",
baseUrl: URL(string: "https://e.f.com/x/")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c#ooo")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c#ooo",
baseUrl: URL(string: "https://e.f.com/x/#ppp")
)
)
XCTAssertEqual(
URL(string: "https://e.f.com/x/a/b/c")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://g.h.com/a/b/c",
baseUrl: URL(string: "https://e.f.com/x/#ppp")
)
)
// Override scheme
XCTAssertEqual(
URL(string: "wss://e.f.com/a/b/c?d=e#f")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://e.f.com/a/b/c?d=e#f",
overrideUrlScheme: "wss",
baseUrl: nil
)
)
XCTAssertEqual(
URL(string: "wss://g.h.com/x/a/b/c?d=e#f")!,
OWSURLBuilderUtil.joinUrl(
urlString: "http://e.f.com/a/b/c?d=e#f",
overrideUrlScheme: "wss",
baseUrl: URL(string: "https://g.h.com/x")!
)
)
}
}