aboutsummaryrefslogtreecommitdiff
path: root/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'test.py')
-rwxr-xr-xtest.py288
1 files changed, 173 insertions, 115 deletions
diff --git a/test.py b/test.py
index 94235e1..4ffea93 100755
--- a/test.py
+++ b/test.py
@@ -8,17 +8,15 @@ from string import Template
import subprocess
import unittest
+import geldschieberbot
+
alice, bob, charlie = "alice", "bob", "charlie"
num = {alice: "+49123456", bob: "+49654321", charlie: "+49615243"}
-os.environ["GSB_GROUP_ID"] = "test"
-os.environ["GSB_STATE_FILE"] = "test/state.json"
-os.environ["GSB_SEND_CMD"] = "cat"
-os.environ["GSB_SEND_GROUP"] = "cat"
-os.environ["GSB_SEND_USER"] = "cat"
-os.environ["GSB_MODULES"] = "geldschiebing.py"
now = datetime.now().date()
+STATE_PATH = "test/state.json"
+
msg_template = Template("""
{"envelope":
{"source":"$sender",
@@ -52,37 +50,72 @@ scheduled_state_template = Template("""
"sender": "+49123456", "cmd": ["split", "3", "bob", "charlie"]}},
"changes": {"alice": [], "bob": [], "charlie": []}}""")
+METHOD_COUNTER = 0
+BOT = None
+
def run_bot(test, sender, cmd):
- msg = msg_template.substitute(sender=sender, msg=cmd).replace("\n", "\\n") + "\n"
- res = subprocess.run(["python3", "./geldschieberbot.py"], text=True, capture_output=True,
- # res = subprocess.run(["python3", "./bot.py"], text=True, capture_output=True,
- input=msg)
-
- if res.returncode != 0:
- print(res.stdout)
- print(res.stderr)
- test.assertEqual(res.returncode, 0)
- test.assertEqual(res.stderr, "")
+ global BOT
+ if not BOT:
+ env = {"GSB_STATE_FILE": STATE_PATH}
+ BOT = subprocess.Popen("./geldschieberbot.py",
+ stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ text=True,
+ env=env)
+ global METHOD_COUNTER
+ payload = {
+ "method": "receive",
+ "params": {
+ "messageId": 0,
+ "sender": sender,
+ "message": cmd,
+ "groupId": "test",
+ },
+ "jsonrpc": "2.0",
+ "id": METHOD_COUNTER,
+ }
+
+ METHOD_COUNTER += 1
+
+ if BOT.poll():
+ print("BOT died!")
+ BOT = None
+ print(json.dumps(payload), file=BOT.stdin, flush=True)
+ response = json.loads(BOT.stdout.readline())
+
+ return "/n".join([result['message'] for result in response["result"]])
+
+ # res = geldschieberbot.receive(0, sender, message=cmd, timestamp=1544101248419, groupId='test')
+ # msg = msg_template.substitute(sender=sender, msg=cmd).replace("\n", "\\n") + "\n"
+ # res = subprocess.run(["python3", "./geldschieberbot.py"], text=True, capture_output=True,
+ # # res = subprocess.run(["python3", "./bot.py"], text=True, capture_output=True,
+ # input=msg)
+
+ # if res.returncode != 0:
+ # print(res)
+ # print(res.stderr)
+ # test.assertEqual(res.returncode, 0)
+ # test.assertEqual(res.stderr, "")
return res
def save_state(dest):
- copyfile(os.environ["GSB_STATE_FILE"], dest)
+ copyfile(STATE_PATH, dest)
def reset_state(state=None):
if state:
- copyfile(state, os.environ["GSB_STATE_FILE"])
+ copyfile(state, STATE_PATH)
else:
- state = os.environ["GSB_STATE_FILE"]
+ state = STATE_PATH
if os.path.isfile(state):
os.remove(state)
def reset_state_string(string):
- with open(os.environ["GSB_STATE_FILE"], "w") as f:
+ with open(STATE_PATH, "w") as f:
json.dump(json.loads(string), f)
def compare_state(comp_state):
with open(comp_state, "r") as csf, \
- open(os.environ["GSB_STATE_FILE"], "r") as sf:
+ open(STATE_PATH, "r") as sf:
cs = csf.read()
s = sf.read()
return cs == s
@@ -94,25 +127,25 @@ class TestRegCmd(unittest.TestCase):
def test_correct_reg(self):
res = run_bot(self, num[alice], "!reg "+alice)
- self.assertEqual(res.stdout, 'Happy geldschiebing {}!'.format(alice))
+ self.assertEqual(res, 'Happy geldschiebing {}!'.format(alice))
def test_double_reg(self):
- res = run_bot(self, num[alice], "!reg "+alice)
- self.assertEqual(res.stdout, 'Happy geldschiebing {}!'.format(alice))
- res = run_bot(self, num[alice], "!reg "+alice)
- self.assertEqual(res.stdout, 'ERROR: '+alice+' already registered')
+ res = run_bot(self, num[alice], f"!reg {alice}")
+ self.assertEqual(res, f'Happy geldschiebing {alice}!')
+ res = run_bot(self, num[alice], f"!reg {alice}")
+ self.assertEqual(res, f'AlreadyRegisteredError: "{alice}" already registered')
def test_invalid_reg(self):
res = run_bot(self, num[alice], "!reg nase 03")
- self.assertEqual(res.stdout, 'ERROR: not in form "!reg name"')
+ self.assertEqual(res, 'InvalidArgumentError: "!reg nase 03" not in form "!reg name"')
def test_additional_reg(self):
res = run_bot(self, num[alice], "!reg "+alice)
- self.assertEqual(res.stdout, 'Happy geldschiebing {}!'.format(alice))
+ self.assertEqual(res, 'Happy geldschiebing {}!'.format(alice))
res = run_bot(self, num[bob], "!reg "+bob)
- self.assertEqual(res.stdout, 'Happy geldschiebing {}!'.format(bob))
+ self.assertEqual(res, 'Happy geldschiebing {}!'.format(bob))
res = run_bot(self, num[charlie], "!reg "+charlie)
- self.assertEqual(res.stdout, 'Happy geldschiebing {}!'.format(charlie))
+ self.assertEqual(res, 'Happy geldschiebing {}!'.format(charlie))
self.assertTrue(compare_state("test/state.json_3users"))
@@ -128,72 +161,72 @@ class TestTransactionCmd(unittest.TestCase):
def test_correct_schieb(self):
res = run_bot(self, num[alice], "!schieb 10 "+bob)
- self.assertEqual(res.stdout, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
+ self.assertEqual(res, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
res = run_bot(self, num[bob], "!schieb 10 "+alice)
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
def test_correct_gib(self):
res = run_bot(self, num[alice], "!gib 10 "+bob)
- self.assertEqual(res.stdout, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
+ self.assertEqual(res, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
res = run_bot(self, num[bob], "!gib 10 "+alice)
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
def test_correct_amount(self):
res = run_bot(self, num[bob], "!schieb 1.1 "+alice)
- self.assertEqual(res.stdout, 'New Balance: {} <- 1.10 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 1.10 {}\n'.format(bob, alice))
res = run_bot(self, num[bob], "!gib 1,1 "+alice)
- self.assertEqual(res.stdout, 'New Balance: {} <- 2.20 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 2.20 {}\n'.format(bob, alice))
def test_invalid_amount(self):
res = run_bot(self, num[bob], "!schieb 1b1 "+alice)
- self.assertEqual(res.stdout, 'ERROR: amount must be a positive number')
+ self.assertEqual(res, 'InvalidAmountError: "1b1" not in form <euro>.<cents>')
res = run_bot(self, num[bob], "!schieb ä€ "+alice)
- self.assertEqual(res.stdout, 'ERROR: amount must be a positive number')
+ self.assertEqual(res, 'InvalidAmountError: "ä€" not in form <euro>.<cents>')
def test_correct_schieb_name_before_amount(self):
res = run_bot(self, num[alice], "!schieb "+bob+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
+ self.assertEqual(res, 'New Balance: {} <- 10.00 {}\n'.format(alice, bob))
res = run_bot(self, num[bob], "!schieb "+alice+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
def test_correct_gib_name_before_amount(self):
res = run_bot(self, num[alice], "!gib "+charlie+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} <- 10.00 {}\n'.format(alice, charlie))
+ self.assertEqual(res, 'New Balance: {} <- 10.00 {}\n'.format(alice, charlie))
res = run_bot(self, num[charlie], "!gib "+alice+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(charlie, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(charlie, alice))
def test_correct_nimm(self):
res = run_bot(self, num[alice], "!nimm 10 "+bob)
- self.assertEqual(res.stdout, 'New Balance: {} -> 10.00 {}\n'.format(alice, bob))
+ self.assertEqual(res, 'New Balance: {} -> 10.00 {}\n'.format(alice, bob))
res = run_bot(self, num[bob], "!nimm 10 "+alice)
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(bob, alice))
def test_correct_zieh_name_before_amount(self):
res = run_bot(self, num[alice], "!zieh "+charlie+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} -> 10.00 {}\n'.format(alice, charlie))
+ self.assertEqual(res, 'New Balance: {} -> 10.00 {}\n'.format(alice, charlie))
res = run_bot(self, num[charlie], "!zieh "+alice+ " 10")
- self.assertEqual(res.stdout, 'New Balance: {} <- 0.00 {}\n'.format(charlie, alice))
+ self.assertEqual(res, 'New Balance: {} <- 0.00 {}\n'.format(charlie, alice))
def test_transactions_complex(self):
res = run_bot(self, num[alice], "!schieb "+charlie+ " 1,1")
- self.assertEqual(res.stdout, 'New Balance: {} <- 1.10 {}\n'.format(alice, charlie))
+ self.assertEqual(res, 'New Balance: {} <- 1.10 {}\n'.format(alice, charlie))
res = run_bot(self, num[alice], "!zieh "+charlie+ " 2.1")
- self.assertEqual(res.stdout, 'New Balance: {} -> 1.00 {}\n'.format(alice, charlie))
+ self.assertEqual(res, 'New Balance: {} -> 1.00 {}\n'.format(alice, charlie))
res = run_bot(self, num[charlie], "!schieb "+bob+ " 42")
- self.assertEqual(res.stdout, 'New Balance: {} <- 42.00 {}\n'.format(charlie, bob))
+ self.assertEqual(res, 'New Balance: {} <- 42.00 {}\n'.format(charlie, bob))
res = run_bot(self, num[alice], "!zieh "+bob+ " 0.01")
- self.assertEqual(res.stdout, 'New Balance: {} -> 0.01 {}\n'.format(alice, bob))
+ self.assertEqual(res, 'New Balance: {} -> 0.01 {}\n'.format(alice, bob))
compare_state("test/state.json_transactions1")
@@ -201,12 +234,12 @@ class TestSumCmd(unittest.TestCase):
def test_summary_single_user(self):
reset_state("test/state.json_transactions1")
res = run_bot(self, num[alice], "!sum "+alice)
- self.assertEqual(res.stdout, 'Summary:\nalice:\n\t-> bob 0.01\n\t-> charlie 1.00\n\tBalance: -1.01\n')
+ self.assertEqual(res, 'Summary:\nalice:\n\t-> bob 0.01\n\t-> charlie 1.00\n\tBalance: -1.01\n')
- def test_summary_invalide_single_user(self):
+ def test_summary_invalid_single_user(self):
reset_state()
res = run_bot(self, num[alice], "!sum "+alice)
- self.assertEqual(res.stdout, 'ERROR: name "alice" not registered')
+ self.assertEqual(res, 'NotRegisteredError: "alice" not registered')
def test_summary_double_user(self):
reset_state("test/state.json_transactions1")
@@ -222,7 +255,7 @@ bob:
\t-> charlie 42.00
\tBalance: -41.99
"""
- self.assertEqual(res.stdout, summary)
+ self.assertEqual(res, summary)
def test_summary(self):
reset_state("test/state.json_transactions1")
@@ -241,17 +274,17 @@ charlie:
\t<- alice 1.00
\t<- bob 42.00
\tBalance: 43.00"""
- self.assertEqual(res.stdout, summary)
+ self.assertEqual(res, summary)
class TestMisc(unittest.TestCase):
def test_unknown_command(self):
res = run_bot(self, num[alice], "!foo")
- self.assertEqual(res.stdout, "ERROR: unknown cmd. Enter !help for a list of commands.")
+ self.assertEqual(res, "ERROR: unknown cmd. Enter !help for a list of commands.")
def test_no_command(self):
res = run_bot(self, num[alice], "Hi, how are you?")
- self.assertEqual(res.stdout, "")
+ self.assertEqual(res, "")
class TestListCmd(unittest.TestCase):
@@ -262,12 +295,12 @@ class TestListCmd(unittest.TestCase):
def test_ls(self):
res = run_bot(self, num[alice], "!ls")
msg = "alice: {}\nbob: {}\ncharlie: {}\n".format(num[alice], num[bob], num[charlie])
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
def test_list(self):
res = run_bot(self, num[bob], "!list")
msg = "alice: {}\nbob: {}\ncharlie: {}\n".format(num[alice], num[bob], num[charlie])
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
class TestSplitCmd(unittest.TestCase):
@@ -276,17 +309,17 @@ class TestSplitCmd(unittest.TestCase):
def test_split_unregistered(self):
res = run_bot(self, "+4971576357", "!split")
- self.assertEqual(res.stdout, 'ERROR: you must register first')
+ self.assertEqual(res, 'NotRegisteredError: please register first using !register')
def test_split_invalid_args(self):
res = run_bot(self, num[alice], "!split")
- self.assertEqual(res.stdout, 'ERROR: not in form "!split amount [name]+"')
+ self.assertEqual(res, 'InvalidArgumentError: "!split" not in form "!split amount [name]+"')
res = run_bot(self, num[alice], "!split 10")
- self.assertEqual(res.stdout, 'ERROR: not in form "!split amount [name]+"')
+ self.assertEqual(res, 'InvalidArgumentError: "!split 10" not in form "!split amount [name]+"')
res = run_bot(self, num[alice], "!split foo 10")
- self.assertEqual(res.stdout, 'ERROR: amount must be a positive number')
+ self.assertEqual(res, 'InvalidAmountError: "foo" not in form <euro>.<cents>')
def test_split_one_unknown_user(self):
@@ -298,7 +331,7 @@ New Balance:
alice:
\t<- charlie 10.00
\tBalance: 10.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
def test_split(self):
res = run_bot(self, num[alice], "!split 30 " + bob + " " + charlie)
@@ -309,7 +342,7 @@ alice:
\t<- bob 10.00
\t<- charlie 10.00
\tBalance: 20.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
def test_split_whitespace(self):
res = run_bot(self, num[alice], "!split 30 " + bob + " " + charlie + " ")
@@ -320,7 +353,7 @@ alice:
\t<- bob 10.00
\t<- charlie 10.00
\tBalance: 20.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
class TestCarsAddCmd(unittest.TestCase):
def setUp(self):
@@ -330,36 +363,36 @@ class TestCarsAddCmd(unittest.TestCase):
i = "!cars add foo 0.04"
res = run_bot(self, num[alice], i)
o = 'added "foo" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = "!cars new bar 0.02"
res = run_bot(self, num[alice], i)
o = 'added "bar" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
save_state("test/state.json_2cars")
def test_add_invalid_service_charge(self):
i = "!cars add foo 0.04hut"
res = run_bot(self, num[alice], i)
- o = "ERROR: service-charge must be a positive number"
- self.assertEqual(res.stdout, o)
+ o = "InvalidAmountError: service-charge (0.04hut) must be a positive number"
+ self.assertEqual(res, o)
i = "!cars new bar -5"
res = run_bot(self, num[alice], i)
- o = "ERROR: service-charge must be a positive number"
- self.assertEqual(res.stdout, o)
+ o = "InvalidAmountError: service-charge (-5) must be a positive number"
+ self.assertEqual(res, o)
def test_add_name_conflict(self):
i = "!cars add foo 0.04"
res = run_bot(self, num[alice], i)
o = 'added "foo" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = "!cars new alice 0.02"
res = run_bot(self, num[alice], i)
- o = 'ERROR: A user named "alice" already exists. Please use a different name for this car'
- self.assertEqual(res.stdout, o)
+ o = 'AlreadyRegisteredError: A user named "alice" already exists. Please use a different name for this car'
+ self.assertEqual(res, o)
class TestCarsTransactions(unittest.TestCase):
def setUp(self):
@@ -369,7 +402,7 @@ class TestCarsTransactions(unittest.TestCase):
i = "!schieb foo 20"
res = run_bot(self, num[alice], i)
o = "New Balance: alice <- 20.00 foo\n"
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
class TestCarPayCmd(unittest.TestCase):
def setUp(self):
@@ -393,7 +426,7 @@ alice:
\tBalance: 30.00
foo:
\tAll fine :)"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_alice_pays_more(self):
run_bot(self, num[bob], "!zieh foo 20")
@@ -417,7 +450,7 @@ alice:
foo:
\t-> alice 10.00
\tBalance: -10.00"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_alice_pays_half(self):
@@ -440,7 +473,7 @@ foo:
\t<- bob 10.00
\t<- charlie 5.00
\tBalance: 15.00"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
class TestCarsListCmd(unittest.TestCase):
def setUp(self):
@@ -451,7 +484,7 @@ class TestCarsListCmd(unittest.TestCase):
i = "!cars"
res = run_bot(self, num[alice], i)
o = "No cars registered yet."
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_implicit_call(self):
i = "!cars"
@@ -463,7 +496,7 @@ foo:
bar - service charge 2ct/km
bar:
\tAll fine :)"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_list_all(self):
i = "!cars ls"
@@ -475,7 +508,7 @@ foo:
bar - service charge 2ct/km
bar:
\tAll fine :)"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = "!cars list"
res = run_bot(self, num[alice], i)
@@ -486,7 +519,7 @@ foo:
bar - service charge 2ct/km
bar:
\tAll fine :)"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_list_explicit_car(self):
i = "!cars ls foo"
@@ -495,13 +528,13 @@ bar:
"""foo - service charge 4ct/km
foo:
\tAll fine :)"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_list_invalid_explicit_car(self):
i = "!cars ls alice"
res = run_bot(self, num[alice], i)
- o = 'ERROR: "alice" is no available car\n'
- self.assertEqual(res.stdout, o)
+ o = 'NotRegisteredError: "alice" is no available car\n'
+ self.assertEqual(res, o)
class TestTankenCmd(unittest.TestCase):
@@ -523,7 +556,7 @@ alice:
\t<- bob 3.33
\t<- charlie 3.33
\tBalance: 6.66"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_tanken_unknown_user(self):
i = \
@@ -540,13 +573,13 @@ New Balance:
alice:
\t<- charlie 3.33
\tBalance: 3.33"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_tanken_3users_with_car(self):
i = "!cars add foo 0.04"
res = run_bot(self, num[alice], i)
o = 'added "foo" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = \
"""!tanken 10 alice foo
@@ -570,13 +603,13 @@ Car foo:
\t<- bob 0.40
\t<- charlie 0.40
\tBalance: 1.20"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_tanken_unknown_user_with_car(self):
i = "!cars add foo 0.04"
res = run_bot(self, num[alice], i)
o = 'added "foo" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = \
"""!tanken 10 alice foo
@@ -599,13 +632,13 @@ Car foo:
\t<- alice 0.80
\t<- bob 0.40
\tBalance: 1.20"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_tanken_3users_with_car(self):
i = "!cars add foo 0.04"
res = run_bot(self, num[alice], i)
o = 'added "foo" as an available car'
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
i = \
"""!tanken 10 alice foo
@@ -629,7 +662,7 @@ Car foo:
\t<- bob 0.40
\t<- charlie 0.40
\tBalance: 1.20"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
class TestTransferCmd(unittest.TestCase):
@@ -645,7 +678,7 @@ class TestTransferCmd(unittest.TestCase):
New Balance: alice <- 5.00 charlie
New Balance: bob -> 5.00 charlie
"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_transfer_credit(self):
res = run_bot(self, num[alice], "!schieb bob 5")
@@ -657,7 +690,7 @@ New Balance: bob -> 5.00 charlie
New Balance: alice <- 5.00 charlie
New Balance: bob -> 5.00 charlie
"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
def test_transfer_change_dept(self):
res = run_bot(self, num[alice], "!schieb bob 5")
@@ -669,7 +702,7 @@ New Balance: bob -> 5.00 charlie
New Balance: alice <- 5.00 charlie
New Balance: bob -> 5.00 charlie
"""
- self.assertEqual(res.stdout, o)
+ self.assertEqual(res, o)
#TODO: tanken, transfer, cars pay
@@ -680,11 +713,11 @@ class TestFuckCmd(unittest.TestCase):
def test_fuck_unregistered(self):
res = run_bot(self, "+4971576357", "!fuck")
- self.assertEqual(res.stdout, 'ERROR: you must register first')
+ self.assertEqual(res, 'NotRegisteredError: please register first using !register')
def test_fuck_nothing(self):
res = run_bot(self, num[alice], "!fuck")
- self.assertEqual(res.stdout, 'Nothing to rewind')
+ self.assertEqual(res, 'Nothing to rewind')
def test_fuck_transaction(self):
for cmd in ["fuck", "undo", "rewind"]:
@@ -696,7 +729,7 @@ Rewinding:
!schieb bob 10
alice <- 10.00 bob
"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
compare_state("test/state.json_3users")
def test_fuck_split(self):
@@ -709,7 +742,7 @@ Rewinding:
alice <- 1.00 bob
alice <- 1.00 charlie
"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
compare_state("test/state.json_3users")
def test_fuck_transaction(self):
@@ -721,7 +754,7 @@ Rewinding:
!schieb bob 10
alice <- 10.00 bob
"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
compare_state("test/state.json_3users")
class TestScheduleCmd(unittest.TestCase):
@@ -740,7 +773,7 @@ alice:
\t<- bob 1.00
\t<- charlie 1.00
\tBalance: 2.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
save_state("test/state.json_schedule_weekly")
@@ -751,8 +784,8 @@ Rewinding:
split 3 bob charlie
alice <- 1.00 bob
alice <- 1.00 charlie
-Cancelled the weekly cmd "stuff\""""
- self.assertEqual(res.stdout, msg)
+Cancelled the weekly command "stuff\""""
+ self.assertEqual(res, msg)
# Last exec onw week ago
reset_state_string(scheduled_state_template.substitute(last_time=now-timedelta(7),schedule="weekly"))
@@ -767,12 +800,12 @@ alice:
\t<- bob 2.00
\t<- charlie 2.00
\tBalance: 4.00""".format(now.isoformat())
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
compare_state("test/state.json_schedule_weekly")
res = run_bot(self, num[alice], "!fuck")
- self.assertEqual(res.stdout, 'Nothing to rewind')
+ self.assertEqual(res, 'Nothing to rewind')
# Last exec two week ago
reset_state_string(scheduled_state_template.substitute(last_time=now-timedelta(14),schedule="weekly"))
@@ -794,7 +827,7 @@ alice:
\t<- charlie 3.00
\tBalance: 6.00""".format((now - timedelta(7)).isoformat(),
now.isoformat())
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
os.remove("test/state.json_schedule_weekly")
@@ -810,7 +843,7 @@ alice:
\t<- bob 1.00
\t<- charlie 1.00
\tBalance: 2.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
save_state("test/state.json_schedule_monthly")
@@ -821,8 +854,8 @@ Rewinding:
split 3 bob charlie
alice <- 1.00 bob
alice <- 1.00 charlie
-Cancelled the monthly cmd "stuff\""""
- self.assertEqual(res.stdout, msg)
+Cancelled the monthly command "stuff\""""
+ self.assertEqual(res, msg)
# Last exec one month ago
if now.month > 1:
@@ -842,12 +875,12 @@ alice:
\t<- bob 2.00
\t<- charlie 2.00
\tBalance: 4.00""".format(now.isoformat())
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
compare_state("test/state.json_schedule_monthly")
res = run_bot(self, num[alice], "!fuck")
- self.assertEqual(res.stdout, 'Nothing to rewind')
+ self.assertEqual(res, 'Nothing to rewind')
# Last exec two month ago
if now.month > 2:
@@ -875,7 +908,7 @@ alice:
\t<- charlie 3.00
\tBalance: 6.00""".format(one_month_ago.isoformat(),
now.isoformat())
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
os.remove("test/state.json_schedule_monthly")
@@ -897,7 +930,32 @@ alice:
fiat:
\t-> alice 3.00
\tBalance: -3.00"""
- self.assertEqual(res.stdout, msg)
+ self.assertEqual(res, msg)
+
+ def test_cancel_not_allowed(self):
+ run_bot(self, num[alice], "!cars add fiat 0.5")
+ run_bot(self, num[alice], "!monthly versicherung cars pay fiat 3")
+ res = run_bot(self, num[bob], "!cancel versicherung")
+ msg = "NotAllowedError: only alice, the original creator can cancel this command"
+ self.assertEqual(res, msg)
+
+ def test_cancel_not_registered(self):
+ res = run_bot(self, "+490000", "!cancel versicherung")
+ msg = "NotRegisteredError: please register first using !register"
+ self.assertEqual(res, msg)
+
+ def test_cancel_not_scheduled_cmd(self):
+ res = run_bot(self, num[alice], "!cancel versicherung")
+ msg = 'NotRegisteredError: "versicherung" is not a scheduled command'
+ self.assertEqual(res, msg)
+
+ def test_cancel(self):
+ run_bot(self, num[alice], "!cars add fiat 0.5")
+ run_bot(self, num[alice], "!monthly versicherung cars pay fiat 3")
+ res = run_bot(self, num[alice], "!cancel versicherung")
+ msg = 'Cancelled the monthly command "versicherung"'
+ self.assertEqual(res, msg)
if __name__ == '__main__':
unittest.main()
+ BOT.terminate()