From 1ddd44629733e0fc9f68fad597a576acceca9c7c Mon Sep 17 00:00:00 2001 From: Robin Malley Date: Sat, 11 Sep 2021 21:51:22 +0000 Subject: [PATCH] Add some unit tests to search parser. Add some unit tests that ensure the search parser is outputting search parameters that look correct. --- spec/parser_search_spec.lua | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 spec/parser_search_spec.lua diff --git a/spec/parser_search_spec.lua b/spec/parser_search_spec.lua new file mode 100644 index 0000000..95dff01 --- /dev/null +++ b/spec/parser_search_spec.lua @@ -0,0 +1,79 @@ + +_G.spy = spy +function assertf(stmt, fmt, ...) + if not stmt then + error(string.format(fmt,...)) + end +end + +local mock_env = require("spec.env_mock") + +describe("smr search parser #parsers #working",function() + setup(mock_env.setup) + teardown(mock_env.teardown) + it("should load without error",function() + local parser = require("parser_search") + end) + it("should accept a string and return a string",function() + local parser = require("parser_search") + local input = "Hello, world!" + local output = parser(input) + assert(type(output) == "string","Expected string, got: %s",type(output)) + end) + it("should parse a string into it's components",function() + local parser = require("parser_search") + local input = "+search +test +author=admin" + local search_tag, test_tag, author_parsed = false, false, false + local sql, ast = parser(input) + for _,v in pairs(ast.tags) do + if v[3] == "Search" then + search_tag = true + elseif v[3] == "Test" then + test_tag = true + end + end + for _,v in pairs(ast.author) do + if v[3] == "%admin%" then + author_parsed = true + end + end + + assert(search_tag, "Search tag must be found") + assert(test_tag, "Test tag must be found") + assert(author_parsed, "Author tag must be found") + end) + it("should parse tags with a hyphen in the middle",function() + local parser = require("parser_search") + local input = "+post-modern" + local sql, ast = parser(input) + assert(#ast.tags == 1, "+post-modern should be one tag") + end) + it("should parse an empty string without errors",function() + local parser = require("parser_search") + local input = "" + local sql, ast = parser(input) + assert(sql,"Did not receive sql") + assert(ast,"Did not receive ast") + end) + it("should parse a hits request",function() + local parser = require("parser_search") + local input = "+hits>=0" + local sql, ast = parser(input) + assert(ast.hits, "should have a .hits table") + local hit = ast.hits[1] + assert(hit[1] == "+", "Failed to have an intersect constraint for hits, got " .. hit[1]) + assert(hit[2] == ">=", "Failed to have a greater-than-or-equal constraint for hits, got " .. hit[2]) + assert(hit[3] == 0, "Failed to find >=0 for hits, got " .. hit[3]) + end) + it("should parse a title request", function() + local parser = require("parser_search") + local input = "+title=the balled of pala-al-din" + local sql, ast = parser(input) + assert(ast.title, "should have a .title table") + local title = ast.title[1] + assert(title[1] == "+", "Failed to have an intersect constraint for title, got " .. title[1]) + assert(title[2] == "=", "Failed to have a like constraint for title, got " .. title[2]) + assert(title[3] == "%the balled of pala-al-din%", "Failed to find title name, got " .. title[3]) + end) +end) +