diff --git a/src/ViewEngine.Htmx.Tests/Tests.fs b/src/ViewEngine.Htmx.Tests/Tests.fs index f2f5ba5..129562e 100644 --- a/src/ViewEngine.Htmx.Tests/Tests.fs +++ b/src/ViewEngine.Htmx.Tests/Tests.fs @@ -3,6 +3,126 @@ module Giraffe.ViewEngine.Htmx.Tests open Giraffe.ViewEngine open Xunit +/// Tests for the HxEncoding module +module Encoding = + + [] + let ``Form is correct`` () = + Assert.Equal ("application/x-www-form-urlencoded", HxEncoding.Form) + + [] + let ``MultipartForm is correct`` () = + Assert.Equal ("multipart/form-data", HxEncoding.MultipartForm) + + +/// Tests for the HxParams module +module Params = + + [] + let ``All is correct`` () = + Assert.Equal ("*", HxParams.All) + + [] + let ``None is correct`` () = + Assert.Equal ("none", HxParams.None) + + [] + let ``With succeeds with empty list`` () = + Assert.Equal ("", HxParams.With []) + + [] + let ``With succeeds with one list item`` () = + Assert.Equal ("boo", HxParams.With [ "boo" ]) + + [] + let ``With succeeds with multiple list items`` () = + Assert.Equal ("foo,bar,baz", HxParams.With [ "foo"; "bar"; "baz" ]) + + [] + let ``Except succeeds with empty list`` () = + Assert.Equal ("not ", HxParams.Except []) + + [] + let ``Except succeeds with one list item`` () = + Assert.Equal ("not that", HxParams.Except [ "that" ]) + + [] + let ``Except succeeds with multiple list items`` () = + Assert.Equal ("not blue,green", HxParams.Except [ "blue"; "green" ]) + + +/// Tests for the HxSwap module +module Swap = + + [] + let ``InnerHtml is correct`` () = + Assert.Equal ("innerHTML", HxSwap.InnerHtml) + + [] + let ``OuterHtml is correct`` () = + Assert.Equal ("outerHTML", HxSwap.OuterHtml) + + [] + let ``BeforeBegin is correct`` () = + Assert.Equal ("beforebegin", HxSwap.BeforeBegin) + + [] + let ``BeforeEnd is correct`` () = + Assert.Equal ("beforeend", HxSwap.BeforeEnd) + + [] + let ``AfterBegin is correct`` () = + Assert.Equal ("afterbegin", HxSwap.AfterBegin) + + [] + let ``AfterEnd is correct`` () = + Assert.Equal ("afterend", HxSwap.AfterEnd) + + [] + let ``None is correct`` () = + Assert.Equal ("none", HxSwap.None) + + +/// Tests for the HxTrigger module +module Trigger = + + [] + let ``Click is correct`` () = + Assert.Equal ("click", HxTrigger.Click) + + [] + let ``Load is correct`` () = + Assert.Equal ("load", HxTrigger.Load) + + [] + let ``Filter.Alt succeeds`` () = + Assert.Equal ("click[altKey]", HxTrigger.Filter.Alt HxTrigger.Click) + + [] + let ``Filter.Ctrl succeeds`` () = + Assert.Equal ("click[ctrlKey]", HxTrigger.Filter.Ctrl HxTrigger.Click) + + [] + let ``Filter.Shift succeeds`` () = + Assert.Equal ("click[shiftKey]", HxTrigger.Filter.Shift HxTrigger.Click) + + [] + let ``Filter.CtrlAlt succeeds`` () = + Assert.Equal ("click[ctrlKey&&altKey]", HxTrigger.Filter.CtrlAlt HxTrigger.Click) + + [] + let ``Filter.CtrlShift succeeds`` () = + Assert.Equal ("click[ctrlKey&&shiftKey]", HxTrigger.Filter.CtrlShift HxTrigger.Click) + + [] + let ``Filter.CtrlAltShift succeeds`` () = + Assert.Equal ("click[ctrlKey&&altKey&&shiftKey]", HxTrigger.Filter.CtrlAltShift HxTrigger.Click) + + [] + let ``Filter.AltShift succeeds`` () = + Assert.Equal ("click[altKey&&shiftKey]", HxTrigger.Filter.AltShift HxTrigger.Click) + + /// Tests for the HtmxAttrs module module Attributes = diff --git a/src/ViewEngine.Htmx/Htmx.fs b/src/ViewEngine.Htmx/Htmx.fs index 63b71de..c2ed2ee 100644 --- a/src/ViewEngine.Htmx/Htmx.fs +++ b/src/ViewEngine.Htmx/Htmx.fs @@ -18,7 +18,7 @@ module HxParams = /// Include no parameters let None = "none" /// Include the specified parameters - let With fields = fields |> List.reduce (fun acc it -> $"{acc},{it}") + let With fields = match fields with [] -> "" | _ -> fields |> List.reduce (fun acc it -> $"{acc},{it}") /// Exclude the specified parameters let Except fields = With fields |> sprintf "not %s"