2020-11-01 13:16:43 +03:00
|
|
|
module TestUtils where
|
|
|
|
|
|
|
|
import Test.Unit.Assert as Assert
|
|
|
|
import Foreign
|
|
|
|
import Control.Monad.Except
|
|
|
|
import Data.Either
|
|
|
|
import Effect.Aff
|
|
|
|
import Prelude
|
|
|
|
import Playwright
|
|
|
|
import Control.Monad.Error.Class (withResource)
|
|
|
|
|
|
|
|
assertForeignTrue :: Foreign -> Aff Unit
|
|
|
|
assertForeignTrue value = do
|
|
|
|
let
|
|
|
|
eiBool = runExcept $ readBoolean value
|
|
|
|
Assert.assert "Foreign value is boolean true" (eiBool == Right true)
|
|
|
|
|
|
|
|
withBrowser :: forall a. (Browser -> Aff a) -> Aff a
|
2020-11-01 14:48:16 +03:00
|
|
|
withBrowser = withResource acquire release
|
2020-11-01 13:16:43 +03:00
|
|
|
where
|
|
|
|
acquire = launch chromium {}
|
|
|
|
release = close
|
|
|
|
|
|
|
|
withBrowserPage :: forall a. URL -> (Page -> Aff a) -> Aff a
|
|
|
|
withBrowserPage url action = do
|
|
|
|
withBrowser
|
|
|
|
\browser -> do
|
2020-11-01 14:48:16 +03:00
|
|
|
let
|
|
|
|
acquire = newPage browser {}
|
|
|
|
release = close
|
|
|
|
withResource acquire release
|
|
|
|
\page -> do
|
|
|
|
void $ goto page url {}
|
|
|
|
action page
|
2020-11-01 13:16:43 +03:00
|
|
|
|
|
|
|
testClickEvent :: String -> (Page -> Selector -> {} -> Aff Unit) -> Page -> Aff Unit
|
|
|
|
testClickEvent event action page = do
|
|
|
|
void $ evaluate page ("setEventTester('" <> event <> "');")
|
|
|
|
action page (Selector $ "#event-" <> event) {}
|
|
|
|
result <- evaluate page $ "checkEventHappened('" <> event <> "');"
|
|
|
|
assertForeignTrue result
|
|
|
|
|
|
|
|
foreign import cwd :: String
|