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 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())
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())
'\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))
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)
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())