Merge branch 'request-no-cache' into 'v3'

Request no cache

See merge request openflexure/openflexure-microscope-server!361
This commit is contained in:
Julian Stirling 2025-08-14 19:59:58 +00:00
commit bfdbbb9ad2
2 changed files with 73 additions and 2 deletions

View file

@ -0,0 +1,62 @@
"""Test the code that mounts static files to the server, without creating a server."""
import pytest
from starlette.responses import FileResponse
from openflexure_microscope_server.server import serve_static_files
@pytest.fixture
def mock_app(mocker):
"""Return a mock FastAPI app.
This is just a mock, where the get method returns a mock.
"""
wrapper = mocker.Mock()
app = mocker.Mock()
app.get.return_value = wrapper
return app
@pytest.mark.parametrize(
"filename, allow_cache",
[
["foo", False],
["woff2.foo", False],
["strange_file_ending_in_woff2", False],
["fontfile.woff2", True],
],
)
def test_add_static_file(filename, allow_cache, mock_app):
"""Test running add_static_file with both font and non-font files.
This should creates a wrapped function that returns a FileResponse, this
should be have the path on disk and the no cache headers if not a woff2 font.
"""
wrapper = mock_app.get.return_value
serve_static_files.add_static_file(mock_app, fname=filename, folder="bar")
# It is called once
assert mock_app.get.call_count == 1
# Check args for the get decorator
assert len(mock_app.get.call_args.args) == 1
assert mock_app.get.call_args.args[0] == "/" + filename
assert len(mock_app.get.call_args.kwargs) == 2
assert mock_app.get.call_args.kwargs["response_class"] == FileResponse
assert not mock_app.get.call_args.kwargs["include_in_schema"]
# Checked wrapper and the the returned wrapped function
assert wrapper.call_count == 1
wrapped = wrapper.call_args.args[0]
# the wrapped function should return the file response
response = wrapped()
assert isinstance(response, FileResponse)
assert response.path == "bar/" + filename
# The file response headers always have some standard data, and if the file is
# allowed to be cached it should also have the no_cache data
for key, value in serve_static_files.NO_CACHE_HEADERS.items():
if allow_cache:
assert key not in response.headers
else:
# Check headers that refuse caching are present
assert key in response.headers
assert response.headers[key] == value