Skip to content

Commit

Permalink
Clear labels on remove
Browse files Browse the repository at this point in the history
  • Loading branch information
tysoncadenhead committed Aug 8, 2023
1 parent b633d1d commit 180aff6
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 22 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,26 @@ describe("My tests", () => {
});
```

## Resetting

Since this package persists data in memory, it is best practice to reset the data before each unit test using the `reset()` function

```js
import { data, reset } from "ampt-data-mock";

jest.mock("@ampt/data", () => ({
data,
}));

describe("My tests", () => {
beforeEach(() => {
reset();
});

// ...
});
```

## Notes

This is still a work in progress. The goal is to support all of the Ampt data API in memory, but we are starting with the simple use-cases.
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ampt-data-mock",
"version": "1.0.2",
"version": "1.0.3",
"description": "",
"main": "lib/index.js",
"scripts": {
Expand Down
4 changes: 3 additions & 1 deletion src/__tests__/data.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { data } from "../data";
import { data, reset } from "../data";

interface ITest {
hello: string;
}

describe("Data", () => {
beforeEach(() => reset());

it("should set data", async () => {
const setResult = (await data.set<ITest>("test:1", {
hello: "world",
Expand Down
20 changes: 19 additions & 1 deletion src/__tests__/labels.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { data } from "../data";
import { data, reset } from "../data";

interface ITest {
hello: string;
}

describe("Labels", () => {
beforeEach(() => reset());

it("Should query by label", async () => {
await data.set(
"test:1",
Expand Down Expand Up @@ -86,4 +88,20 @@ describe("Labels", () => {
expect(result.items.length).toBe(1);
expect(result.items[0].value.hello).toBe("universe");
});

it("Should delete a label", async () => {
await data.set(
"hi:1",
{ hello: "world" },
{
label1: "hiLabel:1",
}
);

await data.remove("hi:1");

const result = await data.getByLabel<ITest>("label1", "hiLabel:*");

expect(result.items.length).toBe(0);
});
});
57 changes: 38 additions & 19 deletions src/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,23 @@ let store = {
label3: {},
label4: {},
label5: {},
labels: {},
};

export const reset = () => {
store = {
root: {},
label1: {},
label2: {},
label3: {},
label4: {},
label5: {},
labels: {},
};
};

const labelKeys = ["label1", "label2", "label3", "label4", "label5"];

export const data: Data = {
get: async function <T>(
keys: Query | string[] | string,
Expand Down Expand Up @@ -159,9 +174,25 @@ export const data: Data = {
remove: async function (keys: string | string[]): Promise<boolean> {
if (typeof keys === "string") {
delete store.root[keys];

if (store.labels[keys]) {
labelKeys.forEach((labelKey) => {
if (store.labels[keys][labelKey]) {
delete store[labelKey][store.labels[keys][labelKey]];
}
});
}
} else {
keys.forEach((key) => {
delete store.root[key];

if (store.labels[key]) {
labelKeys.forEach((labelKey) => {
if (store.labels[key][labelKey]) {
delete store[labelKey][store.labels[key][labelKey]];
}
});
}
});
}
return true;
Expand Down Expand Up @@ -189,25 +220,13 @@ export const data: Data = {
if (typeof keys === "string") {
store.root[keys] = value;

if (typeof opts?.label1 === "string") {
store.label1[opts.label1] = value;
}

if (typeof opts?.label2 === "string") {
store.label1[opts.label2] = value;
}

if (typeof opts?.label3 === "string") {
store.label1[opts.label3] = value;
}

if (typeof opts?.label4 === "string") {
store.label1[opts.label4] = value;
}

if (typeof opts?.label5 === "string") {
store.label1[opts.label5] = value;
}
labelKeys.forEach((labelKey) => {
if (typeof opts?.[labelKey] === "string") {
store[labelKey][opts[labelKey]] = value;
store.labels[keys] = store.labels[keys] || {};
store.labels[keys][labelKey] = opts[labelKey];
}
});

return value as SetResponse<T>;
}
Expand Down

0 comments on commit 180aff6

Please sign in to comment.