Files
PyPattyrn/tests/behavioral_tests/test_chain.py
2016-09-10 17:11:45 -04:00

146 lines
4.2 KiB
Python

from unittest import TestCase
from pypat.behavioral.chain import ChainLink, Chain
class ChainLinkTestCase(TestCase):
"""
Unit testing class for the ChainLink class.
"""
def setUp(self):
"""
Initialize testing data.
"""
class ConcreteChainLinkThree(ChainLink):
def handle(self, request):
if request == 'handle_three':
return "Handled in chain link three"
else:
return self.successor_handle(request)
class ConcreteChainLinkTwo(ChainLink):
def __init__(self):
super().__init__()
self.set_successor(ConcreteChainLinkThree())
def handle(self, request):
if request == 'handle_two':
return "Handled in chain link two"
else:
return self.successor_handle(request)
class ConcreteChainLinkOne(ChainLink):
def __init__(self):
super().__init__()
self.set_successor(ConcreteChainLinkTwo())
def handle(self, request):
if request == 'handle_one':
return "Handled in chain link one"
else:
return self.successor_handle(request)
self.chain_link_one_class = ConcreteChainLinkOne
def test_success_handle(self):
"""
Test the handle method with successful requests.
@raise AssertionError: If the test fails.
"""
handler = self.chain_link_one_class()
self.assertEquals("Handled in chain link one", handler.handle("handle_one"))
self.assertEquals("Handled in chain link two", handler.handle("handle_two"))
self.assertEquals("Handled in chain link three", handler.handle("handle_three"))
def test_fail_handle(self):
"""
Test the handle method with unsuccessful requests.
@raise AssertionError: If the test fails.
"""
handler = self.chain_link_one_class()
with self.assertRaises(AttributeError):
handler.handle("foo")
class ChainTestCase(TestCase):
"""
Unit testing class for the Chain class.
"""
def setUp(self):
"""
Initialize testing data.
"""
class ConcreteChainLinkThree(ChainLink):
def handle(self, request):
if request == 'handle_three':
return "Handled in chain link three"
else:
return self.successor_handle(request)
class ConcreteChainLinkTwo(ChainLink):
def __init__(self):
super().__init__()
self.set_successor(ConcreteChainLinkThree())
def handle(self, request):
if request == 'handle_two':
return "Handled in chain link two"
else:
return self.successor_handle(request)
class ConcreteChainLinkOne(ChainLink):
def __init__(self):
super().__init__()
self.set_successor(ConcreteChainLinkTwo())
def handle(self, request):
if request == 'handle_one':
return "Handled in chain link one"
else:
return self.successor_handle(request)
class ConcreteChain(Chain):
def __init__(self):
super().__init__(ConcreteChainLinkOne())
def fail(self):
return 'Fail'
self.chain_class = ConcreteChain
def test_success_handle(self):
"""
Test the handle method with a successful request
@raise AssertionError: If the test fails.
"""
chain = self.chain_class()
self.assertEquals("Handled in chain link one", chain.handle("handle_one"))
self.assertEquals("Handled in chain link two", chain.handle("handle_two"))
self.assertEquals("Handled in chain link three", chain.handle("handle_three"))
def test_fail_handle(self):
"""
Test the handle method with unsuccessful requests.
@raise AssertionError: If the test fails.
"""
chain = self.chain_class()
self.assertEquals("Fail", chain.handle("foo"))