mirror of
https://github.com/jlu5/SupyPlugins.git
synced 2025-04-27 05:21:10 -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,
|
# returning a list IF there are more than one items. Otherwise,
|
||||||
# the object is returned alone.
|
# the object is returned alone.
|
||||||
if type(relays) == list:
|
if type(relays) == list:
|
||||||
relays = list(map(str.lower, relays))
|
relays = set(map(str.lower, relays))
|
||||||
else:
|
else:
|
||||||
relays = [relays.lower()]
|
relays = set(relays.lower())
|
||||||
self.checkRelays(irc, relays)
|
self.checkRelays(irc, relays)
|
||||||
if rid not in self.db.keys() and len(relays) < 2:
|
if rid not in self.db.keys() and len(relays) < 2:
|
||||||
irc.error("Not enough channels to relay between (need at least "
|
irc.error("Not enough channels to relay between (need at least "
|
||||||
@ -452,10 +452,19 @@ class RelayNext(callbacks.Plugin):
|
|||||||
return
|
return
|
||||||
relays = list(map(str.lower, relays))
|
relays = list(map(str.lower, relays))
|
||||||
self.checkRelays(irc, relays)
|
self.checkRelays(irc, relays)
|
||||||
|
missing = []
|
||||||
for relay in relays:
|
for relay in relays:
|
||||||
|
if relay not in current_relays:
|
||||||
|
missing.append(relay)
|
||||||
current_relays.discard(relay)
|
current_relays.discard(relay)
|
||||||
if len(current_relays) < 2:
|
if len(current_relays) < 2:
|
||||||
del self.db[rid]
|
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()
|
irc.replySuccess()
|
||||||
remove = wrap(remove, ['admin', 'somethingWithoutSpaces',
|
remove = wrap(remove, ['admin', 'somethingWithoutSpaces',
|
||||||
any('somethingWithoutSpaces')])
|
any('somethingWithoutSpaces')])
|
||||||
|
@ -33,4 +33,75 @@ from supybot.test import *
|
|||||||
class RelayNextTestCase(PluginTestCase):
|
class RelayNextTestCase(PluginTestCase):
|
||||||
plugins = ('RelayNext',)
|
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:
|
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user