class TestCustomerStore(unittest.TestCase):

    test_cust = None
    customer_store = None

    @patch.object(CustomerStore, 'config', DYNAMODB_CONFIG)
    def setUp(self):
        self.test_cust = Customer({'emailAddress': '*****@*****.**', 'firstName': 'Testy', 'surname': 'McTest'})
        self.customer_store = CustomerStore()
        self.customer_store.save(self.test_cust)  # This demonstrates save functionality

    def tearDown(self):
        self.customer_store.delete(self.test_cust.email_address)

    def test_get_returns_test_customer(self):
        # Act
        cust = self.customer_store.get(self.test_cust.email_address)

        # Assert
        self.assertEqual(cust, self.test_cust)

    def test_get_returns_none_if_customer_not_found(self):
        # Act
        cust = self.customer_store.get('*****@*****.**')

        # Assert
        self.assertEqual(cust, None, 'Unmatched customer should return None, not raise an exception')
    def get_customer_by_email(self, email_address):
        """
        Gets customer by email address returns none if not found
        :param email_address: Email address in scope
        :return: Customer or None
        """
        customer_store = CustomerStore()

        customer = customer_store.get(email_address)

        return customer
    def create_or_get_customer(self, customer):
        """
        Get customer if it exists in database, otherwise create.
        :param customer: Customer object we're looking for
        :returns customer: Customer
        """
        customer_store = CustomerStore()

        database_customer = customer_store.get(customer.email_address)

        if database_customer:
            return database_customer

        # Cust doesn't exist so save them
        try:
            customer_store.save(customer)
            return Customer(customer)
        except CustomerStoreError:
            app.logger.debug('Error creating customer {0}'.format(customer.email_address))
            raise CustomerServiceError("Error creating customer")