From dca139f26b3474d1bb6893c5ef3aefa50fc98d69 Mon Sep 17 00:00:00 2001 From: alephao <7674479+alephao@users.noreply.github.com> Date: Sat, 14 Sep 2024 15:32:20 -0300 Subject: [PATCH] tests: add tests --- Makefile | 2 +- Package.swift | 9 +- .../HtmxRequestHeadersTests.swift | 65 +++++++++ .../HtmxResponseHeadersTests.swift | 123 ++++++++++++++++++ .../HxTriggerHeaderTests.swift | 24 ++++ 5 files changed, 221 insertions(+), 2 deletions(-) create mode 100644 Tests/HTTPTypesHtmxTests/HtmxRequestHeadersTests.swift create mode 100644 Tests/HTTPTypesHtmxTests/HtmxResponseHeadersTests.swift create mode 100644 Tests/HTTPTypesHtmxTests/HxTriggerHeaderTests.swift diff --git a/Makefile b/Makefile index 9de1f3d..c6fbe77 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ fmt: - swift-format format -i -r -p Sources Package.swift Examples/Sources Examples/Package.swift + swift-format format -i -r -p Sources Tests Package.swift Examples/Sources Examples/Package.swift .PHONY: fmt diff --git a/Package.swift b/Package.swift index bc57ba0..4281ac4 100644 --- a/Package.swift +++ b/Package.swift @@ -16,6 +16,13 @@ let package = Package( dependencies: [ .product(name: "HTTPTypes", package: "swift-http-types") ] - ) + ), + .testTarget( + name: "HTTPTypesHtmxTests", + dependencies: [ + "HTTPTypesHtmx", + .product(name: "HTTPTypes", package: "swift-http-types"), + ] + ), ] ) diff --git a/Tests/HTTPTypesHtmxTests/HtmxRequestHeadersTests.swift b/Tests/HTTPTypesHtmxTests/HtmxRequestHeadersTests.swift new file mode 100644 index 0000000..edea974 --- /dev/null +++ b/Tests/HTTPTypesHtmxTests/HtmxRequestHeadersTests.swift @@ -0,0 +1,65 @@ +import HTTPTypes +import HTTPTypesHtmx +import XCTest + +final class RequestHeadersTests: XCTestCase { + + func test_HTTPFieldNames() { + XCTAssertEqual(HTTPField.Name.hxBoosted.description, "HX-Boosted") + XCTAssertEqual(HTTPField.Name.hxCurrentURL.description, "HX-Current-URL") + XCTAssertEqual(HTTPField.Name.hxHistoryRestoreRequest.description, "HX-History-Restore-Request") + XCTAssertEqual(HTTPField.Name.hxPrompt.description, "HX-Prompt") + XCTAssertEqual(HTTPField.Name.hxRequest.description, "HX-Request") + XCTAssertEqual(HTTPField.Name.hxTarget.description, "HX-Target") + XCTAssertEqual(HTTPField.Name.hxTriggerName.description, "HX-Trigger-Name") + } + + func test_HTTPField_Initializers() { + XCTAssertEqual(HTTPField.hxBoosted().description, "HX-Boosted: true") + XCTAssertEqual( + HTTPField.hxCurrentURL("https://example.com").description, + "HX-Current-URL: https://example.com" + ) + XCTAssertEqual( + HTTPField.hxHistoryRestoreRequest().description, + "HX-History-Restore-Request: true" + ) + XCTAssertEqual(HTTPField.hxPrompt("yes").description, "HX-Prompt: yes") + XCTAssertEqual(HTTPField.hxRequest().description, "HX-Request: true") + XCTAssertEqual(HTTPField.hxTarget("myDiv").description, "HX-Target: myDiv") + XCTAssertEqual( + HTTPField.hxTriggerName("myTriggerName").description, + "HX-Trigger-Name: myTriggerName" + ) + } + + func test_HTTPFieldsGetters_EmptyValues() { + let headers = HTTPFields() + XCTAssertFalse(headers.hxBoosted) + XCTAssertNil(headers.hxCurrentURL) + XCTAssertFalse(headers.hxHistoryRestoreRequest) + XCTAssertNil(headers.hxPrompt) + XCTAssertFalse(headers.hxRequest) + XCTAssertNil(headers.hxTarget) + XCTAssertNil(headers.hxTriggerName) + } + + func test_HTTPFieldsGetters_NonEmptyValues() { + let headers = HTTPFields([ + .hxBoosted(), + .hxCurrentURL("https://example.com"), + .hxHistoryRestoreRequest(), + .hxPrompt("yes"), + .hxRequest(), + .hxTarget("myDiv"), + .hxTriggerName("myTriggerName"), + ]) + XCTAssertTrue(headers.hxBoosted) + XCTAssertEqual(headers.hxCurrentURL, "https://example.com") + XCTAssertTrue(headers.hxHistoryRestoreRequest) + XCTAssertEqual(headers.hxPrompt, "yes") + XCTAssertTrue(headers.hxRequest) + XCTAssertEqual(headers.hxTarget, "myDiv") + XCTAssertEqual(headers.hxTriggerName, "myTriggerName") + } +} diff --git a/Tests/HTTPTypesHtmxTests/HtmxResponseHeadersTests.swift b/Tests/HTTPTypesHtmxTests/HtmxResponseHeadersTests.swift new file mode 100644 index 0000000..436cbbd --- /dev/null +++ b/Tests/HTTPTypesHtmxTests/HtmxResponseHeadersTests.swift @@ -0,0 +1,123 @@ +import HTTPTypes +import HTTPTypesHtmx +import XCTest + +final class ResponseHeadersTests: XCTestCase { + func test_HTTPFieldNames() { + XCTAssertEqual(HTTPField.Name.hxLocation.description, "HX-Location") + XCTAssertEqual(HTTPField.Name.hxPushUrl.description, "HX-Push-Url") + XCTAssertEqual(HTTPField.Name.hxRedirect.description, "HX-Redirect") + XCTAssertEqual(HTTPField.Name.hxRefresh.description, "HX-Refresh") + XCTAssertEqual(HTTPField.Name.hxReplaceUrl.description, "HX-Replace-Url") + XCTAssertEqual(HTTPField.Name.hxReswap.description, "HX-Reswap") + XCTAssertEqual(HTTPField.Name.hxRetarget.description, "HX-Retarget") + XCTAssertEqual(HTTPField.Name.hxReselect.description, "HX-Reselect") + XCTAssertEqual(HTTPField.Name.hxTriggerAfterSettle.description, "HX-Trigger-After-Settle") + XCTAssertEqual(HTTPField.Name.hxTriggerAfterSwap.description, "HX-Trigger-After-Swap") + } + + func test_HTTPField_Initializers() { + XCTAssertEqual(HTTPField.hxLocation("/example").description, "HX-Location: /example") + XCTAssertEqual(HTTPField.hxPushUrl(.false).description, "HX-Push-Url: false") + XCTAssertEqual(HTTPField.hxPushUrl(.url("/example")).description, "HX-Push-Url: /example") + XCTAssertEqual(HTTPField.hxRedirect("/example").description, "HX-Redirect: /example") + XCTAssertEqual(HTTPField.hxRefresh().description, "HX-Refresh: true") + XCTAssertEqual(HTTPField.hxReplaceUrl(.false).description, "HX-Replace-Url: false") + XCTAssertEqual( + HTTPField.hxReplaceUrl(.url("https://example.com")).description, + "HX-Replace-Url: https://example.com" + ) + XCTAssertEqual(HTTPField.hxReswap(.innerHTML).description, "HX-Reswap: innerHTML") + XCTAssertEqual(HTTPField.hxReswap(.outerHTML).description, "HX-Reswap: outerHTML") + XCTAssertEqual(HTTPField.hxReswap(.beforebegin).description, "HX-Reswap: beforebegin") + XCTAssertEqual(HTTPField.hxReswap(.afterbegin).description, "HX-Reswap: afterbegin") + XCTAssertEqual(HTTPField.hxReswap(.beforeend).description, "HX-Reswap: beforeend") + XCTAssertEqual(HTTPField.hxReswap(.afterend).description, "HX-Reswap: afterend") + XCTAssertEqual(HTTPField.hxReswap(.delete).description, "HX-Reswap: delete") + XCTAssertEqual(HTTPField.hxReswap(.none).description, "HX-Reswap: none") + XCTAssertEqual( + HTTPField.hxReswap(.raw("raw this can be anything")).description, + "HX-Reswap: raw this can be anything" + ) + XCTAssertEqual(HTTPField.hxRetarget("cssSelector").description, "HX-Retarget: cssSelector") + XCTAssertEqual(HTTPField.hxReselect("cssSelector").description, "HX-Reselect: cssSelector") + XCTAssertEqual( + HTTPField.hxTriggerAfterSettle("any value").description, + "HX-Trigger-After-Settle: any value" + ) + XCTAssertEqual( + HTTPField.hxTriggerAfterSwap("any value").description, + "HX-Trigger-After-Swap: any value" + ) + } + + func test_HTTPFieldsGetters_EmptyValues() { + let headers = HTTPFields() + XCTAssertNil(headers.hxLocation) + XCTAssertNil(headers.hxPushUrl) + XCTAssertNil(headers.hxRedirect) + XCTAssertFalse(headers.hxRefresh) + XCTAssertNil(headers.hxReplaceUrl) + XCTAssertNil(headers.hxReswap) + XCTAssertNil(headers.hxRetarget) + XCTAssertNil(headers.hxReselect) + XCTAssertNil(headers.hxTriggerAfterSettle) + XCTAssertNil(headers.hxTriggerAfterSwap) + } + + func test_HTTPFieldsGetters_NonEmptyValues() { + let headers = HTTPFields([ + .hxLocation("/example"), + .hxRedirect("/example"), + .hxRefresh(), + .hxRetarget("cssSelector"), + .hxReselect("cssSelector"), + .hxTriggerAfterSettle("any value"), + .hxTriggerAfterSwap("any value"), + ]) + XCTAssertEqual(headers.hxLocation, "/example") + XCTAssertEqual(headers.hxRedirect, "/example") + XCTAssertTrue(headers.hxRefresh) + XCTAssertEqual(headers.hxRetarget, "cssSelector") + XCTAssertEqual(headers.hxReselect, "cssSelector") + XCTAssertEqual(headers.hxTriggerAfterSettle, "any value") + XCTAssertEqual(headers.hxTriggerAfterSwap, "any value") + } + + func test_HTTPFieldsGetters_NonEmptyValues_HxPushUrl() { + let headersHxPushUrl: [(HTTPField, HxPushUrl)] = [ + (HTTPField.hxPushUrl(.false), .false), + (HTTPField.hxPushUrl(.url("/example")), .url("/example")), + ] + for (header, value) in headersHxPushUrl { + XCTAssertEqual(HTTPFields([header]).hxPushUrl, value) + } + } + + func test_HTTPFieldsGetters_NonEmptyValues_HxReplaceUrl() { + let headersHxReplaceUrl: [(HTTPField, HxReplaceUrl)] = [ + (HTTPField.hxReplaceUrl(.false), .false), + (HTTPField.hxReplaceUrl(.url("https://example.com")), .url("https://example.com")), + ] + for (header, value) in headersHxReplaceUrl { + XCTAssertEqual(HTTPFields([header]).hxReplaceUrl, value) + } + } + + func test_HTTPFieldsGetters_NonEmptyValues_HxReswap() { + let headersHxReswap: [(HTTPField, HxSwap)] = [ + (HTTPField.hxReswap(.innerHTML), .innerHTML), + (HTTPField.hxReswap(.outerHTML), .outerHTML), + (HTTPField.hxReswap(.beforebegin), .beforebegin), + (HTTPField.hxReswap(.afterbegin), .afterbegin), + (HTTPField.hxReswap(.beforeend), .beforeend), + (HTTPField.hxReswap(.afterend), .afterend), + (HTTPField.hxReswap(.delete), .delete), + (HTTPField.hxReswap(.none), .none), + (HTTPField.hxReswap(.raw("any value")), .raw("any value")), + ] + for (header, value) in headersHxReswap { + XCTAssertEqual(HTTPFields([header]).hxReswap, value) + } + } +} diff --git a/Tests/HTTPTypesHtmxTests/HxTriggerHeaderTests.swift b/Tests/HTTPTypesHtmxTests/HxTriggerHeaderTests.swift new file mode 100644 index 0000000..d42e254 --- /dev/null +++ b/Tests/HTTPTypesHtmxTests/HxTriggerHeaderTests.swift @@ -0,0 +1,24 @@ +import HTTPTypes +import HTTPTypesHtmx +import XCTest + +final class HxTriggerHeadersTests: XCTestCase { + func test_HTTPFieldNames() { + XCTAssertEqual(HTTPField.Name.hxTrigger.description, "HX-Trigger") + } + + func test_HTTPField_Initializers() { + XCTAssertEqual(HTTPField.hxTrigger(id: "myId").description, "HX-Trigger: myId") + XCTAssertEqual(HTTPField.hxTrigger(event: "myEvent").description, "HX-Trigger: myEvent") + } + + func test_HTTPFieldsGetters_EmptyValues() { + let headers = HTTPFields() + XCTAssertNil(headers.hxTrigger) + } + + func test_HTTPFieldsGetters_NonEmptyValues() { + XCTAssertEqual(HTTPFields([.hxTrigger(id: "myId")]).hxTrigger, "myId") + XCTAssertEqual(HTTPFields([.hxTrigger(event: "myEvent")]).hxTrigger, "myEvent") + } +}