Adding a class wrapper incase using get/put functions multiple times, functions like the PouchDB constructor.
This commit is contained in:
parent
b4bed6c0ce
commit
56956dba4f
|
@ -1,5 +1,5 @@
|
|||
require("../../../tests/utilities/TestConfiguration")
|
||||
const { get, put } = require("../writethrough")
|
||||
const { Writethrough } = require("../writethrough")
|
||||
const { dangerousGetDB } = require("../../db")
|
||||
const tk = require("timekeeper")
|
||||
|
||||
|
@ -9,20 +9,20 @@ tk.freeze(START_DATE)
|
|||
const DELAY = 5000
|
||||
|
||||
const db = dangerousGetDB("test")
|
||||
const writethrough = new Writethrough(db)
|
||||
|
||||
describe("writethrough", () => {
|
||||
|
||||
describe("put", () => {
|
||||
let first
|
||||
it("should be able to store, will go to DB", async () => {
|
||||
const response = await put(db,{ _id: "test", value: 1 }, DELAY)
|
||||
const response = await writethrough.put({ _id: "test", value: 1 }, DELAY)
|
||||
const output = await db.get(response._id)
|
||||
first = output
|
||||
expect(output.value).toBe(1)
|
||||
})
|
||||
|
||||
it("second put shouldn't update DB", async () => {
|
||||
const response = await put(db, { ...first, value: 2 }, DELAY)
|
||||
const response = await writethrough.put({ ...first, value: 2 }, DELAY)
|
||||
const output = await db.get(response._id)
|
||||
expect(first._rev).toBe(output._rev)
|
||||
expect(output.value).toBe(1)
|
||||
|
@ -30,7 +30,7 @@ describe("writethrough", () => {
|
|||
|
||||
it("should put it again after delay period", async () => {
|
||||
tk.freeze(START_DATE + DELAY + 1)
|
||||
const response = await put(db, { ...first, value: 3 }, DELAY)
|
||||
const response = await writethrough.put({ ...first, value: 3 }, DELAY)
|
||||
const output = await db.get(response._id)
|
||||
expect(response._rev).not.toBe(first._rev)
|
||||
expect(output.value).toBe(3)
|
||||
|
@ -39,7 +39,7 @@ describe("writethrough", () => {
|
|||
|
||||
describe("get", () => {
|
||||
it("should be able to retrieve", async () => {
|
||||
const response = await get(db, "test")
|
||||
const response = await writethrough.get("test")
|
||||
expect(response.value).toBe(3)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -21,11 +21,11 @@ function makeCacheItem(value: any, lastWrite: number | null = null): CacheItem {
|
|||
return { value, lastWrite: lastWrite || Date.now() }
|
||||
}
|
||||
|
||||
exports.put = async (
|
||||
export async function put(
|
||||
db: PouchDB.Database,
|
||||
value: any,
|
||||
writeRateMs: number = DEFAULT_WRITE_RATE_MS
|
||||
) => {
|
||||
) {
|
||||
const cache = await getCache()
|
||||
const key = value._id
|
||||
let cacheItem: CacheItem | undefined = await cache.get(key)
|
||||
|
@ -46,7 +46,7 @@ exports.put = async (
|
|||
return output
|
||||
}
|
||||
|
||||
exports.get = async (db: PouchDB.Database, id: string): Promise<any> => {
|
||||
export async function get(db: PouchDB.Database, id: string): Promise<any> {
|
||||
const cache = await getCache()
|
||||
let cacheItem: CacheItem = await cache.get(id)
|
||||
if (!cacheItem) {
|
||||
|
@ -56,3 +56,18 @@ exports.get = async (db: PouchDB.Database, id: string): Promise<any> => {
|
|||
}
|
||||
return cacheItem.value
|
||||
}
|
||||
|
||||
export class Writethrough {
|
||||
db: PouchDB.Database
|
||||
constructor(db: PouchDB.Database) {
|
||||
this.db = db
|
||||
}
|
||||
|
||||
async put(value: any, writeRateMs: number = DEFAULT_WRITE_RATE_MS) {
|
||||
return put(this.db, value, writeRateMs)
|
||||
}
|
||||
|
||||
async get(id: string) {
|
||||
return get(this.db, id)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue