class PresentAPNUseCaseTests(unittest.TestCase):
    def setUp(self):
        super(PresentAPNUseCaseTests, self).setUp()
        self.repository = FakeAPNRepository()

        self.subject = PresentAPNUseCase(repository=self.repository)

    def test_present_apn_with_valid_identifier_notifies_observer(self):
        self.repository.create(county='sanfrancisco',
                               block_number='asdf',
                               lot_number='zxcv',
                               address='my special address')
        valid_apn_identifier = APNIdentifier(county='sanfrancisco',
                                             block_number='asdf',
                                             lot_number='zxcv')
        observer = FakeObserver()
        self.subject.execute(apn_identifier=valid_apn_identifier,
                             observer=observer)
        expected_apn = APN(county='sanfrancisco',
                           block_number='asdf',
                           lot_number='zxcv',
                           address='my special address')
        assert_apns_equal(observer.presented_apn, expected_apn, self)
        assert_apn_identifiers_equal(observer.presented_apn_identifier, valid_apn_identifier, self)

    def test_present_apn_with_invalid_identifier_notifies_observer(self):
        self.repository.create(county='sanfrancisco',
                               block_number='asdf',
                               lot_number='zxcv',
                               address='my special address')
        invalid_apn_identifier = APNIdentifier(county='la',
                                               block_number='asdf',
                                               lot_number='zxcv')
        observer = FakeObserver()
        self.subject.execute(apn_identifier=invalid_apn_identifier,
                             observer=observer)
        self.assertEqual(observer.exception, ValueError)
        self.assertIsNotNone(observer.context)
        assert_apn_identifiers_equal(observer.presented_apn_identifier, invalid_apn_identifier, self)
    def setUp(self):
        super(PresentAPNUseCaseTests, self).setUp()
        self.repository = FakeAPNRepository()

        self.subject = PresentAPNUseCase(repository=self.repository)