Browse Source

Update tests after applying fix from PR14303

pull/14293/head
Yurii Motov 9 months ago
parent
commit
6dc8d127d4
  1. 8
      tests/test_aliases/test_file_model_aliases.py
  2. 52
      tests/test_aliases/test_form_model_aliases.py
  3. 55
      tests/test_aliases/test_uploadfile_model_aliases.py

8
tests/test_aliases/test_file_model_aliases.py

@ -376,7 +376,7 @@ def test_list_field_validation_alias_model_by_alias():
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: # Fails with:
# AssertionError: assert 422 == 200 # AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]} # {"detail":[{"type":"bytes_type","loc":["body","files_val_alias",0],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}},{"type":"bytes_type","loc":["body","files_val_alias",1],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes: # Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]} # assert resp.json() == {"file_sizes": [8, 8]}
@ -434,7 +434,7 @@ def test_optional_list_field_validation_alias_model_by_alias():
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: # Fails with:
# AssertionError: assert 422 == 200 # AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]} # {"detail":[{"type":"bytes_type","loc":["body","files_val_alias",0],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}},{"type":"bytes_type","loc":["body","files_val_alias",1],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes: # Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]} # assert resp.json() == {"file_sizes": [8, 8]}
@ -653,7 +653,7 @@ def test_list_field_alias_and_validation_alias_model_by_validation_alias():
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: # Fails with:
# AssertionError: assert 422 == 200 # AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]} # {"detail":[{"type":"bytes_type","loc":["body","files_val_alias",0],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}},{"type":"bytes_type","loc":["body","files_val_alias",1],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes: # Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]} # assert resp.json() == {"file_sizes": [8, 8]}
@ -725,7 +725,7 @@ def test_optional_list_field_alias_and_validation_alias_model_by_validation_alia
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: # Fails with:
# AssertionError: assert 422 == 200 # AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]} # {"detail":[{"type":"bytes_type","loc":["body","files_val_alias",0],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}},{"type":"bytes_type","loc":["body","files_val_alias",1],"msg":"Input should be a valid bytes","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes: # Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]} # assert resp.json() == {"file_sizes": [8, 8]}

52
tests/test_aliases/test_form_model_aliases.py

@ -1,6 +1,5 @@
from typing import List, Optional from typing import List, Optional
import pytest
from fastapi import FastAPI, Form from fastapi import FastAPI, Form
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@ -177,8 +176,8 @@ def test_optional_list_field_alias_model_schema():
# ===================================================================================== # =====================================================================================
# Field(validation_alias=...) # Field(validation_alias=...)
# Current situation: works except lists # Current situation: Works (with fix #14303), but there is still an issue with `validation_alias`
# (values are extracted as extra parameters, not as declared parameters)
# ------------------------------ # ------------------------------
# required field # required field
@ -284,7 +283,7 @@ class ListFieldValidationAliasModel(BaseModel):
async def list_field_validation_alias_model( async def list_field_validation_alias_model(
data: ListFieldValidationAliasModel = Form(...), data: ListFieldValidationAliasModel = Form(...),
): ):
return {"param": data.param} # pragma: no cover (remove `no cover` when bug fixed) return {"param": data.param}
def test_list_field_validation_alias_model_by_name(): def test_list_field_validation_alias_model_by_name():
@ -298,19 +297,15 @@ def test_list_field_validation_alias_model_by_name():
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_list_field_validation_alias_model_by_alias(): def test_list_field_validation_alias_model_by_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
"/list-field-validation-alias-model", data={"param_val_alias": ["123", "456"]} "/list-field-validation-alias-model", data={"param_val_alias": ["123", "456"]}
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Currently fails due to some issue: assert resp.json() == {"param": ["123", "456"]}
# AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","param_val_alias"],"msg":"Input should be a valid list","input":"456"}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"param": ["123", "456"]}
def test_list_field_validation_alias_model_schema(): def test_list_field_validation_alias_model_schema():
@ -352,7 +347,8 @@ def test_optional_list_field_validation_alias_model_by_name():
assert resp.json() == {"param": None} assert resp.json() == {"param": None}
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_optional_list_field_validation_alias_model_by_alias(): def test_optional_list_field_validation_alias_model_by_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -360,12 +356,7 @@ def test_optional_list_field_validation_alias_model_by_alias():
data={"param_val_alias": ["123", "456"]}, data={"param_val_alias": ["123", "456"]},
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Currently fails due to some issue: assert resp.json() == {"param": ["123", "456"]}
# AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","param_val_alias"],"msg":"Input should be a valid list","input":"456"}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"param": ["123", "456"]}
def test_optional_list_field_validation_alias_model_schema(): def test_optional_list_field_validation_alias_model_schema():
@ -383,7 +374,8 @@ def test_optional_list_field_validation_alias_model_schema():
# ===================================================================================== # =====================================================================================
# Field(alias=..., validation_alias=...) # Field(alias=..., validation_alias=...)
# Current situation: works except lists # Current situation: Works (with fix #14303), but there is still an issue with `validation_alias`
# (values are extracted as extra parameters, not as declared parameters)
# ------------------------------ # ------------------------------
# required field # required field
@ -521,7 +513,7 @@ class ListFieldAliasAndValidationAliasModel(BaseModel):
async def list_field_alias_and_validation_alias_model( async def list_field_alias_and_validation_alias_model(
data: ListFieldAliasAndValidationAliasModel = Form(...), data: ListFieldAliasAndValidationAliasModel = Form(...),
): ):
return {"param": data.param} # pragma: no cover (remove `no cover` when bug fixed) return {"param": data.param}
def test_list_field_alias_and_validation_alias_model_by_name(): def test_list_field_alias_and_validation_alias_model_by_name():
@ -547,7 +539,8 @@ def test_list_field_alias_and_validation_alias_model_by_alias():
assert "param_val_alias" in detail[0]["loc"] assert "param_val_alias" in detail[0]["loc"]
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_list_field_alias_and_validation_alias_model_by_validation_alias(): def test_list_field_alias_and_validation_alias_model_by_validation_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -555,12 +548,7 @@ def test_list_field_alias_and_validation_alias_model_by_validation_alias():
data={"param_val_alias": ["123", "456"]}, data={"param_val_alias": ["123", "456"]},
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Currently fails due to some issue: assert resp.json() == {"param": ["123", "456"]}
# AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","param_val_alias"],"msg":"Input should be a valid list","input":"456"}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"param": ["123", "456"]}
def test_list_field_alias_and_validation_alias_model_schema(): def test_list_field_alias_and_validation_alias_model_schema():
@ -617,7 +605,8 @@ def test_optional_list_field_alias_and_validation_alias_model_by_alias():
assert resp.json() == {"param": None} assert resp.json() == {"param": None}
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_optional_list_field_alias_and_validation_alias_model_by_validation_alias(): def test_optional_list_field_alias_and_validation_alias_model_by_validation_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -625,12 +614,7 @@ def test_optional_list_field_alias_and_validation_alias_model_by_validation_alia
data={"param_val_alias": ["123", "456"]}, data={"param_val_alias": ["123", "456"]},
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Currently fails due to some issue: assert resp.json() == {"param": ["123", "456"]}
# AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","param_val_alias"],"msg":"Input should be a valid list","input":"456"}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"param": ["123", "456"]}
def test_optional_list_field_alias_and_validation_alias_model_schema(): def test_optional_list_field_alias_and_validation_alias_model_schema():

55
tests/test_aliases/test_uploadfile_model_aliases.py

@ -1,6 +1,5 @@
from typing import List, Optional from typing import List, Optional
import pytest
from fastapi import FastAPI, File, UploadFile from fastapi import FastAPI, File, UploadFile
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
@ -190,8 +189,8 @@ def test_optional_list_field_alias_model_schema():
# ===================================================================================== # =====================================================================================
# Field(validation_alias=...) # Field(validation_alias=...)
# Current situation: Works except lists (validation error - expected list, got str) # Current situation: Works (with fix #14303), but there is still an issue with `validation_alias`
# (values are extracted as extra parameters, not as declared parameters)
# ------------------------------ # ------------------------------
# required field # required field
@ -304,7 +303,7 @@ class ListFieldValidationAliasModel(BaseModel):
"/list-field-validation-alias-model", "/list-field-validation-alias-model",
operation_id="list_field_validation_alias_model", operation_id="list_field_validation_alias_model",
) )
async def list_field_validation_alias_model( # pragma: no cover (remove `no cover` when bug fixed) async def list_field_validation_alias_model(
data: ListFieldValidationAliasModel = File(...), data: ListFieldValidationAliasModel = File(...),
): ):
return {"file_sizes": [file.size for file in data.files]} return {"file_sizes": [file.size for file in data.files]}
@ -322,7 +321,8 @@ def test_list_field_validation_alias_model_by_name():
assert "files_val_alias" in detail[0]["loc"] assert "files_val_alias" in detail[0]["loc"]
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_list_field_validation_alias_model_by_alias(): def test_list_field_validation_alias_model_by_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -330,12 +330,7 @@ def test_list_field_validation_alias_model_by_alias():
files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")], files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")],
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: assert resp.json() == {"file_sizes": [8, 8]}
# AssertionError: assert 422 == 200
# {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]}
def test_list_field_validation_alias_model_schema(): def test_list_field_validation_alias_model_schema():
@ -380,7 +375,8 @@ def test_optional_list_field_validation_alias_model_by_name():
assert resp.json() == {"file_sizes": None} assert resp.json() == {"file_sizes": None}
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_optional_list_field_validation_alias_model_by_alias(): def test_optional_list_field_validation_alias_model_by_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -388,12 +384,7 @@ def test_optional_list_field_validation_alias_model_by_alias():
files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")], files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")],
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: assert resp.json() == {"file_sizes": [8, 8]}
# AssertionError: assert 422 == 200
# AssertionError: {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]}
def test_optional_list_field_validation_alias_model_schema(): def test_optional_list_field_validation_alias_model_schema():
@ -414,7 +405,9 @@ def test_optional_list_field_validation_alias_model_schema():
# ===================================================================================== # =====================================================================================
# Field(alias=..., validation_alias=...) # Field(alias=..., validation_alias=...)
# Current situation: Works except lists (validation error - expected list, got str) # Current situation: Works (with fix #14303), but there is still an issue with `validation_alias`
# (values are extracted as extra parameters, not as declared parameters)
# ------------------------------ # ------------------------------
# required field # required field
@ -559,7 +552,7 @@ class ListFieldAliasAndValidationAliasModel(BaseModel):
"/list-field-alias-and-validation-alias-model", "/list-field-alias-and-validation-alias-model",
operation_id="list_field_alias_and_validation_alias_model", operation_id="list_field_alias_and_validation_alias_model",
) )
async def list_field_alias_and_validation_alias_model( # pragma: no cover (remove `no cover` when bug fixed) async def list_field_alias_and_validation_alias_model(
data: ListFieldAliasAndValidationAliasModel = File(...), data: ListFieldAliasAndValidationAliasModel = File(...),
): ):
return {"file_sizes": [file.size for file in data.files]} return {"file_sizes": [file.size for file in data.files]}
@ -589,7 +582,8 @@ def test_list_field_alias_and_validation_alias_model_by_alias():
assert "files_val_alias" in detail[0]["loc"] assert "files_val_alias" in detail[0]["loc"]
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_list_field_alias_and_validation_alias_model_by_validation_alias(): def test_list_field_alias_and_validation_alias_model_by_validation_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -597,12 +591,7 @@ def test_list_field_alias_and_validation_alias_model_by_validation_alias():
files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")], files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")],
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: assert resp.json() == {"file_sizes": [8, 8]}
# AssertionError: assert 422 == 200
# AssertionError: {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]}
def test_list_field_alias_and_validation_alias_model_schema(): def test_list_field_alias_and_validation_alias_model_schema():
@ -633,7 +622,7 @@ class OptionalListFieldAliasAndValidationAliasModel(BaseModel):
"/optional-list-field-alias-and-validation-alias-model", "/optional-list-field-alias-and-validation-alias-model",
operation_id="optional_list_field_alias_and_validation_alias_model", operation_id="optional_list_field_alias_and_validation_alias_model",
) )
async def optional_list_field_alias_and_validation_alias_model( # pragma: no cover (remove `no cover` when bug fixed) async def optional_list_field_alias_and_validation_alias_model(
data: OptionalListFieldAliasAndValidationAliasModel = File(...), data: OptionalListFieldAliasAndValidationAliasModel = File(...),
): ):
if data.files is None: if data.files is None:
@ -661,7 +650,8 @@ def test_optional_list_field_alias_and_validation_alias_model_by_alias():
assert resp.json() == {"file_sizes": None} assert resp.json() == {"file_sizes": None}
@pytest.mark.xfail(raises=AssertionError, strict=False) # This currently passes (with fix #14303), but it works incorrectly internally
# (values are extracted as extra parameters, not as declared parameters)
def test_optional_list_field_alias_and_validation_alias_model_by_validation_alias(): def test_optional_list_field_alias_and_validation_alias_model_by_validation_alias():
client = TestClient(app) client = TestClient(app)
resp = client.post( resp = client.post(
@ -669,12 +659,7 @@ def test_optional_list_field_alias_and_validation_alias_model_by_validation_alia
files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")], files=[("files_val_alias", b"content1"), ("files_val_alias", b"content2")],
) )
assert resp.status_code == 200, resp.text assert resp.status_code == 200, resp.text
# Fails with: assert resp.json() == {"file_sizes": [8, 8]}
# AssertionError: assert 422 == 200
# AssertionError: {"detail":[{"type":"list_type","loc":["body","files_val_alias"],"msg":"Input should be a valid list","input":{"filename":"upload","file":{"_file":{},"_max_size":1048576,"_rolled":false,"_TemporaryFileArgs":{"mode":"w+b","buffering":-1,"suffix":null,"prefix":null,"encoding":null,"newline":null,"dir":null,"errors":null}},"size":8,"headers":{"content-disposition":"form-data; name=\"files_val_alias\"; filename=\"upload\"","content-type":"application/octet-stream"},"_max_mem_size":1048576}}]}
# Uncomment when the assertion above passes:
# assert resp.json() == {"file_sizes": [8, 8]}
def test_optional_list_field_alias_and_validation_alias_model_schema(): def test_optional_list_field_alias_and_validation_alias_model_schema():

Loading…
Cancel
Save