mirror of
https://github.com/wasp-lang/wasp.git
synced 2024-12-26 10:35:04 +03:00
89 lines
4.0 KiB
Haskell
89 lines
4.0 KiB
Haskell
module Parser.ParserTest where
|
|
|
|
import Data.Either
|
|
import qualified Path.Posix as PPosix
|
|
import Test.Tasty.Hspec
|
|
|
|
import NpmDependency as ND
|
|
import Parser
|
|
import qualified StrongPath as SP
|
|
import Wasp
|
|
import qualified Wasp.Entity
|
|
import qualified Wasp.Auth
|
|
import qualified Wasp.JsImport
|
|
import qualified Wasp.NpmDependencies
|
|
import qualified Wasp.Page
|
|
import qualified Wasp.Query
|
|
import qualified Wasp.Route as R
|
|
|
|
spec_parseWasp :: Spec
|
|
spec_parseWasp =
|
|
describe "Parsing wasp" $ do
|
|
it "When given wasp without app, should return Left" $ do
|
|
isLeft (parseWasp "hoho") `shouldBe` True
|
|
|
|
before (readFile "test/Parser/valid.wasp") $ do
|
|
it "When given a valid wasp source, should return correct Wasp" $ \wasp -> do
|
|
parseWasp wasp
|
|
`shouldBe`
|
|
Right (fromWaspElems
|
|
[ WaspElementApp $ App
|
|
{ appName = "test_app"
|
|
, appTitle = "Hello World!"
|
|
}
|
|
, WaspElementAuth $ Wasp.Auth.Auth
|
|
{ Wasp.Auth._userEntity = "User"
|
|
, Wasp.Auth._methods = [Wasp.Auth.EmailAndPassword]
|
|
}
|
|
, WaspElementRoute $ R.Route
|
|
{ R._urlPath = "/"
|
|
, R._targetPage = "Landing"
|
|
}
|
|
, WaspElementPage $ Wasp.Page.Page
|
|
{ Wasp.Page._name = "Landing"
|
|
, Wasp.Page._component = Wasp.JsImport.JsImport
|
|
{ Wasp.JsImport._defaultImport = Just "Landing"
|
|
, Wasp.JsImport._namedImports = []
|
|
, Wasp.JsImport._from = SP.fromPathRelFileP [PPosix.relfile|pages/Landing|]
|
|
}
|
|
}
|
|
, WaspElementRoute $ R.Route
|
|
{ R._urlPath = "/test"
|
|
, R._targetPage = "TestPage"
|
|
}
|
|
, WaspElementPage $ Wasp.Page.Page
|
|
{ Wasp.Page._name = "TestPage"
|
|
, Wasp.Page._component = Wasp.JsImport.JsImport
|
|
{ Wasp.JsImport._defaultImport = Just "Test"
|
|
, Wasp.JsImport._namedImports = []
|
|
, Wasp.JsImport._from = SP.fromPathRelFileP [PPosix.relfile|pages/Test|]
|
|
}
|
|
}
|
|
, WaspElementEntity $ Wasp.Entity.Entity
|
|
{ Wasp.Entity._name = "Task"
|
|
, Wasp.Entity._pslModelSchema = "\
|
|
\id Int @id @default(autoincrement())\n\
|
|
\ description String\n\
|
|
\ isDone Boolean @default(false)"
|
|
}
|
|
, WaspElementQuery $ Wasp.Query.Query
|
|
{ Wasp.Query._name = "myQuery"
|
|
, Wasp.Query._jsFunction = Wasp.JsImport.JsImport
|
|
{ Wasp.JsImport._defaultImport = Nothing
|
|
, Wasp.JsImport._namedImports = [ "myJsQuery" ]
|
|
, Wasp.JsImport._from = SP.fromPathRelFileP [PPosix.relfile|some/path|]
|
|
}
|
|
, Wasp.Query._entities = Nothing
|
|
}
|
|
, WaspElementNpmDependencies $ Wasp.NpmDependencies.NpmDependencies
|
|
{ Wasp.NpmDependencies._dependencies =
|
|
[ ND.NpmDependency
|
|
{ ND._name = "lodash"
|
|
, ND._version = "^4.17.15"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
`setJsImports` [ JsImport (Just "something") [] (SP.fromPathRelFileP [PPosix.relfile|some/file|]) ]
|
|
)
|