mirror of
https://github.com/jlu5/SupyPlugins.git
synced 2025-04-26 04:51:08 -05:00
RelayNext: add tests for the database commands & fix the bugs they've helped me discover!
More specifically, test 'set', 'add', 'remove', 'clear', and 'list'. These are some relatively complex functions that deal with: case-insensitive duplicate checking, requiring at least 2 channels per relay (auto-remove when a relay is below this threshold), adding/removing things from existing relays, and more... Sometimes manual testing can't catch all of these complex situations! This fixes a bug where you could add duplicate channels using the 'add' command if the same channel was given with differing cases (e.g. 'relaynext add new-relay channel1@net CHANNEl1@Net'). Also, add a notice when trying to remove a channel that doesn't exist in a relay.
This commit is contained in:
parent
065ac41975
commit
ca3fbc919b
@ -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')])
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user