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;
|
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
|
class ZimFileServer
|
||||||
{
|
{
|
||||||
|
@ -444,7 +456,7 @@ TEST_F(ServerTest, ETagOfUncompressibleContentIsNotAffectedByAcceptEncoding)
|
||||||
// NOTE: The "Date" header (which should belong to that list as required
|
// 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: 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: 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 special304Headers(const httplib::Response& r)
|
||||||
{
|
{
|
||||||
Headers result;
|
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
|
// Testing of the library-related functionality of the server
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue