Exemple #1
0
    def process_data(cls, content, data, small, large, ignore, free_provider,
                     free_shipment, discount_limit):
        """Processes all data set and applies necessary logic.
        :param content:
        :param data:
        :param small:
        :param large:
        :param ignore:
        :param free_provider:
        :param free_shipment:
        :param discount_limit:
        :return:list:
        """
        result = []
        l_discount = {}
        for item in content:
            item = item.split()
            if not ShipmentValidator.validate_line_format(item, data):
                item.append(ignore)
            if small in item and ignore not in item:
                item.append(ShipmentHelper.get_lowest_price(data))

            result.append(item)

        for item in result:
            if large in item and free_provider in item:
                month = datetime.datetime.strptime(item[0], '%Y-%m-%d').month
                try:
                    l_discount[month].append(item[0])
                except KeyError:
                    l_discount[month] = [item[0]]
                    l_discount['discount_{}'.format(month)] = False

                if len(l_discount[month]
                       ) == 3 and not l_discount['discount_{}'.format(month)]:
                    item.append(free_shipment)
                    l_discount['discount_{}'.format(month)] = True
                else:
                    for size in ShipmentHelper.get_package_sizes(data):
                        if size in item:
                            for provider in ShipmentHelper.get_providers(data):
                                if provider in item:
                                    price = ShipmentHelper.get_price(
                                        provider, size, data)
                                    item.append(price)
            else:
                for size in ShipmentHelper.get_package_sizes(data):
                    if size != small and size in item:
                        for provider in ShipmentHelper.get_providers(data):
                            if provider in item:
                                item.append(
                                    ShipmentHelper.get_price(
                                        provider, size, data))

        result = cls.append_discount(result, data, ignore, discount_limit)

        return result
 def test_get_package_sizes(self):
     sizes = ShipmentHelper.get_package_sizes(DATA)
     all_sizes = True
     for size in sizes:
         if size not in ALLOWED_SIZES:
             all_sizes = False
     self.assertEqual(len(sizes), 3)
     self.assertTrue(all_sizes)