def setUp(self):
     self.cafes = copy.deepcopy(CAFES)
     self.taste = FoodTaste().preferences(FOOD_PREFERENCES)
     self.weather_opinion = WeatherOpinion().weather(self.GOOD_WEATHER)
     self.clo = ChiefLunchOfficer(food_taste=self.taste,
                                  weather_opinion=self.weather_opinion)
     self.clo.cafes(self.cafes)
Example #2
0
 def setUp(self):
     self.opinion = WeatherOpinion()
     self.weather = {
         TEMPERATURE: 10,
         PRECIPITATION_CHANCE: 10,
         PRECIPITATION_AMOUNT: 0.2,
         WIND: 5
     }
     self.opinion.weather(self.weather)
 def setUp(self):
     self.opinion = WeatherOpinion()
     self.weather = {
         TEMPERATURE: 10,
         PRECIPITATION_CHANCE: 10,
         PRECIPITATION_AMOUNT: 0.2,
         WIND: 5
     }
     self.opinion.weather(self.weather)
class WeatherOpinionTest(unittest.TestCase):

    def setUp(self):
        self.opinion = WeatherOpinion()
        self.weather = {
            TEMPERATURE: 10,
            PRECIPITATION_CHANCE: 10,
            PRECIPITATION_AMOUNT: 0.2,
            WIND: 5
        }
        self.opinion.weather(self.weather)

    def test_if_too_strong_wind_weather_is_bad(self):
        self.weather[WIND] = 15
        self.assertFalse(self.opinion.is_positive())

    def test_if_too_cold_weather_is_bad(self):
        self.weather[TEMPERATURE] = -30
        self.assertFalse(self.opinion.is_positive())

    def test_if_too_hot_weather_is_bad(self):
        self.weather[TEMPERATURE] = 30
        self.assertFalse(self.opinion.is_positive())

    def test_if_a_lot_of_precipitation_with_high_chance_weather_is_bad(self):
        self.weather[PRECIPITATION_CHANCE] = 80
        self.weather[PRECIPITATION_AMOUNT] = 2.0
        self.assertFalse(self.opinion.is_positive())

    def test_if_temperature_is_mild_minor_chance_of_minor_precipitation_and_wind_mild(self):
        self.weather[WIND] = 5
        self.weather[TEMPERATURE] = -2
        self.weather[PRECIPITATION_CHANCE] = 10
        self.weather[PRECIPITATION_AMOUNT] = 0.5
        self.assertTrue(self.opinion.is_positive())

    def test_if_no_weather_information_then_rating_is_None(self):
        self.opinion = WeatherOpinion()
        self.assertIsNone(self.opinion.is_positive())
Example #5
0
class WeatherOpinionTest(unittest.TestCase):
    def setUp(self):
        self.opinion = WeatherOpinion()
        self.weather = {
            TEMPERATURE: 10,
            PRECIPITATION_CHANCE: 10,
            PRECIPITATION_AMOUNT: 0.2,
            WIND: 5
        }
        self.opinion.weather(self.weather)

    def test_if_too_strong_wind_weather_is_bad(self):
        self.weather[WIND] = 15
        self.assertFalse(self.opinion.is_positive())

    def test_if_too_cold_weather_is_bad(self):
        self.weather[TEMPERATURE] = -30
        self.assertFalse(self.opinion.is_positive())

    def test_if_too_hot_weather_is_bad(self):
        self.weather[TEMPERATURE] = 30
        self.assertFalse(self.opinion.is_positive())

    def test_if_a_lot_of_precipitation_with_high_chance_weather_is_bad(self):
        self.weather[PRECIPITATION_CHANCE] = 80
        self.weather[PRECIPITATION_AMOUNT] = 2.0
        self.assertFalse(self.opinion.is_positive())

    def test_if_temperature_is_mild_minor_chance_of_minor_precipitation_and_wind_mild(
            self):
        self.weather[WIND] = 5
        self.weather[TEMPERATURE] = -2
        self.weather[PRECIPITATION_CHANCE] = 10
        self.weather[PRECIPITATION_AMOUNT] = 0.5
        self.assertTrue(self.opinion.is_positive())

    def test_if_no_weather_information_then_rating_is_None(self):
        self.opinion = WeatherOpinion()
        self.assertIsNone(self.opinion.is_positive())
 def test_if_no_weather_information_then_rating_is_None(self):
     self.opinion = WeatherOpinion()
     self.assertIsNone(self.opinion.is_positive())
Example #7
0
    '\nWeather:\n\n temperature %s C\n chance of precipitation %s percent\n precipitation amount %s mm\n wind %s m/s'
    % (weather[TEMPERATURE], weather[PRECIPITATION_CHANCE],
       weather[PRECIPITATION_AMOUNT], weather[WIND]))

lunch_history = get_current_week_history(today)
current_week_cafes = ordered_cafes(lunch_history)
print('\nLunch history for current week:\n\n %s' %
      ', '.join(current_week_cafes))

cafes = deepcopy(CAFES)
cafes[SODEXO_EXPLORER]['menu'] = sodexo_explorer_menu
cafes[SODEXO_ACQUA]['menu'] = sodexo_acqua_menu
cafes[ANTELL]['menu'] = antell_menu
cafes[HIMA_SALI]['menu'] = hima_sali_menu
cafes[DYLAN_MILK]['menu'] = dylan_milk_menu
cafes[PIHKA]['menu'] = pihka_menu
cafes[FACTORY_SALMISAARI]['menu'] = factory_salmisaari_menu

food_taste = FoodTaste().preferences(FOOD_PREFERENCES)
weather_opinion = WeatherOpinion().weather(weather)
clo = ChiefLunchOfficer(food_taste=food_taste, weather_opinion=weather_opinion)
clo.lunched(current_week_cafes).weather(weather).cafes(cafes).weekday(
    today.weekday())
todays_cafes = clo.decide()
todays_cafe = todays_cafes[0]
todays_cafe_address = CAFES[todays_cafe]['address']
update_history(lunch_history, today, todays_cafe)
print('\nRecommendation:\n\n %s, %s' % (todays_cafe, todays_cafe_address))
formatted_cafes = ', '.join(todays_cafes[0:5]) + '\n' + ', '.join(
    todays_cafes[5:-1])
print('\nAll lunch in preferred order:\n\n %s' % (formatted_cafes))
Example #8
0
 def setUp(self):
     self.taste = FoodTaste().preferences({})
     self.weather = WeatherOpinion()
     self.weather.is_positive = Mock(return_value=True)
     self.clo = ChiefLunchOfficer(food_taste=self.taste,
                                  weather_opinion=self.weather)
Example #9
0
 def test_if_no_weather_information_then_rating_is_None(self):
     self.opinion = WeatherOpinion()
     self.assertIsNone(self.opinion.is_positive())
class ChiefLunchOfficerIntegrationTest(unittest.TestCase):

    BAD_WEATHER = {
        TEMPERATURE: -30,
        PRECIPITATION_CHANCE: 10,
        PRECIPITATION_AMOUNT: 2.0,
        WIND: 10
    }

    GOOD_WEATHER = {
        TEMPERATURE: 23,
        PRECIPITATION_CHANCE: 0,
        PRECIPITATION_AMOUNT: 0.0,
        WIND: 5
    }

    def setUp(self):
        self.cafes = copy.deepcopy(CAFES)
        self.taste = FoodTaste().preferences(FOOD_PREFERENCES)
        self.weather_opinion = WeatherOpinion().weather(self.GOOD_WEATHER)
        self.clo = ChiefLunchOfficer(food_taste=self.taste,
                                     weather_opinion=self.weather_opinion)
        self.clo.cafes(self.cafes)

    def test_if_bad_weather_go_to_hima_sali_or_sodexo(self):
        self.cafes[HIMA_SALI]['menu'] = 'green salad'
        self.cafes[DYLAN_MILK]['menu'] = 'meatballs'
        self.weather_opinion.weather(self.BAD_WEATHER)
        clo_choice = self.clo.decide_one()
        self.assertEqual(
            True, HIMA_SALI == clo_choice or SODEXO_ACQUA == clo_choice
            or SODEXO_EXPLORER == clo_choice)

    def test_if_one_cafe_one_day_another_next_day(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.clo.lunched([HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_if_meatballs_dylan_milk_can_occur_twice_in_a_week(self):
        self.cafes[DYLAN_MILK]['menu'] = 'meatballs'
        self.cafes[FACTORY_SALMISAARI]['menu'] = 'fish'
        self.clo.lunched([DYLAN_MILK])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_if_meatballs_hima_sali_can_occur_three_times_in_a_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'green salad'
        self.clo.lunched([HIMA_SALI, HIMA_SALI])
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_even_if_meatballs_hima_sali_cannot_occur_four_times_in_a_week(
            self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.lunched([HIMA_SALI, HIMA_SALI, HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_if_already_visited_nepalese_this_week_then_some_another_cafe(
            self):
        self.clo.lunched([NEPALESE])
        self.assertTrue(NEPALESE not in self.clo.decide())

    def test_if_wed_and_nothing_interesting_on_others_menu_then_nepalese_if_not_visited_it(
            self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(2)
        self.assertEqual(NEPALESE, self.clo.decide_one())

    def test_if_wed_and_nothing_interesting_on_others_menu_and_bad_weather_then_hima_sali(
            self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(2)
        self.weather_opinion.weather(self.BAD_WEATHER)
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_if_wed_and_nothing_interesting_on_others_menu_then_nepalese_if_not_visited_it(
            self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(4)
        self.assertEqual(NEPALESE, self.clo.decide_one())

    def test_if_thu_and_pea_soup_then_factory_salmisaari_even_if_lunched_2_times_there_this_week(
            self):
        self.cafes[FACTORY_SALMISAARI]['menu'] = 'pea soup'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(3)
        self.clo.lunched([FACTORY_SALMISAARI, FACTORY_SALMISAARI])
        self.assertEqual(FACTORY_SALMISAARI, self.clo.decide_one())

    def test_if_thu_then_not_hima_sali_if_lunched_3_times_there_this_week(
            self):
        self.cafes[HIMA_SALI]['menu'] = 'pea soup'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(3)
        self.clo.lunched([HIMA_SALI, HIMA_SALI, HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_pea_soup_over_meatballs(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'pea soup'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_meatballs_over_meat(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_prefer_meat_over_chicken(self):
        self.cafes[HIMA_SALI]['menu'] = 'chicken'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_fish_over_chicken_if_fish_at_a_better_rated_cafe(self):
        self.cafes[HIMA_SALI]['menu'] = 'chicken'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_chicken_over_fish(self):
        self.cafes[FACTORY_SALMISAARI]['menu'] = 'chicken'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.assertEqual(FACTORY_SALMISAARI, self.clo.decide_one())

    def test_prefer_fish_over_everything_remaining(self):
        self.cafes[HIMA_SALI]['menu'] = 'brocolli'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())
class ChiefLunchOfficerIntegrationTest(unittest.TestCase):

    BAD_WEATHER = {
        TEMPERATURE: -30,
        PRECIPITATION_CHANCE: 10,
        PRECIPITATION_AMOUNT: 2.0,
        WIND: 10
    }

    GOOD_WEATHER = {
        TEMPERATURE: 23,
        PRECIPITATION_CHANCE: 0,
        PRECIPITATION_AMOUNT: 0.0,
        WIND: 5
    }

    def setUp(self):
        self.cafes = copy.deepcopy(CAFES)
        self.taste = FoodTaste().preferences(FOOD_PREFERENCES)
        self.weather_opinion = WeatherOpinion().weather(self.GOOD_WEATHER)
        self.clo = ChiefLunchOfficer(food_taste=self.taste, weather_opinion=self.weather_opinion)
        self.clo.cafes(self.cafes)

    def test_if_bad_weather_go_to_hima_sali(self):
        self.cafes[HIMA_SALI]['menu'] = 'green salad'
        self.cafes[DYLAN_MILK]['menu'] = 'meatballs'
        self.weather_opinion.weather(self.BAD_WEATHER)
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_if_one_cafe_one_day_another_next_day(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.clo.lunched([HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_if_meatballs_hima_sali_can_occur_twice_in_a_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.lunched([HIMA_SALI])
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_if_meatballs_hima_sali_can_occur_three_times_in_a_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'green salad'
        self.clo.lunched([HIMA_SALI, HIMA_SALI])
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_even_if_meatballs_hima_sali_cannot_occur_four_times_in_a_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.lunched([HIMA_SALI, HIMA_SALI, HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_if_already_visited_nepalese_this_week_then_some_another_cafe(self):
        self.clo.lunched([NEPALESE])
        self.assertTrue(NEPALESE not in self.clo.decide())

    def test_if_wed_and_nothing_interesting_on_others_menu_then_nepalese_if_not_visited_it(self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(2)
        self.assertEqual(NEPALESE, self.clo.decide_one())

    def test_if_wed_and_nothing_interesting_on_others_menu_and_bad_weather_then_hima_sali(self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(2)
        self.weather_opinion.weather(self.BAD_WEATHER)
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_if_wed_and_nothing_interesting_on_others_menu_then_nepalese_if_not_visited_it(self):
        self.cafes[HIMA_SALI]['menu'] = 'fish'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(4)
        self.assertEqual(NEPALESE, self.clo.decide_one())

    def test_if_thu_then_hima_sali_even_if_lunched_2_times_there_this_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'pea soup'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(3)
        self.clo.lunched([HIMA_SALI, HIMA_SALI])
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_if_thu_then_not_hima_sali_if_lunched_3_times_there_this_week(self):
        self.cafes[HIMA_SALI]['menu'] = 'pea soup'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.clo.weekday(3)
        self.clo.lunched([HIMA_SALI, HIMA_SALI, HIMA_SALI])
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_pea_soup_over_meatballs(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'pea soup'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_meatballs_over_meat(self):
        self.cafes[HIMA_SALI]['menu'] = 'meatballs'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_prefer_meat_over_chicken(self):
        self.cafes[HIMA_SALI]['menu'] = 'chicken'
        self.cafes[DYLAN_MILK]['menu'] = 'meat'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())

    def test_prefer_chicken_over_fish(self):
        self.cafes[HIMA_SALI]['menu'] = 'chicken'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.assertEqual(HIMA_SALI, self.clo.decide_one())

    def test_prefer_fish_over_everything_remaining(self):
        self.cafes[HIMA_SALI]['menu'] = 'brocolli'
        self.cafes[DYLAN_MILK]['menu'] = 'fish'
        self.assertEqual(DYLAN_MILK, self.clo.decide_one())
 def setUp(self):
     self.cafes = copy.deepcopy(CAFES)
     self.taste = FoodTaste().preferences(FOOD_PREFERENCES)
     self.weather_opinion = WeatherOpinion().weather(self.GOOD_WEATHER)
     self.clo = ChiefLunchOfficer(food_taste=self.taste, weather_opinion=self.weather_opinion)
     self.clo.cafes(self.cafes)