""" Tests for rendering functions in the mako pipeline. """ from unittest import skipUnless from unittest.mock import patch import ddt from django.conf import settings from django.test import TestCase from common.djangoapps.pipeline_mako import compressed_css, compressed_js, render_require_js_path_overrides class RequireJSPathOverridesTest(TestCase): """Test RequireJS path overrides. """ OVERRIDES = { 'jquery': 'common/js/vendor/jquery.js', 'text': 'js/vendor/text.js', 'backbone': 'common/js/vendor/backbone.js' } OVERRIDES_JS = [ "" ] def test_requirejs_path_overrides(self): result = render_require_js_path_overrides(self.OVERRIDES) # To make the string comparision easy remove the whitespaces self.assertCountEqual(list(map(str.strip, result.splitlines())), self.OVERRIDES_JS) @skipUnless(settings.ROOT_URLCONF == 'lms.urls', 'Test only valid in LMS') @ddt.ddt class PipelineRenderTest(TestCase): """Test individual pipeline rendering functions. """ @staticmethod def mock_staticfiles_lookup(path): return '/static/' + path @patch('common.djangoapps.static_replace.try_staticfiles_lookup', side_effect=mock_staticfiles_lookup) @ddt.data( (True,), (False,), ) def test_compressed_css(self, pipeline_enabled, mock_staticfiles_lookup): # lint-amnesty, pylint: disable=unused-argument """ Verify the behavior of compressed_css, with the pipeline both enabled and disabled. """ pipeline = settings.PIPELINE.copy() pipeline['PIPELINE_ENABLED'] = pipeline_enabled with self.settings(PIPELINE=pipeline): # Verify the default behavior css_include = compressed_css('style-main-v1') assert 'lms-main-v1.css' in css_include # Verify that raw keyword causes raw URLs to be emitted css_include = compressed_css('style-main-v1', raw=True) assert 'lms-main-v1.css?raw' in css_include @patch('django.contrib.staticfiles.storage.staticfiles_storage.exists', return_value=True) @patch('common.djangoapps.static_replace.try_staticfiles_lookup', side_effect=mock_staticfiles_lookup) def test_compressed_js(self, mock_staticfiles_lookup, mock_staticfiles_exists): # lint-amnesty, pylint: disable=unused-argument """ Verify the behavior of compressed_css, with the pipeline both enabled and disabled. """ pipeline = settings.PIPELINE.copy() # Verify that a single JS file is rendered with the pipeline enabled pipeline['PIPELINE_ENABLED'] = True with self.settings(PIPELINE=pipeline): js_include = compressed_js('base_application') assert 'lms-base-application.js' in js_include # Verify that multiple JS files are rendered with the pipeline disabled pipeline['PIPELINE_ENABLED'] = False with self.settings(PIPELINE=pipeline): js_include = compressed_js('base_application') assert '/static/js/src/logger.js' in js_include