diff --git a/test/server.cpp b/test/server.cpp
index a16c7113e..ff6606f6e 100644
--- a/test/server.cpp
+++ b/test/server.cpp
@@ -104,7 +104,7 @@ TEST(indexTemplateStringTest, emptyIndexTemplate) {
"./test/corner_cases.zim"
};
- ZimFileServer zfs(PORT, /*withTaskbar=*/true, ZIMFILES, "");
+ ZimFileServer zfs(PORT, ZimFileServer::DEFAULT_OPTIONS, ZIMFILES, "");
EXPECT_EQ(200, zfs.GET("/ROOT/")->status);
}
@@ -115,7 +115,7 @@ TEST(indexTemplateStringTest, indexTemplateCheck) {
"./test/corner_cases.zim"
};
- ZimFileServer zfs(PORT, /*withTaskbar=*/true, ZIMFILES, "
"
+ ZimFileServer zfs(PORT, ZimFileServer::DEFAULT_OPTIONS, ZIMFILES, ""
"Welcome to kiwix library"
""
"");
@@ -1090,7 +1090,7 @@ TEST_F(ServerTest, ETagIsTheSameAcrossHeadAndGet)
TEST_F(ServerTest, DifferentServerInstancesProduceDifferentETags)
{
- ZimFileServer zfs2(SERVER_PORT + 1, /*withTaskbar=*/true, ZIMFILES);
+ ZimFileServer zfs2(SERVER_PORT + 1, ZimFileServer::DEFAULT_OPTIONS, ZIMFILES);
for ( const Resource& res : all200Resources() ) {
if ( !res.etag_expected ) continue;
const auto h1 = zfs1_->HEAD(res.url);
@@ -1481,3 +1481,54 @@ TEST_F(ServerTest, suggestions_in_range)
ASSERT_EQ(currCount, 0);
}
}
+
+TEST_F(ServerTest, viewerSettings)
+{
+ const auto JS_CONTENT_TYPE = "application/javascript; charset=utf-8";
+ {
+ resetServer(ZimFileServer::NO_TASKBAR_NO_LINK_BLOCKING);
+ const auto r = zfs1_->GET("/ROOT/viewer_settings.js");
+ ASSERT_EQ(r->status, 200);
+ ASSERT_EQ(getHeaderValue(r->headers, "Content-Type"), JS_CONTENT_TYPE);
+ ASSERT_EQ(r->body,
+R"(const viewerSettings = {
+ toolbarEnabled: false,
+ linkBlockingEnabled: false,
+ libraryButtonEnabled: false
+}
+)");
+ }
+
+ {
+ resetServer(ZimFileServer::BLOCK_EXTERNAL_LINKS);
+ ASSERT_EQ(zfs1_->GET("/ROOT/viewer_settings.js")->body,
+R"(const viewerSettings = {
+ toolbarEnabled: false,
+ linkBlockingEnabled: true,
+ libraryButtonEnabled: false
+}
+)");
+ }
+
+ {
+ resetServer(ZimFileServer::WITH_TASKBAR);
+ ASSERT_EQ(zfs1_->GET("/ROOT/viewer_settings.js")->body,
+R"(const viewerSettings = {
+ toolbarEnabled: true,
+ linkBlockingEnabled: false,
+ libraryButtonEnabled: false
+}
+)");
+ }
+
+ {
+ resetServer(ZimFileServer::WITH_TASKBAR_AND_LIBRARY_BUTTON);
+ ASSERT_EQ(zfs1_->GET("/ROOT/viewer_settings.js")->body,
+R"(const viewerSettings = {
+ toolbarEnabled: true,
+ linkBlockingEnabled: false,
+ libraryButtonEnabled: true
+}
+)");
+ }
+}
diff --git a/test/server_testing_tools.h b/test/server_testing_tools.h
index c1eae3b30..ab0b4a511 100644
--- a/test/server_testing_tools.h
+++ b/test/server_testing_tools.h
@@ -54,10 +54,23 @@ public: // types
typedef std::shared_ptr Response;
typedef std::vector FilePathCollection;
+ enum Options
+ {
+ NO_TASKBAR_NO_LINK_BLOCKING = 0,
+
+ WITH_TASKBAR = 1 << 1,
+ WITH_LIBRARY_BUTTON = 1 << 2,
+ BLOCK_EXTERNAL_LINKS = 1 << 3,
+
+ WITH_TASKBAR_AND_LIBRARY_BUTTON = WITH_TASKBAR | WITH_LIBRARY_BUTTON,
+
+ DEFAULT_OPTIONS = WITH_TASKBAR | WITH_LIBRARY_BUTTON
+ };
+
public: // functions
ZimFileServer(int serverPort, std::string libraryFilePath);
ZimFileServer(int serverPort,
- bool withTaskbar,
+ Options options,
const FilePathCollection& zimpaths,
std::string indexTemplateString = "");
~ZimFileServer();
@@ -81,7 +94,7 @@ private: // data
std::unique_ptr nameMapper;
std::unique_ptr server;
std::unique_ptr client;
- const bool withTaskbar = true;
+ const Options options = DEFAULT_OPTIONS;
};
ZimFileServer::ZimFileServer(int serverPort, std::string libraryFilePath)
@@ -94,11 +107,11 @@ ZimFileServer::ZimFileServer(int serverPort, std::string libraryFilePath)
}
ZimFileServer::ZimFileServer(int serverPort,
- bool _withTaskbar,
+ Options _options,
const FilePathCollection& zimpaths,
std::string indexTemplateString)
: manager(&this->library)
-, withTaskbar(_withTaskbar)
+, options(_options)
{
for ( const auto& zimpath : zimpaths ) {
if (!manager.addBookFromPath(zimpath, zimpath, "", false))
@@ -117,7 +130,8 @@ void ZimFileServer::run(int serverPort, std::string indexTemplateString)
server->setPort(serverPort);
server->setNbThreads(2);
server->setVerbose(false);
- server->setTaskbar(withTaskbar, withTaskbar);
+ server->setTaskbar(options & WITH_TASKBAR, options & WITH_LIBRARY_BUTTON);
+ server->setBlockExternalLinks(options & BLOCK_EXTERNAL_LINKS);
server->setMultiZimSearchLimit(3);
if (!indexTemplateString.empty()) {
server->setIndexTemplateString(indexTemplateString);
@@ -148,7 +162,12 @@ protected:
protected:
void SetUp() override {
- zfs1_.reset(new ZimFileServer(SERVER_PORT, /*withTaskbar=*/true, ZIMFILES));
+ resetServer(ZimFileServer::DEFAULT_OPTIONS);
+ }
+
+ void resetServer(ZimFileServer::Options options) {
+ zfs1_.reset();
+ zfs1_.reset(new ZimFileServer(SERVER_PORT, options, ZIMFILES));
}
void TearDown() override {