 e89f2f4b7b
			
		
	
	e89f2f4b7b
	
	
	
		
			
			Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			1101 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			1101 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| suite('search', function () {
 | |
|   setup(function () {
 | |
|     this.documents = [{
 | |
|       id: 'a',
 | |
|       title: 'Mr. Green kills Colonel Mustard',
 | |
|       body: 'Mr. Green killed Colonel Mustard in the study with the candlestick. Mr. Green is not a very nice fellow.',
 | |
|       wordCount: 19
 | |
|     },{
 | |
|       id: 'b',
 | |
|       title: 'Plumb waters plant',
 | |
|       body: 'Professor Plumb has a green plant in his study',
 | |
|       wordCount: 9
 | |
|     },{
 | |
|       id: 'c',
 | |
|       title: 'Scarlett helps Professor',
 | |
|       body: 'Miss Scarlett watered Professor Plumbs green plant while he was away from his office last week.',
 | |
|       wordCount: 16
 | |
|     }]
 | |
|   })
 | |
| 
 | |
|   suite('with build-time field boosts', function () {
 | |
|     setup(function () {
 | |
|       var self = this
 | |
| 
 | |
|       this.idx = lunr(function () {
 | |
|         this.ref('id')
 | |
|         this.field('title')
 | |
|         this.field('body', { boost: 10 })
 | |
| 
 | |
|         self.documents.forEach(function (document) {
 | |
|           this.add(document)
 | |
|         }, this)
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('no query boosts', function () {
 | |
|       var assertions = function () {
 | |
|         test('document b ranks highest', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|         })
 | |
|       }
 | |
| 
 | |
|       suite('#search', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('professor')
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
| 
 | |
|       suite('#query', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.query(function (q) {
 | |
|             q.term('professor')
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   suite('with build-time document boost', function () {
 | |
|     setup(function () {
 | |
|       var self = this
 | |
| 
 | |
|       this.idx = lunr(function () {
 | |
|         this.ref('id')
 | |
|         this.field('title')
 | |
|         this.field('body')
 | |
| 
 | |
|         self.documents.forEach(function (document) {
 | |
|           var boost = document.id == 'c' ? 10 : 1
 | |
|           this.add(document, { boost: boost })
 | |
|         }, this)
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('no query boost', function () {
 | |
|       var assertions = function () {
 | |
|         test('document c ranks highest', function () {
 | |
|           assert.equal('c', this.results[0].ref)
 | |
|         })
 | |
|       }
 | |
| 
 | |
|       suite('#search', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('plumb')
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
| 
 | |
|       suite('#query', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.query(function (q) {
 | |
|             q.term('plumb')
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('with query boost', function () {
 | |
|       var assertions = function () {
 | |
|         test('document b ranks highest', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|         })
 | |
|       }
 | |
| 
 | |
|       suite('#search', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('green study^10')
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
| 
 | |
|       suite('#query', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.query(function (q) {
 | |
|             q.term('green')
 | |
|             q.term('study', { boost: 10 })
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         assertions()
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| 
 | |
|   suite('without build-time boosts', function () {
 | |
|     setup(function () {
 | |
|       var self = this
 | |
| 
 | |
|       this.idx = lunr(function () {
 | |
|         this.ref('id')
 | |
|         this.field('title')
 | |
|         this.field('body')
 | |
| 
 | |
|         self.documents.forEach(function (document) {
 | |
|           this.add(document)
 | |
|         }, this)
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('single term search', function () {
 | |
|       suite('one match', function () {
 | |
|         var assertions = function () {
 | |
|           test('one result returned', function () {
 | |
|             assert.lengthOf(this.results, 1)
 | |
|           })
 | |
| 
 | |
|           test('document c matches', function () {
 | |
|             assert.equal('c', this.results[0].ref)
 | |
|           })
 | |
| 
 | |
|           test('matching term', function () {
 | |
|             assert.sameMembers(['scarlett'], Object.keys(this.results[0].matchData.metadata))
 | |
|           })
 | |
|         }
 | |
| 
 | |
|         suite('#seach', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('scarlett')
 | |
|           })
 | |
| 
 | |
|           assertions()
 | |
|         })
 | |
| 
 | |
|         suite('#query', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.query(function (q) {
 | |
|               q.term('scarlett')
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           assertions()
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('no match', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('foo')
 | |
|         })
 | |
| 
 | |
|         test('no matches', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('multiple matches', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('plant')
 | |
|         })
 | |
| 
 | |
|         test('has two matches', function () {
 | |
|           assert.lengthOf(this.results, 2)
 | |
|         })
 | |
| 
 | |
|         test('sorted by relevance', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|           assert.equal('c', this.results[1].ref)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('pipeline processing', function () {
 | |
|         // study would be stemmed to studi, tokens
 | |
|         // are stemmed by default on index and must
 | |
|         // also be stemmed on search to match
 | |
|         suite('enabled (default)', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.query(function (q) {
 | |
|               q.clause({term: 'study', usePipeline: true})
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           test('has two matches', function () {
 | |
|             assert.lengthOf(this.results, 2)
 | |
|           })
 | |
| 
 | |
|           test('sorted by relevance', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|             assert.equal('a', this.results[1].ref)
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('disabled', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.query(function (q) {
 | |
|               q.clause({term: 'study', usePipeline: false})
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           test('no matches', function () {
 | |
|             assert.lengthOf(this.results, 0)
 | |
|           })
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('multiple terms', function () {
 | |
|       suite('all terms match', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('fellow candlestick')
 | |
|         })
 | |
| 
 | |
|         test('has one match', function () {
 | |
|           assert.lengthOf(this.results, 1)
 | |
|         })
 | |
| 
 | |
|         test('correct document returned', function () {
 | |
|           assert.equal('a', this.results[0].ref)
 | |
|         })
 | |
| 
 | |
|         test('matched terms returned', function () {
 | |
|           assert.sameMembers(['fellow', 'candlestick'], Object.keys(this.results[0].matchData.metadata))
 | |
|           assert.sameMembers(['body'], Object.keys(this.results[0].matchData.metadata['fellow']));
 | |
|           assert.sameMembers(['body'], Object.keys(this.results[0].matchData.metadata['candlestick']));
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('one term matches', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('week foo')
 | |
|         })
 | |
| 
 | |
|         test('has one match', function () {
 | |
|           assert.lengthOf(this.results, 1)
 | |
|         })
 | |
| 
 | |
|         test('correct document returned', function () {
 | |
|           assert.equal('c', this.results[0].ref)
 | |
|         })
 | |
| 
 | |
|         test('only matching terms returned', function () {
 | |
|           assert.sameMembers(['week'], Object.keys(this.results[0].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('duplicate query terms', function () {
 | |
|         // https://github.com/olivernn/lunr.js/issues/256
 | |
|         // previously this would throw a duplicate index error
 | |
|         // because the query vector already contained an entry
 | |
|         // for the term 'fellow'
 | |
|         test('no errors', function () {
 | |
|           var idx = this.idx
 | |
|           assert.doesNotThrow(function () {
 | |
|             idx.search('fellow candlestick foo bar green plant fellow')
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('documents with all terms score higher', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('candlestick green')
 | |
|         })
 | |
| 
 | |
|         test('has three matches', function () {
 | |
|           assert.lengthOf(this.results, 3)
 | |
|         })
 | |
| 
 | |
|         test('correct documents returned', function () {
 | |
|           var matchingDocuments = this.results.map(function (r) {
 | |
|             return r.ref
 | |
|           })
 | |
|           assert.sameMembers(['a', 'b', 'c'], matchingDocuments)
 | |
|         })
 | |
| 
 | |
|         test('documents with all terms score highest', function () {
 | |
|           assert.equal('a', this.results[0].ref)
 | |
|         })
 | |
| 
 | |
|         test('matching terms are returned', function () {
 | |
|           assert.sameMembers(['candlestick', 'green'], Object.keys(this.results[0].matchData.metadata))
 | |
|           assert.sameMembers(['green'], Object.keys(this.results[1].matchData.metadata))
 | |
|           assert.sameMembers(['green'], Object.keys(this.results[2].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('no terms match', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('foo bar')
 | |
|         })
 | |
| 
 | |
|         test('no matches', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('corpus terms are stemmed', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('water')
 | |
|         })
 | |
| 
 | |
|         test('matches two documents', function () {
 | |
|           assert.lengthOf(this.results, 2)
 | |
|         })
 | |
| 
 | |
|         test('matches correct documents', function () {
 | |
|           var matchingDocuments = this.results.map(function (r) {
 | |
|             return r.ref
 | |
|           })
 | |
|           assert.sameMembers(['b', 'c'], matchingDocuments)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('field scoped terms', function () {
 | |
|         suite('only matches on scoped field', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('title:plant')
 | |
|           })
 | |
| 
 | |
|           test('one result returned', function () {
 | |
|             assert.lengthOf(this.results, 1)
 | |
|           })
 | |
| 
 | |
|           test('returns the correct document', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|           })
 | |
| 
 | |
|           test('match data', function () {
 | |
|             assert.sameMembers(['plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('no matching terms', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('title:candlestick')
 | |
|           })
 | |
| 
 | |
|           test('no results returned', function () {
 | |
|             assert.lengthOf(this.results, 0)
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('wildcard matching', function () {
 | |
|         suite('trailing wildcard', function () {
 | |
|           suite('no matches', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('fo*')
 | |
|             })
 | |
| 
 | |
|             test('no results returned', function () {
 | |
|               assert.lengthOf(this.results, 0)
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           suite('one match', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('candle*')
 | |
|             })
 | |
| 
 | |
|             test('one result returned', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('correct document matched', function () {
 | |
|               assert.equal('a', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['candlestick'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           suite('multiple terms match', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('pl*')
 | |
|             })
 | |
| 
 | |
|             test('two results returned', function () {
 | |
|               assert.lengthOf(this.results, 2)
 | |
|             })
 | |
| 
 | |
|             test('correct documents matched', function () {
 | |
|               var matchingDocuments = this.results.map(function (r) {
 | |
|                 return r.ref
 | |
|               })
 | |
|               assert.sameMembers(['b', 'c'], matchingDocuments)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['plumb', 'plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|               assert.sameMembers(['plumb', 'plant'], Object.keys(this.results[1].matchData.metadata))
 | |
|             })
 | |
|           })
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('wildcard matching', function () {
 | |
|       suite('trailing wildcard', function () {
 | |
|         suite('no matches found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('fo*')
 | |
|           })
 | |
| 
 | |
|           test('no results returned', function () {
 | |
|             assert.lengthOf(this.results, 0)
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('results found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('pl*')
 | |
|           })
 | |
| 
 | |
|           test('two results returned', function () {
 | |
|             assert.lengthOf(this.results, 2)
 | |
|           })
 | |
| 
 | |
|           test('matching documents returned', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|             assert.equal('c', this.results[1].ref)
 | |
|           })
 | |
| 
 | |
|           test('matching terms returned', function () {
 | |
|             assert.sameMembers(['plant', 'plumb'], Object.keys(this.results[0].matchData.metadata))
 | |
|             assert.sameMembers(['plant', 'plumb'], Object.keys(this.results[1].matchData.metadata))
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('leading wildcard', function () {
 | |
|         suite('no results found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('*oo')
 | |
|           })
 | |
| 
 | |
|           test('no results found', function () {
 | |
|             assert.lengthOf(this.results, 0)
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('results found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('*ant')
 | |
|           })
 | |
| 
 | |
|           test('two results found', function () {
 | |
|             assert.lengthOf(this.results, 2)
 | |
|           })
 | |
| 
 | |
|           test('matching documents returned', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|             assert.equal('c', this.results[1].ref)
 | |
|           })
 | |
| 
 | |
|           test('matching terms returned', function () {
 | |
|             assert.sameMembers(['plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|             assert.sameMembers(['plant'], Object.keys(this.results[1].matchData.metadata))
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('contained wildcard', function () {
 | |
|         suite('no results found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('f*o')
 | |
|           })
 | |
| 
 | |
|           test('no results found', function () {
 | |
|             assert.lengthOf(this.results, 0)
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('results found', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('pl*nt')
 | |
|           })
 | |
| 
 | |
|           test('two results found', function () {
 | |
|             assert.lengthOf(this.results, 2)
 | |
|           })
 | |
| 
 | |
|           test('matching documents returned', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|             assert.equal('c', this.results[1].ref)
 | |
|           })
 | |
| 
 | |
|           test('matching terms returned', function () {
 | |
|             assert.sameMembers(['plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|             assert.sameMembers(['plant'], Object.keys(this.results[1].matchData.metadata))
 | |
|           })
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('edit distance', function () {
 | |
|       suite('no results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('foo~1')
 | |
|         })
 | |
| 
 | |
|         test('no results returned', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('plont~1')
 | |
|         })
 | |
| 
 | |
|         test('two results found', function () {
 | |
|           assert.lengthOf(this.results, 2)
 | |
|         })
 | |
| 
 | |
|         test('matching documents returned', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|           assert.equal('c', this.results[1].ref)
 | |
|         })
 | |
| 
 | |
|         test('matching terms returned', function () {
 | |
|           assert.sameMembers(['plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|           assert.sameMembers(['plant'], Object.keys(this.results[1].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('searching by field', function () {
 | |
|       suite('unknown field', function () {
 | |
|         test('throws lunr.QueryParseError', function () {
 | |
|           assert.throws(function () {
 | |
|             this.idx.search('unknown-field:plant')
 | |
|           }.bind(this), lunr.QueryParseError)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('no results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('title:candlestick')
 | |
|         })
 | |
| 
 | |
|         test('no results found', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('title:plant')
 | |
|         })
 | |
| 
 | |
|         test('one results found', function () {
 | |
|           assert.lengthOf(this.results, 1)
 | |
|         })
 | |
| 
 | |
|         test('matching documents returned', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|         })
 | |
| 
 | |
|         test('matching terms returned', function () {
 | |
|           assert.sameMembers(['plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('term boosts', function () {
 | |
|       suite('no results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('foo^10')
 | |
|         })
 | |
| 
 | |
|         test('no results found', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.search('scarlett candlestick^5')
 | |
|         })
 | |
| 
 | |
|         test('two results found', function () {
 | |
|           assert.lengthOf(this.results, 2)
 | |
|         })
 | |
| 
 | |
|         test('matching documents returned', function () {
 | |
|           assert.equal('a', this.results[0].ref)
 | |
|           assert.equal('c', this.results[1].ref)
 | |
|         })
 | |
| 
 | |
|         test('matching terms returned', function () {
 | |
|           assert.sameMembers(['candlestick'], Object.keys(this.results[0].matchData.metadata))
 | |
|           assert.sameMembers(['scarlett'], Object.keys(this.results[1].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('typeahead style search', function () {
 | |
|       suite('no results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.query(function (q) {
 | |
|             q.term("xyz", { boost: 100, usePipeline: true })
 | |
|             q.term("xyz", { boost: 10, usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING })
 | |
|             q.term("xyz", { boost: 1, editDistance: 1 })
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         test('no results found', function () {
 | |
|           assert.lengthOf(this.results, 0)
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('results found', function () {
 | |
|         setup(function () {
 | |
|           this.results = this.idx.query(function (q) {
 | |
|             q.term("pl", { boost: 100, usePipeline: true })
 | |
|             q.term("pl", { boost: 10, usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING })
 | |
|             q.term("pl", { boost: 1, editDistance: 1 })
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         test('two results found', function () {
 | |
|           assert.lengthOf(this.results, 2)
 | |
|         })
 | |
| 
 | |
|         test('matching documents returned', function () {
 | |
|           assert.equal('b', this.results[0].ref)
 | |
|           assert.equal('c', this.results[1].ref)
 | |
|         })
 | |
| 
 | |
|         test('matching terms returned', function () {
 | |
|           assert.sameMembers(['plumb', 'plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|           assert.sameMembers(['plumb', 'plant'], Object.keys(this.results[1].matchData.metadata))
 | |
|         })
 | |
|       })
 | |
|     })
 | |
| 
 | |
|     suite('term presence', function () {
 | |
|       suite('prohibited', function () {
 | |
|         suite('match', function () {
 | |
|           var assertions = function () {
 | |
|             test('two results found', function () {
 | |
|               assert.lengthOf(this.results, 2)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('b', this.results[0].ref)
 | |
|               assert.equal('c', this.results[1].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['green'], Object.keys(this.results[0].matchData.metadata))
 | |
|               assert.sameMembers(['green'], Object.keys(this.results[1].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('candlestick', { presence: lunr.Query.presence.PROHIBITED })
 | |
|                 q.term('green', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('-candlestick green')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('no match', function () {
 | |
|           var assertions = function () {
 | |
|             test('no matches', function () {
 | |
|               assert.lengthOf(this.results, 0)
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('green', { presence: lunr.Query.presence.PROHIBITED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('-green')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('negated query no match', function () {
 | |
|           var assertions = function () {
 | |
|             test('all documents returned', function () {
 | |
|               assert.lengthOf(this.results, 3)
 | |
|             })
 | |
| 
 | |
|             test('all results have same score', function () {
 | |
|               assert.isTrue(this.results.every(function (r) { return r.score === 0 }))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('qwertyuiop', { presence: lunr.Query.presence.PROHIBITED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search("-qwertyuiop")
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('negated query some match', function () {
 | |
|           var assertions = function () {
 | |
|             test('all documents returned', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('all results have same score', function () {
 | |
|               assert.isTrue(this.results.every(function (r) { return r.score === 0 }))
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('a', this.results[0].ref)
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { presence: lunr.Query.presence.PROHIBITED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search("-plant")
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('field match', function () {
 | |
|           var assertions = function () {
 | |
|             test('one result found', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('c', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['plumb'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { presence: lunr.Query.presence.PROHIBITED, fields: ['title'] })
 | |
|                 q.term('plumb', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('-title:plant plumb')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('required', function () {
 | |
|         suite('match', function () {
 | |
|           var assertions = function () {
 | |
|             test('one result found', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('a', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['candlestick', 'green'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search("+candlestick green")
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('candlestick', { presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('green', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('no match', function () {
 | |
|           var assertions = function () {
 | |
|             test('no matches', function () {
 | |
|               assert.lengthOf(this.results, 0)
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('mustard', { presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('plant', { presence: lunr.Query.presence.REQUIRED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+mustard +plant')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('no matching term', function () {
 | |
|           var assertions = function () {
 | |
|             test('no matches', function () {
 | |
|               assert.lengthOf(this.results, 0)
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('qwertyuiop', { presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('green', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+qwertyuiop green')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('field match', function () {
 | |
|           var assertions = function () {
 | |
|             test('one result found', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('b', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['plant', 'green'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { presence: lunr.Query.presence.REQUIRED, fields: ['title'] })
 | |
|                 q.term('green', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+title:plant green')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('field and non field match', function () {
 | |
|           var assertions = function () {
 | |
|             test('one result found', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('b', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['plant', 'green'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+title:plant +green')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { fields: ['title'], presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('green', { presence: lunr.Query.presence.REQUIRED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('different fields', function () {
 | |
|           var assertions = function () {
 | |
|             test('one result found', function () {
 | |
|               assert.lengthOf(this.results, 1)
 | |
|             })
 | |
| 
 | |
|             test('matching documents returned', function () {
 | |
|               assert.equal('b', this.results[0].ref)
 | |
|             })
 | |
| 
 | |
|             test('matching terms returned', function () {
 | |
|               assert.sameMembers(['studi', 'plant'], Object.keys(this.results[0].matchData.metadata))
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+title:plant +body:study')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { fields: ['title'], presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('study', { fields: ['body'], presence: lunr.Query.presence.REQUIRED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
| 
 | |
|         suite('different fields one without match', function () {
 | |
|           var assertions = function () {
 | |
|             test('no matches', function () {
 | |
|               assert.lengthOf(this.results, 0)
 | |
|             })
 | |
|           }
 | |
| 
 | |
|           suite('#search', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.search('+title:plant +body:qwertyuiop')
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
| 
 | |
|           suite('#query', function () {
 | |
|             setup(function () {
 | |
|               this.results = this.idx.query(function (q) {
 | |
|                 q.term('plant', { fields: ['title'], presence: lunr.Query.presence.REQUIRED })
 | |
|                 q.term('qwertyuiop', { fields: ['body'], presence: lunr.Query.presence.REQUIRED })
 | |
|               })
 | |
|             })
 | |
| 
 | |
|             assertions()
 | |
|           })
 | |
|         })
 | |
|       })
 | |
| 
 | |
|       suite('combined', function () {
 | |
|         var assertions = function () {
 | |
|           test('one result found', function () {
 | |
|             assert.lengthOf(this.results, 1)
 | |
|           })
 | |
| 
 | |
|           test('matching documents returned', function () {
 | |
|             assert.equal('b', this.results[0].ref)
 | |
|           })
 | |
| 
 | |
|           test('matching terms returned', function () {
 | |
|             assert.sameMembers(['plant', 'green'], Object.keys(this.results[0].matchData.metadata))
 | |
|           })
 | |
|         }
 | |
| 
 | |
|         suite('#query', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.query(function (q) {
 | |
|               q.term('plant', { presence: lunr.Query.presence.REQUIRED })
 | |
|               q.term('green', { presence: lunr.Query.presence.OPTIONAL })
 | |
|               q.term('office', { presence: lunr.Query.presence.PROHIBITED })
 | |
|             })
 | |
|           })
 | |
| 
 | |
|           assertions()
 | |
|         })
 | |
| 
 | |
|         suite('#search', function () {
 | |
|           setup(function () {
 | |
|             this.results = this.idx.search('+plant green -office')
 | |
|           })
 | |
| 
 | |
|           assertions()
 | |
|         })
 | |
| 
 | |
|       })
 | |
|     })
 | |
|   })
 | |
| })
 |