1{
2 lib,
3 runCommand,
4 prisma,
5 prisma-engines,
6 sqlite-interactive,
7}:
8
9let
10 prismaMajorVersion = lib.versions.majorMinor prisma.version;
11 enginesMajorVersion = lib.versions.majorMinor prisma-engines.version;
12in
13runCommand "prisma-cli-tests"
14 {
15 nativeBuildInputs = [
16 prisma
17 sqlite-interactive
18 ];
19 meta.timeout = 60;
20 }
21 ''
22 mkdir $out
23 cd $out
24
25 if [ "${prismaMajorVersion}" != "${enginesMajorVersion}" ]; then
26 echo "prisma in version ${prismaMajorVersion} and prisma-engines in ${enginesMajorVersion}. Major versions must match."
27 exit 1
28 fi
29
30 # Ensure CLI runs
31 prisma --help > /dev/null
32
33 # Init a new project
34 prisma init > /dev/null
35
36 # Create a simple data model
37 cat << EOF > prisma/schema.prisma
38 datasource db {
39 provider = "sqlite"
40 url = "file:test.db"
41 }
42
43 generator js {
44 provider = "prisma-client-js"
45 }
46
47 model A {
48 id Int @id @default(autoincrement())
49 b String @default("foo")
50 }
51 EOF
52
53 # Format
54 prisma format > /dev/null
55
56 # Create the database
57 prisma db push --skip-generate > /dev/null
58
59 # The database file should exist and be a SQLite database
60 sqlite3 prisma/test.db "SELECT id, b FROM A" > /dev/null
61
62 # Introspect the database
63 prisma db pull > /dev/null
64 ''