Files
notifications-admin/tests/app/main/test_asset_fingerprinter.py
2023-10-26 08:33:59 -07:00

117 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# coding=utf-8
from app.asset_fingerprinter import AssetFingerprinter
class TestAssetFingerprint(object):
def test_url_format(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
get_file_content_mock.return_value = """
body {
font-family: nta;
}
""".encode(
"utf-8"
)
asset_fingerprinter = AssetFingerprinter(asset_root="/suppliers/static/")
assert (
asset_fingerprinter.get_url("application.css")
== "/suppliers/static/application.css?418e6f4a6cdf1142e45c072ed3e1c90a"
)
assert (
asset_fingerprinter.get_url("application-ie6.css")
== "/suppliers/static/application-ie6.css?418e6f4a6cdf1142e45c072ed3e1c90a"
)
def test_building_file_path(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
get_file_content_mock.return_value = """
document.write('Hello world!');
""".encode(
"utf-8"
)
fingerprinter = AssetFingerprinter()
fingerprinter.get_url("javascripts/application.js")
fingerprinter.get_asset_file_contents.assert_called_with(
"app/static/javascripts/application.js"
)
def test_hashes_are_consistent(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
get_file_content_mock.return_value = """
body {
font-family: nta;
}
""".encode(
"utf-8"
)
asset_fingerprinter = AssetFingerprinter()
assert asset_fingerprinter.get_asset_fingerprint(
"application.css"
) == asset_fingerprinter.get_asset_fingerprint("same_contents.css")
def test_hashes_are_different_for_different_files(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
asset_fingerprinter = AssetFingerprinter()
get_file_content_mock.return_value = """
body {
font-family: nta;
}
""".encode(
"utf-8"
)
css_hash = asset_fingerprinter.get_asset_fingerprint("application.css")
get_file_content_mock.return_value = """
document.write('Hello world!');
""".encode(
"utf-8"
)
js_hash = asset_fingerprinter.get_asset_fingerprint("application.js")
assert js_hash != css_hash
def test_hash_gets_cached(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
get_file_content_mock.return_value = """
body {
font-family: nta;
}
""".encode(
"utf-8"
)
fingerprinter = AssetFingerprinter()
assert (
fingerprinter.get_url("application.css")
== "/static/application.css?418e6f4a6cdf1142e45c072ed3e1c90a"
)
fingerprinter._cache["application.css"] = "a1a1a1"
assert fingerprinter.get_url("application.css") == "a1a1a1"
fingerprinter.get_asset_file_contents.assert_called_once_with(
"app/static/application.css"
)
def test_without_hash_if_requested(self, mocker):
fingerprinter = AssetFingerprinter()
assert fingerprinter.get_url(
"application.css",
with_querystring_hash=False,
) == ("/static/application.css")
assert fingerprinter._cache == {}
class TestAssetFingerprintWithUnicode(object):
def test_can_read_self(self):
"Ralphs apostrophe is a string containing a unicode character"
AssetFingerprinter(filesystem_path="tests/app/main/").get_url(
"test_asset_fingerprinter.py"
)