def test_get_item_by_code_not_existing_code(self):
        items = [{
            'code': 'ITEM_CODE',
            'name': 'item name',
            'value': {
                'EUR': 100,
            },
        }]
        client = Client(currency='EUR')
        client.items = items

        item = client.get_item_by_code('NOT_EXISTING_CODE')

        assert item is None
    def test_calculate_total_with_empty_cart(self):
        client = Client(currency='EUR')
        client.cart = {
            'ITEM_CODE': 0,
        }
        client.items = [{
            'code': 'ITEM_CODE',
            'name': 'item name',
            'value': {
                'EUR': 100,
            },
        }]

        response = client.calculate_total()

        assert response == 0
    def test_get_item_by_code(self):
        item_code = 'ITEM_CODE'
        items = [{
            'code': item_code,
            'name': 'item name',
            'value': {
                'EUR': 100,
            },
        }]
        client = Client(currency='EUR')
        client.items = items

        item = client.get_item_by_code(item_code)

        assert item['code'] == items[0]['code']
        assert item['name'] == items[0]['name']
        assert item['value'] == items[0]['value']
    def test_calculate_total_with_discounts(self, client_mock):
        client_mock.return_value = [{
            'item': 'ITEM_CODE',
            'base_quantity': 2,
            'max_quantity': 100,
            'free_items': 1,
            'type': 'FREE',
        }]
        client = Client(currency='EUR')
        client.cart = {
            'ITEM_CODE': 5,
        }
        client.items = [{
            'code': 'ITEM_CODE',
            'name': 'item name',
            'value': {
                'EUR': 100,
            },
        }]

        response = client.calculate_total()

        assert response == 300