mirror of
				https://github.com/zadam/trilium.git
				synced 2025-10-30 18:05:55 +01:00 
			
		
		
		
	
		
			
	
	
		
			87 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			87 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()); | ||
|  | }); |