diff --git a/tests/libtransport/user.cpp b/tests/libtransport/user.cpp index d6185d0cee02c149deeb28bfb1b18561fc30f2fd..8d40f27793b61d25921bd4a9b11f61486b2f123e 100644 --- a/tests/libtransport/user.cpp +++ b/tests/libtransport/user.cpp @@ -29,6 +29,7 @@ class UserTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_TEST(handleDisconnected); CPPUNIT_TEST(handleDisconnectedReconnect); CPPUNIT_TEST(joinRoomHandleDisconnectedRejoin); + CPPUNIT_TEST(joinRoomAfterFlagNotAuthorized); CPPUNIT_TEST_SUITE_END(); public: @@ -138,6 +139,7 @@ class UserTest : public CPPUNIT_NS :: TestFixture, public BasicTest { // simulate that backend joined the room TestingConversation *conv = new TestingConversation(user->getConversationManager(), "room", true); conv->addJID("user@localhost/resource"); + conv->setNickname("hanzz"); user->getConversationManager()->addConversation(conv); received.clear(); @@ -452,6 +454,24 @@ class UserTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT_EQUAL(0, (int) received.size()); } + void joinRoomAfterFlagNotAuthorized() { + User *user = userManager->getUser("user@localhost"); + handlePresenceJoinRoom(); + + Conversation *conv = user->getConversationManager()->getConversation("room"); + conv->handleParticipantChanged("hanzz", Conversation::PARTICIPANT_FLAG_NOT_AUTHORIZED, Swift::StatusShow::Away, "my status message"); + loop->processEvents(); + + CPPUNIT_ASSERT_EQUAL(1, (int) received.size()); + CPPUNIT_ASSERT(dynamic_cast(getStanza(received[0]))); + CPPUNIT_ASSERT_EQUAL(Swift::Presence::Error, dynamic_cast(getStanza(received[0]))->getType()); + CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); + CPPUNIT_ASSERT_EQUAL(Swift::ErrorPayload::NotAuthorized, getStanza(received[0])->getPayload()->getCondition()); + + received.clear(); + handlePresenceJoinRoom(); + } + }; CPPUNIT_TEST_SUITE_REGISTRATION (UserTest);