Skip to content

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinslin committed Aug 16, 2022
1 parent 7a7c1ce commit 111d162
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 2 deletions.
19 changes: 17 additions & 2 deletions packages/engine-server/src/drivers/SQLiteMetadataStore.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import {
asyncLoopOneAtATime,
DVault,
NoteProps,
NotePropsByIdDict,
VaultUtils,
} from "@dendronhq/common-all";
import fs from "fs-extra";
import _ from "lodash";
import { PrismaClient } from "../generated-prisma-client";
import fs from "fs-extra";

let _prisma: PrismaClient | undefined;

Expand All @@ -20,15 +21,20 @@ function getPrismaClient(): PrismaClient {
export type NoteIndexLightProps = {
fname: string;
id: string;
foo: string;
};

export class SQLiteMetadataStore {
constructor({ wsRoot }: { wsRoot: string }) {
constructor({ wsRoot, client }: { wsRoot: string; client?: PrismaClient }) {
if (_prisma) {
throw new Error(
"SQLiteMetadataStore constructor should only be called once"
);
}
if (client) {
_prisma = client;
return;
}
// "DATABASE_URL="file://Users/kevinlin/code/dendron/local/notes.db""
_prisma = new PrismaClient({
datasources: {
Expand All @@ -39,6 +45,10 @@ export class SQLiteMetadataStore {
});
}

static prisma() {
return getPrismaClient();
}

static async isDBInitialized() {
const query = `SELECT name FROM sqlite_master WHERE type='table' AND name='notes'`;
const resp = (await getPrismaClient().$queryRawUnsafe(query)) as {
Expand Down Expand Up @@ -97,6 +107,11 @@ export class SQLiteMetadataStore {
});
}

static async upsertNote(_note: NoteProps) {
// TODO: will be used to fill cache misses
throw Error("not impelmented");
}

static async bulkInsertAllNotesAndUpdateVaultMetadata({
notesIdDict,
vault,
Expand Down
4 changes: 4 additions & 0 deletions packages/engine-server/src/drivers/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,6 @@
export * from "./file";
export * from "./SQLiteMetadataStore";
export {
PrismaClient,
prisma as dendronPrisma,
} from "../generated-prisma-client";
1 change: 1 addition & 0 deletions packages/engine-test-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@
"cross-env": "^7.0.3",
"fs-extra": "^9.0.1",
"jest": "^28.1.0",
"jest-mock-extended": "^2.0.7",
"lodash": "^4.17.20",
"prompts": "^2.4.2",
"react": "^17.0.2",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`GIVEN sqlite store WHEN initialize, THEN metadata has all notes 1`] = `
Array [
"dendron.code-workspace",
"dendron.yml",
"hooks",
"metadata.db",
"vault1",
"vault2",
"vault3",
]
`;
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { ENGINE_HOOKS, runEngineTestV5 } from "../../..";
import fs from "fs-extra";
import { SQLiteMetadataStore } from "@dendronhq/engine-server";
import _ from "lodash";

describe("GIVEN sqlite store", () => {
test("WHEN initialize, THEN metadata has all notes", async () => {
await runEngineTestV5(
async ({ wsRoot, engine }) => {
const dirList = fs.readdirSync(wsRoot);
expect(dirList).toMatchSnapshot();
expect(dirList.includes("metadata.db")).toBeTruthy();
const notes = await SQLiteMetadataStore.prisma().notes.findMany();
expect(_.size(engine.notes)).toEqual(notes.length);
},
{
expect,
preSetupHook: ENGINE_HOOKS.setupBasic,
modConfigCb: (config) => {
config.workspace.metadataStore = "sqlite";
return config;
},
}
);
});
});
15 changes: 15 additions & 0 deletions packages/engine-test-utils/src/utils/prisma-mock.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { PrismaClient } from "@prisma/client";
import { mockDeep, mockReset, DeepMockProxy } from "jest-mock-extended";
import { dendronPrisma } from "@dendronhq/engine-server";

jest.mock("./client", () => ({
__esModule: true,
default: mockDeep<PrismaClient>(),
}));

beforeEach(() => {
mockReset(prismaMock);
});

export const prismaMock =
dendronPrisma as unknown as DeepMockProxy<PrismaClient>;
12 changes: 12 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -15629,6 +15629,13 @@ jest-message-util@^28.1.0:
slash "^3.0.0"
stack-utils "^2.0.3"

jest-mock-extended@^2.0.7:
version "2.0.7"
resolved "https://registry.npmjs.org/jest-mock-extended/-/jest-mock-extended-2.0.7.tgz#73ad87d8a744949bc3415d840f03468229f73f2a"
integrity sha512-h8brJJN5BZb03hTwplvt+raT6Nj0U2U71Z26Py12Qc3kvYnAjDW/zSuQJLnXCNyyufy592VC9k3X7AOz+2H52g==
dependencies:
ts-essentials "^7.0.3"

jest-mock@^26.6.2:
version "26.6.2"
resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz#d6cb712b041ed47fe0d9b6fc3474bc6543feb302"
Expand Down Expand Up @@ -24823,6 +24830,11 @@ tryer@^1.0.1:
resolved "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==

ts-essentials@^7.0.3:
version "7.0.3"
resolved "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38"
integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==

ts-json-schema-generator@^0.95.0:
version "0.95.0"
resolved "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-0.95.0.tgz#726cd4e0979cb772da57a6d7581474e87015adfc"
Expand Down

0 comments on commit 111d162

Please sign in to comment.