mirror of
https://github.com/DeBrosOfficial/network-ts-sdk.git
synced 2025-12-11 01:58:49 +00:00
150 lines
3.9 KiB
TypeScript
150 lines
3.9 KiB
TypeScript
import { describe, it, expect, beforeEach } from "vitest";
|
|
import { createTestClient, skipIfNoGateway, generateTableName } from "./setup";
|
|
|
|
describe("Database", () => {
|
|
if (skipIfNoGateway()) {
|
|
console.log("Skipping database tests");
|
|
}
|
|
|
|
let tableName: string;
|
|
|
|
beforeEach(() => {
|
|
tableName = generateTableName();
|
|
});
|
|
|
|
it("should create a table", async () => {
|
|
const client = await createTestClient();
|
|
|
|
await client.db.createTable(
|
|
`CREATE TABLE ${tableName} (id INTEGER PRIMARY KEY, name TEXT, email TEXT)`
|
|
);
|
|
|
|
// Verify by querying schema
|
|
const schema = await client.db.getSchema();
|
|
expect(schema).toBeDefined();
|
|
});
|
|
|
|
it("should insert and query data", async () => {
|
|
const client = await createTestClient();
|
|
|
|
// Create table
|
|
await client.db.createTable(
|
|
`CREATE TABLE ${tableName} (id INTEGER PRIMARY KEY, name TEXT, email TEXT)`
|
|
);
|
|
|
|
// Insert data
|
|
const result = await client.db.exec(
|
|
`INSERT INTO ${tableName} (name, email) VALUES (?, ?)`,
|
|
["Alice", "alice@example.com"]
|
|
);
|
|
expect(result.rows_affected).toBeGreaterThan(0);
|
|
|
|
// Query data
|
|
const rows = await client.db.query(
|
|
`SELECT * FROM ${tableName} WHERE email = ?`,
|
|
["alice@example.com"]
|
|
);
|
|
expect(rows).toHaveLength(1);
|
|
expect(rows[0].name).toBe("Alice");
|
|
});
|
|
|
|
it("should use find() and findOne()", async () => {
|
|
const client = await createTestClient();
|
|
|
|
// Create table
|
|
await client.db.createTable(
|
|
`CREATE TABLE ${tableName} (id INTEGER PRIMARY KEY, name TEXT, email TEXT)`
|
|
);
|
|
|
|
// Insert data
|
|
await client.db.exec(
|
|
`INSERT INTO ${tableName} (name, email) VALUES (?, ?)`,
|
|
["Bob", "bob@example.com"]
|
|
);
|
|
|
|
// Find one
|
|
const bob = await client.db.findOne(tableName, {
|
|
email: "bob@example.com",
|
|
});
|
|
expect(bob).toBeDefined();
|
|
expect(bob?.name).toBe("Bob");
|
|
|
|
// Find all
|
|
const all = await client.db.find(tableName, {});
|
|
expect(all.length).toBeGreaterThan(0);
|
|
});
|
|
|
|
it("should use QueryBuilder", async () => {
|
|
const client = await createTestClient();
|
|
|
|
// Create table
|
|
await client.db.createTable(
|
|
`CREATE TABLE ${tableName} (id INTEGER PRIMARY KEY, name TEXT, email TEXT, active INTEGER)`
|
|
);
|
|
|
|
// Insert test data
|
|
await client.db.exec(
|
|
`INSERT INTO ${tableName} (name, email, active) VALUES (?, ?, ?)`,
|
|
["Charlie", "charlie@example.com", 1]
|
|
);
|
|
await client.db.exec(
|
|
`INSERT INTO ${tableName} (name, email, active) VALUES (?, ?, ?)`,
|
|
["Diana", "diana@example.com", 0]
|
|
);
|
|
|
|
// Query with builder
|
|
const qb = client.db.createQueryBuilder(tableName);
|
|
const active = await qb
|
|
.where("active = ?", [1])
|
|
.orderBy("name")
|
|
.getMany();
|
|
|
|
expect(active.length).toBeGreaterThan(0);
|
|
expect(active[0].name).toBe("Charlie");
|
|
});
|
|
|
|
it("should use Repository for save/remove", async () => {
|
|
const client = await createTestClient();
|
|
|
|
// Create table
|
|
await client.db.createTable(
|
|
`CREATE TABLE ${tableName} (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, email TEXT)`
|
|
);
|
|
|
|
const repo = client.db.repository<{
|
|
id?: number;
|
|
name: string;
|
|
email: string;
|
|
}>(tableName);
|
|
|
|
// Save (insert)
|
|
const entity = { name: "Eve", email: "eve@example.com" };
|
|
await repo.save(entity);
|
|
expect(entity.id).toBeDefined();
|
|
|
|
// Find one
|
|
const found = await repo.findOne({ email: "eve@example.com" });
|
|
expect(found).toBeDefined();
|
|
expect(found?.name).toBe("Eve");
|
|
|
|
// Update
|
|
if (found) {
|
|
found.name = "Eve Updated";
|
|
await repo.save(found);
|
|
}
|
|
|
|
// Verify update
|
|
const updated = await repo.findOne({ id: entity.id });
|
|
expect(updated?.name).toBe("Eve Updated");
|
|
|
|
// Remove
|
|
if (updated) {
|
|
await repo.remove(updated);
|
|
}
|
|
|
|
// Verify deletion
|
|
const deleted = await repo.findOne({ id: entity.id });
|
|
expect(deleted).toBeNull();
|
|
});
|
|
});
|