Files
notifications-admin/tests/app/main/test_asset_fingerprinter.py
T

117 lines
4.0 KiB
Python
Raw Normal View History

2016-02-10 15:47:00 +00:00
# coding=utf-8
from app.asset_fingerprinter import AssetFingerprinter
class TestAssetFingerprint(object):
2017-07-07 14:16:18 +01:00
def test_url_format(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
2016-02-10 15:47:00 +00:00
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"
2016-02-10 15:47:00 +00:00
)
assert (
asset_fingerprinter.get_url("application-ie6.css")
== "/suppliers/static/application-ie6.css?418e6f4a6cdf1142e45c072ed3e1c90a"
2016-02-10 15:47:00 +00:00
)
2017-07-07 14:16:18 +01:00
def test_building_file_path(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
2016-02-10 15:47:00 +00:00
get_file_content_mock.return_value = """
document.write('Hello world!');
""".encode(
"utf-8"
)
2016-02-10 15:47:00 +00:00
fingerprinter = AssetFingerprinter()
fingerprinter.get_url("javascripts/application.js")
2016-02-10 15:47:00 +00:00
fingerprinter.get_asset_file_contents.assert_called_with(
"app/static/javascripts/application.js"
2016-02-10 15:47:00 +00:00
)
2017-07-07 14:16:18 +01:00
def test_hashes_are_consistent(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
2016-02-10 15:47:00 +00:00
)
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")
2016-02-10 15:47:00 +00:00
def test_hashes_are_different_for_different_files(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
2016-02-10 15:47:00 +00:00
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")
2016-02-10 15:47:00 +00:00
get_file_content_mock.return_value = """
document.write('Hello world!');
""".encode(
"utf-8"
2016-02-10 15:47:00 +00:00
)
js_hash = asset_fingerprinter.get_asset_fingerprint("application.js")
assert js_hash != css_hash
2016-02-10 15:47:00 +00:00
2017-07-07 14:16:18 +01:00
def test_hash_gets_cached(self, mocker):
get_file_content_mock = mocker.patch.object(
AssetFingerprinter, "get_asset_file_contents"
)
2016-02-10 15:47:00 +00:00
get_file_content_mock.return_value = """
body {
font-family: nta;
}
""".encode(
"utf-8"
)
2016-02-10 15:47:00 +00:00
fingerprinter = AssetFingerprinter()
assert (
fingerprinter.get_url("application.css")
== "/static/application.css?418e6f4a6cdf1142e45c072ed3e1c90a"
2016-02-10 15:47:00 +00:00
)
fingerprinter._cache["application.css"] = "a1a1a1"
assert fingerprinter.get_url("application.css") == "a1a1a1"
2016-02-10 15:47:00 +00:00
fingerprinter.get_asset_file_contents.assert_called_once_with(
"app/static/application.css"
2016-02-10 15:47:00 +00:00
)
2020-12-29 13:38:27 +00:00
def test_without_hash_if_requested(self, mocker):
fingerprinter = AssetFingerprinter()
assert fingerprinter.get_url(
"application.css",
2020-12-29 13:38:27 +00:00
with_querystring_hash=False,
) == ("/static/application.css")
2020-12-29 13:38:27 +00:00
assert fingerprinter._cache == {}
2016-02-10 15:47:00 +00:00
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"
)