[
{
"name": "an ordinary substring match on one field",
"args": [
[{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }, { "name": "Linus Torvalds", "role": "engineer" }],
["name"],
"hopper"
],
"expect": [{ "name": "Grace Hopper", "role": "Admiral" }]
},
{
"name": "matching is case-insensitive in both directions",
"args": [
[{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }, { "name": "Linus Torvalds", "role": "engineer" }],
["role"],
"ENGINEER"
],
"expect": [{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Linus Torvalds", "role": "engineer" }]
},
{
"name": "an empty query means show me everything, not show me nothing",
"args": [[{ "name": "Ada" }, { "name": "Grace" }], ["name"], ""],
"expect": [{ "name": "Ada" }, { "name": "Grace" }]
},
{
"name": "an empty query returns records that carry none of the searched fields",
"args": [[{ "other": 1 }, { "name": "Grace" }], ["name"], ""],
"expect": [{ "other": 1 }, { "name": "Grace" }]
},
{
"name": "nothing matching is an empty list, not an error",
"args": [[{ "name": "Ada" }, { "name": "Grace" }], ["name"], "zebra"],
"expect": []
},
{
"name": "matches come back in input order, never in relevance order",
"args": [
[{ "seq": 1, "name": "Ada Lovelace" }, { "seq": 2, "name": "Grace Hopper" }, { "seq": 3, "name": "Linus Torvalds" }],
["name"],
"L"
],
"expect": [{ "seq": 1, "name": "Ada Lovelace" }, { "seq": 3, "name": "Linus Torvalds" }]
},
{
"name": "any of the named fields can match",
"args": [
[{ "name": "Ada Lovelace", "role": "Engineer" }, { "name": "Grace Hopper", "role": "Admiral" }],
["name", "role"],
"admiral"
],
"expect": [{ "name": "Grace Hopper", "role": "Admiral" }]
},
{
"name": "a record that is missing a searched field is skipped, not an error",
"args": [
[{ "name": "Ada" }, { "name": "Grace", "role": "Admiral" }, { "role": "Admiral" }],
["role"],
"admiral"
],
"expect": [{ "name": "Grace", "role": "Admiral" }, { "role": "Admiral" }]
},
{
"name": "a null field matches nothing",
"args": [[{ "name": "Ada", "role": null }, { "name": "Grace", "role": "Admiral" }], ["role"], "a"],
"expect": [{ "name": "Grace", "role": "Admiral" }]
},
{
"name": "integers are searchable by their digits, so an id can be typed into the box",
"args": [[{ "id": 17, "name": "Ada" }, { "id": 42, "name": "Grace" }, { "id": 170, "name": "Linus" }], ["id"], "17"],
"expect": [{ "id": 17, "name": "Ada" }, { "id": 170, "name": "Linus" }]
},
{
"name": "booleans are searchable as true and false in every language",
"args": [[{ "n": "a", "active": true }, { "n": "b", "active": false }, { "n": "c", "active": true }], ["active"], "TRUE"],
"expect": [{ "n": "a", "active": true }, { "n": "c", "active": true }]
},
{
"name": "case folding is ASCII only, so an unaccented query does not find an accented word",
"args": [[{ "t": "Café" }, { "t": "CAFÉ" }, { "t": "Cafe" }], ["t"], "cafe"],
"expect": [{ "t": "Cafe" }]
},
{
"name": "an accented query matches the same accented letters, unfolded",
"args": [[{ "t": "Café" }, { "t": "CAFÉ" }, { "t": "Cafe" }], ["t"], "Café"],
"expect": [{ "t": "Café" }]
},
{
"name": "a fraction is not searchable: no decimal rendering of it is the same in three languages",
"args": [[{ "rate": 1.5, "n": "a" }, { "rate": "1.5", "n": "b" }], ["rate"], "1.5"],
"expect": [{ "rate": "1.5", "n": "b" }]
},
{
"name": "an integer too large to survive a JavaScript round trip is not searchable",
"args": [[{ "id": 9007199254740993 }, { "id": 9007 }], ["id"], "9007"],
"expect": [{ "id": 9007 }]
},
{
"name": "a list or a map in a searched field matches nothing",
"args": [[{ "tags": ["alpha", "beta"] }, { "tags": { "first": "alpha" } }, { "tags": "alpha beta" }], ["tags"], "alpha"],
"expect": [{ "tags": "alpha beta" }]
},
{
"name": "one record, one match",
"args": [[{ "name": "Ada" }], ["name"], "ada"],
"expect": [{ "name": "Ada" }]
},
{
"name": "no records is no matches",
"args": [[], ["name"], "ada"],
"expect": []
},
{
"name": "searching no fields at all is a caller bug, not a silent empty result",
"args": [[{ "name": "Ada" }], [], "ada"],
"expectError": "at least one field"
},
{
"name": "a non-string query is a caller bug",
"args": [[{ "id": 17 }], ["id"], 17],
"expectError": "query must be a string"
}
]