def test_smelting_product(self):
        rates = recipe.calculate_required_production_rates(
            [('copper-plate', 5)])

        copper_plate_item, copper_ore_item = (
            produced_item.required_production_rates_to_produced_items(rates))
        self.assertEqual(copper_plate_item.is_user_requested, True)
        self.assertEqual(copper_plate_item.name, 'copper-plate')
        self.assertEqual(copper_plate_item.username, 'Copper plate')
        self.assertEqual(copper_plate_item.icon,
                         '/appengine/tests/icons/copper-plate.png')
        self.assertEqual(
            copper_plate_item.url,
            'http://www.factorioforums.com/wiki/index.php?title=Copper_plate')
        self.assertEqual(copper_plate_item.required_production_rate, 5)
        self.assertEqual(copper_plate_item.production_machine_username,
                         'Electric furnace')
        # <rate> = <#-machines> * <#-recipe-results> * <machine-speed>
        #          ---------------------------------------------------
        #                        <energy-required>
        # 5 = x * 1 * 2 / 3.5
        # 5 = 4/7x
        # (7/4)5 = x
        # x = 8.75
        self.assertEqual(copper_plate_item.num_production_machines_required, 9)
        self.assertEqual(
            copper_plate_item.production_machine_icon,
            '/appengine/tests/icons/electric-furnace.png')
        self.assertEqual(
            copper_plate_item.production_machine_url,
            'http://www.factorioforums.com/wiki/index.php?title='
            'Electric_furnace')

        self.assertEqual(copper_ore_item.is_user_requested, False)
        self.assertEqual(copper_ore_item.name, 'copper-ore')
    def test_missing_product_name(self):
        rates = recipe.calculate_required_production_rates(
            [('iron-plate', 100)])

        iron_plate_item, iron_ore_item, = (
            produced_item.required_production_rates_to_produced_items(rates))

        self.assertEqual(iron_plate_item.is_user_requested, True)
        self.assertEqual(iron_plate_item.name, 'iron-plate')
        self.assertEqual(iron_plate_item.username, 'iron-plate')
        self.assertEqual(iron_plate_item.icon,
                         '/appengine/tests/icons/iron-plate.png')
        self.assertIsNone(iron_plate_item.url)
        self.assertEqual(iron_plate_item.required_production_rate, 100)
        self.assertEqual(iron_plate_item.production_machine_username,
                         'Electric furnace')
        # <rate> = <#-machines> * <#-recipe-results> * <machine-speed>
        #          ---------------------------------------------------
        #                        <energy-required>
        # 100 = x * 1 * 2 / 3.5
        # 100 = 4/7x
        # (7/4)100 = x
        # x = 175
        self.assertEqual(iron_plate_item.num_production_machines_required,
                         175)
        self.assertEqual(
            iron_plate_item.production_machine_icon,
            '/appengine/tests/icons/electric-furnace.png')
        self.assertEqual(
            iron_plate_item.production_machine_url,
            'http://www.factorioforums.com/wiki/index.php?title='
            'Electric_furnace')

        self.assertEqual(iron_ore_item.is_user_requested, False)
        self.assertEqual(iron_ore_item.name, 'iron-ore')
    def test_missing_product_icon(self):
        rates = recipe.calculate_required_production_rates(
            [('iron-ore', 100)])

        iron_ore_item, = (
            produced_item.required_production_rates_to_produced_items(rates))

        self.assertEqual(iron_ore_item.is_user_requested, True)
        self.assertEqual(iron_ore_item.name, 'iron-ore')
        self.assertEqual(iron_ore_item.username, 'Iron ore')
        self.assertEqual(iron_ore_item.icon, '/img/missing-item.png')
        self.assertEqual(
            iron_ore_item.url,
            'http://www.factorioforums.com/wiki/index.php?title=Iron_ore')
        self.assertEqual(iron_ore_item.required_production_rate, 100)
    def test_refined_fluids_have_no_production_machine(self):
        rates = recipe.calculate_required_production_rates(
            [('petroleum-gas', 100)])

        # Should only have one item i.e. 'light-oil-cracking' should not be
        # used to make 'petrolium-gas' from 'light-oil'.
        petrolium_gas_item, = (
            produced_item.required_production_rates_to_produced_items(rates))

        self.assertEqual(petrolium_gas_item.is_user_requested, True)
        self.assertEqual(petrolium_gas_item.name, 'petroleum-gas')
        self.assertEqual(petrolium_gas_item.required_production_rate, 100)
        # All production machine information should be None.
        self.assertIsNone(petrolium_gas_item.production_machine_username)
        self.assertIsNone(petrolium_gas_item.num_production_machines_required)
        self.assertIsNone(petrolium_gas_item.production_machine_icon)
        self.assertIsNone(petrolium_gas_item.production_machine_url)
    def test_base_product(self):
        rates = recipe.calculate_required_production_rates([('copper-ore', 5)])

        copper_ore_item = (
            produced_item.required_production_rates_to_produced_items(rates)[0])
        self.assertEqual(copper_ore_item.is_user_requested, True)
        self.assertEqual(copper_ore_item.name, 'copper-ore')
        self.assertEqual(copper_ore_item.username, 'Copper ore')
        self.assertEqual(copper_ore_item.icon,
                         '/appengine/tests/icons/copper-ore.png')
        self.assertEqual(
            copper_ore_item.url,
            'http://www.factorioforums.com/wiki/index.php?title=Copper_ore')
        self.assertEqual(copper_ore_item.required_production_rate, 5)
        self.assertIsNone(copper_ore_item.production_machine_username)
        self.assertIsNone(copper_ore_item.num_production_machines_required)
        self.assertIsNone(copper_ore_item.production_machine_icon)
        self.assertIsNone(copper_ore_item.production_machine_url)
예제 #6
0
    def get(self):
        requirements = []
        for item in self.request.arguments():
            try:
                rate = float(self.request.get(item))
            except ValueError:
                rate = 1.0

            rate = min(MAX_PRODUCTION_RATE, max(MIN_PRODUCTION_RATE, rate))
            requirements.append((item, rate))

        required_production = recipe.calculate_required_production_rates(
            requirements)
        products = produced_item.required_production_rates_to_produced_items(
            required_production)
        template_values = {
            'items_to_produce': get_produceable_items(),
            'products': products,
            'selected_items': get_selected_items(requirements),
        }
        template = JINJA_ENVIRONMENT.get_template('main.html')
        self.response.write(template.render(template_values))
    def test_chemistry_product(self):
        rates = recipe.calculate_required_production_rates(
            [('sulfur', 100)])

        sulfur_item, petrolium_gas_item, water_item = (
            produced_item.required_production_rates_to_produced_items(rates))
        self.assertEqual(sulfur_item.is_user_requested, True)
        self.assertEqual(sulfur_item.name, 'sulfur')
        self.assertEqual(sulfur_item.username, 'Sulfur')
        self.assertEqual(sulfur_item.icon,
                         '/appengine/tests/icons/sulfur.png')
        self.assertEqual(
            sulfur_item.url,
            'http://www.factorioforums.com/wiki/index.php?title=Sulfur')
        self.assertEqual(sulfur_item.required_production_rate, 100)
        self.assertEqual(sulfur_item.production_machine_username,
                         'Chemical plant')
        # <rate> = <#-machines> * <#-recipe-results> * <machine-speed>
        #          ---------------------------------------------------
        #                        <energy-required>
        # 100 = x * 2 * 1.25 / 1
        # 100 = 2.5x
        # 100/2.5 = x
        # x = 40
        self.assertEqual(sulfur_item.num_production_machines_required, 40)
        self.assertEqual(
            sulfur_item.production_machine_icon,
            '/appengine/tests/icons/chemical-plant.png')
        self.assertEqual(
            sulfur_item.production_machine_url,
            'http://www.factorioforums.com/wiki/index.php?title='
            'Chemical_plant')

        self.assertEqual(petrolium_gas_item.is_user_requested, False)
        self.assertEqual(petrolium_gas_item.name, 'petroleum-gas')

        self.assertEqual(water_item.is_user_requested, False)
        self.assertEqual(water_item.name, 'water')
    def test_crafting_product(self):
        rates = recipe.calculate_required_production_rates(
            [('copper-cable', 20)])

        copper_cable_item, copper_plate_item, copper_ore_item = (
            produced_item.required_production_rates_to_produced_items(rates))
        self.assertEqual(copper_cable_item.is_user_requested, True)
        self.assertEqual(copper_cable_item.name, 'copper-cable')
        self.assertEqual(copper_cable_item.username, 'Copper cable')
        self.assertEqual(copper_cable_item.icon,
                         '/appengine/tests/icons/copper-cable.png')
        self.assertEqual(
            copper_cable_item.url,
            'http://www.factorioforums.com/wiki/index.php?title=Copper_cable')
        self.assertEqual(copper_cable_item.required_production_rate, 20)
        self.assertEqual(copper_cable_item.production_machine_username,
                         'Assembling machine 3')
        # <rate> = <#-machines> * <#-recipe-results> * <machine-speed>
        #          ---------------------------------------------------
        #                        <energy-required>
        # 20 = x * 2 * 1.25 / 0.5
        # 20 = 5x
        # 20/5 = x
        # x = 4
        self.assertEqual(copper_cable_item.num_production_machines_required, 4)
        self.assertEqual(
            copper_cable_item.production_machine_icon,
            '/appengine/tests/icons/assembling-machine-3.png')
        self.assertEqual(
            copper_cable_item.production_machine_url,
            'http://www.factorioforums.com/wiki/index.php?title='
            'Assembling_machine_3')

        self.assertEqual(copper_plate_item.is_user_requested, False)
        self.assertEqual(copper_plate_item.name, 'copper-plate')

        self.assertEqual(copper_ore_item.is_user_requested, False)
        self.assertEqual(copper_ore_item.name, 'copper-ore')