diff options
Diffstat (limited to 'test.py')
| -rwxr-xr-x | test.py | 288 |
1 files changed, 173 insertions, 115 deletions
@@ -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() |
