@zargu/couchdb-designer
Version:
Create and testing couchdb design document form directory structure.
341 lines (274 loc) • 8.46 kB
JavaScript
import createMangoFilter from "./createMangoFilter";
describe("createMangoFilter",() =>{
test('$eq',() => {
const eqfilter = {
a:'a'
}
const doc1 = {a:'a'}
const doc2 = {a:'b'}
let filter = createMangoFilter(eqfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
})
test('$and',() => {
const andfilter = {
a:'a',
b:'b'
}
const doc1 = {a:'a', b:'b'}
const doc2 = {a:'a', b:1}
let filter = createMangoFilter(andfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
})
test('$lt',() => {
const ltfilter = {
a:{'$lt':10},
}
const doc1 = {a:9}
const doc2 = {a:11}
let filter = createMangoFilter(ltfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
})
test('$gt',() => {
const gtfilter = {
a:{'$gt':10},
}
const doc1 = {a:9}
const doc2 = {a:11}
let filter = createMangoFilter(gtfilter);
expect(filter(doc2)).toBeTruthy();
expect(filter(doc1)).toBeFalsy();
})
test('$lte',() => {
const ltefilter = {
a:{'$lte':10},
}
const doc1 = {a:9}
const doc2 = {a:10}
const doc3 = {a:11}
let filter = createMangoFilter(ltefilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc3)).toBeFalsy();
})
test('$gte',() => {
const gtefilter = {
a:{'$gte':10},
}
const doc1 = {a:9}
const doc2 = {a:10}
const doc3 = {a:11}
let filter = createMangoFilter(gtefilter);
expect(filter(doc3)).toBeTruthy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc1)).toBeFalsy();
})
test('$ne',() => {
const nefilter = {
a:{'$ne':10},
}
const doc1 = {a:9}
const doc2 = {a:10}
const doc3 = {a:11}
let filter = createMangoFilter(nefilter);
expect(filter(doc3)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc1)).toBeTruthy();
})
test('$exists',() => {
const existsfilter = {
a:{'$exists':false},
}
const doc1 = {b:9}
const doc2 = {a:10}
const doc3 = {b:11}
let filter = createMangoFilter(existsfilter);
expect(filter(doc3)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc1)).toBeTruthy();
})
test('branch $exists',() => {
const existsfilter = {
'a.b':{'$exists':true},
}
const doc1 = {a:{b:'foo'}}
const doc2 = {a:{a:'bar'}}
const doc3 = {b:{b:'baz'}}
let filter = createMangoFilter(existsfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeFalsy();
})
test('$type',() => {
const typefilter = {
a:{'$type':'array'}
}
const doc1 = {a:[1,2]}
const doc2 = {a:{a:'bar'}}
const doc3 = {b:{b:'baz'}}
let filter = createMangoFilter(typefilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeFalsy();
})
test('$in',() => {
const infilter = {
a:{'$in':[{a:'foo'},10]}
}
const doc1 = {a:10}
const doc2 = {a:{a:'foo'}}
const doc3 = {b:{b:'baz'}}
let filter = createMangoFilter(infilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc3)).toBeFalsy();
})
test('$nin',() => {
const ninfilter = {
a:{'$nin':[{a:'foo'},10]}
}
const doc1 = {b:10}
const doc2 = {a:{a:'foo'}}
const doc3 = {a:{b:'baz'}}
let filter = createMangoFilter(ninfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
test('$size',() => {
const sizefilter = {
a:{'$size':2}
}
const doc1 = {b:[1,2]}
const doc2 = {a:[1,2,3]}
const doc3 = {a:[1,2]}
let filter = createMangoFilter(sizefilter);
expect(filter(doc1)).toBeFalsy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
test('$mod',() => {
const modfilter = {
a:{'$mod':[3,1]}
}
const doc1 = {a:10}
const doc2 = {a:11}
const doc3 = {a:12}
let filter = createMangoFilter(modfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeFalsy();
})
test('$or',() => {
const orfilter = {
'$or':[
{a:10},
{b:12}
]
}
const doc1 = {a:10}
const doc2 = {a:11}
const doc3 = {b:12}
let filter = createMangoFilter(orfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
test('$not',() => {
const orfilter = {
'$not':{
a:11
}
}
const doc1 = {a:10}
const doc2 = {a:11}
const doc3 = {a:12}
let filter = createMangoFilter(orfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
test('$all',() => {
const allfilter = {
a:{
"$all":[{a:10},10,"a"]
}
}
const doc1 = {a:[10,{a:10},"a","s"]}
const doc2 = {a:[20,{a:10},"a","s",{b:23},10]}
const doc3 = {a:[10,{a:10},"b","s"]}
let filter = createMangoFilter(allfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc3)).toBeFalsy();
})
test('$elemMatch',() => {
const elemMatchfilter = {
a:{
"$elemMatch":{
"$type":"number",
"$gt":15
}
}
}
const doc1 = {a:[10,{a:10},"a","s"]}
const doc2 = {a:[20,{a:10},"a","s",{b:23},10]}
const doc3 = {a:[10,{a:10},"b","s"]}
let filter = createMangoFilter(elemMatchfilter);
expect(filter(doc1)).toBeFalsy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc3)).toBeFalsy();
})
test('$allMatch',() => {
const allMatchfilter = {
a:{
"$allMatch":{
"$type":"number",
"$lt":30,
"$gt":15
}
}
}
const doc1 = {a:[16,20,24,"s"]}
const doc2 = {a:[20,50,19,18,29,19]}
const doc3 = {a:[16,17,18,19]}
let filter = createMangoFilter(allMatchfilter);
expect(filter(doc1)).toBeFalsy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
test('$keyMapMatch',() => {
const keyMapMatchfilter = {
a:{
"$keyMapMatch":{
"$type":"number",
"$lt":30,
"$gt":15
}
}
}
const doc1 = {a:{a:10,b:40,c:80}};
const doc2 = {a:{a:10,b:20,c:"a"}}
const doc3 = {a:[16,17,18,19]}
let filter = createMangoFilter(keyMapMatchfilter);
expect(filter(doc1)).toBeFalsy();
expect(filter(doc2)).toBeTruthy();
expect(filter(doc3)).toBeFalsy();
})
test('$regex',() => {
const keyMapMatchfilter = {
a:{
"$regex":"^foo"
}
}
const doc1 = {a:"foobar"};
const doc2 = {a:"barbaz"}
const doc3 = {a:"foobaz"}
let filter = createMangoFilter(keyMapMatchfilter);
expect(filter(doc1)).toBeTruthy();
expect(filter(doc2)).toBeFalsy();
expect(filter(doc3)).toBeTruthy();
})
})