Move transaction type tests to TSD (#4208)

This commit is contained in:
Igor Savin 2021-01-06 02:31:49 +02:00 committed by GitHub
parent b766dbce2c
commit 000fde3f78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 99 additions and 84 deletions

View File

@ -229,8 +229,9 @@
"tsd": {
"directory": "test-tsd",
"compilerOptions": {
"esModuleInterop": true,
"module": "commonjs"
"esModuleInterop": false,
"module": "commonjs",
"target": "ES2017"
}
}
}

View File

@ -0,0 +1,96 @@
import knexDefault, { Knex } from '../types';
import { clientConfig } from './common';
import { expectType } from 'tsd';
const knexInstance = knexDefault(clientConfig);
interface Article {
id: number;
subject: string;
body?: string;
authorId?: string;
}
const main = async () => {
// # Select:
expectType<any[]>(await knexInstance.transaction((trx) => {
return trx.insert({ name: 'Old Books' }, 'id').into('articles');
}));
expectType<Pick<Article, "id" | "subject">[]>(await knexInstance.transaction((trx) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return trx
.insert(articles)
.into<Article>('articles')
.returning(['id', 'subject']);
}));
expectType<Article[]>(await knexInstance.transaction((trx) => {
return trx
.select('*')
.from<Article>('articles');
}));
expectType<Pick<Article, "id" | "subject">[]> (await knexInstance.transaction((trx) => {
const articles = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
] as const;
return trx
.insert(articles)
.into<Article>('articles')
.returning(['id', 'subject']);
}));
expectType<any[]> (await knexInstance.transaction(async (trx) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
}));
expectType<any[]>(await knexInstance.transaction(async (trx) => {
const articles: ReadonlyArray<Article> = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
}));
expectType<Pick<Article, "id" | "subject">[]> (await knexInstance.transaction(
async (
trx: Knex.Transaction<Article, Pick<Article, 'id' | 'subject'>[]>
) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
}
));
}

View File

@ -2667,88 +2667,6 @@ const main = async () => {
.select('id')
.modify<User, Pick<User, 'id' | 'age'>>(withAge);
// Transactions:
// $ExpectType any[]
await knexInstance.transaction((trx) => {
return trx.insert({ name: 'Old Books' }, 'id').into('articles');
});
// $ExpectType Pick<Article, "id" | "subject">[]
await knexInstance.transaction((trx) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return trx
.insert(articles)
.into<Article>('articles')
.returning(['id', 'subject']);
});
// $ExpectType Pick<Article, "id" | "subject">[]
await knexInstance.transaction((trx) => {
const articles = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
] as const;
return trx
.insert(articles)
.into<Article>('articles')
.returning(['id', 'subject']);
});
// $ExpectType any[]
await knexInstance.transaction(async (trx) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
});
// $ExpectType any[]
await knexInstance.transaction(async (trx) => {
const articles: ReadonlyArray<Article> = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
});
// $ExpectType Pick<Article, "id" | "subject">[]
await knexInstance.transaction(
async (
trx: Knex.Transaction<Article, Pick<Article, 'id' | 'subject'>[]>
) => {
const articles: Article[] = [
{ id: 1, subject: 'Canterbury Tales' },
{ id: 2, subject: 'Moby Dick' },
{ id: 3, subject: 'Hamlet' },
];
return knexInstance
.insert(articles, ['id', 'subject'])
.into<Article>('articles')
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback);
}
);
// With:
// $ExpectType any[]