mirror of
https://github.com/zadam/trilium.git
synced 2024-11-10 17:13:45 +08:00
86 lines
3.4 KiB
JavaScript
86 lines
3.4 KiB
JavaScript
const {NoteBuilder, findNoteByTitle, note} = require('./note_cache_mocking');
|
|
const ValueExtractor = require('../src/services/search/value_extractor');
|
|
const noteCache = require('../src/services/note_cache/note_cache');
|
|
|
|
describe("Value extractor", () => {
|
|
beforeEach(() => {
|
|
noteCache.reset();
|
|
});
|
|
|
|
it("simple title extraction", async () => {
|
|
const europe = note("Europe").note;
|
|
|
|
const valueExtractor = new ValueExtractor(["note", "title"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(europe)).toEqual("Europe");
|
|
});
|
|
|
|
it("label extraction", async () => {
|
|
const austria = note("Austria")
|
|
.label("Capital", "Vienna")
|
|
.note;
|
|
|
|
let valueExtractor = new ValueExtractor(["note", "labels", "capital"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(austria)).toEqual("vienna");
|
|
|
|
valueExtractor = new ValueExtractor(["#capital"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(austria)).toEqual("vienna");
|
|
});
|
|
|
|
it("parent/child property extraction", async () => {
|
|
const vienna = note("Vienna");
|
|
const europe = note("Europe")
|
|
.child(note("Austria")
|
|
.child(vienna));
|
|
|
|
let valueExtractor = new ValueExtractor(["note", "children", "children", "title"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(europe.note)).toEqual("Vienna");
|
|
|
|
valueExtractor = new ValueExtractor(["note", "parents", "parents", "title"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(vienna.note)).toEqual("Europe");
|
|
});
|
|
|
|
it("extract through relation", async () => {
|
|
const czechRepublic = note("Czech Republic").label("capital", "Prague");
|
|
const slovakia = note("Slovakia").label("capital", "Bratislava");
|
|
const austria = note("Austria")
|
|
.relation('neighbor', czechRepublic.note)
|
|
.relation('neighbor', slovakia.note);
|
|
|
|
let valueExtractor = new ValueExtractor(["note", "relations", "neighbor", "labels", "capital"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(austria.note)).toEqual("prague");
|
|
|
|
valueExtractor = new ValueExtractor(["~neighbor", "labels", "capital"]);
|
|
|
|
expect(valueExtractor.validate()).toBeFalsy();
|
|
expect(valueExtractor.extract(austria.note)).toEqual("prague");
|
|
});
|
|
});
|
|
|
|
describe("Invalid value extractor property path", () => {
|
|
it('each path must start with "note" (or label/relation)',
|
|
() => expect(new ValueExtractor(["neighbor"]).validate()).toBeTruthy());
|
|
|
|
it("extra path element after terminal label",
|
|
() => expect(new ValueExtractor(["~neighbor", "labels", "capital", "noteId"]).validate()).toBeTruthy());
|
|
|
|
it("extra path element after terminal title",
|
|
() => expect(new ValueExtractor(["note", "title", "isProtected"]).validate()).toBeTruthy());
|
|
|
|
it("relation name and note property is missing",
|
|
() => expect(new ValueExtractor(["note", "relations"]).validate()).toBeTruthy());
|
|
|
|
it("relation is specified but target note property is not specified",
|
|
() => expect(new ValueExtractor(["note", "relations", "myrel"]).validate()).toBeTruthy());
|
|
});
|