Files
notifications-admin/tests/app/main/test_asset_fingerprinter.py
Chris Hill-Scott 643dca0071 Use asset fingerprinter to serve images
This means we can cache them forever, and only invalidate the cache
when the image changes.
2018-11-29 14:31:31 +00:00

97 lines
3.6 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' # noqa
)
assert (
asset_fingerprinter.get_url('application-ie6.css') ==
'/suppliers/static/application-ie6.css?418e6f4a6cdf1142e45c072ed3e1c90a' # noqa
)
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'
)
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')