mirror of https://github.com/kiwix/libkiwix.git
New unit test ServerTest.suggestions
This commit is contained in:
parent
ec94d9bfd9
commit
943cbbf6ce
|
@ -45,6 +45,18 @@ Headers invariantHeaders(Headers headers)
|
|||
return headers;
|
||||
}
|
||||
|
||||
// Output generated via mustache templates sometimes contains end-of-line
|
||||
// whitespace. This complicates representing the expected output of a unit-test
|
||||
// as C++ raw strings in editors that are configured to delete EOL whitespace.
|
||||
// A workaround is to put special markers (//EOLWHITESPACEMARKER) at the end
|
||||
// of such lines in the expected output string and remove them at runtime.
|
||||
// This is exactly what this function is for.
|
||||
std::string removeEOLWhitespaceMarkers(const std::string& s)
|
||||
{
|
||||
const std::regex pattern("//EOLWHITESPACEMARKER");
|
||||
return std::regex_replace(s, pattern, "");
|
||||
}
|
||||
|
||||
|
||||
class ZimFileServer
|
||||
{
|
||||
|
@ -444,7 +456,7 @@ TEST_F(ServerTest, ETagOfUncompressibleContentIsNotAffectedByAcceptEncoding)
|
|||
// NOTE: The "Date" header (which should belong to that list as required
|
||||
// NOTE: by RFC 7232) is not included (since the result of this function
|
||||
// NOTE: will be used to check the equality of headers from the 200 and 304
|
||||
// NOTe: responses).
|
||||
// NOTE: responses).
|
||||
Headers special304Headers(const httplib::Response& r)
|
||||
{
|
||||
Headers result;
|
||||
|
@ -625,6 +637,85 @@ TEST_F(ServerTest, RangeHeaderIsCaseInsensitive)
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(ServerTest, suggestions)
|
||||
{
|
||||
typedef std::pair<std::string, std::string> UrlAndExpectedResponse;
|
||||
const std::vector<UrlAndExpectedResponse> testData{
|
||||
{ /* url: */ "/ROOT/suggest?content=zimfile&term=thing",
|
||||
R"EXPECTEDRESPONSE([
|
||||
{
|
||||
"value" : "Doing His Thing",
|
||||
"label" : "Doing His <b>Thing</b>",
|
||||
"kind" : "path"
|
||||
, "path" : "A/Doing_His_Thing"
|
||||
},
|
||||
{
|
||||
"value" : "We Didn't See a Thing",
|
||||
"label" : "We Didn't See a <b>Thing</b>",
|
||||
"kind" : "path"
|
||||
, "path" : "A/We_Didn't_See_a_Thing"
|
||||
},
|
||||
{
|
||||
"value" : "thing ",
|
||||
"label" : "containing 'thing'...",
|
||||
"kind" : "pattern"
|
||||
//EOLWHITESPACEMARKER
|
||||
}
|
||||
]
|
||||
)EXPECTEDRESPONSE"
|
||||
},
|
||||
{ /* url: */ "/ROOT/suggest?content=zimfile&term=movie",
|
||||
R"EXPECTEDRESPONSE([
|
||||
{
|
||||
"value" : "Ray (movie)",
|
||||
"label" : "Ray (<b>movie</b>)",
|
||||
"kind" : "path"
|
||||
, "path" : "A/Ray_(movie)"
|
||||
},
|
||||
{
|
||||
"value" : "movie ",
|
||||
"label" : "containing 'movie'...",
|
||||
"kind" : "pattern"
|
||||
//EOLWHITESPACEMARKER
|
||||
}
|
||||
]
|
||||
)EXPECTEDRESPONSE"
|
||||
},
|
||||
{ /* url: */ "/ROOT/suggest?content=zimfile&term=abracadabra",
|
||||
R"EXPECTEDRESPONSE([
|
||||
{
|
||||
"value" : "abracadabra ",
|
||||
"label" : "containing 'abracadabra'...",
|
||||
"kind" : "pattern"
|
||||
//EOLWHITESPACEMARKER
|
||||
}
|
||||
]
|
||||
)EXPECTEDRESPONSE"
|
||||
},
|
||||
{ // Test handling of & (%26 when url-encoded) in the search string
|
||||
/* url: */ "/ROOT/suggest?content=zimfile&term=A%26B",
|
||||
R"EXPECTEDRESPONSE([
|
||||
{
|
||||
"value" : "A&B ",
|
||||
"label" : "containing 'A&B'...",
|
||||
"kind" : "pattern"
|
||||
//EOLWHITESPACEMARKER
|
||||
}
|
||||
]
|
||||
)EXPECTEDRESPONSE"
|
||||
},
|
||||
};
|
||||
|
||||
for ( const auto& urlAndExpectedResponse : testData ) {
|
||||
const std::string url = urlAndExpectedResponse.first;
|
||||
const std::string expectedResponse = urlAndExpectedResponse.second;
|
||||
const TestContext ctx{ {"url", url} };
|
||||
const auto r = zfs1_->GET(url.c_str());
|
||||
EXPECT_EQ(r->status, 200) << ctx;
|
||||
EXPECT_EQ(r->body, removeEOLWhitespaceMarkers(expectedResponse)) << ctx;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Testing of the library-related functionality of the server
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Reference in New Issue