module Hypermedia.Datastar.ExecuteScriptSpec (spec) where import Test.Hspec import Hypermedia.Datastar.ExecuteScript import Hypermedia.Datastar.Types spec :: Spec spec = describe "Hypermedia.Datastar.ExecuteScript.toDatastarEvent" $ do it "minimal: single-line script with auto-remove" $ do let event = toDatastarEvent $ executeScript "console.log('Here')" eventType event `shouldBe` EventPatchElements eventId event `shouldBe` Nothing retry event `shouldBe` defaultRetryDuration dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "full: all options set" $ do let pAutoRemove = True pAttrs = ["type=\"application/javascript\""] pEventId = Just "123" pRetryDuration = 2000 es = (executeScript "console.log('Here')") { esAutoRemove = pAutoRemove , esAttributes = pAttrs , esEventId = pEventId , esRetryDuration = pRetryDuration } event = toDatastarEvent es eventType event `shouldBe` EventPatchElements eventId event `shouldBe` pEventId retry event `shouldBe` pRetryDuration dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "auto-remove disabled" $ do let es = (executeScript "alert(1)"){esAutoRemove = False} event = toDatastarEvent es dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "multi-line script" $ do let es = executeScript "var x = 1;\nconsole.log(x);" event = toDatastarEvent es dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "multi-line script with three lines" $ do let es = executeScript "var x = 1;\nvar y = 2;\nconsole.log(x + y);" event = toDatastarEvent es dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "empty script" $ do let es = executeScript "" event = toDatastarEvent es dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ] it "multiple attributes" $ do let es = (executeScript "go()") { esAttributes = ["type=\"module\"", "defer"] } event = toDatastarEvent es dataLines event `shouldBe` [ "selector body" , "mode append" , "elements " ]