@fewer/adapter-postgres
Version:
A Fewer database adapter to connect to Postgres
123 lines • 4.64 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fewer_1 = require("fewer");
const __1 = require("..");
const config_1 = __importDefault(require("./config"));
const setup_1 = require("./setup");
function getSchemaAndRepos(database) {
const schema = fewer_1.createSchema()
.table(database, 'users', { primaryKey: 'id' }, t => ({
id: t.bigserial(),
first_name: t.string(),
last_name: t.string(),
}))
.table(database, 'posts', { primaryKey: 'id' }, t => ({
id: t.bigserial(),
title: t.string(),
user_id: t.bigint(),
subtitle: t.string(),
}));
const Users = fewer_1.createRepository(schema.tables.users);
const Posts = fewer_1.createRepository(schema.tables.posts);
const userPosts = fewer_1.createHasMany(Users, Posts, 'user_id');
const belongsToUser = fewer_1.createBelongsTo(Users, 'user_id');
return {
schema,
Users,
Posts,
userPosts,
belongsToUser,
};
}
describe('join associations', () => {
describe('postgres', () => {
let database;
let adapter;
beforeEach(async () => {
await setup_1.prepare();
adapter = new __1.Adapter(config_1.default);
database = fewer_1.createDatabase({ adapter });
await database.connect();
const migration = fewer_1.createMigration(1, database, {
change: (m, t) => m
.createTable('users', { primaryKey: 'id' }, {
id: t.bigserial(),
first_name: t.string(),
last_name: t.string(),
})
.createTable('posts', { primaryKey: 'id' }, {
id: t.bigserial(),
user_id: t.bigint(),
title: t.string(),
subtitle: t.string(),
}),
});
await migration.run('up');
});
afterEach(async () => {
await database.disconnect();
});
it('can join users <-> posts', async () => {
const dbTypes = getSchemaAndRepos(database);
const emilyId = await dbTypes.Users.create({
first_name: 'Emily',
last_name: 'Dobervich',
});
const jordanId = await dbTypes.Users.create({
first_name: 'Jordan',
last_name: 'Gensler',
});
const fooId = await dbTypes.Users.create({
first_name: 'Foo',
last_name: 'Bar',
});
await dbTypes.Posts.create({
user_id: emilyId.id,
title: 'How to use Fewer',
});
await dbTypes.Posts.create({
user_id: jordanId.id,
title: 'Abusing Typescript',
});
await dbTypes.Posts.create({
user_id: jordanId.id,
title: 'Ten Typescript Type Tricks',
});
const results = await dbTypes.Users.join('posts', dbTypes.userPosts);
expect(results.sort((a, b) => a.id - b.id)).toMatchSnapshot();
});
it('nested joins', async () => {
const dbTypes = getSchemaAndRepos(database);
const emilyId = await dbTypes.Users.create({
first_name: 'Emily',
last_name: 'Dobervich',
});
const jordanId = await dbTypes.Users.create({
first_name: 'Jordan',
last_name: 'Gensler',
});
const fooId = await dbTypes.Users.create({
first_name: 'Foo',
last_name: 'Bar',
});
await dbTypes.Posts.create({
user_id: emilyId.id,
title: 'How to use Fewer',
});
await dbTypes.Posts.create({
user_id: jordanId.id,
title: 'Abusing Typescript',
});
await dbTypes.Posts.create({
user_id: jordanId.id,
title: 'Ten Typescript Type Tricks',
});
const results = await dbTypes.Users.join('posts', dbTypes.userPosts.join('user', dbTypes.belongsToUser)).where({ posts: { user: { first_name: 'Emily' } } });
expect(results.sort((a, b) => a.id - b.id)).toMatchSnapshot();
});
});
});
//# sourceMappingURL=joins.test.js.map