wasp/waspc/test/Psl/ValidTest.hs
2024-07-03 13:51:29 +02:00

112 lines
4.3 KiB
Haskell

module Psl.ValidTest where
import NeatInterpolation (trimming)
import Test.Tasty.Hspec
import qualified Util.Prisma as Util
import qualified Wasp.Psl.Valid as PslV
import qualified Wasp.Valid as Valid
spec_PrismaSchemaValid :: Spec
spec_PrismaSchemaValid = do
describe "validatePrismaSchema" $ do
describe "datasource validation" $ do
it "should validate that some datasource exists" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
generator client {
provider = "prisma-client-js"
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "Prisma schema must have exactly one datasource defined."]
it "should validate that only one datasource exists" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {}
datasource db {}
generator client {
provider = "prisma-client-js"
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "Prisma schema must have exactly one datasource defined."]
describe "generators validation" $ do
it "should validate that there is at least one generator" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "Prisma schema should have at least one generator defined."]
it "should validate that there is at least one client generator" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator bla {
provider = "bla"
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "Prisma schema should have at least one generator with the provider set to \"prisma-client-js\"."]
-- No error, missing db system and unsupported db system error cases
describe "db system validation" $ do
it "should not return any error when db system is supported" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
previewFeatures = ["postgresqlExtensions"]
}
|]
in PslV.validatePrismaSchema prismaSchema `shouldBe` []
it "should return an error when db system is missing" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "You need to specify the \"provider\" field in the \"datasource\" block in your Prisma schema."]
it "should return an error when db system is unsupported" $
let prismaSchema =
Util.getPrismaSchema
[trimming|
datasource db {
provider = "mongodb"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
|]
in PslV.validatePrismaSchema prismaSchema
`shouldBe` [Valid.GenericValidationError "Wasp doesn't support the database provider \"mongodb\" specified in the schema.prisma file."]