Skip to content

Commit 0e36879

Browse files
committed
add skips for expressions tests
1 parent 1f5ffa0 commit 0e36879

File tree

3 files changed

+80
-8
lines changed

3 files changed

+80
-8
lines changed

.github/workflows/test-python.yml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,7 @@ jobs:
7676
datetimes
7777
db_functions
7878
empty
79-
expressions.tests.BasicExpressionsTests.test_ticket_11722_iexact_lookup
80-
expressions.tests.BasicExpressionsTests.test_ticket_16731_startswith_lookup
81-
expressions.tests.ExpressionOperatorTests
82-
expressions.tests.ExpressionsTests.test_insensitive_patterns_escape
83-
expressions.tests.ExpressionsTests.test_patterns_escape
84-
expressions.tests.FieldTransformTests.test_transform_in_values
85-
expressions.tests.FTimeDeltaTests.test_date_minus_duration
86-
expressions.tests.NegatedExpressionTests
79+
expressions
8780
expressions_case
8881
defer
8982
defer_regress

django_mongodb/features.py

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class DatabaseFeatures(BaseDatabaseFeatures):
1212
supports_json_field_contains = False
1313
# BSON Date type doesn't support microsecond precision.
1414
supports_microsecond_precision = False
15+
supports_temporal_subtraction = True
1516
# MongoDB stores datetimes in UTC.
1617
supports_timezones = False
1718
# Not implemented: https://github.com/mongodb-labs/django-mongodb/issues/7
@@ -34,6 +35,8 @@ class DatabaseFeatures(BaseDatabaseFeatures):
3435
"db_functions.tests.FunctionTests.test_nested_function_ordering",
3536
"db_functions.text.test_length.LengthTests.test_ordering",
3637
"db_functions.text.test_strindex.StrIndexTests.test_order_by",
38+
"expressions.tests.BasicExpressionsTests.test_order_by_exists",
39+
"expressions.tests.BasicExpressionsTests.test_order_by_multiline_sql",
3740
"expressions_case.tests.CaseExpressionTests.test_order_by_conditional_explicit",
3841
"lookup.tests.LookupQueryingTests.test_lookup_in_order_by",
3942
"ordering.tests.OrderingTests.test_default_ordering_by_f_expression",
@@ -62,6 +65,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
6265
# pk__in=queryset doesn't work because subqueries aren't a thing in
6366
# MongoDB.
6467
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_and_alias_filter_in_subquery",
68+
"expressions.tests.BasicExpressionsTests.test_in_subquery",
69+
"expressions.tests.BasicExpressionsTests.test_subquery_group_by_outerref_in_filter",
70+
"expressions.tests.BasicExpressionsTests.test_uuid_pk_subquery",
6571
"model_fields.test_jsonfield.TestQuerying.test_usage_in_subquery",
6672
# Length of null considered zero rather than null.
6773
"db_functions.text.test_length.LengthTests.test_basic",
@@ -70,7 +76,17 @@ class DatabaseFeatures(BaseDatabaseFeatures):
7076
"model_fields.test_jsonfield.TestQuerying.test_order_grouping_custom_decoder",
7177
"model_fields.test_jsonfield.TestQuerying.test_ordering_by_transform",
7278
"model_fields.test_jsonfield.TestQuerying.test_ordering_grouping_by_key_transform",
79+
# DatabaseOperations.convert_decimalfield_value() crash:
80+
# 'int' object has no attribute 'to_decimal'.
81+
"expressions.tests.ExpressionsNumericTests.test_filter_decimal_expression",
82+
"expressions.tests.ValueTests.test_output_field_decimalfield",
83+
# pymongo.errors.OperationFailure: $multiply only supports numeric
84+
# types, not date. (should be wrapped in DatabaseError).
85+
"expressions.tests.FTimeDeltaTests.test_invalid_operator",
86+
# InvalidDocument: cannot encode object of type: <class 'datetime.time'>
87+
"expressions.tests.FTimeDeltaTests.test_time_subtraction",
7388
}
89+
7490
# $bitAnd, #bitOr, and $bitXor are new in MongoDB 6.3.
7591
_django_test_expected_failures_bitwise = {
7692
"expressions.tests.ExpressionOperatorTests.test_lefthand_bitwise_and",
@@ -93,6 +109,10 @@ def django_test_expected_failures(self):
93109
"Insert expressions aren't supported.": {
94110
"bulk_create.tests.BulkCreateTests.test_bulk_insert_now",
95111
"bulk_create.tests.BulkCreateTests.test_bulk_insert_expressions",
112+
"expressions.tests.BasicExpressionsTests.test_new_object_create",
113+
"expressions.tests.BasicExpressionsTests.test_new_object_save",
114+
"expressions.tests.BasicExpressionsTests.test_object_create_with_aggregate",
115+
"expressions.tests.BasicExpressionsTests.test_object_create_with_f_expression_in_subquery",
96116
# PI()
97117
"db_functions.math.test_round.RoundTests.test_decimal_with_precision",
98118
"db_functions.math.test_round.RoundTests.test_float_with_precision",
@@ -117,6 +137,21 @@ def django_test_expected_failures(self):
117137
"db_functions.text.test_replace.ReplaceTests.test_update",
118138
"db_functions.text.test_substr.SubstrTests.test_basic",
119139
"db_functions.text.test_upper.UpperTests.test_basic",
140+
"expressions.tests.BasicExpressionsTests.test_arithmetic",
141+
"expressions.tests.BasicExpressionsTests.test_filter_with_join",
142+
"expressions.tests.BasicExpressionsTests.test_object_update",
143+
"expressions.tests.BasicExpressionsTests.test_object_update_unsaved_objects",
144+
"expressions.tests.BasicExpressionsTests.test_order_of_operations",
145+
"expressions.tests.BasicExpressionsTests.test_parenthesis_priority",
146+
"expressions.tests.BasicExpressionsTests.test_update",
147+
"expressions.tests.BasicExpressionsTests.test_update_with_fk",
148+
"expressions.tests.BasicExpressionsTests.test_update_with_none",
149+
"expressions.tests.ExpressionsNumericTests.test_decimal_expression",
150+
"expressions.tests.ExpressionsNumericTests.test_increment_value",
151+
"expressions.tests.FTimeDeltaTests.test_delta_update",
152+
"expressions.tests.FTimeDeltaTests.test_negative_timedelta_update",
153+
"expressions.tests.ValueTests.test_update_TimeField_using_Value",
154+
"expressions.tests.ValueTests.test_update_UUIDField_using_Value",
120155
"expressions_case.tests.CaseDocumentationExamples.test_conditional_update_example",
121156
"expressions_case.tests.CaseExpressionTests.test_update",
122157
"expressions_case.tests.CaseExpressionTests.test_update_big_integer",
@@ -215,13 +250,25 @@ def django_test_expected_failures(self):
215250
"expressions_case.tests.CaseExpressionTests.test_aggregate_with_expression_as_value",
216251
"expressions_case.tests.CaseExpressionTests.test_aggregation_empty_cases",
217252
"lookup.tests.LookupQueryingTests.test_aggregate_combined_lookup",
253+
"expressions.test_queryset_values.ValuesExpressionsTests.test_chained_values_with_expression",
254+
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_expression_group_by",
218255
"from_db_value.tests.FromDBValueTest.test_aggregation",
219256
"timezones.tests.LegacyDatabaseTests.test_query_aggregation",
220257
"timezones.tests.NewDatabaseTests.test_query_aggregation",
221258
},
222259
"QuerySet.annotate() has some limitations.": {
223260
# Exists not supported.
224261
"annotations.tests.NonAggregateAnnotationTestCase.test_annotation_exists_none_query",
262+
"expressions.tests.BasicExpressionsTests.test_annotation_with_deeply_nested_outerref",
263+
"expressions.tests.BasicExpressionsTests.test_boolean_expression_combined",
264+
"expressions.tests.BasicExpressionsTests.test_boolean_expression_combined_with_empty_Q",
265+
"expressions.tests.BasicExpressionsTests.test_boolean_expression_in_Q",
266+
"expressions.tests.BasicExpressionsTests.test_case_in_filter_if_boolean_output_field",
267+
"expressions.tests.BasicExpressionsTests.test_exists_in_filter",
268+
"expressions.tests.ExistsTests.test_filter_by_empty_exists",
269+
"expressions.tests.ExistsTests.test_negated_empty_exists",
270+
"expressions.tests.ExistsTests.test_optimizations",
271+
"expressions.tests.ExistsTests.test_select_negated_empty_exists",
225272
"lookup.tests.LookupTests.test_exact_exists",
226273
"lookup.tests.LookupTests.test_nested_outerref_lhs",
227274
"lookup.tests.LookupQueryingTests.test_filter_exists_lhs",
@@ -235,16 +282,35 @@ def django_test_expected_failures(self):
235282
"db_functions.comparison.test_coalesce.CoalesceTests.test_empty_queryset",
236283
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_extract_outerref",
237284
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_subquery_with_parameters",
285+
"expressions.tests.BasicExpressionsTests.test_aggregate_subquery_annotation",
286+
"expressions.tests.BasicExpressionsTests.test_annotation_with_nested_outerref",
287+
"expressions.tests.BasicExpressionsTests.test_annotation_with_outerref",
288+
"expressions.tests.BasicExpressionsTests.test_annotations_within_subquery",
289+
"expressions.tests.BasicExpressionsTests.test_nested_subquery",
290+
"expressions.tests.BasicExpressionsTests.test_nested_subquery_join_outer_ref",
291+
"expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_2",
292+
"expressions.tests.BasicExpressionsTests.test_nested_subquery_outer_ref_with_autofield",
293+
"expressions.tests.BasicExpressionsTests.test_nested_outerref_with_function",
294+
"expressions.tests.BasicExpressionsTests.test_subquery",
295+
"expressions.tests.BasicExpressionsTests.test_subquery_filter_by_aggregate",
296+
"expressions.tests.BasicExpressionsTests.test_subquery_filter_by_lazy",
297+
"expressions.tests.BasicExpressionsTests.test_subquery_in_filter",
298+
"expressions.tests.BasicExpressionsTests.test_subquery_references_joined_table_twice",
238299
"expressions_case.tests.CaseExpressionTests.test_in_subquery",
239300
"lookup.tests.LookupQueryingTests.test_filter_subquery_lhs",
240301
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_on_subquery",
241302
"model_fields.test_jsonfield.TestQuerying.test_obj_subquery_lookup",
303+
# 'Query' object has no attribute 'as_mql'
304+
"expressions.tests.FTimeDeltaTests.test_date_subquery_subtraction",
305+
"expressions.tests.FTimeDeltaTests.test_datetime_subquery_subtraction",
306+
"expressions.tests.FTimeDeltaTests.test_time_subquery_subtraction",
242307
# Invalid $project :: caused by :: Unknown expression $count,
243308
"annotations.tests.NonAggregateAnnotationTestCase.test_combined_expression_annotation_with_aggregation",
244309
"annotations.tests.NonAggregateAnnotationTestCase.test_combined_f_expression_annotation_with_aggregation",
245310
"annotations.tests.NonAggregateAnnotationTestCase.test_full_expression_annotation_with_aggregation",
246311
"annotations.tests.NonAggregateAnnotationTestCase.test_grouping_by_q_expression_annotation",
247312
"annotations.tests.NonAggregateAnnotationTestCase.test_q_expression_annotation_with_aggregation",
313+
"expressions.tests.FieldTransformTests.test_month_aggregation",
248314
"expressions_case.tests.CaseDocumentationExamples.test_conditional_aggregation_example",
249315
# Func not implemented.
250316
"annotations.tests.NonAggregateAnnotationTestCase.test_custom_functions",
@@ -322,6 +388,14 @@ def django_test_expected_failures(self):
322388
"defer.tests.DeferTests.test_only_baseclass_when_subclass_has_no_added_fields",
323389
"defer.tests.TestDefer2.test_defer_inheritance_pk_chaining",
324390
"defer_regress.tests.DeferRegressionTest.test_ticket_16409",
391+
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_expression",
392+
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression",
393+
"expressions.test_queryset_values.ValuesExpressionsTests.test_values_list_expression_flat",
394+
"expressions.tests.BasicExpressionsTests.test_annotate_values_aggregate",
395+
"expressions.tests.BasicExpressionsTests.test_outerref_mixed_case_table_name",
396+
"expressions.tests.BasicExpressionsTests.test_outerref_with_operator",
397+
"expressions.tests.IterableLookupInnerExpressionsTests.test_expressions_in_lookups_join_choice",
398+
"expressions.tests.IterableLookupInnerExpressionsTests.test_in_lookup_allows_F_expressions_and_expressions_for_datetimes",
325399
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_condition",
326400
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_predicate",
327401
"expressions_case.tests.CaseExpressionTests.test_annotate_with_aggregation_in_value",
@@ -378,6 +452,8 @@ def django_test_expected_failures(self):
378452
},
379453
"Test executes raw SQL.": {
380454
"annotations.tests.NonAggregateAnnotationTestCase.test_raw_sql_with_inherited_field",
455+
"expressions.tests.BasicExpressionsTests.test_annotate_values_filter",
456+
"expressions.tests.BasicExpressionsTests.test_filtering_on_rawsql_that_is_boolean",
381457
"model_fields.test_jsonfield.TestQuerying.test_key_sql_injection_escape",
382458
"model_fields.test_jsonfield.TestQuerying.test_key_transform_raw_expression",
383459
"model_fields.test_jsonfield.TestQuerying.test_nested_key_transform_raw_expression",
@@ -417,6 +493,7 @@ def django_test_expected_failures(self):
417493
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_date_func",
418494
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_date_none",
419495
"db_functions.datetime.test_extract_trunc.DateFunctionTests.test_trunc_lookup_name_sql_injection",
496+
"expressions.tests.FieldTransformTests.test_multiple_transforms_in_values",
420497
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_with_use_tz",
421498
"model_fields.test_datetimefield.DateTimeFieldTests.test_lookup_date_without_use_tz",
422499
"timezones.tests.NewDatabaseTests.test_query_convert_timezones",

django_mongodb/operations.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,8 @@ def convert_decimalfield_value(self, value, expression, connection):
102102
return value
103103

104104
def convert_durationfield_value(self, value, expression, connection):
105+
if isinstance(value, Decimal128):
106+
value = int(str(value))
105107
if value is not None:
106108
value = datetime.timedelta(milliseconds=value)
107109
return value

0 commit comments

Comments
 (0)