generated from tpl/purs
78 lines
2.6 KiB
Haskell
78 lines
2.6 KiB
Haskell
|
module Test.Main where
|
||
|
|
||
|
import Prelude
|
||
|
|
||
|
import Control.Monad.Error.Class (class MonadThrow, liftEither, throwError, try)
|
||
|
import Control.Monad.Except (runExceptT)
|
||
|
import Data.Bifunctor (lmap)
|
||
|
import Data.Either (Either(..), isRight)
|
||
|
import Data.Email (Email)
|
||
|
import Data.Email as Email
|
||
|
import Data.Traversable (for_)
|
||
|
import Data.Tuple.Nested ((/\))
|
||
|
import Effect (Effect)
|
||
|
import Effect.Aff (launchAff_)
|
||
|
import Effect.Email as Effect.Email
|
||
|
import Effect.Exception (Error, error)
|
||
|
import Test.Spec (describe, it)
|
||
|
import Test.Spec.Assertions (shouldEqual)
|
||
|
import Test.Spec.Reporter (consoleReporter)
|
||
|
import Test.Spec.Runner (runSpec)
|
||
|
|
||
|
emailParse :: forall m. MonadThrow Error m => String -> m Email
|
||
|
emailParse = liftEither <<< lmap error <<< Email.parse
|
||
|
|
||
|
main :: Effect Unit
|
||
|
main = launchAff_ $ runSpec [ consoleReporter ] do
|
||
|
describe "Data.Email" do
|
||
|
describe "parse" do
|
||
|
for_
|
||
|
[ "orion@orionkindel.com" /\ true
|
||
|
, "foo.bar@gmail.com" /\ true
|
||
|
, "foo.bar123@gmail.com" /\ true
|
||
|
, "foo-bar@gmail.com" /\ true
|
||
|
, "foo_bar@gmail.com" /\ true
|
||
|
, "foo_@gmail.com" /\ true
|
||
|
, "foo.bar+1@gmail.com" /\ true
|
||
|
, "_foo@gmail.com" /\ true
|
||
|
, "foo,bar@gmail.com" /\ false
|
||
|
, "foo@gmail" /\ false
|
||
|
, "foo@" /\ false
|
||
|
, "foo.com" /\ false
|
||
|
, "@foo.com" /\ false
|
||
|
]
|
||
|
\(e /\ pass) ->
|
||
|
it
|
||
|
((if pass then "pass" else "fail") <> " > `" <> e <> "`")
|
||
|
(isRight (Email.parse e) `shouldEqual` pass)
|
||
|
describe "toString" do
|
||
|
for_
|
||
|
[ "orion@orionkindel.com"
|
||
|
, "foo.bar@gmail.com"
|
||
|
, "foo.bar123@gmail.com"
|
||
|
, "foo-bar@gmail.com"
|
||
|
, "foo_bar@gmail.com"
|
||
|
, "foo_@gmail.com"
|
||
|
, "foo.bar+1@gmail.com"
|
||
|
, "_foo@gmail.com"
|
||
|
]
|
||
|
\e -> it ("`" <> e <> "`") $ flip shouldEqual e <$> Email.toString =<< emailParse e
|
||
|
describe "Effect.Email" do
|
||
|
describe "deliverable" do
|
||
|
for_
|
||
|
[ "cakekindel@gmail.com" /\ true
|
||
|
, "george@thunderstrike.ai" /\ true
|
||
|
, "foobarbaz@thunderstrike.ai" /\ false
|
||
|
]
|
||
|
\(e /\ shouldPass) ->
|
||
|
it ((if shouldPass then "pass" else "fail") <> " > `" <> e <> "`") do
|
||
|
email <- emailParse e
|
||
|
result <- runExceptT $ Effect.Email.deliverable email
|
||
|
case result of
|
||
|
Right _
|
||
|
| not shouldPass -> throwError $ error "deliverable did not fail but should have!"
|
||
|
| otherwise -> pure unit
|
||
|
Left err
|
||
|
| shouldPass -> throwError $ error $ Effect.Email.emailErrorToString err
|
||
|
| otherwise -> pure unit
|