def test_get_feeds_by_url(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv2 = ServerMock(self.hallo) serv2.name = "test_serv2" chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") user2 = serv1.get_user_by_address("test_user2", "test_user2") chan3 = serv2.get_channel_by_address("test_chan3".lower(), "test_chan3") # Setup a feed list rfl = SubscriptionRepo() rf1 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_feed.xml?1", title="test_feed1") rfl.add_sub(rf1) rf2 = RssSub(user2.server, user2, "http://spangle.org.uk/hallo/test_feed.xml?2", title="test_feed2") rfl.add_sub(rf2) rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?3", title="test_feed3") rfl.add_sub(rf3) rf4 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?4", title="test_feed4") rfl.add_sub(rf4) rf5 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?4", title="test_feed3") rfl.add_sub(rf5) # Check function feed_list = rfl.get_subs_by_name("http://spangle.org.uk/hallo/test_feed.xml?4", chan3) assert len(feed_list) == 2 assert rf4 in feed_list assert rf5 in feed_list
def test_run_by_title(self): # Set up test servers and channels serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" chan1 = serv1.get_channel_by_name("test_chan1") chan2 = serv1.get_channel_by_name("test_chan2") serv2 = ServerMock(self.hallo) serv2.name = "test_serv2" chan3 = serv2.get_channel_by_name("test_chan1") try: self.hallo.add_server(serv1) self.hallo.add_server(serv2) # Set up rss feeds rfl = RssFeedList() rf1 = RssFeed() rf1.url = "http://spangle.org.uk/hallo/test_rss.xml?1" rf1.title = "test_feed1" rf1.server_name = chan1.server.name rf1.channel_name = chan1.name rf1.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_feed(rf1) rf2 = RssFeed() rf2.url = "http://spangle.org.uk/hallo/test_rss.xml?2" rf2.title = "test_feed2" rf2.server_name = chan2.server.name rf2.channel_name = chan2.name rf2.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_feed(rf2) rf3 = RssFeed() rf3.url = "http://spangle.org.uk/hallo/test_rss.xml?3" rf3.title = "test_feed1" rf3.server_name = chan3.server.name rf3.channel_name = chan3.name rf3.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_feed(rf3) # Splice this rss feed list into the function dispatcher's rss check object rss_check_class = self.function_dispatcher.get_function_by_name("rss check") rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class) # type: FeedCheck rss_check_obj.rss_feed_list = rfl # Invalid title self.function_dispatcher.dispatch("rss check Not a valid feed", self.test_user, self.test_chan) data = self.server.get_send_data(1, self.test_chan, Server.MSG_MSG) assert "error" in data[0][0].lower() # Correct title but wrong channel self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" in data[0][0].lower() # Correct title check update self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan2) data = serv1.get_send_data(1, chan2, Server.MSG_MSG) assert "feed updates were found" in data[0][0].lower() assert len(data[0][0].lower().split("\n")) == 4 # No updates rf2.title = "test_feed2" self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan2) data = serv1.get_send_data(1, chan2, Server.MSG_MSG) assert "no updates" in data[0][0], "No further updates should be found." finally: self.hallo.remove_server(serv2) self.hallo.remove_server(serv1)
def test_run_by_search(self): # Set up test servers and channels serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" chan1 = serv1.get_channel_by_name("test_chan1") chan2 = serv1.get_channel_by_name("test_chan2") serv2 = ServerMock(self.hallo) serv2.name = "test_serv2" chan3 = serv2.get_channel_by_name("test_chan1") try: self.hallo.add_server(serv1) self.hallo.add_server(serv2) # Set up rss feeds rfl = E621SubList() rf1 = E621Sub() rf1.search = "butt" rf1.server_name = chan1.server.name rf1.channel_name = chan1.name rf1.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_sub(rf1) rf2 = E621Sub() rf2.search = "deer" rf2.server_name = chan2.server.name rf2.channel_name = chan2.name rf2.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_sub(rf2) rf3 = E621Sub() rf3.search = "dragon" rf3.server_name = chan3.server.name rf3.channel_name = chan3.name rf3.update_frequency = Commons.load_time_delta("PT3600S") rfl.add_sub(rf3) # Splice this rss feed list into the function dispatcher's rss check object rss_check_class = self.function_dispatcher.get_function_by_name("e621 sub check") rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class) # type: SubE621Check rss_check_obj.e621_sub_list = rfl # Invalid title self.function_dispatcher.dispatch("e621 sub check Not a valid search", self.test_user, self.test_chan) data = self.server.get_send_data(1, self.test_chan, Server.MSG_MSG) assert "error" in data[0][0].lower() # Correct title but wrong channel self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" in data[0][0].lower() # Correct title check update self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan2) data = serv1.get_send_data(1, chan2, Server.MSG_MSG) assert "search updates were found" in data[0][0].lower() assert len(data[0][0].lower().split("\n")) == 51 # No updates self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan2) data = serv1.get_send_data(1, chan2, Server.MSG_MSG) assert "no updates" in data[0][0], "No further updates should be found." finally: self.hallo.remove_server(serv2) self.hallo.remove_server(serv1)
def test_run_all(self): # Set up test servers and channels serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2") serv2 = ServerMock(self.hallo) serv2.name = "test_serv2" chan3 = serv2.get_channel_by_address("test_chan1".lower(), "test_chan1") try: self.hallo.add_server(serv1) self.hallo.add_server(serv2) # Set up rss feeds rfl = SubscriptionRepo() rf1 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_rss.xml?1", title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf1) rf2 = RssSub(chan2.server, chan2, "http://spangle.org.uk/hallo/test_rss.xml?2", title="test_feed2", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf2) rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_rss.xml?3", title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf3) # Splice this rss feed list into the function dispatcher's rss check object rss_check_class = self.function_dispatcher.get_function_by_name("check subscription") rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class) # type: SubscriptionCheck rss_check_obj.subscription_repo = rfl # Test running all feed updates self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "rss check all")) # Check original calling channel data serv0_data = self.server.get_send_data(1, self.test_chan, EventMessage) assert "subscription updates were found" in serv0_data[0].text # Check test server 1 data serv1_data = serv1.get_send_data(6) chan1_count = 0 chan2_count = 0 for data_line in serv1_data: if data_line.channel == chan1: chan1_count += 1 if data_line.channel == chan2: chan2_count += 1 assert chan1_count == 3 assert chan2_count == 3 # Check test server 2 data serv2.get_send_data(3, chan3, EventMessage) # Test running with no new updates. self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "rss check all")) data = self.server.get_send_data(1, self.test_chan, EventMessage) assert "no updates" in data[0].text, "No further updates should be found." finally: self.hallo.remove_server(serv2) self.hallo.remove_server(serv1)
def test_run_by_title(self): # Set up test servers and channels serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" chan1 = serv1.get_channel_by_address("test_chan1") chan2 = serv1.get_channel_by_address("test_chan2") user1 = serv1.get_user_by_address("test_user1") serv2 = ServerMock(self.hallo) serv2.name = "test_serv2" chan3 = serv2.get_channel_by_address("test_chan1") try: self.hallo.add_server(serv1) self.hallo.add_server(serv2) # Set up rss feeds rfl = SubscriptionRepo() rf1 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_rss.xml?1", title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf1) rf2 = RssSub(chan2.server, chan2, "http://spangle.org.uk/hallo/test_rss.xml?2", title="test_feed2", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf2) rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_rss.xml?3", title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S")) rfl.add_sub(rf3) # Splice this rss feed list into the function dispatcher's rss check object rss_check_class = self.function_dispatcher.get_function_by_name("check subscription") rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class) # type: SubscriptionCheck rss_check_obj.subscription_repo = rfl # Invalid title self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "rss check Not a valid feed")) data = self.server.get_send_data(1, self.test_chan, EventMessage) assert "error" in data[0].text.lower() # Correct title but wrong channel self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "rss check test_feed2")) data = serv1.get_send_data(1, chan1, EventMessage) assert "error" in data[0].text.lower() # Correct title check update self.function_dispatcher.dispatch(EventMessage(serv1, chan2, user1, "rss check test_feed2")) data = serv1.get_send_data(4, chan2, EventMessage) for x in range(3): assert "update on" in data[x].text.lower() assert "rss feed" in data[x].text.lower() assert "updates were found" in data[3].text.lower(), "Actual message: {}".format(data[0].text) # No updates rf2.title = "test_feed2" self.function_dispatcher.dispatch(EventMessage(serv1, chan2, user1, "rss check test_feed2")) data = serv1.get_send_data(1, chan2, EventMessage) assert "no updates" in data[0].text, "No further updates should be found." finally: self.hallo.remove_server(serv2) self.hallo.remove_server(serv1)
def test_invite_2_user(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") chan1.in_channel = True chan2 = serv1.get_channel_by_name("test_chan2") chan2.in_channel = True user1 = serv1.get_user_by_name("test_user1") user2 = serv1.get_user_by_name("test_user2") user_hallo = serv1.get_user_by_name(serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True chan2.add_user(user_hallo) chan2_hallo = chan2.get_membership_by_user(user_hallo) chan2_hallo.is_op = True try: self.function_dispatcher.dispatch("invite test_user2 test_chan2", user1, chan1) data = serv1.get_send_data(2) assert "error" not in data[0][0].lower() assert data[0][1] is None assert data[1][1] == chan1 assert data[0][2] == Server.MSG_RAW assert data[1][2] == Server.MSG_MSG assert data[0][0][:6] == "INVITE" assert user2.name+" "+chan2.name in data[0][0] assert "invite sent" in data[1][0].lower() finally: self.hallo.remove_server(serv1)
def test_one_server(self): # Add one server serv1 = ServerMock(self.hallo) serv1.name = "server_list_test" self.hallo.add_server(serv1) # Send command self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "list servers")) data = self.server.get_send_data(1, self.test_chan, EventMessage) # Check response server_list_text = data[0].text.split(":")[1] server_list = server_list_text.split("], ") assert len(server_list) == 1 assert serv1.name in server_list[0], "Server name not found in output.\n" \ "Server name: " + serv1.name + "\n" \ "Command output: " + server_list[0] assert "type=" + serv1.type in server_list[0], "Server type not found in output.\n" \ "Server type: " + serv1.type + "\n" \ "Command output: " + server_list[0] assert "state=" + serv1.state in server_list[0], "Server state not found in output.\n" \ "Server name: " + serv1.state + "\n" \ "Command output: " + server_list[0] assert "nick=" + serv1.get_nick() in server_list[0], "Server nick not found in output.\n" \ "Server nick: " + serv1.get_nick() + "\n" \ "Command output: " + server_list[0] assert "auto_connect=" + str(serv1.auto_connect) in \ server_list[0], "Server auto connect not found in output.\n" \ "Server auto connect: " + \ str(serv1.auto_connect) + "\n" \ "Command output: " + server_list[0]
def test_run_fail_args(self): # Set up a test hallo and server and channel and user hallo1 = Hallo() perm0 = PermissionMask() hallo1.permission_mask = perm0 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm1 = PermissionMask() serv1.permission_mask = perm1 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") perm2 = PermissionMask() chan1.permission_mask = perm2 user1 = serv1.get_user_by_name("test_user1") perm3 = PermissionMask() user1.permission_mask = perm3 # Get permission mask of given channel test_right = "test_right" perm1.set_right(test_right, True) self.function_dispatcher.dispatch("permissions server=test_serv1 "+test_right, user1, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" in data[0][0].lower() assert "a location, a right and the value" in data[0][0].lower() assert test_right in perm1.rights_map assert perm1.rights_map[test_right]
def test_invite_2_user(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan1.in_channel = True chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2") chan2.in_channel = True user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2") user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True chan2.add_user(user_hallo) chan2_hallo = chan2.get_membership_by_user(user_hallo) chan2_hallo.is_op = True try: self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "invite test_user2 test_chan2")) data = serv1.get_send_data(2) assert "error" not in data[1].text.lower() assert data[0].channel == chan2 assert data[1].channel == chan1 assert data[0].__class__ == EventInvite assert data[1].__class__ == EventMessage assert data[0].invited_user == user2 assert "invite sent" in data[1].text.lower() finally: self.hallo.remove_server(serv1)
def test_devoice_1priv(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan1.in_channel = True user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick()) chan1.add_user(user1) chan1.add_user(user_hallo) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_voice = True chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True try: self.function_dispatcher.dispatch(EventMessage(serv1, None, user1, "devoice test_chan1")) data = serv1.get_send_data(2) assert "error" not in data[1].text.lower() assert data[0].channel == chan1 assert data[1].user == user1 assert data[0].__class__ == EventMode assert data[1].__class__ == EventMessage assert "-v "+user1.name in data[0].mode_changes assert "status taken" in data[1].text.lower() finally: self.hallo.remove_server(serv1)
def test_deop_2_user_not_op(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") chan1.in_channel = True chan2 = serv1.get_channel_by_name("test_chan2") chan2.in_channel = True user1 = serv1.get_user_by_name("test_user1") user2 = serv1.get_user_by_name("test_user2") user_hallo = serv1.get_user_by_name(serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True chan2.add_user(user2) chan2_user2 = chan2.get_membership_by_user(user2) chan2_user2.is_op = False chan2.add_user(user_hallo) chan2_hallo = chan2.get_membership_by_user(user_hallo) chan2_hallo.is_op = True try: self.function_dispatcher.dispatch("deop test_user2 test_chan2", user1, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" in data[0][0].lower() assert "doesn't have op" in data[0][0].lower() finally: self.hallo.remove_server(serv1)
def test_deop_0(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") chan1.in_channel = True user1 = serv1.get_user_by_name("test_user1") user_hallo = serv1.get_user_by_name(serv1.get_nick()) chan1.add_user(user1) chan1.add_user(user_hallo) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = True chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True try: self.function_dispatcher.dispatch("deop", user1, chan1) data = serv1.get_send_data(2) assert "error" not in data[0][0].lower() assert data[0][1] is None assert data[1][1] == chan1 assert data[0][2] == Server.MSG_RAW assert data[1][2] == Server.MSG_MSG assert data[0][0][:4] == "MODE" assert chan1.name+" -o "+user1.name in data[0][0] assert "status taken" in data[1][0].lower() finally: self.hallo.remove_server(serv1)
def test_1_user_group_no_name(self): # Set up a test server and channel and user hallo1 = Hallo() perm3 = PermissionMask() hallo1.permission_mask = perm3 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm0 = PermissionMask() serv1.permission_mask = perm0 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") perm1 = PermissionMask() chan1.permission_mask = perm1 user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") perm2 = PermissionMask() user1.permission_mask = perm2 group1 = UserGroup("test_group1", hallo1) perm4 = PermissionMask() group1.permission_mask = perm4 hallo1.add_user_group(group1) # Try to get permissions of non-existent user group try: data = self.perm_cont.find_permission_mask(["user_group=test_group2"], user1, chan1) assert False, "Find permission mask should have failed." except modules.PermissionControl.PermissionControlException as e: assert "error" in str(e).lower() assert "no user group exists by that name" in str(e).lower()
def test_run_add_off(self): # Set up a test hallo and server and channel and user hallo1 = Hallo() perm0 = PermissionMask() hallo1.permission_mask = perm0 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm1 = PermissionMask() serv1.permission_mask = perm1 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") perm2 = PermissionMask() chan1.permission_mask = perm2 user1 = serv1.get_user_by_name("test_user1") perm3 = PermissionMask() user1.permission_mask = perm3 # Get permission mask of given channel test_right = "test_right" self.function_dispatcher.dispatch("permissions server=test_serv1 channel=test_chan1 "+test_right+" off", user1, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" not in data[0][0].lower() assert "set "+test_right+" to false" in data[0][0].lower() assert test_right in perm2.rights_map assert not perm2.rights_map[test_right]
def test_1_user_just_name_privmsg(self): # Set up a test server and channel and user hallo1 = Hallo() perm3 = PermissionMask() hallo1.permission_mask = perm3 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm0 = PermissionMask() serv1.permission_mask = perm0 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") perm1 = PermissionMask() chan1.permission_mask = perm1 user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") perm2 = PermissionMask() user1.permission_mask = perm2 chan1.add_user(user1) user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2") perm4 = PermissionMask() user2.permission_mask = perm4 # Get permissions of specified user group try: data = self.perm_cont.find_permission_mask(["test_user2"], user1, None) assert False, "Find permission mask should have failed." except modules.PermissionControl.PermissionControlException as e: assert "error" in str(e).lower() assert "i can't find that permission mask" in str(e).lower()
def test_voice_1_user_is_voice(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") chan1.in_channel = True user1 = serv1.get_user_by_name("test_user1") user2 = serv1.get_user_by_name("test_user2") user_hallo = serv1.get_user_by_name(serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True chan1.add_user(user2) chan1_user2 = chan1.get_membership_by_user(user2) chan1_user2.is_op = False chan1_user2.is_voice = True try: self.function_dispatcher.dispatch("voice test_user2", user1, chan1) data = serv1.get_send_data(1, chan1, Server.MSG_MSG) assert "error" in data[0][0].lower() assert "already has voice" in data[0][0].lower() finally: self.hallo.remove_server(serv1)
def test_check_response(self): # Setup common testing objects serv1 = ServerMock(None) serv1.name = "test_serv1" chan1 = serv1.get_channel_by_name("test_chan1") user1 = serv1.get_user_by_name("test_user1") # Test basic response works rm1 = ReplyMessage("test") rm1.add_response("response") assert rm1.check_response("just a test", user1, chan1) == "response" # Test regex pattern match rm2 = ReplyMessage("\\btest[0-9]+\\b") rm2.add_response("response") assert rm2.check_response("random testing", user1, chan1) is None assert rm2.check_response("random test here", user1, chan1) is None assert rm2.check_response("this is test3 I think", user1, chan1) == "response" assert rm2.check_response("this is test4", user1, chan1) == "response" # Test multi-response works rm3 = ReplyMessage("test") rm3.add_response("response1") rm3.add_response("response2") rm3.add_response("response3") found_responses = set() for _ in range(50): response = rm3.check_response("another test", user1, chan1) found_responses.add(response) assert response in ["response1", "response2", "response3"] assert len(found_responses) > 1 # Test replacements rm4 = ReplyMessage("test") rm4.add_response("response {USER} {CHANNEL} {SERVER}") assert rm4.check_response("test", user1, chan1) == "response test_user1 test_chan1 test_serv1"
def test_run_set_off(self): # Set up a test hallo and server and channel and user hallo1 = Hallo() perm0 = PermissionMask() hallo1.permission_mask = perm0 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm1 = PermissionMask() serv1.permission_mask = perm1 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") perm2 = PermissionMask() chan1.permission_mask = perm2 user1 = serv1.get_user_by_address("test_user1", "test_user1") perm3 = PermissionMask() user1.permission_mask = perm3 # Get permission mask of given channel test_right = "test_right" perm2.set_right(test_right, True) self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "permissions server=test_serv1 channel=test_chan1 " + test_right+" off")) data = serv1.get_send_data(1, chan1, EventMessage) assert "error" not in data[0].text.lower() assert "set "+test_right+" to false" in data[0].text.lower() assert test_right in perm2.rights_map assert not perm2.rights_map[test_right]
def test_invite_2_user_user_already_there(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan1.in_channel = True chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2") chan2.in_channel = True user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2") user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True chan2.add_user(user2) chan2_user1 = chan2.get_membership_by_user(user2) chan2_user1.is_op = False chan2.add_user(user_hallo) chan2_hallo = chan2.get_membership_by_user(user_hallo) chan2_hallo.is_op = True try: self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "invite test_user2 test_chan2")) data = serv1.get_send_data(1, chan1, EventMessage) assert "error" in data[0].text.lower() assert "test_user2 is already in test_chan2" in data[0].text.lower() finally: self.hallo.remove_server(serv1)
def test_op_1_user_no_power(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan1.in_channel = True user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2") user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick()) chan1.add_user(user1) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1.add_user(user_hallo) chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = False chan1.add_user(user2) chan1_user2 = chan1.get_membership_by_user(user2) chan1_user2.is_op = False try: self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "op test_user2")) data = serv1.get_send_data(1, chan1, EventMessage) assert "error" in data[0].text.lower() assert "don't have power" in data[0].text.lower() finally: self.hallo.remove_server(serv1)
def test_run_fail_not_bool(self): # Set up a test hallo and server and channel and user hallo1 = Hallo() perm0 = PermissionMask() hallo1.permission_mask = perm0 serv1 = ServerMock(hallo1) serv1.name = "test_serv1" perm1 = PermissionMask() serv1.permission_mask = perm1 hallo1.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") perm2 = PermissionMask() chan1.permission_mask = perm2 user1 = serv1.get_user_by_address("test_user1", "test_user1") perm3 = PermissionMask() user1.permission_mask = perm3 # Get permission mask of given channel test_right = "test_right" perm1.set_right(test_right, True) self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "permissions server=test_serv1 "+test_right+" yellow")) data = serv1.get_send_data(1, chan1, EventMessage) assert "error" in data[0].text.lower() assert "don't understand your boolean value" in data[0].text.lower() assert test_right in perm1.rights_map assert perm1.rights_map[test_right]
def test_mute_0(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1") chan1.in_channel = True user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick()) chan1.add_user(user1) chan1.add_user(user_hallo) chan1_user1 = chan1.get_membership_by_user(user1) chan1_user1.is_op = False chan1_hallo = chan1.get_membership_by_user(user_hallo) chan1_hallo.is_op = True try: self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "mute")) data = serv1.get_send_data(2) assert "error" not in data[1].text.lower() assert data[0].channel == chan1 assert data[1].channel == chan1 assert data[0].__class__ == EventMode assert data[1].__class__ == EventMessage assert data[0].mode_changes == "+m" assert "set mute in "+chan1.name in data[1].text.lower() finally: self.hallo.remove_server(serv1)
def test_get_feeds_by_title(self): serv1 = ServerMock(None) serv1.name = "test_serv1" serv2 = ServerMock(None) serv2.name = "test_serv2" chan1 = serv1.get_channel_by_name("test_chan1") user2 = serv1.get_user_by_name("test_user2") chan3 = serv2.get_channel_by_name("test_chan3") # Setup a feed list rfl = RssFeedList() rf1 = RssFeed() rf1.url = "http://spangle.org.uk/hallo/test_feed.xml?1" rf1.title = "test_feed1" rf1.server_name = chan1.server.name rf1.channel_name = chan1.name rfl.add_feed(rf1) rf2 = RssFeed() rf2.url = "http://spangle.org.uk/hallo/test_feed.xml?2" rf2.title = "test_feed2" rf2.server_name = user2.server.name rf2.user_name = user2.name rfl.add_feed(rf2) rf3 = RssFeed() rf3.url = "http://spangle.org.uk/hallo/test_feed.xml?3" rf3.title = "test_feed3" rf3.server_name = chan3.server.name rf3.channel_name = chan3.name rfl.add_feed(rf3) rf4 = RssFeed() rf4.url = "http://spangle.org.uk/hallo/test_feed.xml?4" rf4.title = "test_feed4" rf4.server_name = chan3.server.name rf4.channel_name = chan3.name rfl.add_feed(rf4) rf5 = RssFeed() rf5.url = "http://spangle.org.uk/hallo/test_feed.xml?5" rf5.title = "test_feed3" rf5.server_name = chan3.server.name rf5.channel_name = chan3.name rfl.add_feed(rf5) # Check function feed_list = rfl.get_feeds_by_title("test_feed3", chan3) assert len(feed_list) == 2 assert rf3 in feed_list assert rf5 in feed_list
def test_check_destination(self): serv_name1 = "test_serv1" serv_name2 = "test_serv2" serv_name3 = "test_serv3" chan_name1 = "test_chan1" chan_name2 = "test_chan2" chan_name3 = "test_chan3" chan_name4 = "test_chan4" chan_name5 = "test_chan5" # Set up test destinations serv1 = ServerMock(None) serv2 = ServerMock(None) serv3 = ServerMock(None) serv1.name = serv_name1 serv2.name = serv_name2 serv3.name = serv_name3 chan1 = serv1.get_channel_by_name(chan_name1) chan2 = serv1.get_channel_by_name(chan_name2) chan3 = serv2.get_channel_by_name(chan_name3) chan4 = serv3.get_channel_by_name(chan_name4) chan5 = serv3.get_channel_by_name(chan_name5) # Check when no whitelist or blacklist rm = ReplyMessage("test") assert rm.check_destination(chan1), "check_destination() not working without list" assert rm.check_destination(chan2), "check_destination() not working without list" assert rm.check_destination(chan3), "check_destination() not working without list" assert rm.check_destination(chan4), "check_destination() not working without list" assert rm.check_destination(chan5), "check_destination() not working without list" # Add a blacklist for a specific channel on a specific server rm.add_blacklist(serv_name1, chan_name1) assert not rm.check_destination(chan1), "check_destination() not working with blacklist" assert rm.check_destination(chan2), "check_destination() not working with blacklist" assert rm.check_destination(chan3), "check_destination() not working with blacklist" assert rm.check_destination(chan4), "check_destination() not working with blacklist" assert rm.check_destination(chan5), "check_destination() not working with blacklist" # Add a whitelist for a specific channel on a specific server rm.add_whitelist(serv_name3, chan_name5) assert not rm.check_destination(chan1), "check_destination() not working with blacklist" assert not rm.check_destination(chan2), "check_destination() not working with blacklist" assert not rm.check_destination(chan3), "check_destination() not working with blacklist" assert not rm.check_destination(chan4), "check_destination() not working with blacklist" assert rm.check_destination(chan5), "check_destination() not working with blacklist"
def test_2_server_chan(self): # Set up a test server and channel serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" self.hallo.add_server(serv1) chan1 = serv1.get_channel_by_name("test_chan1") perm1 = PermissionMask() chan1.permission_mask = perm1 # Get permission mask of given channel data = self.perm_cont.find_permission_mask(["server=test_serv1", "channel=test_chan1"], self.test_user, self.test_chan) assert perm1 == data, "Did not find the correct permission mask."
def test_2_server_user(self): # Set up a test server and user serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" self.hallo.add_server(serv1) user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") perm1 = PermissionMask() user1.permission_mask = perm1 # Get permission mask of given channel data = self.perm_cont.find_permission_mask(["server=test_serv1", "user=test_user1"], self.test_user, self.test_chan) assert perm1 == data, "Did not find the correct permission mask."
def test_mute_privmsg(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) user1 = serv1.get_user_by_name("test_user1") try: self.function_dispatcher.dispatch("mute", user1, user1) data = serv1.get_send_data(1, user1, Server.MSG_MSG) assert "error" in data[0][0].lower() assert "can't set mute on a private message" in data[0][0].lower() finally: self.hallo.remove_server(serv1)
def test_mute_privmsg(self): serv1 = ServerMock(self.hallo) serv1.name = "test_serv1" serv1.type = Server.TYPE_IRC self.hallo.add_server(serv1) user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1") try: self.function_dispatcher.dispatch(EventMessage(serv1, None, user1, "mute")) data = serv1.get_send_data(1, user1, EventMessage) assert "error" in data[0].text.lower() assert "can't set mute on a private message" in data[0].text.lower() finally: self.hallo.remove_server(serv1)
def test_server_specified_no_channel(self): # Set up test resources test_serv = ServerMock(self.hallo) test_serv.name = "TestServer1" self.hallo.add_server(test_serv) test_chan = test_serv.get_channel_by_address("#not_in_channel".lower(), "#not_in_channel") test_chan.in_channel = False # Send command self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "leave server="+test_serv.name+" "+test_chan.name)) # Check response data data = self.server.get_send_data(1, self.test_chan, EventMessage) self.server.get_left_channels(0) test_serv.get_left_channels(0) assert "error" in data[0].text.lower()
def test_reply_pew(self): reply_func = self.function_dispatcher.get_function_by_name("reply") reply_obj = self.function_dispatcher.get_function_object(reply_func) # type: Reply # Check pewpew response = reply_obj.passive_run(Function.EVENT_MESSAGE, "pew", None, self.server, self.test_user, self.test_chan) assert response == "pew pew" # Check blacklist serv1 = ServerMock(None) serv1.name = "canternet" chan1 = serv1.get_channel_by_name("#ukofequestria") user1 = serv1.get_user_by_name("test_user") response = reply_obj.passive_run(Function.EVENT_MESSAGE, "pew", None, serv1, user1, chan1) assert response is None