0.3.3 • Published 9 months ago

@karmaniverous/mock-db v0.3.3

Weekly downloads
-
License
BSD-3-Clause
Repository
github
Last release
9 months ago

API DocumentationCHANGELOG

MockDb

The MockDb class wires up a local JSON data store to replicate some key behaviors of DynamoDB for testing purposes.

MockDb is not a database in any meaningful sense, nor does it express anything like the full range of DynamoDB's features! It's just a limited test fixture, to which I add features as I need them.

The current feature set includes:

  • query & querySync - Depending on the options passed, these methods behave like either a DynamoDB query or scan operation, including limited return sets with page keys.

  • All methods exist in synchronous & asynchronous versions. Async methods run with a normally-distributed delay.

That's it!

MockDB depends on entity-tools to define entity properties, indexable properties, and records. This package also provides the sort function used internally by MockDb.query.

Usage

You'll almost certainly run MockDb as a dev dependency. To install:

npm i -D @karmaniverous/mock-db

Then you can run:

import type { Entity } from '@karmaniverous/entity-tools';

import { MockDb, type QueryOptions } from '.';

// Specify the data type.
interface User extends Entity {
  partition: string;
  id: number;
  name: string;
}

// Create some data.
const users: User[] = [
  { partition: 'a', id: 4, name: 'Alice' },
  { partition: 'b', id: 3, name: 'Bob' },
  { partition: 'a', id: 2, name: 'Charlie' },
  { partition: 'a', id: 1, name: 'Dave' },
];

// Create a new instance of MockDb.
const mockDb = new MockDb(users);

// Perform a "scan" synchronously across partitions with a filter.
const scanResult = mockDb.querySync({
  filter: ({ id }) => id > 2,
  sortOrder: [{ property: 'id' }],
});

console.log(scanResult);

// {
//   count: 2,
//   items: [
//     { partition: 'b', id: 2, name: 'Bob' },
//     { partition: 'a', id: 3, name: 'Alice' }
//   ],
//   pageKey: undefined
// }

// Perform an asynchronous, paged, sorted "query" within a partition.
const queryOptions: QueryOptions<User> = {
  hashKey: 'partition',
  hashValue: 'a',
  indexComponents: ['partition', 'id'],
  limit: 2,
  sortOrder: [{ property: 'id' }],
};

let queryResult = await mockDb.query(queryOptions, 100);

console.log(queryResult);

// {
//   count: 2,
//   items: [
//     { partition: 'a', id: 1, name: 'Dave' },
//     { partition: 'a', id: 2, name: 'Charlie' }
//   ],
//   pageKey: { partition: 'a', id: 2 }
// }

// Use the returned pageKey to get the next page.
queryResult = await mockDb.query(
  {
    ...queryOptions,
    pageKey: queryResult.pageKey,
  },
  100,
);

console.log(queryResult);

// {
//   count: 1,
//   items: [ { partition: 'a', id: 4, name: 'Alice' } ],
//   pageKey: undefined
// }

See the API Documentation for more details.

Got questions or suggestions? Start a discussion!


Built for you with ❤️ on Bali! Find more great tools & templates on my GitHub Profile.

0.3.3

9 months ago

0.3.2

9 months ago

0.3.1

10 months ago

0.3.0

10 months ago

0.2.1

10 months ago

0.2.0

10 months ago

0.1.4

11 months ago

0.1.3

11 months ago

0.1.2

11 months ago

0.1.1-0

11 months ago

0.1.1

11 months ago

0.1.0

11 months ago

0.0.5

11 months ago

0.0.4

11 months ago

0.0.3

11 months ago

0.0.2

11 months ago

0.0.1

11 months ago