Skip to content

Commit 49d6f2f

Browse files
committed
fixes #2, adjusts for null inserts, refactor for prettier
1 parent b002c77 commit 49d6f2f

File tree

10 files changed

+330
-246
lines changed

10 files changed

+330
-246
lines changed

__tests__/db.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import RDSDatabase from "../src/RDSDatabase";
22

3-
export const setupRDSDatabase = () => new RDSDatabase({
3+
export const setupRDSDatabase = (): RDSDatabase => new RDSDatabase({
44
region: process.env.RDS_DATA_API_CLIENT_REGION || "",
55
secretArn: process.env.RDS_DATA_API_CLIENT_SECRETARN || "",
66
resourceArn: process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN || "",
77
database: process.env.RDS_DATA_API_CLIENT_DATABASE || ""
88
});
99

10-
export const setupRDSDatabaseNoRegion = () => new RDSDatabase({
10+
export const setupRDSDatabaseNoRegion = (): RDSDatabase => new RDSDatabase({
1111
secretArn: process.env.RDS_DATA_API_CLIENT_SECRETARN || "",
1212
resourceArn: process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN || "",
1313
database: process.env.RDS_DATA_API_CLIENT_DATABASE || ""

__tests__/insert-null.test.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// eslint-disable-next-line import/no-extraneous-dependencies
2+
import { v4 as uuid } from 'uuid';
3+
import { setupRDSDatabase } from './db';
4+
5+
let id = uuid();
6+
let pk = 0;
7+
8+
test('Insert UUID as null, read back and update', async () => {
9+
const rds = setupRDSDatabase().getInstance();
10+
const writeResults = await rds.query('INSERT INTO TestList (id,uuid) VALUES(null,null)');
11+
pk = writeResults.insertId || 0;
12+
13+
let readResults = await rds.query('SELECT id, uuid FROM TestList WHERE id = :pk', { pk });
14+
15+
expect(writeResults.insertId).not.toBe(0);
16+
expect(writeResults.numberOfRecordsUpdated).toBe(1);
17+
18+
expect(readResults.data[0].uuid.isNull).toBe(true);
19+
expect(readResults.data[0].uuid.string).toBe(undefined);
20+
expect(readResults.data[0].id.string).not.toBe(0);
21+
22+
id = uuid();
23+
24+
await rds.query('UPDATE TestList SET uuid = :id WHERE id = :pk', { pk, id });
25+
readResults = await rds.query('SELECT id, uuid FROM TestList WHERE id = :pk', { pk });
26+
27+
expect(readResults.data.length).toBe(1);
28+
expect(readResults.columns.length).toBe(2);
29+
expect(readResults.insertId).toBe(0);
30+
expect(readResults.numberOfRecordsUpdated).toBe(0);
31+
expect(readResults.data[0].uuid.string).toBe(id);
32+
expect(readResults.data[0].id.string).not.toBe(0);
33+
});
34+
35+
test('Insert UUID as null from variable, read back and update', async () => {
36+
const rds = setupRDSDatabase().getInstance();
37+
const u: string | null = null;
38+
const writeResults = await rds.query('INSERT INTO TestList (id,uuid) VALUES(null,:u)', { u });
39+
pk = writeResults.insertId || 0;
40+
41+
let readResults = await rds.query('SELECT id, uuid FROM TestList WHERE id = :pk', { pk });
42+
43+
expect(writeResults.insertId).not.toBe(0);
44+
expect(writeResults.numberOfRecordsUpdated).toBe(1);
45+
46+
expect(readResults.data[0].uuid.isNull).toBe(true);
47+
expect(readResults.data[0].uuid.string).toBe(undefined);
48+
expect(readResults.data[0].id.string).not.toBe(0);
49+
50+
id = uuid();
51+
52+
await rds.query('UPDATE TestList SET uuid = :id WHERE id = :pk', { pk, id });
53+
readResults = await rds.query('SELECT id, uuid FROM TestList WHERE id = :pk', { pk });
54+
55+
expect(readResults.data.length).toBe(1);
56+
expect(readResults.columns.length).toBe(2);
57+
expect(readResults.insertId).toBe(0);
58+
expect(readResults.numberOfRecordsUpdated).toBe(0);
59+
expect(readResults.data[0].uuid.string).toBe(id);
60+
expect(readResults.data[0].id.string).not.toBe(0);
61+
});

__tests__/insert.test.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
1-
import { setupRDSDatabase } from "./db";
2-
import { v4 as uuid } from "uuid";
1+
// eslint-disable-next-line import/no-extraneous-dependencies
2+
import { v4 as uuid } from 'uuid';
3+
import { setupRDSDatabase } from './db';
34

45
const id = uuid();
56
let pk = 0;
67

7-
xtest('Insert UUID', async () => {
8-
const rds = setupRDSDatabase().getInstance();
9-
const results = await rds.query("INSERT INTO TestList (id,uuid) VALUES(null,:id)", { id });
8+
test('Insert UUID', async () => {
9+
const rds = setupRDSDatabase().getInstance();
10+
const results = await rds.query('INSERT INTO TestList (id,uuid) VALUES(null,:id)', { id });
1011

11-
expect(results.insertId).not.toBe(0);
12-
expect(results.numberOfRecordsUpdated).toBe(1);
12+
expect(results.insertId).not.toBe(0);
13+
expect(results.numberOfRecordsUpdated).toBe(1);
1314

14-
pk = results.insertId || 0;
15+
pk = results.insertId || 0;
1516
});
1617

17-
xtest('Read back a UUID and validate content', async () => {
18-
const rds = setupRDSDatabase().getInstance();
19-
const results = await rds.query("SELECT id, uuid FROM TestList WHERE id = :pk", { pk });
18+
test('Read back a UUID and validate content', async () => {
19+
const rds = setupRDSDatabase().getInstance();
20+
const results = await rds.query('SELECT id, uuid FROM TestList WHERE id = :pk', { pk });
2021

21-
expect(results.data.length).toBe(1);
22-
expect(results.columns.length).toBe(2);
23-
expect(results.insertId).toBe(0);
24-
expect(results.numberOfRecordsUpdated).toBe(0);
25-
expect(results.data[0].uuid.string).toBe(id);
26-
expect(results.data[0].id.string).not.toBe(0);
22+
expect(results.data.length).toBe(1);
23+
expect(results.columns.length).toBe(2);
24+
expect(results.insertId).toBe(0);
25+
expect(results.numberOfRecordsUpdated).toBe(0);
26+
expect(results.data[0].uuid.string).toBe(id);
27+
expect(results.data[0].id.string).not.toBe(0);
2728
});

__tests__/instantiation.test.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
1-
import {setupRDSDatabase, setupRDSDatabaseNoRegion} from "./db";
2-
import {config} from "aws-sdk";
1+
import { config } from 'aws-sdk';
2+
import { setupRDSDatabase, setupRDSDatabaseNoRegion } from './db';
33

4-
xtest('RDS Instantiation', () => {
5-
const rds = setupRDSDatabase();
6-
expect(process.env.RDS_DATA_API_CLIENT_DATABASE).not.toBe("");
7-
expect(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN).not.toBe("");
8-
expect(process.env.RDS_DATA_API_CLIENT_SECRETARN).not.toBe("");
9-
expect(process.env.RDS_DATA_API_CLIENT_REGION).not.toBe("");
10-
expect(rds.getOptions().database).toBe(process.env.RDS_DATA_API_CLIENT_DATABASE);
11-
expect(rds.getOptions().resourceArn).toBe(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN);
12-
expect(rds.getOptions().secretArn).toBe(process.env.RDS_DATA_API_CLIENT_SECRETARN);
13-
expect(rds.getOptions().region).toBe(process.env.RDS_DATA_API_CLIENT_REGION);
4+
test('RDS Instantiation', () => {
5+
const rds = setupRDSDatabase();
6+
expect(process.env.RDS_DATA_API_CLIENT_DATABASE).not.toBe('');
7+
expect(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN).not.toBe('');
8+
expect(process.env.RDS_DATA_API_CLIENT_SECRETARN).not.toBe('');
9+
expect(process.env.RDS_DATA_API_CLIENT_REGION).not.toBe('');
10+
expect(rds.getOptions().database).toBe(process.env.RDS_DATA_API_CLIENT_DATABASE);
11+
expect(rds.getOptions().resourceArn).toBe(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN);
12+
expect(rds.getOptions().secretArn).toBe(process.env.RDS_DATA_API_CLIENT_SECRETARN);
13+
expect(rds.getOptions().region).toBe(process.env.RDS_DATA_API_CLIENT_REGION);
1414
});
1515

16-
xtest('RDS Instantiation - no region', () => {
17-
config.region = process.env.RDS_DATA_API_CLIENT_REGION;
18-
const rds = setupRDSDatabaseNoRegion();
19-
expect(process.env.RDS_DATA_API_CLIENT_DATABASE).not.toBe("");
20-
expect(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN).not.toBe("");
21-
expect(process.env.RDS_DATA_API_CLIENT_SECRETARN).not.toBe("");
22-
expect(process.env.RDS_DATA_API_CLIENT_REGION).not.toBe("");
23-
expect(rds.getOptions().database).toBe(process.env.RDS_DATA_API_CLIENT_DATABASE);
24-
expect(rds.getOptions().resourceArn).toBe(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN);
25-
expect(rds.getOptions().secretArn).toBe(process.env.RDS_DATA_API_CLIENT_SECRETARN);
26-
expect(rds.getOptions().region).toBe(process.env.RDS_DATA_API_CLIENT_REGION);
27-
});
16+
test('RDS Instantiation - no region', () => {
17+
config.region = process.env.RDS_DATA_API_CLIENT_REGION;
18+
const rds = setupRDSDatabaseNoRegion();
19+
expect(process.env.RDS_DATA_API_CLIENT_DATABASE).not.toBe('');
20+
expect(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN).not.toBe('');
21+
expect(process.env.RDS_DATA_API_CLIENT_SECRETARN).not.toBe('');
22+
expect(process.env.RDS_DATA_API_CLIENT_REGION).not.toBe('');
23+
expect(rds.getOptions().database).toBe(process.env.RDS_DATA_API_CLIENT_DATABASE);
24+
expect(rds.getOptions().resourceArn).toBe(process.env.RDS_DATA_API_CLIENT_RESOURCE_ARN);
25+
expect(rds.getOptions().secretArn).toBe(process.env.RDS_DATA_API_CLIENT_SECRETARN);
26+
expect(rds.getOptions().region).toBe(process.env.RDS_DATA_API_CLIENT_REGION);
27+
});

__tests__/query.test.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
1-
import {setupRDSDatabase} from "./db";
1+
import { setupRDSDatabase } from './db';
22

3-
xtest('Read Query of a Single Integer check return payload', async () => {
4-
const rds = setupRDSDatabase().getInstance();
5-
const results = await rds.query("SELECT id FROM TestList WHERE id = 1 LIMIT 1");
6-
7-
expect(results.data.length).toBe(1);
8-
expect(results.columns.length).toBe(1);
9-
expect(results.insertId).toBe(0);
10-
expect(results.numberOfRecordsUpdated).toBe(0);
11-
expect(results.data[0].id.number).toBe(1);
3+
test('Read Query of a Single Integer check return payload', async () => {
4+
const rds = setupRDSDatabase().getInstance();
5+
const results = await rds.query('SELECT id FROM TestList WHERE id = 1 LIMIT 1');
6+
7+
expect(results.data.length).toBe(1);
8+
expect(results.columns.length).toBe(1);
9+
expect(results.insertId).toBe(0);
10+
expect(results.numberOfRecordsUpdated).toBe(0);
11+
expect(results.data[0].id.number).toBe(1);
1212
});
1313

14-
xtest('Read Query of a Single Integer check return payload', async () => {
15-
const rds = setupRDSDatabase().getInstance();
16-
const results = await rds.query("SELECT id FROM TestList WHERE id = 1 LIMIT 1");
17-
18-
expect(results.data.length).toBe(1);
19-
expect(results.columns.length).toBe(1);
20-
expect(results.insertId).toBe(0);
21-
expect(results.numberOfRecordsUpdated).toBe(0);
22-
expect(results.data[0].id.number).toBe(1);
23-
});
14+
test('Read Query of a Single Integer check return payload', async () => {
15+
const rds = setupRDSDatabase().getInstance();
16+
const results = await rds.query('SELECT id FROM TestList WHERE id = 1 LIMIT 1');
17+
18+
expect(results.data.length).toBe(1);
19+
expect(results.columns.length).toBe(1);
20+
expect(results.insertId).toBe(0);
21+
expect(results.numberOfRecordsUpdated).toBe(0);
22+
expect(results.data[0].id.number).toBe(1);
23+
});

__tests__/transaction.test.ts

Lines changed: 46 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,53 @@
1-
import {setupRDSDatabase} from "./db";
2-
import {v4 as uuid} from "uuid";
3-
4-
xtest('Simple Transaction', async () => {
5-
const rds = setupRDSDatabase().getInstance();
6-
const uuid1 = uuid();
7-
const uuid2 = uuid();
8-
const uuid3 = uuid();
9-
10-
const startInfo = await rds.query("SELECT COUNT(id) AS cn FROM TestList");
11-
12-
const results = await rds.transaction().then(async (transactionId) => {
13-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid1)", {uuid1}, transactionId);
14-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid2)", {uuid2}, transactionId);
15-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid3)", {uuid3}, transactionId);
16-
const results = await rds.commit(transactionId);
17-
return results;
18-
});
19-
20-
const endInfo = await rds.query("SELECT COUNT(id) AS cn FROM TestList");
21-
const startCount = (startInfo.data[0].cn.number ?? 0);
22-
const endCount = (endInfo.data[0].cn.number ?? 0);
23-
24-
expect(results).toBe("Transaction Committed");
25-
expect(startCount).toBe(endCount - 3);
1+
// eslint-disable-next-line import/no-extraneous-dependencies
2+
import { v4 as uuid } from 'uuid';
3+
import { setupRDSDatabase } from './db';
4+
5+
test('Simple Transaction', async () => {
6+
const rds = setupRDSDatabase().getInstance();
7+
const uuid1 = uuid();
8+
const uuid2 = uuid();
9+
const uuid3 = uuid();
10+
11+
const startInfo = await rds.query('SELECT COUNT(id) AS cn FROM TestList');
12+
13+
const results = await rds.transaction().then(async (transactionId) => {
14+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid1)', { uuid1 }, transactionId);
15+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid2)', { uuid2 }, transactionId);
16+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid3)', { uuid3 }, transactionId);
17+
const r = await rds.commit(transactionId);
18+
return r;
19+
});
20+
21+
expect(results).toBe('Transaction Committed');
22+
23+
const endInfo = await rds.query('SELECT COUNT(id) AS cn FROM TestList');
24+
const startCount = startInfo.data[0].cn.number ?? 0;
25+
const endCount = endInfo.data[0].cn.number ?? 0;
26+
27+
expect(results).toBe('Transaction Committed');
28+
expect(startCount).toBe(endCount - 3);
2629
});
2730

28-
xtest('Rollback Transaction', async () => {
29-
const rds = setupRDSDatabase().getInstance();
30-
const uuid1 = uuid();
31-
const uuid2 = uuid();
32-
const uuid3 = uuid();
31+
test('Rollback Transaction', async () => {
32+
const rds = setupRDSDatabase().getInstance();
33+
const uuid1 = uuid();
34+
const uuid2 = uuid();
35+
const uuid3 = uuid();
3336

34-
const startInfo = await rds.query("SELECT COUNT(id) AS cn FROM TestList");
37+
const startInfo = await rds.query('SELECT COUNT(id) AS cn FROM TestList');
3538

36-
const results = await rds.transaction().then(async (transactionId) => {
37-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid1)", {uuid1}, transactionId);
38-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid2)", {uuid2}, transactionId);
39-
await rds.query("INSERT INTO TestList (uuid) VALUES (:uuid3)", {uuid3}, transactionId);
40-
const results = await rds.rollback(transactionId);
41-
return results;
42-
});
39+
const results = await rds.transaction().then(async (transactionId) => {
40+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid1)', { uuid1 }, transactionId);
41+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid2)', { uuid2 }, transactionId);
42+
await rds.query('INSERT INTO TestList (uuid) VALUES (:uuid3)', { uuid3 }, transactionId);
43+
const r = await rds.rollback(transactionId);
44+
return r;
45+
});
4346

44-
const endInfo = await rds.query("SELECT COUNT(id) AS cn FROM TestList");
45-
const startCount = (startInfo.data[0].cn.number ?? 0);
46-
const endCount = (endInfo.data[0].cn.number ?? 0);
47+
const endInfo = await rds.query('SELECT COUNT(id) AS cn FROM TestList');
48+
const startCount = startInfo.data[0].cn.number ?? 0;
49+
const endCount = endInfo.data[0].cn.number ?? 0;
4750

48-
expect(results).toBe("Rollback Complete");
49-
expect(startCount).toBe(endCount);
51+
expect(results).toBe('Rollback Complete');
52+
expect(startCount).toBe(endCount);
5053
});

0 commit comments

Comments
 (0)