Restore time zone to Cinema and improve UI to use it (#2473).
[dcpomatic.git] / test / kdm_cli_test.cc
index 0ebb5e714da6ed040b5098fcae5c2d1803dca014..1c590cdf717e910560e20b78f20228415f3d104d 100644 (file)
@@ -23,6 +23,7 @@
 #include "lib/config.h"
 #include "lib/content_factory.h"
 #include "lib/cross.h"
+#include "lib/dkdm_wrapper.h"
 #include "lib/film.h"
 #include "lib/kdm_cli.h"
 #include "lib/screen.h"
@@ -34,6 +35,7 @@
 #include <iostream>
 
 
+using std::dynamic_pointer_cast;
 using std::string;
 using std::vector;
 using boost::optional;
@@ -125,7 +127,7 @@ BOOST_AUTO_TEST_CASE(kdm_cli_specify_decryption_key_test)
        output.clear();
        error = run(bad_args, output, false);
        BOOST_REQUIRE(error);
-       BOOST_CHECK(error->find("oaep decoding error") != string::npos);
+       BOOST_CHECK_MESSAGE(error->find("Could not decrypt KDM") != string::npos, "Error was " << *error);
 
        vector<string> good_args = {
                "kdm_cli",
@@ -152,13 +154,13 @@ setup_test_config()
        auto config = Config::instance();
        auto const cert = dcp::Certificate(dcp::file_to_string("test/data/cert.pem"));
 
-       auto cinema_a = std::make_shared<Cinema>("Dean's Screens", vector<string>(), "");
+       auto cinema_a = std::make_shared<Cinema>("Dean's Screens", vector<string>(), "", dcp::UTCOffset());
        cinema_a->add_screen(std::make_shared<dcpomatic::Screen>("Screen 1", "", cert, boost::none, std::vector<TrustedDevice>()));
        cinema_a->add_screen(std::make_shared<dcpomatic::Screen>("Screen 2", "", cert, boost::none, std::vector<TrustedDevice>()));
        cinema_a->add_screen(std::make_shared<dcpomatic::Screen>("Screen 3", "", cert, boost::none, std::vector<TrustedDevice>()));
        config->add_cinema(cinema_a);
 
-       auto cinema_b = std::make_shared<Cinema>("Floyd's Celluloid", vector<string>(), "");
+       auto cinema_b = std::make_shared<Cinema>("Floyd's Celluloid", vector<string>(), "", dcp::UTCOffset());
        cinema_b->add_screen(std::make_shared<dcpomatic::Screen>("Foo", "", cert, boost::none, std::vector<TrustedDevice>()));
        cinema_b->add_screen(std::make_shared<dcpomatic::Screen>("Bar", "", cert, boost::none, std::vector<TrustedDevice>()));
        config->add_cinema(cinema_b);
@@ -249,7 +251,7 @@ BOOST_AUTO_TEST_CASE(kdm_cli_specify_cinemas_file)
                "kdm_cli",
                "--cinemas-file",
                "test/data/cinemas.xml",
-               "--list-cinemas"
+               "list-cinemas"
        };
 
        vector<string> output;
@@ -282,6 +284,7 @@ BOOST_AUTO_TEST_CASE(kdm_cli_specify_cert)
                "--valid-duration", "2 weeks",
                "-C", "test/data/cert.pem",
                "-o", "build/test",
+               "create",
                "build/test/kdm_cli_specify_cert"
        };
 
@@ -330,3 +333,29 @@ BOOST_AUTO_TEST_CASE(kdm_cli_time)
        BOOST_CHECK(boost::filesystem::exists(kdm_filename));
 }
 
+
+BOOST_AUTO_TEST_CASE(kdm_cli_add_dkdm)
+{
+       ConfigRestorer cr;
+
+       setup_test_config();
+
+       BOOST_CHECK_EQUAL(Config::instance()->dkdms()->children().size(), 0U);
+
+       vector<string> args = {
+               "kdm_cli",
+               "add-dkdm",
+               "test/data/dkdm.xml"
+       };
+
+       vector<string> output;
+       auto error = run(args, output);
+       BOOST_CHECK(!error);
+
+       auto dkdms = Config::instance()->dkdms()->children();
+       BOOST_CHECK_EQUAL(dkdms.size(), 1U);
+       auto dkdm = dynamic_pointer_cast<DKDM>(dkdms.front());
+       BOOST_CHECK(dkdm);
+       BOOST_CHECK_EQUAL(dkdm->dkdm().as_xml(), dcp::file_to_string("test/data/dkdm.xml"));
+}
+