def test_get_water_level_badge_class_returns_correct_badge( self, garden_factory, value, klass): formatter = GardenFormatter(garden_factory.build(water_level=value)) ret_val = formatter.get_water_level_badge_class() assert ret_val == klass
def test_get_is_connected_badge_class_returns_correct_class( self, garden_factory, value, klass): formatter = GardenFormatter(garden_factory.build(is_connected=value)) ret_val = formatter.get_is_connected_badge_class() assert ret_val == klass
def test_get_is_connected_display_returns_correct_string( self, garden_factory, is_connected, expected): formatter = GardenFormatter( garden_factory.build(is_connected=is_connected)) ret_val = formatter.get_is_connected_display() assert ret_val == expected
def test_get_time_since_last_connection_display_returns_empty_string_when_time_since_last_connection_is_none( self, garden_factory): garden = garden_factory.build(last_connection_time=None) formatter = GardenFormatter(garden) ret_val = formatter.get_time_since_last_connection_display() assert ret_val == ''
def test_get_connection_strength_display_returns_correct_message( self, garden_factory, value, message): formatter = GardenFormatter( garden_factory.build(connection_strength=value)) ret_val = formatter.get_connection_strength_display() assert ret_val == message
def test_get_last_connection_time_display_returns_none_if_last_connection_time_is_none( self, garden_factory): formatter = GardenFormatter( garden_factory.build(last_connection_time=None)) ret_val = formatter.get_last_connection_time_display() assert ret_val == str(None)
def test_get_plant_types_display_returns_plant_types_in_alphabetical_order( self, mock_plant_types): mock_plant_types = ['c', 'b', 'a'] mock_garden = create_autospec(Garden) type(mock_garden).plant_types = mock_plant_types formatter = GardenFormatter(mock_garden) ret_val = formatter.get_plant_types_display() assert ret_val == 'a, b, c'
def test_get_plant_types_diplay(self, mock_plant_types, plant_types, expected): mock_plant_types.return_value = plant_types mock_garden = create_autospec(Garden) type(mock_garden).plant_types = mock_plant_types formatter = GardenFormatter(mock_garden) ret_val = formatter.get_plant_types_display() assert ret_val == expected
def test_get_token_display_returns_the_token_creation_date_and_return_value_of_token_formatter( self, mock_token_formatter, garden_factory, token_factory): mock_token_formatter.return_value.uuid = 'random stuff' garden = garden_factory() formatter = GardenFormatter(garden) ret_val = formatter.get_token_display() assert mock_token_formatter.return_value.uuid in ret_val assert str(garden.token) in ret_val
def test_get_update_frequency_display_calls_format_duration_and_returns_its_return_value( self, mock_format_duration, garden_factory): garden = garden_factory.build(update_frequency=timedelta(minutes=1)) formatter = GardenFormatter(garden) ret_val = formatter.get_update_frequency_display() mock_format_duration.assert_called_once_with( garden.update_frequency.total_seconds()) assert ret_val == mock_format_duration.return_value
def test_get_water_level_element_return_value_contains_water_level_display_and_badge_classes( self, garden_factory): formatter = GardenFormatter(garden_factory.build()) ret1 = 'ret1' formatter.get_water_level_badge_class = Mock(return_value=ret1) ret_val = formatter.get_water_level_element() assert formatter.instance.get_water_level_display() in ret_val assert formatter.get_water_level_badge_class.return_value in ret_val
def test_get_time_since_last_connection_display_returns_the_duration_rounded_to_days( self, garden_factory): days = 3 duration = timedelta(days=days, hours=2, seconds=1) garden = garden_factory.build( last_connection_time=datetime.now(pytz.UTC) - duration) formatter = GardenFormatter(garden) ret_val = formatter.get_time_since_last_connection_display() assert ret_val == f'updated {days} days ago'
def test_get_is_connected_element_return_value_contains_is_connected_display_and_badge_classes( self, garden_factory): formatter = GardenFormatter(garden_factory.build()) ret1 = 'ret1' ret2 = 'ret2' formatter.get_is_connected_display = Mock(return_value=ret1) formatter.get_is_connected_badge_class = Mock(return_value=ret2) ret_val = formatter.get_is_connected_element() assert formatter.get_is_connected_display.return_value in ret_val assert formatter.get_is_connected_badge_class.return_value in ret_val
def test_get_last_connection_time_display_returns_correct_format( self, garden_factory): day = 25 month = 2 year = 2021 hour = 12 minute = 13 period = 'PM' dtime = datetime(day=day, month=month, year=year, hour=hour, minute=minute, tzinfo=pytz.UTC) formatter = GardenFormatter( garden_factory.build(last_connection_time=dtime)) ret_val = formatter.get_last_connection_time_display() assert ret_val == f'{month}/{day}/{year} {hour}:{minute} {period}'
def get(self, request: http.HttpRequest) -> http.HttpResponse: form = NewGardenForm() gardens = [ GardenFormatter(garden) for garden in request.user.gardens.all() ] return render(request, 'garden_list.html', context={ 'gardens': gardens, 'form': form })
def test_GET_only_renders_requesting_users_gardens_in_template( self, mock_render, mock_auth_user): request = HttpRequest() request.user = mock_auth_user expected = [ GardenFormatter(garden) for garden in mock_auth_user.gardens.all.return_value ] resp = GardenListView().get(request) assert_render_context_called_with(mock_render, {'gardens': expected}) assert resp == mock_render.return_value
def is_displaying_info_for_garden(self, garden): formatter = GardenFormatter(garden) return all([ self.get_garden_status() == formatter.get_is_connected_display(), self.get_last_connected_from() == str( formatter.last_connection_ip), self.get_last_connected_at() == formatter.get_last_connection_time_display(), self.get_update_frequency() == formatter.get_update_frequency_display(), self.get_connection_strength() == formatter.get_connection_strength_display(), self.get_water_level() == formatter.get_water_level_display(), self.get_api_key() == str(formatter.token) ])
def get(self, request: http.HttpRequest, pk: int) -> http.HttpResponse: try: garden = request.user.gardens.get(pk=pk) except Garden.DoesNotExist: raise Http404() else: garden.refresh_connection_status() configs = { 'formSelector': f'#{NewWateringStationForm.FORM_ID}', 'url': reverse('watering-station-create', kwargs={'pk': pk}), } return render(request, 'garden_detail.html', context={ 'garden': GardenFormatter(garden), 'configs': configs })