def setUp(self):
     self.CebuanaRemittance = CebuanaRemittance()
class CebuanaCheckerTest(TestCase):

    def setUp(self):
        self.CebuanaRemittance = CebuanaRemittance()

    def tearDown(self):
        pass

    def test_check_if_transaction_is_paid(self):
        transaction_number = {'123456': True, '234567': False}
        for key, value in transaction_number.items():
            is_paid = self.CebuanaRemittance.is_transaction_paid(key)
            self.assertEquals(value, is_paid)

        with self.assertRaises(SearchException):
            self.CebuanaRemittance.is_transaction_paid('345678')

    def test_tag_if_transaction_is_paid(self):
        self.assertTrue(self.CebuanaRemittance.tag_transaction_as_paid('123456'))
        self.assertFalse(self.CebuanaRemittance.tag_transaction_as_paid('123456789'))
        with self.assertRaises(TransactionDoesNotExistException):
            self.CebuanaRemittance.tag_transaction_as_paid('ABCDE')

    def test_accept_transaction_reference_number_that_has_leading_and_trailing_spaces(self):
        self.assertTrue(self.CebuanaRemittance.is_transaction_paid('  123456  '))
        self.assertTrue(self.CebuanaRemittance.tag_transaction_as_paid(' 123456 '))

    def test_if_transaction_reference_number_is_valid(self):
        with self.assertRaises(TypeError):
            self.CebuanaRemittance.is_transaction_paid('!@#$%^')
            self.CebuanaRemittance.tag_transaction_as_paid('!@#$%^')

    def test_parse_response_from_cebuana(self):
        response = ("""<?xml version="1.0" encoding="utf-8"?>
                <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <soap:Body>
                        <requestSessionResponse xmlns="http://www.bankcom.com.ph/">
                            <requestSessionResult>
                                <transactionId>283JDIKSJWL4</transactionId>
                                <ispaid>false</ispaid>
                                <status>SUCCESSFUL</status>
                            </requestSessionResult>
                        </requestSessionResponse>
                    </soap:Body>
                </soap:Envelope>""",

                 """<?xml version="1.0" encoding="utf-8"?>
                <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <soap:Body>
                        <requestSessionResponse xmlns="http://www.bankcom.com.ph/">
                            <requestSessionResult>
                                <transactionId>KS893K2K3K4</transactionId>
                                <ispaid>true</ispaid>
                                <status>SUCCESSFUL</status>
                            </requestSessionResult>
                        </requestSessionResponse>
                    </soap:Body>
                </soap:Envelope>""",

                """<?xml version="1.0" encoding="utf-8"?>
                <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                    <soap:Body>
                        <requestSessionResponse xmlns="http://www.bankcom.com.ph/">
                            <requestSessionResult>
                                <transactionId>283JDIKS00L4</transactionId>
                                <ispaid>Not existing</ispaid>
                                <status>UNSUCCESSFUL</status>
                            </requestSessionResult>
                        </requestSessionResponse>
                    </soap:Body>
                </soap:Envelope>"""
                )

        expected_value = (
            ('283JDIKSJWL4', 'false', 'SUCCESSFUL'),
            ('KS893K2K3K4', 'true', 'SUCCESSFUL')
            )

        self.assertEquals(self.CebuanaRemittance.parse_response_from_cebuana(response[0]), expected_value[0])
        self.assertEquals(self.CebuanaRemittance.parse_response_from_cebuana(response[1]), expected_value[1])

        with self.assertRaises(TransactionDoesNotExistException):
            self.CebuanaRemittance.parse_response_from_cebuana(response[2])

    def test_sending_request_and_getting_response(self):
        
        request = ("""<?xml version="1.0" encoding="utf-8"?>
                    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
                        <soap12:Body>
                            <requestInquiry xmlns="http://www.bankcom.com.ph/">
                                <transaction>283JDIKSJWL4</transaction>
                            </requestInquiry>
                        </soap12:Body>
                    </soap12:Envelope>""",

                    """<?xml version="1.0" encoding="utf-8"?>
                    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
                        <soap12:Body>
                            <requestInquiry xmlns="http://www.bankcom.com.ph/">
                                <transaction>KS893K2K3K4</transaction>
                            </requestInquiry>
                        </soap12:Body>
                    </soap12:Envelope>""",

                    """<?xml version="1.0" encoding="utf-8"?>
                    <soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
                        <soap12:Body>
                            <requestInquiry xmlns="http://www.bankcom.com.ph/">
                                <transactionId>283JDIKS00L4</transactionId>
                            </requestInquiry>
                        </soap12:Body>
                    </soap12:Envelope>""",
                        )

        expected_response = ("""<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><requestSessionResponse xmlns="http://www.bankcom.com.ph/"><requestSessionResult><transactionId>283JDIKSJWL4</transactionId><ispaid>false</ispaid><status>SUCCESSFUL</status></requestSessionResult></requestSessionResponse></soap:Body></soap:Envelope>""",
                            """<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><requestSessionResponse xmlns="http://www.bankcom.com.ph/"><requestSessionResult><transactionId>KS893K2K3K4</transactionId><ispaid>true</ispaid><status>SUCCESSFUL</status></requestSessionResult></requestSessionResponse></soap:Body></soap:Envelope>""",
                            """<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><requestSessionResponse xmlns="http://www.bankcom.com.ph/"><requestSessionResult><transactionId>283JDIKS00L4</transactionId><ispaid></ispaid></requestSessionResult><status>UNSUCCESSFUL</status></requestSessionResponse></soap:Body></soap:Envelope>"""
                        )

        self.assertEquals(self.CebuanaRemittance.get_response_from_cebuana(request[0]), expected_response[0])
        self.assertEquals(self.CebuanaRemittance.get_response_from_cebuana(request[1]), expected_response[1])

        with self.assertRaises(NoXmlResponseException):
            self.assertFalse(self.CebuanaRemittance.get_response_from_cebuana(request[2]))

    def test_encode_request_to_cebuana(self):
        request_data = ('283JDIKSJWL4', 'KS893K2K3K4', '283JDIKS00L4')
        expected_encoded_data = (b"""<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap12:Body><requestInquiry xmlns="http://www.bankcom.com.ph/"><transaction>283JDIKSJWL4</transaction></requestInquiry></soap12:Body></soap12:Envelope>""",
                                b"""<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap12:Body><requestInquiry xmlns="http://www.bankcom.com.ph/"><transaction>KS893K2K3K4</transaction></requestInquiry></soap12:Body></soap12:Envelope>""",
                                b"""<?xml version="1.0" encoding="utf-8"?><soap12:Envelope xmlns:soap12="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap12:Body><requestInquiry xmlns="http://www.bankcom.com.ph/"><transaction>283JDIKS00L4</transaction></requestInquiry></soap12:Body></soap12:Envelope>""",
                            )
        self.assertEquals(self.CebuanaRemittance.encode_request(request_data[0]), bytes(expected_encoded_data[0]))
        self.assertEquals(self.CebuanaRemittance.encode_request(request_data[1]), bytes(expected_encoded_data[1]))
        self.assertEquals(self.CebuanaRemittance.encode_request(request_data[2]), bytes(expected_encoded_data[2]))