def test_objects_with_invalid_start_ats_are_disallowed(self):
     validation_result = validate_record_data(
         {'_start_at': 'this is not a timestamp'})
     assert_that(
         validation_result,
         is_invalid_with_message(
             "_start_at is not a valid datetime object"))
示例#2
0
 def test_queries_with_collect_and_no_group_by_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(MultiDict([
         ("collect", 'foo')
     ]))
     assert_that(validation_result_without_group_by,
                 is_invalid_with_message(
                     'collect can be use only with group_by'))
示例#3
0
 def test_queries_sorting_by_invalid_field_names_are_disallowed(self):
     validation_result = validate_request_args({
         'sort_by': 'with-hyphen:ascending'
     })
     assert_that(validation_result, is_invalid_with_message(
         'Cannot sort by an invalid field name'
     ))
示例#4
0
 def test_queries_with_unrecognized_sort_by_values_are_disallowed(self):
     validation_result = validate_request_args({
         'sort_by': 'foo:random',
     })
     assert_that( validation_result, is_invalid_with_message(
         'Unrecognised sort direction. Supported directions '
         'include: ascending, descending') )
示例#5
0
 def test_queries_with_code_injection_collect_values_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(
         MultiDict([("group_by", 'bar'),
                    ("collect", 'something);while(1){myBadFunction()}')]))
     assert_that(
         validation_result_without_group_by,
         is_invalid_with_message("Cannot collect an invalid field name"))
示例#6
0
 def test_filter_by_prefix_with_invalid_field_names_is_disallowed(self):
     validation_result = validate_request_args({
         'filter_by_prefix': 'with-hyphen:bar'
     })
     assert_that(validation_result, is_invalid_with_message(
         'Cannot filter by an invalid field name'
     ))
示例#7
0
    def test_just_end_at_isnt_allowed(self):
        validation_result = validate_request_args({
            'end_at': '2000-02-02T00:00:00+00:00',
        })

        assert_that(validation_result, is_invalid_with_message(
            "Use of 'end_at' requires 'start_at' or 'duration'"))
示例#8
0
    def test_queries_with_period_values_must_be_certain_values(self):
        validation_result = validate_request_args({
            'period': 'fortnight'
        })

        assert_that(validation_result, is_invalid_with_message(
            "'period' must be one of ['hour', 'day', 'week', 'month']"))
示例#9
0
 def test_objects_with_invalid_timestamps_are_disallowed(self):
     validation_result = validate_record_data({
         '_timestamp': 'this is not a timestamp'
     })
     assert_that(validation_result,
                 is_invalid_with_message(
                     "_timestamp is not a valid datetime object"))
示例#10
0
 def test_queries_with_grouping_on_internal_fields_are_disallowed(self):
     validation_result = validate_request_args({"group_by": "_internal"})
     assert_that(
         validation_result,
         is_invalid_with_message(
             "Cannot group by internal fields, internal fields "
             "start with an underscore"))
示例#11
0
 def test_queries_grouping_and_collecting_equal_fields_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(
         MultiDict([("group_by", 'a_field'), ("collect", 'a_field')]))
     assert_that(
         validation_result_without_group_by,
         is_invalid_with_message(
             "Cannot collect by a field that is used for group_by"))
示例#12
0
 def test_objects_with_unrecognised_internal_keys_are_disallowed(self):
     validation_result = validate_record_data({
         '_unknown': 'whatever'
     })
     assert_that(validation_result,
                 is_invalid_with_message(
                     "_unknown is not a recognised internal field"))
示例#13
0
 def test_queries_with_collect_and_no_group_by_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(
         MultiDict([("collect", 'foo')]))
     assert_that(
         validation_result_without_group_by,
         is_invalid_with_message("collect can be use only with either "
                                 "['group_by', 'period']"))
示例#14
0
 def test_queries_with_grouping_on_internal_fields_are_disallowed(self):
     validation_result = validate_request_args({
         "group_by": "_internal"
     })
     assert_that(validation_result, is_invalid_with_message(
         "Cannot group by internal fields, internal fields "
         "start with an underscore"))
示例#15
0
    def test_queries_with_period_values_must_be_certain_values(self):
        validation_result = validate_request_args({'period': 'fortnight'})

        assert_that(
            validation_result,
            is_invalid_with_message(
                "'period' must be one of ['week', 'month']"))
示例#16
0
 def test_queries_with_no_colon_in_filter_by_are_disallowed(self):
     validation_result = validate_request_args({'filter_by': 'bar'})
     assert_that(
         validation_result,
         is_invalid_with_message(
             "filter_by must be a field name and value separated by a "
             "colon (:) eg. authority:Westminster"))
示例#17
0
    def test_duration_is_a_valid_number(self):
        validation_result = validate_request_args({
            'period': 'day',
            'duration': 'laierughrelg',
        })

        assert_that(validation_result, is_invalid_with_message(
            "duration must be a positive integer"))
示例#18
0
 def test_queries_with_sort_by_and_period_are_disallowed(self):
     validation_result = validate_request_args({
         "sort_by": "foo:ascending",
         "period": "week"
     })
     assert_that( validation_result, is_invalid_with_message(
         "Cannot sort for period queries without group_by. "
         "Period queries are always sorted by time.") )
示例#19
0
    def test_queries_with_non_existent_dates_are_disallowed(self):
        validation_result = validate_request_args({
            'start_at': '2013-13-70T00:00:00Z',
            'end_at': '2013-12-70T00:00:00Z'
        })

        assert_that(validation_result, is_invalid_with_message(
            "start_at is not a valid datetime"))
示例#20
0
    def test_just_duration_isnt_allowed(self):
        validation_result = validate_request_args({
            'duration': '3',
        })

        assert_that(validation_result, is_invalid_with_message(
            "If 'duration' is requested (for relative time), 'period' is "
            "required - please add a period (like 'day', 'month' etc)"))
示例#21
0
    def test_queries_without_a_colon_in_sort_by_are_disallowed(self):
        validation_result = validate_request_args({'sort_by': 'lulz'})

        assert_that(
            validation_result,
            is_invalid_with_message(
                'sort_by must be a field name and sort direction separated '
                'by a colon (:) eg. authority:ascending'))
示例#22
0
 def test_queries_with_no_colon_in_filter_by_are_disallowed(self):
     validation_result = validate_request_args({
         'filter_by': 'bar'
     })
     assert_that( validation_result, is_invalid_with_message(
         "filter_by must be a field name and value separated by a "
         "colon (:) eg. authority:Westminster"
     ))
示例#23
0
 def test_queries_grouping_and_collecting_equal_fields_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(MultiDict([
         ("group_by", 'a_field'),
         ("collect", 'a_field')
     ]))
     assert_that(validation_result_without_group_by,
                 is_invalid_with_message(
                     "Cannot collect by a field that is used for group_by"))
示例#24
0
    def test_zero_duration_isnt_allowed(self):
        validation_result = validate_request_args({
            'period': 'day',
            'duration': '0',
        })

        assert_that(validation_result, is_invalid_with_message(
                    "'duration' must not be zero"))
示例#25
0
 def test_queries_with_internal_collect_values_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(
         MultiDict([("group_by", 'bar'), ("collect", '_internal_field')]))
     assert_that(
         validation_result_without_group_by,
         is_invalid_with_message("Cannot collect internal fields, "
                                 "internal fields start "
                                 "with an underscore"))
示例#26
0
    def test_negative_dutaion_isnt_allowed(self):
        validation_result = validate_request_args({
            'period': 'day',
            'duration': '-3',
        })

        assert_that(validation_result, is_invalid_with_message(
            "duration must be a positive integer"))
示例#27
0
 def test_queries_with_badly_formatted_end_at_are_disallowed(self):
     assert_that(
         validate_request_args({
             'start_at': '2000-02-02T00:02:02+00:00',
             'end_at': 'foo'
         }),
         is_invalid_with_message("end_at is not a valid datetime")
     )
示例#28
0
    def test_that_queries_with_invalid_timezone_are_disallowed(self):
        validation_result = validate_request_args({
            'start_at': '2013-01-01T00:00:00+24:00',
            'end_at': '2013-01-08T00:00:00+24:00'
        })

        assert_that(validation_result, is_invalid_with_message(
            "start_at is not a valid datetime"))
示例#29
0
    def test_that_collect_queries_with_invalid_method_are_disallowed(self):
        validation_result = validate_request_args({
            'group_by': 'foo',
            'collect': 'field:infinity',
        })

        assert_that(validation_result,
                    is_invalid_with_message(("Unknown collection method")))
示例#30
0
 def test_queries_collecting_invalid_field_names_are_disallowed(self):
     validation_result = validate_request_args(MultiDict([
         ("group_by", "bar"),
         ("collect", "with-hyphen")
     ]))
     assert_that(validation_result, is_invalid_with_message(
         "Cannot collect an invalid field name"
     ))
 def test_that_end_at_with_time_other_than_midnight_is_disallowed(self):
     validation_result = validate_request_args({
         'group_by': 'some_key',
         'start_at': '2013-04-01T00:00:00Z',
         'end_at': '2013-04-08T00:00:01Z'
     })
     assert_that(validation_result, is_invalid_with_message(
         'end_at must be midnight'))
示例#32
0
 def test_queries_with_code_injection_collect_values_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(MultiDict([
         ("group_by", 'bar'),
         ("collect", 'something);while(1){myBadFunction()}')
     ]))
     assert_that(validation_result_without_group_by,
                 is_invalid_with_message(
                     "Cannot collect an invalid field name"))
示例#33
0
 def test_queries_with_badly_formatted_start_at_are_disallowed(self):
     assert_that(
         validate_request_args({
             'start_at': 'i am not a time',
             'end_at': 'i am not a time'
         }),
         is_invalid_with_message("start_at is not a valid datetime")
     )
 def test_that_period_queries_not_ending_on_monday_are_disallowed(self):
     validation_result_not_a_monday = validate_request_args({
         'period': 'week',
         'start_at': '2013-04-01T00:00:00Z',
         'end_at': '2013-04-09T00:00:00Z'
     })
     assert_that(validation_result_not_a_monday, is_invalid_with_message(
         'end_at must be a monday'))
示例#35
0
    def test_queries_without_a_colon_in_sort_by_are_disallowed(self):
        validation_result = validate_request_args({
            'sort_by': 'lulz'
        })

        assert_that(validation_result, is_invalid_with_message(
            'sort_by must be a field name and sort direction separated '
            'by a colon (:) eg. authority:ascending'))
示例#36
0
 def test_subsequent_filter_by_parameters_are_validated(self):
     validation_result = validate_request_args(MultiDict([
         ('filter_by', 'foo:bar'),
         ('filter_by', 'bar'),
     ]))
     assert_that(validation_result, is_invalid_with_message(
         "filter_by must be a field name and value separated by a colon "
         "(:) eg. authority:Westminster"
     ))
示例#37
0
    def test_queries_collecting_internal_fields_are_disallowed(self):
        validation_result = validate_request_args(
            MultiDict([('group_by', 'not_walruses'), ('collect', '_walrus')]))

        assert_that(
            validation_result,
            is_invalid_with_message(
                'Cannot collect internal fields, internal fields start '
                'with an underscore'))
示例#38
0
 def test_queries_with_both_filter_by_params_are_disallowed(self):
     validation_result = validate_request_args({
         'filter_by': 'bar',
         'filter_by_prefix': 'foo'
     })
     assert_that( validation_result, is_invalid_with_message(
         "Cannot use both filter_by "
         "and filter_by_prefix in the same query"
     ))
示例#39
0
 def test_queries_spanning_less_than_seven_days_are_not_allowed(self):
     validation_result = validate_request_args({
         'period': 'day',
         'start_at': '2000-02-02T00:00:00+00:00',
         'end_at': '2000-02-08T00:00:00+00:00'
     }, False)
     assert_that(validation_result, is_invalid_with_message(
         "The minimum time span for a query is 7 days"
     ))
示例#40
0
 def test_queries_with_dates_at_middle_of_day_are_not_allowed(self):
     validation_result = validate_request_args({
         'period': 'day',
         'start_at': '2000-02-02T12:00:00+00:00',
         'end_at': '2000-02-19T13:00:00+00:00'
     }, False)
     assert_that(validation_result, is_invalid_with_message(
         "start_at must be midnight"
     ))
示例#41
0
    def test_that_collect_queries_with_invalid_method_are_disallowed(self):
        validation_result = validate_request_args({
            'group_by': 'foo',
            'collect': 'field:infinity',
        })

        assert_that(validation_result, is_invalid_with_message(
            "Unknown collection method"
        ))
示例#42
0
 def test_queries_with_unrecognized_sort_by_values_are_disallowed(self):
     validation_result = validate_request_args({
         'sort_by': 'foo:random',
     })
     assert_that(
         validation_result,
         is_invalid_with_message(
             'Unrecognised sort direction. Supported directions '
             'include: ascending, descending'))
示例#43
0
 def test_queries_with_multiple_collect_values_as_code_are_disallowed(self):
     validation_result_without_group_by = validate_request_args(
         MultiDict([
             ("group_by", 'bar'),
             ("collect", '$foo'),
             ("collect", 'foo'),
         ]))
     assert_that(
         validation_result_without_group_by,
         is_invalid_with_message("Cannot collect an invalid field name"))
示例#44
0
 def test_subsequent_collect_values_are_validated(self):
     validation_result = validate_request_args(
         MultiDict([
             ("group_by", "foo"),
             ("collect", "bar"),
             ("collect", "{}"),
         ]))
     assert_that(
         validation_result,
         is_invalid_with_message("Cannot collect an invalid field name"))
示例#45
0
 def test_queries_with_sort_by_and_period_are_disallowed(self):
     validation_result = validate_request_args({
         "sort_by": "foo:ascending",
         "period": "week"
     })
     assert_that(
         validation_result,
         is_invalid_with_message(
             "Cannot sort for period queries without group_by. "
             "Period queries are always sorted by time."))
示例#46
0
    def test_queries_grouping_week_start_at_with_period_are_disallowed(self):
        validation_result = validate_request_args({
            'period': 'week',
            'group_by': '_week_start_at'
        })

        assert_that(
            validation_result,
            is_invalid_with_message(
                "Cannot group by internal fields, internal fields "
                "start with an underscore"))
示例#47
0
    def test_that_queries_with_invalid_timezone_are_disallowed(self):
        validation_result = validate_request_args({
            'start_at':
            '2013-01-01T00:00:00+24:00',
            'end_at':
            '2013-01-08T00:00:00+24:00'
        })

        assert_that(
            validation_result,
            is_invalid_with_message("start_at is not a valid datetime"))
示例#48
0
    def test_queries_with_non_existent_dates_are_disallowed(self):
        validation_result = validate_request_args({
            'start_at':
            '2013-13-70T00:00:00Z',
            'end_at':
            '2013-12-70T00:00:00Z'
        })

        assert_that(
            validation_result,
            is_invalid_with_message("start_at is not a valid datetime"))
示例#49
0
 def test_that_end_at_with_time_other_than_midnight_is_disallowed(self):
     validation_result = validate_request_args({
         'group_by':
         'some_key',
         'start_at':
         '2013-04-01T00:00:00Z',
         'end_at':
         '2013-04-08T00:00:01Z'
     })
     assert_that(validation_result,
                 is_invalid_with_message('end_at must be midnight'))
示例#50
0
 def test_subsequent_filter_by_parameters_are_validated(self):
     validation_result = validate_request_args(
         MultiDict([
             ('filter_by', 'foo:bar'),
             ('filter_by', 'bar'),
         ]))
     assert_that(
         validation_result,
         is_invalid_with_message(
             "filter_by must be a field name and value separated by a colon "
             "(:) eg. authority:Westminster"))
示例#51
0
 def test_that_period_queries_not_ending_on_monday_are_disallowed(self):
     validation_result_not_a_monday = validate_request_args({
         'period':
         'week',
         'start_at':
         '2013-04-01T00:00:00Z',
         'end_at':
         '2013-04-09T00:00:00Z'
     })
     assert_that(validation_result_not_a_monday,
                 is_invalid_with_message('end_at must be a monday'))
示例#52
0
    def test_that_queries_which_are_not_midnight_utc_are_disallowed(self):
        validation_result = validate_request_args({
            'group_by':
            'some_key',
            'start_at':
            '2013-04-01T00:00:00+04:30',
            'end_at':
            '2013-04-08T00:00:00+00:00'
        })

        assert_that(validation_result,
                    is_invalid_with_message("start_at must be midnight"))
示例#53
0
 def test_that_end_at_alone_is_disallowed(self):
     validation_result = validate_request_args({
         'period':
         'week',
         'end_at':
         '2013-04-01T00:00:00Z'
     })
     assert_that(
         validation_result,
         is_invalid_with_message(
             "Either 'duration' or both 'start_at' and 'end_at' "
             "are required for a period query"))
示例#54
0
 def test_that_querying_for_less_than_7_days_of_data_is_disallowed(self):
     validation_result = validate_request_args({
         'period':
         'week',
         'start_at':
         '2012-01-01T00:00:00Z',
         'end_at':
         '2012-01-05T00:00:00Z'
     })
     assert_that(
         validation_result,
         is_invalid_with_message(
             'The minimum time span for a query is 7 days'))
示例#55
0
    def test_that_grouping_by_month_requires_dates_at_start_of_month(self):
        validation_result = validate_request_args({
            "period":
            "month",
            "start_at":
            "2013-01-02T00:00:00Z",
            "end_at":
            "2014-01-01T00:00:00Z"
        })

        assert_that(
            validation_result,
            is_invalid_with_message(
                "'start_at' must be the first of the month for "
                "period=month queries"))
 def test_objects_with_invalid_ids_are_disallowed(self):
     validation_result = validate_record_data({'_id': 'invalid id'})
     assert_that(
         validation_result,
         is_invalid_with_message("_id \"invalid id\" is not a valid id"))
示例#57
0
 def test_non_aggregate_queries_are_invalid(self):
     validation_result = validate_request_args({})
     assert_that(
         validation_result,
         is_invalid_with_message("querying for raw data is not allowed"))
 def test_objects_with_invalid_keys_are_disallowed(self):
     validation_result = validate_record_data({'foo-bar': 'bar'})
     assert_that(validation_result,
                 is_invalid_with_message("foo-bar is not a valid key"))
 def test_objects_with_invalid_values_are_disallowed(self):
     validation_result = validate_record_data({'foo': tuple()})
     assert_that(validation_result,
                 is_invalid_with_message("foo has an invalid value"))
 def test_objects_with_unrecognised_internal_keys_are_disallowed(self):
     validation_result = validate_record_data({'_unknown': 'whatever'})
     assert_that(
         validation_result,
         is_invalid_with_message(
             "_unknown is not a recognised internal field"))