mirror of https://github.com/kiwix/libkiwix.git
First search results test-point with pagination
This commit is contained in:
parent
825cf1c948
commit
d56ccbd019
|
@ -147,7 +147,8 @@
|
||||||
<ul>
|
<ul>
|
||||||
{{#resultLastPageStart}}
|
{{#resultLastPageStart}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{searchProtocolPrefix}}pattern={{searchPatternEncoded}}{{#contentId}}&content={{.}}{{/contentId}}&start=0&pageLength={{pageLength}}">
|
<a {{! let the format of this tag be identical to the case below }}
|
||||||
|
href="{{searchProtocolPrefix}}pattern={{searchPatternEncoded}}{{#contentId}}&content={{.}}{{/contentId}}&start=0&pageLength={{pageLength}}">
|
||||||
◀
|
◀
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -162,7 +163,8 @@
|
||||||
{{/pages}}
|
{{/pages}}
|
||||||
{{#resultLastPageStart}}
|
{{#resultLastPageStart}}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{searchProtocolPrefix}}pattern={{searchPatternEncoded}}{{#contentId}}&content={{.}}{{/contentId}}&start={{resultLastPageStart}}&pageLength={{pageLength}}">
|
<a {{! let the format of this tag be identical to the case above }}
|
||||||
|
href="{{searchProtocolPrefix}}pattern={{searchPatternEncoded}}{{#contentId}}&content={{.}}{{/contentId}}&start={{resultLastPageStart}}&pageLength={{pageLength}}">
|
||||||
▶
|
▶
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -982,7 +982,8 @@ TEST_F(ServerTest, 500)
|
||||||
|
|
||||||
std::string makeSearchResultsHtml(const std::string& pattern,
|
std::string makeSearchResultsHtml(const std::string& pattern,
|
||||||
const std::string& header,
|
const std::string& header,
|
||||||
const std::string& results)
|
const std::string& results,
|
||||||
|
const std::string& footer)
|
||||||
{
|
{
|
||||||
const char SEARCHRESULTS_HTML_TEMPLATE[] = R"HTML(<!DOCTYPE html>
|
const char SEARCHRESULTS_HTML_TEMPLATE[] = R"HTML(<!DOCTYPE html>
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
@ -1096,8 +1097,7 @@ std::string makeSearchResultsHtml(const std::string& pattern,
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer">
|
<div class="footer">%FOOTER%
|
||||||
%FOOTER%
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1107,7 +1107,7 @@ std::string makeSearchResultsHtml(const std::string& pattern,
|
||||||
html = replace(html, "%PATTERN%", pattern);
|
html = replace(html, "%PATTERN%", pattern);
|
||||||
html = replace(html, "%HEADER%", header);
|
html = replace(html, "%HEADER%", header);
|
||||||
html = replace(html, "%RESULTS%", results);
|
html = replace(html, "%RESULTS%", results);
|
||||||
html = replace(html, "%FOOTER%", "");
|
html = replace(html, "%FOOTER%", footer);
|
||||||
return html;
|
return html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1513,15 +1513,27 @@ TEST_F(TaskbarlessServerTest, searchResults)
|
||||||
{
|
{
|
||||||
struct TestData
|
struct TestData
|
||||||
{
|
{
|
||||||
|
struct PaginationEntry
|
||||||
|
{
|
||||||
|
std::string label;
|
||||||
|
size_t start;
|
||||||
|
bool selected;
|
||||||
|
};
|
||||||
|
|
||||||
std::string pattern;
|
std::string pattern;
|
||||||
size_t resultsPerPage;
|
size_t resultsPerPage;
|
||||||
size_t totalResultCount;
|
size_t totalResultCount;
|
||||||
size_t firstResultIndex;
|
size_t firstResultIndex;
|
||||||
std::vector<std::string> results;
|
std::vector<std::string> results;
|
||||||
|
std::vector<PaginationEntry> pagination;
|
||||||
|
|
||||||
std::string url() const
|
static std::string makeUrl(const std::string pattern, int start, size_t resultsPerPage)
|
||||||
{
|
{
|
||||||
std::string url = "/ROOT/search?content=zimfile&pattern=" + pattern;
|
std::string url = "/ROOT/search?pattern=" + pattern + "&content=zimfile";
|
||||||
|
|
||||||
|
if ( start >= 0 ) {
|
||||||
|
url += "&start=" + to_string(start);
|
||||||
|
}
|
||||||
|
|
||||||
if ( resultsPerPage != 0 ) {
|
if ( resultsPerPage != 0 ) {
|
||||||
url += "&pageLength=" + to_string(resultsPerPage);
|
url += "&pageLength=" + to_string(resultsPerPage);
|
||||||
|
@ -1530,6 +1542,11 @@ TEST_F(TaskbarlessServerTest, searchResults)
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string url() const
|
||||||
|
{
|
||||||
|
return makeUrl(pattern, -1, resultsPerPage);
|
||||||
|
}
|
||||||
|
|
||||||
std::string expectedHeader() const
|
std::string expectedHeader() const
|
||||||
{
|
{
|
||||||
if ( totalResultCount == 0 ) {
|
if ( totalResultCount == 0 ) {
|
||||||
|
@ -1569,12 +1586,37 @@ TEST_F(TaskbarlessServerTest, searchResults)
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string expectedFooter() const
|
||||||
|
{
|
||||||
|
if ( pagination.empty() ) {
|
||||||
|
return "\n ";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << "\n <ul>\n";
|
||||||
|
for ( const auto& p : pagination ) {
|
||||||
|
const auto url = makeUrl(pattern, p.start, resultsPerPage);
|
||||||
|
oss << " <li>\n";
|
||||||
|
oss << " <a ";
|
||||||
|
if ( p.selected ) {
|
||||||
|
oss << "class=\"selected\"";
|
||||||
|
}
|
||||||
|
oss << "\n href=\"" << url << "\">\n";
|
||||||
|
oss << " " << p.label << "\n";
|
||||||
|
oss << " </a>\n";
|
||||||
|
oss << " </li>\n";
|
||||||
|
}
|
||||||
|
oss << " </ul>";
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
std::string expectedHtml() const
|
std::string expectedHtml() const
|
||||||
{
|
{
|
||||||
return makeSearchResultsHtml(
|
return makeSearchResultsHtml(
|
||||||
pattern,
|
pattern,
|
||||||
expectedHeader(),
|
expectedHeader(),
|
||||||
expectedResultsString()
|
expectedResultsString(),
|
||||||
|
expectedFooter()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1591,6 +1633,7 @@ TEST_F(TaskbarlessServerTest, searchResults)
|
||||||
/* totalResultCount */ 0,
|
/* totalResultCount */ 0,
|
||||||
/* firstResultIndex */ 0,
|
/* firstResultIndex */ 0,
|
||||||
/* results */ {},
|
/* results */ {},
|
||||||
|
/* pagination */ {}
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1608,6 +1651,7 @@ R"SEARCHRESULT(
|
||||||
<div class="informations">93 words</div>
|
<div class="informations">93 words</div>
|
||||||
)SEARCHRESULT"
|
)SEARCHRESULT"
|
||||||
},
|
},
|
||||||
|
/* pagination */ {}
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1634,6 +1678,7 @@ R"SEARCHRESULT(
|
||||||
<div class="informations">134 words</div>
|
<div class="informations">134 words</div>
|
||||||
)SEARCHRESULT"
|
)SEARCHRESULT"
|
||||||
},
|
},
|
||||||
|
/* pagination */ {}
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1641,7 +1686,32 @@ R"SEARCHRESULT(
|
||||||
/* resultsPerPage */ 100,
|
/* resultsPerPage */ 100,
|
||||||
/* totalResultCount */ 44,
|
/* totalResultCount */ 44,
|
||||||
/* firstResultIndex */ 1,
|
/* firstResultIndex */ 1,
|
||||||
/* results */ LARGE_SEARCH_RESULTS
|
/* results */ LARGE_SEARCH_RESULTS,
|
||||||
|
/* pagination */ {}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
/* pattern */ "jazz",
|
||||||
|
/* resultsPerPage */ 5,
|
||||||
|
/* totalResultCount */ 44,
|
||||||
|
/* firstResultIndex */ 1,
|
||||||
|
/* results */ {
|
||||||
|
LARGE_SEARCH_RESULTS[0],
|
||||||
|
LARGE_SEARCH_RESULTS[1],
|
||||||
|
LARGE_SEARCH_RESULTS[2],
|
||||||
|
LARGE_SEARCH_RESULTS[3],
|
||||||
|
LARGE_SEARCH_RESULTS[4],
|
||||||
|
},
|
||||||
|
|
||||||
|
/* pagination */ {
|
||||||
|
{ "◀", 0, false },
|
||||||
|
{ "1", 0, true },
|
||||||
|
{ "2", 5, false },
|
||||||
|
{ "3", 10, false },
|
||||||
|
{ "4", 15, false },
|
||||||
|
{ "5", 20, false },
|
||||||
|
{ "▶", 40, false },
|
||||||
|
}
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue