From e4bff0e0ae15b8fd4f591cc49bbdd3ebc01bec4d Mon Sep 17 00:00:00 2001 From: Matthew Mueller Date: Thu, 19 Mar 2020 12:23:14 +0100 Subject: [PATCH 1/5] update postgres integration tests --- .../integrate.postgresql.test.ts.js | 930 +----------------- .../__tests__/integrate.postgresql.test.ts | 155 +-- 2 files changed, 112 insertions(+), 973 deletions(-) diff --git a/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js b/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js index c93b69a24007..0e5e828d1826 100644 --- a/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js +++ b/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js @@ -1,302 +1,3 @@ -exports['a.findOne({ where: { one_two: { one: 1, two: 2 } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model a { - one Int - two Int - b b[] - - @@id([one, two]) -} - -model b { - id Int @default(autoincrement()) @id - a a @map(["one", "two"]) -} -` - -exports['teams.findOne({ where: { id: 2 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @id - name String @unique -} -` - -exports['teams.findOne({ where: { id: 2 }, select: { name: true } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - email String @unique - id Int @id - name String @unique -} -` - -exports['users.findOne({ where: { id: 1 }, include: { posts: true } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - title String - user_id users -} - -model users { - email String @unique - id Int @default(autoincrement()) @id - posts posts[] -} -` - -exports['teams.create({ data: { name: \'c\' } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String @unique -} -` - -exports['teams.create({ data: {} })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String @default("alice") -} -` - -exports['teams.update({ where: { id: 1 }, data: { name: \'d\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String @unique -} -` - -exports['teams.update({ where: { id: 1 }, data: { active: false }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - active Boolean @default(true) - id Int @default(autoincrement()) @id - name String @unique -} -` - -exports['teams.update({ where: { id: 1 }, data: { active: false }, select: { active: true }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - active Boolean @default(true) - id Int @default(autoincrement()) @id - name String @unique -} -` - -exports['teams.update({ where: { name: \'c\' }, data: { name: \'d\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String @unique -} -` - -exports['teams.updateMany({ where: { name: \'c\' }, data: { name: \'d\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String -} -` - -exports['await teams.updateMany({ where: { name: \'c\' }, data: { name: \'d\' }, }) client.teams.findMany();'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String -} -` - -exports['users.findOne({ where: { email: \'ada@prisma.io\' } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model users { - email String @unique - id Int @default(autoincrement()) @id -} -` - -exports['users.findOne({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model users { - email String - id Int @default(autoincrement()) @id - name String - - @@unique([email, name], name: "users_email_name_key") -} -` - -exports['users.update({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } }, data: { name: \'Marco\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model users { - email String - id Int @default(autoincrement()) @id - name String - - @@unique([email, name], name: "users_email_name_key") -} -` - -exports['users.delete({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model users { - email String - id Int @default(autoincrement()) @id - name String - - @@unique([email, name], name: "users_email_name_key") -} -` - exports['users.findMany()'] = ` generator client { provider = "prisma-client-js" @@ -348,7 +49,7 @@ model users { } ` -exports['users.findOne({ where: { email: \'ada@prisma.io\' } }).posts()'] = ` +exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -359,20 +60,13 @@ datasource pg { url = "***" } -model posts { - id Int @default(autoincrement()) @id - title String - user_id users -} - model users { - email String @unique - id Int @default(autoincrement()) @id - posts posts[] + email String @unique + id Int @default(autoincrement()) @id } ` -exports['posts.findMany({ where: { title: { contains: \'A\' }, published: true, }, })'] = ` +exports['users.findMany({ where: { team_id: null } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -383,616 +77,16 @@ datasource pg { url = "***" } -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.findMany({ where: { OR: [{ title: { contains: \'A\' } }, { title: { contains: \'C\' } }], published: true, }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.upsert({ where: { id: 1 }, create: { title: \'D\', published: true }, update: { title: \'D\', published: true }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.upsert({ where: { id: 4 }, create: { title: \'D\', published: false }, update: { title: \'D\', published: true }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.findMany({ orderBy: { title: \'asc\', }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.findMany({ orderBy: { title: \'desc\', }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published Boolean @default(false) - title String -} -` - -exports['posts.findMany()'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['posts.update({ where: { id: 1 }, data: { published: \'PUBLISHED\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['posts.updateMany({ data: { published: \'PUBLISHED\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['await posts.updateMany({ data: { published: \'PUBLISHED\' }, }) client.posts.findMany();'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['await posts.deleteMany({ where: { published: \'DRAFT\' }, })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['await posts.deleteMany({ where: { published: \'DRAFT\' }, }) client.posts.findMany();'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - id Int @default(autoincrement()) @id - published posts_status @default(DRAFT) - title String -} - -enum posts_status { - DRAFT - PUBLISHED -} -` - -exports['crons.findMany({ where: { job: { contains: \'j2\' } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model crons { - frequency String? - id Int @default(autoincrement()) @id - job String @unique -} -` - -exports['crons.findMany({ where: { job: { startsWith: \'j2\' } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model crons { - frequency String? - id Int @default(autoincrement()) @id - job String @unique -} -` - -exports['crons.findMany({ where: { job: { endsWith: \'1\' } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model crons { - frequency String? - id Int @default(autoincrement()) @id - job String @unique -} -` - -exports['crons.findMany({ where: { job: { in: [\'j20\', \'j1\'] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model crons { - frequency String? - id Int @default(autoincrement()) @id - job String @unique -} -` - -exports['const posts = await posts.findMany({ where: { created_at: { lte: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - created_at DateTime @default(now()) - id Int @default(autoincrement()) @id - title String -} -` - -exports['posts.findMany({ where: { created_at: { gte: new Date() } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - created_at DateTime @default(now()) - id Int @default(autoincrement()) @id - title String -} -` - -exports['posts.findMany({ where: { created_at: { gt: new Date() } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - created_at DateTime @default(now()) - id Int @default(autoincrement()) @id - title String -} -` - -exports['const posts = await posts.findMany({ where: { created_at: { lt: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model posts { - created_at DateTime @default(now()) - id Int @default(autoincrement()) @id - title String -} -` - -exports['teams.findMany({ where: { id: { in: [] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique -} -` - -exports['teams.findMany({ where: { id: { in: [] }, token: { in: [11, 22] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique -} -` - -exports['teams.findMany({ where: { token: { in: [11, 22] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique -} -` - -exports['teams.findMany({ where: { token: { notIn: [11, 22] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique -} -` - -exports['teams.findMany({ where: { token: { notIn: [] } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique -} -` - -exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique + users users[] } model users { - email String @unique - id Int @default(autoincrement()) @id -} -` - -exports['exercises.findMany({ where: { distance: 12.213 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model exercises { - distance Float - id Int @default(autoincrement()) @id -} -` - -exports['exercises.findOne({ where: { distance: 12.213 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model exercises { - distance Float @unique - id Int @default(autoincrement()) @id -} -` - -exports['exercises.findOne({ where: { distance: 12.3 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model exercises { - distance Float @default(12.3) @unique - id Int @default(autoincrement()) @id -} -` - -exports['migrate.create({ data: { version: 1 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model migrate { - version Int @id -} -` - -exports['variables.findOne({ where: { variables_name_key_key: { key: \'b\', name: \'a\' } } })2'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model variables { - email String - id Int @default(autoincrement()) @id - key String - name String - value String - - @@unique([name, key], name: "variables_name_key_key") -} -` - -exports['variables.findOne({ where: { variables_value_email_key: { value: \'c\', email: \'d\' } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model variables { - email String - key String - name String - value String - - @@id([name, key]) - @@unique([value, email], name: "variables_value_email_key") -} -` - -exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource pg { - provider = "postgresql" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String? + email String @unique + id Int @default(autoincrement()) @id + team_id teams? } ` diff --git a/cli/prisma2/src/__tests__/integrate.postgresql.test.ts b/cli/prisma2/src/__tests__/integrate.postgresql.test.ts index 618fb81da548..457fafb811d4 100644 --- a/cli/prisma2/src/__tests__/integrate.postgresql.test.ts +++ b/cli/prisma2/src/__tests__/integrate.postgresql.test.ts @@ -1222,7 +1222,6 @@ function tests(): Test[] { ], }, { - // todo: true, up: ` create table posts ( id serial primary key not null, @@ -1242,7 +1241,6 @@ function tests(): Test[] { expect: [], }, { - // todo: true, up: ` create table posts ( id serial primary key not null, @@ -1262,7 +1260,6 @@ function tests(): Test[] { expect: [], }, { - // todo: true, up: ` create table posts ( id serial primary key not null, @@ -1320,7 +1317,6 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1334,13 +1330,14 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } }) }, - expect: { - id: 1, - token: 10, - }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1352,15 +1349,11 @@ function tests(): Test[] { drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1372,15 +1365,16 @@ function tests(): Test[] { drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1392,15 +1386,11 @@ function tests(): Test[] { drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1412,15 +1402,16 @@ function tests(): Test[] { drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1434,13 +1425,9 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, - expect: { - id: 1, - token: 10, - }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, @@ -1456,7 +1443,20 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: null } }) }, - expect: [], + expect: [ + { + id: 1, + time: null, + }, + { + id: 2, + time: null, + }, + { + id: 3, + time: null, + }, + ], }, { up: ` @@ -1596,8 +1596,9 @@ function tests(): Test[] { }, expect: [ { - email: 'a', id: 1, + email: 'a', + team_id: null, }, ], }, @@ -1701,7 +1702,6 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table variables ( name text not null, @@ -1716,12 +1716,16 @@ function tests(): Test[] { drop table if exists variables cascade; `, do: async client => { - return client.variables.findOne({ where: { variables_name_key_key: { key: 'b', name: 'a' } } }) + return client.variables.findOne({ where: { name_key: { key: 'b', name: 'a' } } }) + }, + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', }, - expect: {}, // TODO }, { - todo: true, up: ` create table variables ( name text not null, @@ -1737,14 +1741,18 @@ function tests(): Test[] { `, do: async client => { return client.variables.update({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, data: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, }, { - todo: true, up: ` create table variables ( name text not null, @@ -1760,15 +1768,47 @@ function tests(): Test[] { `, do: async client => { return client.variables.upsert({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, - create: {}, // TODO - update: {}, // TODO + where: { name_key: { key: 'b', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, + }, + { + up: ` + create table variables ( + name text not null, + key text not null, + value text not null, + email text not null, + primary key(name, key) + ); + insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + `, + down: ` + drop table if exists variables cascade; + `, + do: async client => { + return client.variables.upsert({ + where: { name_key: { key: 'd', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, + }) + }, + expect: { + email: '4', + key: '2', + name: '1', + value: '3', + }, }, { - todo: true, up: ` create table variables ( name text not null, @@ -1784,10 +1824,15 @@ function tests(): Test[] { `, do: async client => { return client.variables.delete({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, }) }, - expect: {}, // TODO + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', + }, }, { up: ` @@ -2052,7 +2097,7 @@ function tests(): Test[] { drop table if exists crazy cascade; `, do: async client => { - return client.crazy.findOne({ where: { variables_value_email_key: { value: 'c', email: 'd' } } }) + return client.crazy.findOne({ where: { value_email: { value: 'c', email: 'd' } } }) }, expect: { // TODO From 6ef74d13f74c28c30ae502505dcc852345eed1db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=CC=88l?= Date: Thu, 19 Mar 2020 19:12:06 +0100 Subject: [PATCH 2/5] Update postgresql snapshot and one more test passing --- .../integrate.postgresql.test.ts.js | 1157 ++++++++++++++++- .../__tests__/integrate.postgresql.test.ts | 1 - 2 files changed, 1152 insertions(+), 6 deletions(-) diff --git a/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js b/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js index 0e5e828d1826..e4debadb9e5c 100644 --- a/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js +++ b/cli/prisma2/__snapshots__/integrate.postgresql.test.ts.js @@ -66,7 +66,7 @@ model users { } ` -exports['users.findMany({ where: { team_id: null } })'] = ` +exports['teams.findOne({ where: { id: 2 } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -78,15 +78,1162 @@ datasource pg { } model teams { + id Int @id + name String @unique +} +` + +exports['teams.findOne({ where: { id: 2 }, select: { name: true } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} +` + +exports['users.findOne({ where: { id: 1 }, include: { posts: true } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + title String + user_id users @relation(references: [id]) +} + +model users { + email String @unique id Int @default(autoincrement()) @id + posts posts[] +} +` + +exports['teams.create({ data: { name: \'c\' } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String @unique +} +` + +exports['teams.create({ data: {} })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String @default("alice") +} +` + +exports['teams.update({ where: { id: 1 }, data: { name: \'d\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String @unique +} +` + +exports['teams.update({ where: { id: 1 }, data: { active: false }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + active Boolean @default(true) + id Int @default(autoincrement()) @id + name String @unique +} +` + +exports['teams.update({ where: { id: 1 }, data: { active: false }, select: { active: true }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + active Boolean @default(true) + id Int @default(autoincrement()) @id + name String @unique +} +` + +exports['teams.update({ where: { name: \'c\' }, data: { name: \'d\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String @unique +} +` + +exports['teams.updateMany({ where: { name: \'c\' }, data: { name: \'d\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String +} +` + +exports['await teams.updateMany({ where: { name: \'c\' }, data: { name: \'d\' }, }) client.teams.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String +} +` + +exports['users.findOne({ where: { email: \'ada@prisma.io\' } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model users { + email String @unique + id Int @default(autoincrement()) @id +} +` + +exports['users.findOne({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model users { + email String + id Int @default(autoincrement()) @id + name String + + @@unique([email, name], name: "users_email_name_key") +} +` + +exports['users.update({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } }, data: { name: \'Marco\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model users { + email String + id Int @default(autoincrement()) @id name String - token Int @unique - users users[] + + @@unique([email, name], name: "users_email_name_key") +} +` + +exports['users.delete({ where: { users_email_name_key: { email: \'ada@prisma.io\', name: \'Ada\' } }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" } model users { - email String @unique + email String + id Int @default(autoincrement()) @id + name String + + @@unique([email, name], name: "users_email_name_key") +} +` + +exports['users.findOne({ where: { email: \'ada@prisma.io\' } }).posts()'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { id Int @default(autoincrement()) @id - team_id teams? + title String + user_id users @relation(references: [id]) +} + +model users { + email String @unique + id Int @default(autoincrement()) @id + posts posts[] +} +` + +exports['posts.findMany({ where: { title: { contains: \'A\' }, published: true, }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.findMany({ where: { OR: [{ title: { contains: \'A\' } }, { title: { contains: \'C\' } }], published: true, }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.upsert({ where: { id: 1 }, create: { title: \'D\', published: true }, update: { title: \'D\', published: true }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.upsert({ where: { id: 4 }, create: { title: \'D\', published: false }, update: { title: \'D\', published: true }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.findMany({ orderBy: { title: \'asc\', }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.findMany({ orderBy: { title: \'desc\', }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published Boolean @default(false) + title String +} +` + +exports['posts.findMany()'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['posts.update({ where: { id: 1 }, data: { published: \'PUBLISHED\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['posts.updateMany({ data: { published: \'PUBLISHED\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['await posts.updateMany({ data: { published: \'PUBLISHED\' }, }) client.posts.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['await posts.deleteMany({ where: { published: \'DRAFT\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['await posts.deleteMany({ where: { published: \'DRAFT\' }, }) client.posts.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + id Int @default(autoincrement()) @id + published posts_status @default(DRAFT) + title String +} + +enum posts_status { + DRAFT + PUBLISHED +} +` + +exports['crons.findMany({ where: { job: { contains: \'j2\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model crons { + frequency String? + id Int @default(autoincrement()) @id + job String @unique +} +` + +exports['crons.findMany({ where: { job: { startsWith: \'j2\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model crons { + frequency String? + id Int @default(autoincrement()) @id + job String @unique +} +` + +exports['crons.findMany({ where: { job: { endsWith: \'1\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model crons { + frequency String? + id Int @default(autoincrement()) @id + job String @unique +} +` + +exports['crons.findMany({ where: { job: { in: [\'j20\', \'j1\'] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model crons { + frequency String? + id Int @default(autoincrement()) @id + job String @unique +} +` + +exports['const posts = await posts.findMany({ where: { created_at: { lte: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['posts.findMany({ where: { created_at: { gte: new Date() } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['posts.findMany({ where: { created_at: { gt: new Date() } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['const posts = await posts.findMany({ where: { created_at: { lt: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: null } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['teams.findMany({ where: { id: { in: [] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique +} +` + +exports['teams.findMany({ where: { id: { in: [] }, token: { in: [11, 22] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique +} +` + +exports['teams.findMany({ where: { token: { in: [11, 22] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique +} +` + +exports['teams.findMany({ where: { token: { notIn: [11, 22] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique +} +` + +exports['teams.findMany({ where: { token: { notIn: [] } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String + token Int @unique +} +` + +exports['exercises.findMany({ where: { distance: 12.213 } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model exercises { + distance Float + id Int @default(autoincrement()) @id +} +` + +exports['exercises.findOne({ where: { distance: 12.213 } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model exercises { + distance Float @unique + id Int @default(autoincrement()) @id +} +` + +exports['exercises.findOne({ where: { distance: 12.3 } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model exercises { + distance Float @default(12.3) @unique + id Int @default(autoincrement()) @id +} +` + +exports['migrate.create({ data: { version: 1 } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model migrate { + version Int @id +} +` + +exports['variables.findOne({ where: { name_key: { key: \'b\', name: \'a\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.update({ where: { name_key: { key: \'b\', name: \'a\' } }, data: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.upsert({ where: { name_key: { key: \'b\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.upsert({ where: { name_key: { key: \'d\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.delete({ where: { name_key: { key: \'b\', name: \'a\' } }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.findOne({ where: { variables_name_key_key: { key: \'b\', name: \'a\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + id Int @default(autoincrement()) @id + key String + name String + value String + + @@unique([name, key], name: "variables_name_key_key") +} +` + +exports['variables.findOne({ where: { variables_value_email_key: { value: \'c\', email: \'d\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) + @@unique([value, email], name: "variables_value_email_key") +} +` + +exports['a.findOne({ where: { one_two: { one: 1, two: 2 } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model a { + one Int + two Int + b b[] + + @@id([one, two]) +} + +model b { + id Int @default(autoincrement()) @id + a a @map(["one", "two"]) @relation(references: [one, two]) +} +` + +exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String? +} +` + +exports['teams.update({ where: { token: 11 }, data: { token: 10 } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource pg { + provider = "postgresql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + token Int @unique } ` diff --git a/cli/prisma2/src/__tests__/integrate.postgresql.test.ts b/cli/prisma2/src/__tests__/integrate.postgresql.test.ts index 457fafb811d4..fed8b5657f79 100644 --- a/cli/prisma2/src/__tests__/integrate.postgresql.test.ts +++ b/cli/prisma2/src/__tests__/integrate.postgresql.test.ts @@ -1297,7 +1297,6 @@ function tests(): Test[] { ], }, { - todo: true, up: ` create table teams ( id serial primary key not null, From a0d0e666856f94c7f9523c57026ca283615bacec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=CC=88l?= Date: Thu, 19 Mar 2020 19:12:47 +0100 Subject: [PATCH 3/5] Update mysql tests based on postgresql --- .../__snapshots__/integrate.mysql.test.ts.js | 252 +++++++++++++++++- .../src/__tests__/integrate.mysql.test.ts | 201 ++++++++------ 2 files changed, 362 insertions(+), 91 deletions(-) diff --git a/cli/prisma2/__snapshots__/integrate.mysql.test.ts.js b/cli/prisma2/__snapshots__/integrate.mysql.test.ts.js index 43cd5060efb6..760e66aef2de 100644 --- a/cli/prisma2/__snapshots__/integrate.mysql.test.ts.js +++ b/cli/prisma2/__snapshots__/integrate.mysql.test.ts.js @@ -19,7 +19,7 @@ model a { model b { id Int @default(autoincrement()) @id - a a @map(["one", "two"]) + a a @map(["one", "two"]) @relation(references: [one, two]) @@index([a], name: "one") } @@ -74,7 +74,7 @@ datasource mysql { model posts { id Int @default(autoincrement()) @id title String - user_id users + user_id users @relation(references: [id]) @@index([user_id], name: "user_id") } @@ -366,7 +366,7 @@ datasource mysql { model posts { id Int @default(autoincrement()) @id title String - user_id users + user_id users @relation(references: [id]) @@index([user_id], name: "user_id") } @@ -925,7 +925,182 @@ model migrate { } ` -exports['variables.findOne({ where: { variables_name_key_key: { key: \'b\', name: \'a\' } } })2'] = ` +exports['variables.findOne({ where: { variables_value_email_key: { value: \'c\', email: \'d\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) + @@unique([value, email], name: "variables_value_email_key") +} +` + +exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String? +} +` + +exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model users { + email String @unique + id Int @default(autoincrement()) @id +} +` + +exports['events.findMany({ where: { time: null } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['variables.findOne({ where: { variables_name_key_key: { key: \'b\', name: \'a\' } } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -947,7 +1122,7 @@ model variables { } ` -exports['variables.findOne({ where: { variables_value_email_key: { value: \'c\', email: \'d\' } } })'] = ` +exports['variables.findOne({ where: { name_key: { key: \'b\', name: \'a\' } } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -965,11 +1140,10 @@ model variables { value String @@id([name, key]) - @@unique([value, email], name: "variables_value_email_key") } ` -exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` +exports['variables.update({ where: { name_key: { key: \'b\', name: \'a\' } }, data: { email: \'e\' }, })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -980,13 +1154,17 @@ datasource mysql { url = "***" } -model teams { - id Int @default(autoincrement()) @id - name String? +model variables { + email String + key String + name String + value String + + @@id([name, key]) } ` -exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` +exports['variables.upsert({ where: { name_key: { key: \'b\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -997,8 +1175,54 @@ datasource mysql { url = "***" } -model users { - email String @unique - id Int @default(autoincrement()) @id +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.upsert({ where: { name_key: { key: \'d\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.delete({ where: { name_key: { key: \'b\', name: \'a\' } }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource mysql { + provider = "mysql" + url = "***" +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) } ` diff --git a/cli/prisma2/src/__tests__/integrate.mysql.test.ts b/cli/prisma2/src/__tests__/integrate.mysql.test.ts index 7dc5219f18d3..a95dae264f15 100644 --- a/cli/prisma2/src/__tests__/integrate.mysql.test.ts +++ b/cli/prisma2/src/__tests__/integrate.mysql.test.ts @@ -1301,13 +1301,12 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; @@ -1315,99 +1314,94 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } }) }, - expect: { - id: 1, - token: 10, - }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; `, do: async client => { - return client.events.find({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); - insert into events (time) values ('2018-09-04 00:00:00+00'); + insert into events (time) values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events cascade; @@ -1415,17 +1409,13 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, - expect: { - id: 1, - token: 10, - }, + expect: [], }, { - todo: true, up: ` create table events ( id serial not null primary key, - time timestamp with time zone + time datetime ); insert into events (time) values (NULL); insert into events (time) values (NULL); @@ -1437,7 +1427,20 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: null } }) }, - expect: [], + expect: [ + { + id: 1, + time: null, + }, + { + id: 2, + time: null, + }, + { + id: 3, + time: null, + }, + ], }, { up: ` @@ -1578,7 +1581,7 @@ function tests(): Test[] { expect: [ { email: 'a', - id: 1, + team_id: null, }, ], }, @@ -1682,93 +1685,137 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables cascade; `, do: async client => { - return client.variables.findOne({ where: { variables_name_key_key: { key: 'b', name: 'a' } } }) + return client.variables.findOne({ where: { name_key: { key: 'b', name: 'a' } } }) + }, + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', }, - expect: {}, // TODO }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables cascade; `, do: async client => { return client.variables.update({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, data: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, + }, + { + up: ` + create table variables ( + name varchar(50) not null, + \`key\` varchar(50) not null, + value varchar(50) not null, + email varchar(50) not null, + primary key(name, \`key\`) + ); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); + `, + down: ` + drop table if exists variables cascade; + `, + do: async client => { + return client.variables.upsert({ + where: { name_key: { key: 'b', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, + }) + }, + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables cascade; `, do: async client => { return client.variables.upsert({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, - create: {}, // TODO - update: {}, // TODO + where: { name_key: { key: 'd', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: '4', + key: '2', + name: '1', + value: '3', + }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables cascade; `, do: async client => { return client.variables.delete({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, }) }, - expect: {}, // TODO + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', + }, }, { up: ` @@ -1862,7 +1909,7 @@ function tests(): Test[] { drop table if exists crazy cascade; `, do: async client => { - return client.crazy.findOne({ where: { variables_value_email_key: { value: 'c', email: 'd' } } }) + return client.crazy.findOne({ where: { value_email: { value: 'c', email: 'd' } } }) }, expect: { // TODO From c01ecf1ef14a23cda66ce290520e9bcd5a3a8e5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=CC=88l?= Date: Thu, 19 Mar 2020 19:13:49 +0100 Subject: [PATCH 4/5] Update sqlite tests based on mysql (originally based on postgresql) --- .../__snapshots__/integrate.sqlite.test.ts.js | 302 ++++++++++++++---- .../src/__tests__/integrate.sqlite.test.ts | 223 ++++++++----- 2 files changed, 373 insertions(+), 152 deletions(-) diff --git a/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js b/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js index e8c26ee4e3c6..0ed87b06189b 100644 --- a/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js +++ b/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js @@ -1,26 +1,3 @@ -exports['exercises.findOne({ where: { distance: 12.3 } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource sqlite { - provider = "sqlite" - url = "***" -} - -model teams { - email String @unique - id Int @id - name String @unique -} - -model exercises { - distance Float @default(12.3) @unique - id Int @default(autoincrement()) @id -} -` - exports['teams.findOne({ where: { id: 2 } })'] = ` generator client { provider = "prisma-client-js" @@ -82,7 +59,7 @@ model users { model posts { id Int @default(autoincrement()) @id title String - user_id users + user_id users @relation(references: [id]) } ` @@ -342,7 +319,7 @@ model users { model posts { id Int @default(autoincrement()) @id title String - user_id users + user_id users @relation(references: [id]) } ` @@ -603,29 +580,6 @@ model teams { } ` -exports['events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource sqlite { - provider = "sqlite" - url = "***" -} - -model teams { - email String @unique - id Int @id - name String @unique -} - -model events { - id Int @default(autoincrement()) @id - time String? -} -` - exports['teams.findMany({ where: { id: { in: [] } } })'] = ` generator client { provider = "prisma-client-js" @@ -716,7 +670,7 @@ model teams { } ` -exports['users.findMany({ where: { team_id: null } })'] = ` +exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -728,20 +682,18 @@ datasource sqlite { } model teams { - id Int @default(autoincrement()) @id - name String - token Int @unique - users users[] + email String @unique + id Int @id + name String @unique } model users { - email String @unique - id Int @default(autoincrement()) @id - team_id teams? + email String @unique + id Int @default(autoincrement()) @id } ` -exports['users.findMany({ where: { email: \'MAX@PRISMA.IO\' } })'] = ` +exports['exercises.findMany({ where: { distance: 12.213 } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -758,13 +710,13 @@ model teams { name String @unique } -model users { - email String @unique - id Int @default(autoincrement()) @id +model exercises { + distance Float + id Int @default(autoincrement()) @id } ` -exports['exercises.findMany({ where: { distance: 12.213 } })'] = ` +exports['exercises.findOne({ where: { distance: 12.213 } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -782,12 +734,12 @@ model teams { } model exercises { - distance Float + distance Float @unique id Int @default(autoincrement()) @id } ` -exports['exercises.findOne({ where: { distance: 12.213 } })'] = ` +exports['exercises.findOne({ where: { distance: 12.3 } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -805,7 +757,7 @@ model teams { } model exercises { - distance Float @unique + distance Float @default(12.3) @unique id Int @default(autoincrement()) @id } ` @@ -848,3 +800,225 @@ model teams { name String? } ` + +exports['variables.findOne({ where: { name_key: { key: \'b\', name: \'a\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.update({ where: { name_key: { key: \'b\', name: \'a\' } }, data: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.upsert({ where: { name_key: { key: \'b\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.upsert({ where: { name_key: { key: \'d\', name: \'a\' } }, create: { name: \'1\', key: \'2\', value: \'3\', email: \'4\' }, update: { email: \'e\' }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.delete({ where: { name_key: { key: \'b\', name: \'a\' } }, })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) +} +` + +exports['variables.findOne({ where: { sqlite_autoindex_variables_2: { value: \'c\', email: \'d\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + key String + name String + value String + + @@id([name, key]) + @@unique([value, email], name: "sqlite_autoindex_variables_2") +} +` + +exports['variables.findOne({ where: { sqlite_autoindex_variables_1: { key: \'b\', name: \'a\' } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model variables { + email String + id Int @default(autoincrement()) @id + key String + name String + value String + + @@unique([name, key], name: "sqlite_autoindex_variables_1") +} +` + +exports['a.findOne({ where: { one_two: { one: 1, two: 2 } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model a { + one Int + two Int + b b[] + + @@id([one, two]) +} + +model b { + id Int @default(autoincrement()) @id + a a @map(["one", "two"]) @relation(references: [one, two]) +} +` diff --git a/cli/prisma2/src/__tests__/integrate.sqlite.test.ts b/cli/prisma2/src/__tests__/integrate.sqlite.test.ts index 92c11a3a1ec9..6df9fa860d78 100644 --- a/cli/prisma2/src/__tests__/integrate.sqlite.test.ts +++ b/cli/prisma2/src/__tests__/integrate.sqlite.test.ts @@ -1135,12 +1135,13 @@ function tests(): Test[] { }, { todo: true, + // PANIC: called `Result::unwrap()` on an `Err` value: ErrorMessage { msg: "Could not parse stored DateTime string: 2018-09-04 00:00:00 (input contains invalid characters)" } up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; @@ -1148,102 +1149,99 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } }) }, - expect: { - id: 1, - token: 10, - }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { todo: true, - // TypeError: client.events.find is not a function up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; `, do: async client => { - return client.events.find({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { todo: true, - // TypeError: client.events.find is not a function up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; `, do: async client => { - return client.events.find({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { todo: true, - // TypeError: client.events.find is not a function up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; `, do: async client => { - return client.events.find({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [], }, { todo: true, - // TypeError: client.events.find is not a function up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; `, do: async client => { - return client.events.find({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) - }, - expect: { - id: 1, - token: 10, + return client.events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, + expect: [ + { + id: 1, + time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)), + }, + ], }, { + todo: true, up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00+00'); + insert into events ("time") values ('2018-09-04 00:00:00'); `, down: ` drop table if exists events; @@ -1251,19 +1249,14 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } }) }, - expect: [ - { - id: 1, - time: '2018-09-04 00:00:00+00', - }, - ], + expect: [], }, { todo: true, up: ` create table events ( id integer not null primary key, - "time" timestamp with time zone + "time" datetime ); insert into events ("time") values (NULL); insert into events ("time") values (NULL); @@ -1275,7 +1268,20 @@ function tests(): Test[] { do: async client => { return client.events.findMany({ where: { time: null } }) }, - expect: [], + expect: [ + { + id: 1, + time: null, + }, + { + id: 2, + time: null, + }, + { + id: 3, + time: null, + }, + ], }, { up: ` @@ -1390,6 +1396,7 @@ function tests(): Test[] { ], }, { + todo: true, up: ` pragma foreign_keys = 1; create table teams ( @@ -1416,7 +1423,7 @@ function tests(): Test[] { expect: [ { email: 'a', - id: 1, + team_id: null, }, ], }, @@ -1518,112 +1525,155 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { - return client.variables.findOne({ where: { variables_name_key_key: { key: 'b', name: 'a' } } }) + return client.variables.findOne({ where: { name_key: { key: 'b', name: 'a' } } }) + }, + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', }, - expect: {}, // TODO }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { return client.variables.update({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, data: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { return client.variables.upsert({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, - create: {}, // TODO - update: {}, // TODO + where: { name_key: { key: 'b', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, }) }, - expect: {}, // TODO + expect: { + email: 'e', + key: 'b', + name: 'a', + value: 'c', + }, + }, + { + up: ` + create table variables ( + name varchar(50) not null, + \`key\` varchar(50) not null, + value varchar(50) not null, + email varchar(50) not null, + primary key(name, \`key\`) + ); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); + `, + down: ` + drop table if exists variables; + `, + do: async client => { + return client.variables.upsert({ + where: { name_key: { key: 'd', name: 'a' } }, + create: { name: '1', key: '2', value: '3', email: '4' }, + update: { email: 'e' }, + }) + }, + expect: { + email: '4', + key: '2', + name: '1', + value: '3', + }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key) + primary key(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { return client.variables.delete({ - where: { variables_name_key_key: { key: 'b', name: 'a' } }, + where: { name_key: { key: 'b', name: 'a' } }, }) }, - expect: {}, // TODO + expect: { + email: 'd', + key: 'b', + name: 'a', + value: 'c', + }, }, { - todo: true, up: ` create table variables ( id integer primary key not null, name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - unique(name, key) + unique(name, \`key\`) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { - return client.variables.findOne({ where: { variables_name_key_key: { key: 'b', name: 'a' } } }) + return client.variables.findOne({ where: { sqlite_autoindex_variables_1: { key: 'b', name: 'a' } } }) }, expect: { email: 'd', @@ -1634,23 +1684,22 @@ function tests(): Test[] { }, }, { - todo: true, up: ` create table variables ( name varchar(50) not null, - key varchar(50) not null, + \`key\` varchar(50) not null, value varchar(50) not null, email varchar(50) not null, - primary key(name, key), + primary key(name, \`key\`), unique(value, email) ); - insert into variables (name, key, value, email) values ('a', 'b', 'c', 'd'); + insert into variables (name, \`key\`, value, email) values ('a', 'b', 'c', 'd'); `, down: ` drop table if exists variables; `, do: async client => { - return client.variables.findOne({ where: { variables_value_email_key: { value: 'c', email: 'd' } } }) + return client.variables.findOne({ where: { sqlite_autoindex_variables_2: { value: 'c', email: 'd' } } }) }, expect: { email: 'd', @@ -1660,8 +1709,6 @@ function tests(): Test[] { }, }, { - todo: true, - //SqliteError: FOREIGN KEY constraint failed up: ` pragma foreign_keys = 1; create table a ( @@ -1670,7 +1717,7 @@ function tests(): Test[] { primary key ("one", "two") ); create table b ( - id integer primary key autoincrement not null, + id integer primary key not null, one integer not null, two integer not null, foreign key ("one", "two") references a ("one", "two") From 1a03f09bf414805a4644dc8345b2b3555533516c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joe=CC=88l?= Date: Fri, 20 Mar 2020 11:29:15 +0100 Subject: [PATCH 5/5] Fix SQLite integration tests with dates --- .../__snapshots__/integrate.sqlite.test.ts.js | 280 ++++++++++++++++-- .../src/__tests__/integrate.sqlite.test.ts | 58 ++-- 2 files changed, 280 insertions(+), 58 deletions(-) diff --git a/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js b/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js index 0ed87b06189b..9c8e6e61b3c1 100644 --- a/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js +++ b/cli/prisma2/__snapshots__/integrate.sqlite.test.ts.js @@ -1,3 +1,27 @@ +exports['const posts = await posts.findMany({ where: { created_at: { lte: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + exports['teams.findOne({ where: { id: 2 } })'] = ` generator client { provider = "prisma-client-js" @@ -563,6 +587,78 @@ model crons { } ` +exports['posts.findMany({ where: { created_at: { gte: new Date() } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['posts.findMany({ where: { created_at: { gt: new Date() } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + +exports['const posts = await posts.findMany({ where: { created_at: { lt: new Date() } } }) posts.forEach(post => { assert_1.default.ok(post.created_at instanceof Date); delete post.created_at; }); posts;'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model posts { + created_at DateTime @default(now()) + id Int @default(autoincrement()) @id + title String +} +` + exports['teams.update({ where: { token: 11 }, data: { token: 10 } })'] = ` generator client { provider = "prisma-client-js" @@ -580,6 +676,121 @@ model teams { } ` +exports['await events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { gte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { lte: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + +exports['events.findMany({ where: { time: { not: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` + exports['teams.findMany({ where: { id: { in: [] } } })'] = ` generator client { provider = "prisma-client-js" @@ -784,23 +995,6 @@ model migrate { } ` -exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` -generator client { - provider = "prisma-client-js" - output = "***" -} - -datasource sqlite { - provider = "sqlite" - url = "***" -} - -model teams { - id Int @default(autoincrement()) @id - name String? -} -` - exports['variables.findOne({ where: { name_key: { key: \'b\', name: \'a\' } } })'] = ` generator client { provider = "prisma-client-js" @@ -936,7 +1130,7 @@ model variables { } ` -exports['variables.findOne({ where: { sqlite_autoindex_variables_2: { value: \'c\', email: \'d\' } } })'] = ` +exports['variables.findOne({ where: { sqlite_autoindex_variables_1: { key: \'b\', name: \'a\' } } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -955,16 +1149,16 @@ model teams { model variables { email String + id Int @default(autoincrement()) @id key String name String value String - @@id([name, key]) - @@unique([value, email], name: "sqlite_autoindex_variables_2") + @@unique([name, key], name: "sqlite_autoindex_variables_1") } ` -exports['variables.findOne({ where: { sqlite_autoindex_variables_1: { key: \'b\', name: \'a\' } } })'] = ` +exports['variables.findOne({ where: { sqlite_autoindex_variables_2: { value: \'c\', email: \'d\' } } })'] = ` generator client { provider = "prisma-client-js" output = "***" @@ -983,12 +1177,12 @@ model teams { model variables { email String - id Int @default(autoincrement()) @id key String name String value String - @@unique([name, key], name: "sqlite_autoindex_variables_1") + @@id([name, key]) + @@unique([value, email], name: "sqlite_autoindex_variables_2") } ` @@ -1022,3 +1216,43 @@ model b { a a @map(["one", "two"]) @relation(references: [one, two]) } ` + +exports['await teams.updateMany({ data: { name: \'b\' }, where: { name: null }, }) client.teams.findMany();'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + id Int @default(autoincrement()) @id + name String? +} +` + +exports['events.findMany({ where: { time: { lt: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } } })'] = ` +generator client { + provider = "prisma-client-js" + output = "***" +} + +datasource sqlite { + provider = "sqlite" + url = "***" +} + +model teams { + email String @unique + id Int @id + name String @unique +} + +model events { + id Int @default(autoincrement()) @id + time DateTime? +} +` diff --git a/cli/prisma2/src/__tests__/integrate.sqlite.test.ts b/cli/prisma2/src/__tests__/integrate.sqlite.test.ts index 6df9fa860d78..52d3ad5f94ed 100644 --- a/cli/prisma2/src/__tests__/integrate.sqlite.test.ts +++ b/cli/prisma2/src/__tests__/integrate.sqlite.test.ts @@ -997,17 +997,15 @@ function tests(): Test[] { ], }, { - todo: true, - // Empty result with created_at datetime not null DEFAULT CURRENT_TIMESTAMP up: ` create table posts ( id integer primary key not null, title varchar(50) not null, - created_at timestamp not null default now() + created_at datetime not null default current_timestamp ); - insert into posts ("title", "created_at") values ('A', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('B', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('C', '2020-01-14T11:10:19.573Z'); + insert into posts ("title", "created_at") values ('A', '1579000219573'); + insert into posts ("title", "created_at") values ('B', '1579000219573'); + insert into posts ("title", "created_at") values ('C', '1579000219573'); `, down: ` drop table if exists posts; @@ -1037,16 +1035,15 @@ function tests(): Test[] { ], }, { - todo: true, up: ` create table posts ( id integer primary key not null, title varchar(50) not null, - created_at timestamp not null default now() + created_at datetime not null default current_timestamp ); - insert into posts ("title", "created_at") values ('A', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('B', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('C', '2020-01-14T11:10:19.573Z'); + insert into posts ("title", "created_at") values ('A', '1579000219573'); + insert into posts ("title", "created_at") values ('B', '1579000219573'); + insert into posts ("title", "created_at") values ('C', '1579000219573'); `, down: ` drop table if exists posts; @@ -1057,16 +1054,15 @@ function tests(): Test[] { expect: [], }, { - todo: true, up: ` create table posts ( id integer primary key not null, title varchar(50) not null, - created_at timestamp not null default now() + created_at datetime not null default current_timestamp ); - insert into posts ("title", "created_at") values ('A', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('B', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('C', '2020-01-14T11:10:19.573Z'); + insert into posts ("title", "created_at") values ('A', '1579000219573'); + insert into posts ("title", "created_at") values ('B', '1579000219573'); + insert into posts ("title", "created_at") values ('C', '1579000219573'); `, down: ` drop table if exists posts; @@ -1077,16 +1073,15 @@ function tests(): Test[] { expect: [], }, { - todo: true, up: ` create table posts ( id integer primary key not null, title varchar(50) not null, - created_at timestamp not null default now() + created_at datetime not null default current_timestamp ); - insert into posts ("title", "created_at") values ('A', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('B', '2020-01-14T11:10:19.573Z'); - insert into posts ("title", "created_at") values ('C', '2020-01-14T11:10:19.573Z'); + insert into posts ("title", "created_at") values ('A', '1579000219573'); + insert into posts ("title", "created_at") values ('B', '1579000219573'); + insert into posts ("title", "created_at") values ('C', '1579000219573'); `, down: ` drop table if exists posts; @@ -1134,20 +1129,18 @@ function tests(): Test[] { }, }, { - todo: true, - // PANIC: called `Result::unwrap()` on an `Err` value: ErrorMessage { msg: "Could not parse stored DateTime string: 2018-09-04 00:00:00 (input contains invalid characters)" } up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events; `, do: async client => { - return client.events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } }) + return await client.events.findMany({ where: { time: new Date(Date.UTC(2018, 8, 4, 0, 0, 0, 0)) } }) }, expect: [ { @@ -1157,13 +1150,12 @@ function tests(): Test[] { ], }, { - todo: true, up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events; @@ -1174,13 +1166,12 @@ function tests(): Test[] { expect: [], }, { - todo: true, up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events; @@ -1196,13 +1187,12 @@ function tests(): Test[] { ], }, { - todo: true, up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events; @@ -1213,13 +1203,12 @@ function tests(): Test[] { expect: [], }, { - todo: true, up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events; @@ -1235,13 +1224,12 @@ function tests(): Test[] { ], }, { - todo: true, up: ` create table events ( id integer not null primary key, "time" datetime ); - insert into events ("time") values ('2018-09-04 00:00:00'); + insert into events ("time") values (1536019200000); `, down: ` drop table if exists events;