Skip to content

Commit 80571e1

Browse files
committed
chore(@stenodb/lodash): add tests
1 parent 3dd3475 commit 80571e1

File tree

6 files changed

+127
-5
lines changed

6 files changed

+127
-5
lines changed

packages/lodash/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,9 @@
2727
],
2828
"scripts": {
2929
"dev": "pnpm build --watch src",
30-
"build": "tsup src/index.ts src/node.ts src/browser.ts --format esm,cjs --dts --clean"
30+
"build": "tsup src/index.ts src/node.ts src/browser.ts --format esm,cjs --dts --clean",
31+
"test": "tsx src/index.test.ts",
32+
"test:watch": "tsx watch src/index.test.ts"
3133
},
3234
"dependencies": {
3335
"@stenodb/browser": "workspace:3.4.1",
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import { BrowserProvider, LocalStorage } from '@stenodb/browser'
2+
import { test } from 'uvu'
3+
import * as assert from 'uvu/assert'
4+
import { BrowserLodash } from './browser.js'
5+
6+
const storage = new Map<string, string>()
7+
const mockStorage = () => ({
8+
length: 0,
9+
getItem: (key: string): string | null => storage.get(key) ?? null,
10+
setItem: (key: string, value: string) => storage.set(key, value),
11+
removeItem(key: string): void {
12+
storage.delete(key)
13+
},
14+
clear(): void {
15+
storage.clear()
16+
},
17+
key(index: number): string | null {
18+
return Object.values(storage.values())[index] ?? null
19+
}
20+
})
21+
22+
global.localStorage = mockStorage()
23+
global.sessionStorage = mockStorage()
24+
25+
class User {
26+
id: number
27+
name: string
28+
29+
constructor(id: number, name: string) {
30+
this.id = id
31+
this.name = name
32+
}
33+
}
34+
35+
test('BrowserLodash', () => {
36+
const user1 = new User(1, 'John')
37+
const user2 = new User(2, 'Alice')
38+
const adapter = new LocalStorage('users', User, user1)
39+
const provider = new BrowserProvider()
40+
const db = new BrowserLodash(provider.create(adapter))
41+
42+
db.read()
43+
assert.equal(db.data.value(), user1)
44+
45+
db.write(user2)
46+
assert.equal(db.data.value(), user2)
47+
48+
db.reset()
49+
assert.equal(db.data.value(), user1)
50+
assert.is(db.data.get('id').value(), 1)
51+
assert.is(db.data.get('name').value(), 'John')
52+
})
53+
54+
test.run()

packages/lodash/src/browser.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,23 @@ export class BrowserLodash<T> {
1818
return this.#provider.read()
1919
}
2020

21-
write(): void {
21+
write(data?: T): void {
22+
if (data) {
23+
this.#provider.data = data
24+
}
25+
2226
this.#provider.write()
2327
}
2428

25-
reset(): void {
29+
reset(data?: T): void {
30+
if (data) {
31+
this.#provider.initialData = data
32+
}
33+
2634
this.#provider.reset()
2735
}
36+
37+
exist(): boolean {
38+
return this.#provider.exists()
39+
}
2840
}

packages/lodash/src/index.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import './browser.test.js'
2+
import './node.test.js'

packages/lodash/src/node.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import { dirname, resolve } from 'node:path'
2+
import { fileURLToPath } from 'node:url'
3+
import { AsyncAdapter, NodeProvider } from '@stenodb/node'
4+
import { test } from 'uvu'
5+
import * as assert from 'uvu/assert'
6+
import { NodeLodash } from './node.js'
7+
8+
const provider = new NodeProvider({
9+
path: resolve(dirname(fileURLToPath(import.meta.url)), '..', 'db')
10+
})
11+
12+
class User {
13+
id: number
14+
name: string
15+
16+
constructor(id: number, name: string) {
17+
this.id = id
18+
this.name = name
19+
}
20+
}
21+
22+
test('NodeLodash', async () => {
23+
const adapter = new AsyncAdapter('users', User)
24+
const db = new NodeLodash(await provider.create(adapter))
25+
const user1 = new User(1, 'John')
26+
const user2 = new User(2, 'Alice')
27+
28+
if (await db.exist()) {
29+
await db.write(user1)
30+
}
31+
32+
assert.equal(db.data.value(), user1)
33+
assert.is(db.data.get('id').value(), 1)
34+
assert.is(db.data.get('name').value(), 'John')
35+
36+
await db.write(user2)
37+
assert.equal(db.data.value(), user2)
38+
})
39+
40+
test.run()

packages/lodash/src/node.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,23 @@ export class NodeLodash<T> {
1818
return await this.#provider.read()
1919
}
2020

21-
async write(): Promise<void> {
21+
async write(data?: T): Promise<void> {
22+
if (data) {
23+
this.#provider.data = data
24+
}
25+
2226
await this.#provider.write()
2327
}
2428

25-
async reset(): Promise<void> {
29+
async reset(data?: T): Promise<void> {
30+
if (data) {
31+
this.#provider.initialData = data
32+
}
33+
2634
await this.#provider.reset()
2735
}
36+
37+
async exist(): Promise<boolean> {
38+
return this.#provider.exists()
39+
}
2840
}

0 commit comments

Comments
 (0)