Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
    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
Пример #4
0
    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 == ''
Пример #5
0
    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
Пример #6
0
    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)
Пример #7
0
    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'
Пример #8
0
    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
Пример #9
0
    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
Пример #10
0
    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
Пример #11
0
    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
Пример #12
0
    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'
Пример #13
0
    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
Пример #14
0
    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}'
Пример #15
0
 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
                   })
Пример #16
0
    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
Пример #17
0
 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)
     ])
Пример #18
0
 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
                       })