"""Public behavior only: branch results, integer edges, and invalid operation errors."""
import unittest
from sample.work import run


class DispatchBehavior(unittest.TestCase):
    def test_credit(self):
        self.assertEqual(run('credit', 120), 130)

    def test_debit(self):
        self.assertEqual(run('debit', 120), 110)

    def test_zero(self):
        self.assertEqual(run('credit', 0), 10)
        self.assertEqual(run('debit', 0), -10)

    def test_negative_balance(self):
        self.assertEqual(run('credit', -25), -15)
        self.assertEqual(run('debit', -25), -35)

    def test_large_integer(self):
        self.assertEqual(run('credit', 10**30), 10**30 + 10)
        self.assertEqual(run('debit', 10**30), 10**30 - 10)

    def test_repeated_calls(self):
        self.assertEqual([run('credit', 5), run('debit', 5), run('credit', 5)], [15, -5, 15])

    def test_unknown_operation(self):
        with self.assertRaises(KeyError) as caught:
            run('transfer', 100)
        self.assertEqual(caught.exception.args, ('transfer',))

    def test_empty_operation(self):
        with self.assertRaises(KeyError) as caught:
            run('', 100)
        self.assertEqual(caught.exception.args, ('',))
