示例#1
0
    def _get_mock_dataframe(self, user):
        two_months_ago = get_current_date_months_ago(2)
        one_month_ago = get_current_date_months_ago(1)
        default_index = pd.date_range(start=two_months_ago, end=one_month_ago, freq='D')

        random_values = [randint(0, 3) for _ in default_index]

        mock_dataframe = pd.DataFrame(index=default_index, data=random_values)
        mock_dataframe = mock_dataframe.tz_localize(user.pytz_timezone)
        return mock_dataframe
示例#2
0
    def _get_mock_dataframe(self, user):
        two_months_ago = get_current_date_months_ago(2)
        one_month_ago = get_current_date_months_ago(1)
        default_index = pd.date_range(start=two_months_ago,
                                      end=one_month_ago,
                                      freq='D')

        random_values = [randint(0, 3) for _ in default_index]

        mock_dataframe = pd.DataFrame(index=default_index, data=random_values)
        mock_dataframe = mock_dataframe.tz_localize(user.pytz_timezone)
        return mock_dataframe
示例#3
0
    def test_dataframe_creation(self):
        start_date = get_current_date_months_ago(3)
        end_date = datetime.date.today()

        dataframe = self._get_mock_dataframe(self.default_user)

        dataframe_date_appended = force_start_end_data_to_dataframe(user=self.default_user, dataframe=dataframe,
            start_date=start_date, end_date=end_date)

        # if it's appended new dates correctly, the index will be greater than before
        self.assertGreater(dataframe_date_appended.index.size, dataframe.index.size)
    def test_that_start_date_will_return_complete_daily_index_even_if_no_values_exist(self):
        """
        An API Query with a start_date should always return data saying null if there is no data
        This logic ensures matching indices on the frontend
        """
        start_date = get_current_date_months_ago(6)
        non_existent_date = get_current_date_months_ago(-6)
        request_params = {
            'start_date': start_date,
            'frequency': 'daily',
            'complete_date_range_in_daily_frequency': True
        }
        response = self.client.get(self.url, data=request_params)

        # response.data.keys() is a list of isoformat strings (with timezones), but they always have the date
        # so a bit of laziness here, just check for the matching string
        start_date_in_response = any(start_date.isoformat() in x for x in response.data.keys())
        fake_date_in_response = any(non_existent_date.isoformat() in x for x in response.data.keys())

        self.assertTrue(start_date_in_response)
        self.assertFalse(fake_date_in_response)
示例#5
0
class SupplementLogRequestParametersSerializer(serializers.Serializer):
    start_date = serializers.DateField(default=get_current_date_months_ago(3))
    frequency = serializers.ChoiceField([DAILY_FREQUENCY, MONTHLY_FREQUENCY, None], default=None)
    # this is a bit tricky to explain, but if true it means to always have the results for any daily frequencies
    # to include the entire date_range from start end date range, which will result in a lot of null/empty data
    complete_date_range_in_daily_frequency = serializers.BooleanField(default=False)

    def validate(self, validated_data):
        if not validated_data['frequency'] and validated_data['complete_date_range_in_daily_frequency']:
            raise ValidationError('If there is no frequency, results should not enclose all date ranges between start '
                                  'and ending periods')

        return validated_data
示例#6
0
    def test_productivity_log_works_with_appending_start_and_end_dates(self):
        start_date = get_current_date_months_ago(12)

        params = {
            'start_date': start_date.isoformat(),
            'complete_date_range_in_daily_frequency': True,
        }

        response = self.client.get(self.url, data=params)
        response_amount = len(response.data.keys())
        productivity_logs = DailyProductivityLog.objects.filter(user=self.default_user).count()

        self.assertEqual(response.status_code, 200)
        self.assertGreater(response_amount, productivity_logs)
示例#7
0
    def test_that_start_date_will_return_complete_daily_index_even_if_no_values_exist(
            self):
        """
        An API Query with a start_date should always return data saying null if there is no data
        This logic ensures matching indices on the frontend
        """
        start_date = get_current_date_months_ago(6)
        non_existent_date = get_current_date_months_ago(-6)
        request_params = {
            'start_date': start_date,
            'frequency': 'daily',
            'complete_date_range_in_daily_frequency': True
        }
        response = self.client.get(self.url, data=request_params)

        # response.data.keys() is a list of isoformat strings (with timezones), but they always have the date
        # so a bit of laziness here, just check for the matching string
        start_date_in_response = any(start_date.isoformat() in x
                                     for x in response.data.keys())
        fake_date_in_response = any(non_existent_date.isoformat() in x
                                    for x in response.data.keys())

        self.assertTrue(start_date_in_response)
        self.assertFalse(fake_date_in_response)
示例#8
0
    def test_dataframe_creation(self):
        start_date = get_current_date_months_ago(3)
        end_date = datetime.date.today()

        dataframe = self._get_mock_dataframe(self.default_user)

        dataframe_date_appended = force_start_end_data_to_dataframe(
            user=self.default_user,
            dataframe=dataframe,
            start_date=start_date,
            end_date=end_date)

        # if it's appended new dates correctly, the index will be greater than before
        self.assertGreater(dataframe_date_appended.index.size,
                           dataframe.index.size)
示例#9
0
class ProductivityLogRequestParametersSerializer(serializers.Serializer):
    start_date = serializers.DateField(default=get_current_date_months_ago(3))
    cumulative_window = serializers.IntegerField(default=1, min_value=1, max_value=365 * 3)
    complete_date_range_in_daily_frequency = serializers.BooleanField(default=False)