diff --git a/src/tests/settingsadhoccommand.cpp b/src/tests/settingsadhoccommand.cpp index 7576fe08c02d49d425f7e908c24addd0ad7ac00a..a969dfea49f96d14ef7daa655505eea03160de71 100644 --- a/src/tests/settingsadhoccommand.cpp +++ b/src/tests/settingsadhoccommand.cpp @@ -33,6 +33,8 @@ class SettingsAdHocCommandTest : public CPPUNIT_NS :: TestFixture, public BasicT CPPUNIT_TEST(executeBadSessionID); CPPUNIT_TEST(executeNotRegistered); CPPUNIT_TEST(cancel); + CPPUNIT_TEST(propagateUserSetting); + CPPUNIT_TEST(defaultAccordingToConfig); CPPUNIT_TEST_SUITE_END(); public: @@ -327,6 +329,77 @@ class SettingsAdHocCommandTest : public CPPUNIT_NS :: TestFixture, public BasicT CPPUNIT_ASSERT_EQUAL(Swift::Command::Canceled, getStanza(received[0])->getPayload()->getStatus()); } + void propagateUserSetting() { + connectUser(); + User *user = userManager->getUser("user@localhost"); + CPPUNIT_ASSERT_EQUAL(std::string("0"), user->getUserSetting("send_headlines")); + + boost::shared_ptr payload(new Swift::Command("settings")); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Executing, getStanza(received[0])->getPayload()->getStatus()); + + // form element + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()); + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()->getField("send_headlines")); + + // set enabled_transport = 0 + Swift::FormField::ref f = getStanza(received[0])->getPayload()->getForm()->getField("send_headlines"); + boost::dynamic_pointer_cast(f)->setValue(true); + + std::string sessionId = getStanza(received[0])->getPayload()->getSessionID(); + + // finish the command + payload = boost::shared_ptr(new Swift::Command("settings")); + payload->setSessionID(sessionId); + payload->setForm(getStanza(received[0])->getPayload()->getForm()); + iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + received.clear(); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(std::string("1"), user->getUserSetting("send_headlines")); + } + + void defaultAccordingToConfig() { + std::istringstream ifs("service.server_mode = 1\nservice.jid_escaping=0\nservice.jid=localhost\nsettings.send_headlines=1\n"); + cfg->load(ifs); + connectUser(); + User *user = userManager->getUser("user@localhost"); + CPPUNIT_ASSERT_EQUAL(std::string("1"), user->getUserSetting("send_headlines")); + boost::shared_ptr payload(new Swift::Command("settings")); + boost::shared_ptr iq = Swift::IQ::createRequest(Swift::IQ::Set, Swift::JID("localhost"), "id", payload); + iq->setFrom("user@localhost"); + injectIQ(iq); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::IQ::Result, dynamic_cast(getStanza(received[0]))->getType()); + + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(std::string("settings"), getStanza(received[0])->getPayload()->getNode()); + CPPUNIT_ASSERT_EQUAL(Swift::Command::Executing, getStanza(received[0])->getPayload()->getStatus()); + + // form element + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()); + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()->getForm()->getField("send_headlines")); + Swift::FormField::ref f = getStanza(received[0])->getPayload()->getForm()->getField("send_headlines"); + CPPUNIT_ASSERT_EQUAL(true, boost::dynamic_pointer_cast(f)->getValue()); + } + }; CPPUNIT_TEST_SUITE_REGISTRATION (SettingsAdHocCommandTest);