diff --git a/RelayNext/plugin.py b/RelayNext/plugin.py index 3307607..0577db8 100644 --- a/RelayNext/plugin.py +++ b/RelayNext/plugin.py @@ -420,9 +420,9 @@ class RelayNext(callbacks.Plugin): # returning a list IF there are more than one items. Otherwise, # the object is returned alone. if type(relays) == list: - relays = list(map(str.lower, relays)) + relays = set(map(str.lower, relays)) else: - relays = [relays.lower()] + relays = set(relays.lower()) self.checkRelays(irc, relays) if rid not in self.db.keys() and len(relays) < 2: irc.error("Not enough channels to relay between (need at least " @@ -452,10 +452,19 @@ class RelayNext(callbacks.Plugin): return relays = list(map(str.lower, relays)) self.checkRelays(irc, relays) + missing = [] for relay in relays: + if relay not in current_relays: + missing.append(relay) current_relays.discard(relay) if len(current_relays) < 2: del self.db[rid] + if missing: + s = format("However, the following channels were not removed " + "because they were not found in the original relay: %L", + missing) + irc.replySuccess(s) + return irc.replySuccess() remove = wrap(remove, ['admin', 'somethingWithoutSpaces', any('somethingWithoutSpaces')]) diff --git a/RelayNext/test.py b/RelayNext/test.py index 021f988..069d02b 100644 --- a/RelayNext/test.py +++ b/RelayNext/test.py @@ -33,4 +33,75 @@ from supybot.test import * class RelayNextTestCase(PluginTestCase): plugins = ('RelayNext',) + def testAdd(self): + self.assertNotError("relaynext add test #channel1@somenet #channel2@othernet") + self.assertRegexp("relaynext list", "#channel1@somenet") + self.assertRegexp("relaynext list", "#channel2@othernet") + # Incorrect amount of arguments + self.assertError("relaynext add test") + self.assertError("relaynext add test afdasfader agkajeoig #validchannel@othernet") + self.assertError("relaynext add nonexistant-relay #channel1@somenet") + + def testSet(self): + self.assertNotError("relaynext set test #channel1@somenet #channel2@othernet") + self.assertRegexp("relaynext list", "#channel1@somenet") + self.assertRegexp("relaynext list", "#channel2@othernet") + self.assertError("relaynext set test") + self.assertError("relaynext set test #channel1@somenet") + + def testList(self): + # This should error if no relays are defined + self.assertError("relaynext list") + self.assertNotError("relaynext set abcd #moo@moo #test@test") + self.assertRegexp("relaynext list", "#moo@moo") + self.assertRegexp("relaynext list", "#test@test") + + def testSetCaseInsensitive(self): + self.assertError("relaynext set derp #dev@overdrive-irc #DEV@OVERdrive-IRC") + self.assertNotError("relaynext set abcd #moo@moo #MOO@mOO #test@test") + self.assertRegexp("relaynext list", "#moo@moo") + self.assertRegexp("relaynext list", "#test@test") + + def testAddCaseInsensitive(self): + self.assertError("relaynext add derp #dev@overdrive-irc #DEV@OVERdrive-IRC") + self.assertNotError("relaynext add abcd #moo@moo #MOO@mOO #test@test") + self.assertRegexp("relaynext list", "#moo@moo") + self.assertRegexp("relaynext list", "#test@test") + + def testRemoveEntireRelay(self): + self.assertError("relaynext remove some-relay") + self.assertNotError("relaynext add some-relay #channel1@somenet #channel2@othernet #abcd@test123") + # 'remove' without arguments removes an entire relay + self.assertNotError("relaynext remove some-relay") + # No relays should be defined now. + self.assertError("relaynext list") + + def testRemoveChannelsFromExistingRelay(self): + self.assertNotError("relaynext add some-relay #channel1@somenet #channel2@othernet #abcd@test123") + # This should give a warning (removing a channel that's not in the specified relay) + self.assertRegexp("relaynext remove some-relay #asfdafaergea@random", + 'not found in the original relay: ' + '#asfdafaergea@random') + self.assertNotError("relaynext remove some-relay #abcd@test123") + self.assertRegexp("relaynext list", "#channel1@somenet") + self.assertRegexp("relaynext list", "#channel2@othernet") + self.assertNotRegexp("relaynext list", "#abcd@test123") + + def testAutoremoveWhenLessThanTwoChannels(self): + self.assertNotError("relaynext add some-relay #channel1@somenet #channel2@othernet #abcd@test123") + self.assertNotError("relaynext remove some-relay #abcd@test123 #channel2@othernet") + self.assertError("relaynext list") + + def testAddChannelsToExistingRelay(self): + self.assertNotError("relaynext add test #channel1@somenet #channel2@othernet") + self.assertNotError("relaynext add test #somewhereElse@mynet") + self.assertRegexp("relaynext list", "#channel1@somenet") + self.assertRegexp("relaynext list", "#channel2@otherne") + self.assertRegexp("relaynext list", "#somewhereelse@mynet") + + def testClear(self): + self.assertNotError("relaynext set test #channel1@somenet #channel2@othernet") + self.assertNotError("relaynext clear") + self.assertError("relaynext list") + # vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79: