Notes/spec/search/value_extractor.spec.js

90 lines
3.5 KiB
JavaScript
Raw Permalink Normal View History

const {note} = require('./becca_mocking.js');
const ValueExtractor = require('../../src/services/search/value_extractor');
const becca = require('../../src/becca/becca.js');
const SearchContext = require('../../src/services/search/search_context');
2021-04-04 22:44:22 +02:00
const dsc = new SearchContext();
2020-05-25 00:25:47 +02:00
describe("Value extractor", () => {
beforeEach(() => {
2021-04-16 23:00:08 +02:00
becca.reset();
2020-05-25 00:25:47 +02:00
});
it("simple title extraction", async () => {
const europe = note("Europe").note;
2021-04-04 22:44:22 +02:00
const valueExtractor = new ValueExtractor(dsc, ["note", "title"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
expect(valueExtractor.extract(europe)).toEqual("Europe");
});
it("label extraction", async () => {
const austria = note("Austria")
.label("Capital", "Vienna")
.note;
2021-04-04 22:44:22 +02:00
let valueExtractor = new ValueExtractor(dsc, ["note", "labels", "capital"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
2020-12-15 15:09:00 +01:00
expect(valueExtractor.extract(austria)).toEqual("Vienna");
2020-05-25 00:25:47 +02:00
2021-04-04 22:44:22 +02:00
valueExtractor = new ValueExtractor(dsc, ["#capital"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
2020-12-15 15:09:00 +01:00
expect(valueExtractor.extract(austria)).toEqual("Vienna");
2020-05-25 00:25:47 +02:00
});
it("parent/child property extraction", async () => {
const vienna = note("Vienna");
const europe = note("Europe")
.child(note("Austria")
.child(vienna));
2021-04-04 22:44:22 +02:00
let valueExtractor = new ValueExtractor(dsc, ["note", "children", "children", "title"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
expect(valueExtractor.extract(europe.note)).toEqual("Vienna");
2021-04-04 22:44:22 +02:00
valueExtractor = new ValueExtractor(dsc, ["note", "parents", "parents", "title"]);
2020-05-25 00:25:47 +02:00
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);
2021-04-04 22:44:22 +02:00
let valueExtractor = new ValueExtractor(dsc, ["note", "relations", "neighbor", "labels", "capital"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
2020-12-14 23:59:05 +01:00
expect(valueExtractor.extract(austria.note)).toEqual("Prague");
2020-05-25 00:25:47 +02:00
2021-04-04 22:44:22 +02:00
valueExtractor = new ValueExtractor(dsc, ["~neighbor", "labels", "capital"]);
2020-05-25 00:25:47 +02:00
expect(valueExtractor.validate()).toBeFalsy();
2020-12-14 23:59:05 +01:00
expect(valueExtractor.extract(austria.note)).toEqual("Prague");
2020-05-25 00:25:47 +02:00
});
});
describe("Invalid value extractor property path", () => {
it('each path must start with "note" (or label/relation)',
2021-04-04 22:44:22 +02:00
() => expect(new ValueExtractor(dsc, ["neighbor"]).validate()).toBeTruthy());
2020-05-25 00:25:47 +02:00
it("extra path element after terminal label",
2021-04-04 22:44:22 +02:00
() => expect(new ValueExtractor(dsc, ["~neighbor", "labels", "capital", "noteId"]).validate()).toBeTruthy());
2020-05-25 00:25:47 +02:00
it("extra path element after terminal title",
2021-04-04 22:44:22 +02:00
() => expect(new ValueExtractor(dsc, ["note", "title", "isProtected"]).validate()).toBeTruthy());
2020-05-25 00:25:47 +02:00
it("relation name and note property is missing",
2021-04-04 22:44:22 +02:00
() => expect(new ValueExtractor(dsc, ["note", "relations"]).validate()).toBeTruthy());
2020-05-25 00:25:47 +02:00
it("relation is specified but target note property is not specified",
2021-04-04 22:44:22 +02:00
() => expect(new ValueExtractor(dsc, ["note", "relations", "myrel"]).validate()).toBeTruthy());
2020-05-25 00:25:47 +02:00
});