diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index a168cb4661..13746bb903 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -257,7 +257,6 @@ class View(generics.GenericAPIView): inspector.view = view request_body = inspector.get_request_body(path, method) - print(request_body) assert request_body['content']['application/json']['schema']['$ref'] == '#/components/schemas/Item' components = inspector.get_components(path, method) @@ -928,7 +927,6 @@ def test_repeat_operation_ids(self): request = create_request('/') schema = generator.get_schema(request=request) schema_str = str(schema) - print(schema_str) assert schema_str.count("operationId") == 2 assert schema_str.count("newExample") == 1 assert schema_str.count("oldExample") == 1 @@ -948,7 +946,6 @@ def test_duplicate_operation_id(self): assert len(w) == 1 assert issubclass(w[-1].category, UserWarning) - print(str(w[-1].message)) assert 'You have a duplicated operationId' in str(w[-1].message) def test_operation_id_viewset(self): @@ -960,7 +957,6 @@ def test_operation_id_viewset(self): request = create_request('/') schema = generator.get_schema(request=request) - print(schema) assert schema['paths']['/account/']['get']['operationId'] == 'listExampleViewSets' assert schema['paths']['/account/']['post']['operationId'] == 'createExampleViewSet' assert schema['paths']['/account/{id}/']['get']['operationId'] == 'retrieveExampleViewSet' @@ -1284,8 +1280,6 @@ def test_serializer_model(self): request = create_request('/') schema = generator.get_schema(request=request) - print(schema) - assert 'components' in schema assert 'schemas' in schema['components'] assert 'ExampleModel' in schema['components']['schemas'] @@ -1299,8 +1293,6 @@ def test_authtoken_serializer(self): request = create_request('/') schema = generator.get_schema(request=request) - print(schema) - route = schema['paths']['/api-token-auth/']['post'] body_schema = route['requestBody']['content']['application/json']['schema'] @@ -1327,7 +1319,6 @@ def test_component_name(self): request = create_request('/') schema = generator.get_schema(request=request) - print(schema) assert 'components' in schema assert 'schemas' in schema['components'] assert 'Ulysses' in schema['components']['schemas'] diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index eac51ae704..2aa35cf36a 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -168,13 +168,39 @@ class Meta: model = RegularFieldsModel fields = '__all__' + # Cross-platform path handling for regex matching against repr() output + # + # Challenge: repr() output escapes backslashes, so Windows paths like + # C:\Users become 'C:\\Users' in the repr string. To match \\ in regex, + # we need \\\\ in the pattern. + # + # Why re.escape() doesn't work for Windows: + # - re.escape(r'C:\Users') → 'C:\\Users' (matches single \) + # - But repr() shows 'C:\\Users' (double \\) + # - We need pattern 'C:\\\\Users' (to match double \\) + # + # Testing on Windows confirms: + # >>> path = r'C:\Users\Temp' + # >>> re.search(re.escape(path), repr(path)) + # None # Fails + # >>> re.search(path.replace('\\', r'\\\\'), repr(path)) + # # Works + # + # For Unix paths (no backslashes), re.escape() works correctly. + temp_path = tempfile.gettempdir() + if '\\' in temp_path: + # Windows: Manual replacement needed for repr() matching + escaped_temp_path = temp_path.replace('\\', r'\\\\') + else: + # Unix: re.escape() handles any special regex characters + escaped_temp_path = re.escape(temp_path) expected = dedent(r""" TestSerializer\(\): auto_field = IntegerField\(read_only=True\) big_integer_field = IntegerField\(.*\) boolean_field = BooleanField\(required=False\) char_field = CharField\(max_length=100\) - comma_separated_integer_field = CharField\(max_length=100, validators=\[\]\) + comma_separated_integer_field = CharField\(max_length=100, validators=\[\]\) date_field = DateField\(\) datetime_field = DateTimeField\(\) decimal_field = DecimalField\(decimal_places=1, max_digits=3\) @@ -186,14 +212,15 @@ class Meta: positive_small_integer_field = IntegerField\(.*\) slug_field = SlugField\(allow_unicode=False, max_length=100\) small_integer_field = IntegerField\(.*\) - text_field = CharField\(max_length=100, style={'base_template': 'textarea.html'}\) + text_field = CharField\(max_length=100, style=\{.*\}\) file_field = FileField\(max_length=100\) time_field = TimeField\(\) url_field = URLField\(max_length=100\) - custom_field = ModelField\(model_field=\) - file_path_field = FilePathField\(path=%r\) - """ % tempfile.gettempdir()) - assert re.search(expected, repr(TestSerializer())) is not None + custom_field = ModelField\(model_field=<.*CustomField: custom_field>\) + file_path_field = FilePathField\(path='%s'\) + """) % escaped_temp_path + + assert re.search(expected, repr(TestSerializer()), re.DOTALL) is not None def test_field_options(self): class TestSerializer(serializers.ModelSerializer):