alepha
Version:
Easy-to-use modern TypeScript framework for building many kind of applications.
201 lines (187 loc) • 7.07 kB
text/typescript
import { Alepha } from "alepha";
import { describe, it } from "vitest";
import { AlephaOrmPostgres } from "../postgres/index.ts";
import {
testAllTypes,
testBasicCrud,
testConditionsWithSiblings,
testCrudWithTimestamps,
testMultipleOperators,
testOrderByModes,
testPagination,
testPaginationSort,
testPaginationWithQueryLimit,
testPgAttr,
testRepositoryHooks,
testSaveWithCustomPrimaryKey,
testSaveWithDeletedFields,
testSerialIdOperations,
testTransactionThrowsWhenUnsupported,
testUpsert,
testUuidIdOperations,
} from "./$repository-tests.ts";
describe("$repository", () => {
describe("attributes", () => {
it("should filter out attributes not defined in schema (sqlite)", async () => {
await testPgAttr(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should filter out attributes not defined in schema (postgres)", async () => {
await testPgAttr(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("all types", () => {
it("should handle all supported data types (sqlite)", async () => {
await testAllTypes(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should handle all supported data types (postgres)", async () => {
await testAllTypes(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("crud", () => {
it("should support basic CRUD operations (sqlite)", async () => {
await testBasicCrud(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should support basic CRUD operations (postgres)", async () => {
await testBasicCrud(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("hooks", () => {
it("should fire hooks for all operations (sqlite)", async () => {
await testRepositoryHooks(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should fire hooks for all operations (postgres)", async () => {
await testRepositoryHooks(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("or/and with sibling conditions", () => {
it("should AND-combine or/and with sibling field conditions (sqlite)", async () => {
await testConditionsWithSiblings(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should AND-combine or/and with sibling field conditions (postgres)", async () => {
await testConditionsWithSiblings(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("orderBy", () => {
it("should support all 3 orderBy modes (sqlite)", async () => {
await testOrderByModes(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should support all 3 orderBy modes (postgres)", async () => {
await testOrderByModes(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("pagination sort", () => {
it("should support pagination with sort format (sqlite)", async () => {
await testPaginationSort(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should support pagination with sort format (postgres)", async () => {
await testPaginationSort(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("save", () => {
it("should save an entity with deleted fields (sqlite)", async () => {
await testSaveWithDeletedFields(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should save an entity with deleted fields (postgres)", async () => {
await testSaveWithDeletedFields(Alepha.create().with(AlephaOrmPostgres));
});
it("should save an entity with custom primary key (sqlite)", async () => {
await testSaveWithCustomPrimaryKey(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should save an entity with custom primary key (postgres)", async () => {
await testSaveWithCustomPrimaryKey(
Alepha.create().with(AlephaOrmPostgres),
);
});
});
describe("transaction", () => {
it("should throw when driver does not support transactions (sqlite)", async () => {
await testTransactionThrowsWhenUnsupported(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
});
describe("upsert", () => {
it("should support upsert operations (sqlite)", async () => {
await testUpsert(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should support upsert operations (postgres)", async () => {
await testUpsert(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("id operations", () => {
it("should handle serial id operations (sqlite)", async () => {
await testSerialIdOperations(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should handle serial id operations (postgres)", async () => {
await testSerialIdOperations(Alepha.create().with(AlephaOrmPostgres));
});
it("should handle uuid id operations (sqlite)", async () => {
await testUuidIdOperations(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should handle uuid id operations (postgres)", async () => {
await testUuidIdOperations(Alepha.create().with(AlephaOrmPostgres));
});
it("should handle multiple operators gte & lte (sqlite)", async () => {
await testMultipleOperators(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should handle multiple operators gte & lte (postgres)", async () => {
await testMultipleOperators(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("timestamps", () => {
it("should handle CRUD with timestamps (sqlite)", async () => {
await testCrudWithTimestamps(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should handle CRUD with timestamps (postgres)", async () => {
await testCrudWithTimestamps(Alepha.create().with(AlephaOrmPostgres));
});
});
describe("pagination", () => {
it("should return correct pagination metadata (sqlite)", async () => {
await testPagination(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should return correct pagination metadata (postgres)", async () => {
await testPagination(Alepha.create().with(AlephaOrmPostgres));
});
it("should detect the next page when size comes from query.limit (sqlite)", async () => {
await testPaginationWithQueryLimit(
Alepha.create({ env: { DATABASE_URL: "sqlite://:memory:" } }),
);
});
it("should detect the next page when size comes from query.limit (postgres)", async () => {
await testPaginationWithQueryLimit(
Alepha.create().with(AlephaOrmPostgres),
);
});
});
});