zenstack/packages/plugins/tanstack-query/tests/plugin.test.ts
2023-10-28 22:09:41 -07:00

176 lines
4 KiB
TypeScript

/// <reference types="@types/jest" />
import { loadSchema } from '@zenstackhq/testtools';
describe('Tanstack Query Plugin Tests', () => {
let origDir: string;
beforeAll(() => {
origDir = process.cwd();
});
afterEach(() => {
process.chdir(origDir);
});
const sharedModel = `
model User {
id String @id
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
email String @unique
role role @default(USER)
posts post_Item[]
}
enum role {
USER
ADMIN
}
model post_Item {
id String @id
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String
author User? @relation(fields: [authorId], references: [id])
authorId String?
published Boolean @default(false)
viewCount Int @default(0)
}
model Foo {
id String @id
@@ignore
}
`;
it('react-query run plugin v4', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'react'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['react@18.2.0', '@types/react@18.2.0', '@tanstack/react-query@4.29.7'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
it('react-query run plugin v5', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'react'
version = 'v5'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['react@18.2.0', '@types/react@18.2.0', '@tanstack/react-query@^5.0.0'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
it('vue-query run plugin v4', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'vue'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['vue@^3.3.4', '@tanstack/vue-query@4.37.0'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
it('vue-query run plugin v5', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'vue'
version = 'v5'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['vue@^3.3.4', '@tanstack/vue-query@latest'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
it('svelte-query run plugin v4', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'svelte'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['svelte@^3.0.0', '@tanstack/svelte-query@4.29.7'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
it('svelte-query run plugin v5', async () => {
await loadSchema(
`
plugin tanstack {
provider = '${process.cwd()}/dist'
output = '$projectRoot/hooks'
target = 'svelte'
version = 'v5'
}
${sharedModel}
`,
{
provider: 'postgresql',
pushDb: false,
extraDependencies: ['svelte@^3.0.0', '@tanstack/svelte-query@^5.0.0'],
copyDependencies: [`${origDir}/dist`],
compile: true,
}
);
});
});