def _test_offline(self, engine):
        """
        Test that a CommandError is raised with DEBUG being False as well as
        True, as otherwise errors in configuration will never show in
        production.
        """
        with self.settings(DEBUG=True):
            self.assertRaises(CommandError,
                              CompressCommand().compress,
                              engine=engine)

        with self.settings(DEBUG=False):
            self.assertRaises(CommandError,
                              CompressCommand().compress,
                              engine=engine)
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     manifest = get_offline_manifest()
     manifest[list(manifest)[0]] = ""
     self.assertEqual(self._render_template(engine), "\n")
Example #3
0
 def test_offline(self):
     count, result = CompressCommand().compress()
     self.assertEqual(2, count)
     self.assertEqual(result, [
         u'<link rel="stylesheet" href="/media/CACHE/css/a55e1cf95000.css" type="text/css">\n',
         u'<script type="text/javascript" src="/media/CACHE/js/bf53fa5b13e2.js" charset="utf-8"></script>',
     ])
Example #4
0
    def _test_offline(self, engine):
        count, result = CompressCommand().compress(log=self.log,
                                                   verbosity=self.verbosity,
                                                   engine=engine)

        if engine == "django":
            self.assertEqual(2, count)
        else:
            # Because we use env.parse in Jinja2Parser, the engine does not
            # actually load the "extends" and "includes" templates, and so
            # it is unable to detect that they are missing. So all the "compress"
            # nodes are processed correctly.
            self.assertEqual(4, count)
            self.assertEqual(engine, "jinja2")
            self.assertIn(
                '<link rel="stylesheet" href="/static/CACHE/css/78bd7a762e2d.css" type="text/css" />',
                result)
            self.assertIn(
                '<link rel="stylesheet" href="/static/CACHE/css/e31030430724.css" type="text/css" />',
                result)

        self.assertIn(
            '<script type="text/javascript" src="/static/CACHE/js/3872c9ae3f42.js"></script>',
            result)
        self.assertIn(
            '<script type="text/javascript" src="/static/CACHE/js/cd8870829421.js"></script>',
            result)
Example #5
0
 def test_offline(self):
     count, result = CompressCommand().compress()
     self.assertEqual(2, count)
     self.assertEqual([
         u'<link rel="stylesheet" href="/media/CACHE/css/cd579b7deb7d.css" type="text/css">\n',
         u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js" charset="utf-8"></script>',
     ], result)
Example #6
0
 def test_offline(self):
     count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
     self.assertEqual(1, count)
     self.assertEqual([
         u'<script type="text/javascript" src="/media/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
     ], result)
     rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
     self.assertEqual(rendered_template, "".join(result) + "\n")
Example #7
0
    def test_offline(self):
        """
        Test that a CommandError is raised with DEBUG being False as well as
        True, as otherwise errors in configuration will never show in
        production.
        """
        self._old_debug = settings.DEBUG

        try:
            settings.DEBUG = True
            self.assertRaises(CommandError, CompressCommand().compress)

            settings.DEBUG = False
            self.assertRaises(CommandError, CompressCommand().compress)

        finally:
            settings.DEBUG = self._old_debug
Example #8
0
 def test_offline(self):
     count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
     self.assertEqual(2, count)
     self.assertEqual([
         u'<script type="text/javascript" src="/media/CACHE/js/ced14aec5856.js"></script>',
         u'<script type="text/javascript" src="/media/CACHE/js/7c02d201f69d.js"></script>'
     ], result)
     rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
     self.assertEqual(rendered_template, "".join(result) + "\n")
Example #9
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(2, count)
     self.assertEqual([
         self._render_script('9717f9c7e9ff'),
         self._render_script('68c645740177')
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result, ''))
Example #10
0
 def _test_offline(self, engine):
     hashes = self.expected_hash
     if not isinstance(hashes, (list, tuple)):
         hashes = [hashes]
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(len(hashes), count)
     self.assertEqual([self._render_script(h) for h in hashes], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result))
Example #11
0
 def test_offline(self):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity)
     self.assertEqual(2, count)
     self.assertIn(
         u'<script type="text/javascript" src="/static/CACHE/js/3872c9ae3f42.js"></script>',
         result)
     self.assertIn(
         u'<script type="text/javascript" src="/static/CACHE/js/cd8870829421.js"></script>',
         result)
Example #12
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(2, count)
     self.assertEqual([
         self._render_script('bfcec76e0f28'),
         self._render_script('817b5defb197')
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result, ''))
Example #13
0
    def _test_offline(self, engine, verbosity=0):
        # Test that we are properly generating ImportError when
        # COMPRESS_OFFLINE_CONTEXT looks like a function but can't be imported
        # for whatever reason.

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT='invalid_mod.invalid_func'):
            # Path with invalid module name -- ImportError:
            self.assertRaises(ImportError,
                              CompressCommand().handle_inner,
                              engines=[engine])

        with self.settings(COMPRESS_OFFLINE_CONTEXT='compressor'):
            # Valid module name only without function -- AttributeError:
            self.assertRaises(ImportError,
                              CompressCommand().handle_inner,
                              engines=[engine])

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT='compressor.tests.invalid_function'):
            # Path with invalid function name -- AttributeError:
            self.assertRaises(ImportError,
                              CompressCommand().handle_inner,
                              engines=[engine])

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT='compressor.tests.test_offline'):
            # Path without function attempts call on module -- TypeError:
            self.assertRaises(ImportError,
                              CompressCommand().handle_inner,
                              engines=[engine])

        valid_path = 'compressor.tests.test_offline.offline_context_generator'
        with self.settings(COMPRESS_OFFLINE_CONTEXT=valid_path):
            # Valid path to generator function -- no ImportError:

            try:
                CompressCommand().handle_inner(engines=[engine],
                                               verbosity=verbosity)
            except ImportError:
                self.fail('Valid path to offline context generator must'
                          ' not raise ImportError.')
Example #14
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(len(self.expected_hash), count)
     for expected_hash, template in zip(self.expected_hash_offline,
                                        self.templates):
         expected = self._render_script(expected_hash)
         self.assertIn(expected, result)
         rendered_template = self._render_template(template, engine)
         self.assertEqual(rendered_template,
                          self._render_result([expected]))
Example #15
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     self.assertEqual(2, count)
     self.assertEqual([
         self._render_script('9717f9c7e9ff'),
         self._render_script('68c645740177')
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result, ''))
Example #16
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     self.assertEqual(1, count)
     self.assertEqual([
         '<script type="text/javascript" src="/static/CACHE/js/'
         'ea3267f3e9dd.js"></script>'
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, '\n' + result[0] + '\n')
Example #17
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     # Only one block compressed, the second identical one was skipped.
     self.assertEqual(1, count)
     # Only 1 <script> block in returned result as well.
     self.assertEqual([self._render_script('822ac7501287')], result)
     rendered_template = self._render_template(engine)
     # But rendering the template returns both (identical) scripts.
     self.assertEqual(rendered_template,
                      self._render_result(result * 2, ''))
Example #18
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     self.assertEqual(2, count)
     self.assertEqual([
         '<script type="text/javascript" src="/static/CACHE/js/ced14aec5856.js"></script>',
         '<script type="text/javascript" src="/static/CACHE/js/7c02d201f69d.js"></script>'
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, "".join(result) + "\n")
Example #19
0
 def _test_deleting_manifest_does_not_affect_rendering(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     get_offline_manifest()
     manifest_path = os.path.join('CACHE', 'manifest.json')
     if default_storage.exists(manifest_path):
         default_storage.delete(manifest_path)
     self.assertEqual(1, count)
     self.assertEqual([self._render_script(self.expected_hash)], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result))
Example #20
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     self.assertEqual(len(self.expected_hash), count)
     for expected_hash, template in zip(self.expected_hash, self.templates):
         expected_output = '<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>' % (
             expected_hash, )
         self.assertIn(expected_output, result)
         rendered_template = self._render_template(template, engine)
         self.assertEqual(rendered_template, expected_output + '\n')
Example #21
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     self.assertEqual(1, count)
     self.assertEqual([
         '<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>'
         % (self.expected_hash, ),
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, "".join(result) + "\n")
Example #22
0
    def _test_offline(self, engine):
        # Test that we are properly generating ImportError when
        # COMPRESS_OFFLINE_CONTEXT looks like a function but can't be imported
        # for whatever reason.

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT="invalid_mod.invalid_func"):
            # Path with invalid module name -- ImportError:
            self.assertRaises(ImportError,
                              CompressCommand().compress,
                              engine=engine)

        with self.settings(COMPRESS_OFFLINE_CONTEXT="compressor"):
            # Valid module name only without function -- AttributeError:
            self.assertRaises(ImportError,
                              CompressCommand().compress,
                              engine=engine)

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT="compressor.tests.invalid_function"):
            # Path with invalid function name -- AttributeError:
            self.assertRaises(ImportError,
                              CompressCommand().compress,
                              engine=engine)

        with self.settings(
                COMPRESS_OFFLINE_CONTEXT="compressor.tests.test_offline"):
            # Path without function attempts call on module -- TypeError:
            self.assertRaises(ImportError,
                              CompressCommand().compress,
                              engine=engine)

        valid_path = "compressor.tests.test_offline.offline_context_generator"
        with self.settings(COMPRESS_OFFLINE_CONTEXT=valid_path):
            # Valid path to generator function -- no ImportError:

            try:
                CompressCommand().compress(engine=engine)
            except ImportError:
                self.fail("Valid path to offline context generator must"
                          " not raise ImportError.")
Example #23
0
 def test_offline_with_context(self):
     self._old_offline_context = settings.COMPRESS_OFFLINE_CONTEXT
     settings.COMPRESS_OFFLINE_CONTEXT = {
         'color': 'blue',
     }
     count, result = CompressCommand().compress()
     self.assertEqual(2, count)
     self.assertEqual(result, [
         u'<link rel="stylesheet" href="/media/CACHE/css/8a2405e029de.css" type="text/css">\n',
         u'<script type="text/javascript" src="/media/CACHE/js/bf53fa5b13e2.js" charset="utf-8"></script>',
     ])
     settings.COMPRESS_OFFLINE_CONTEXT = self._old_offline_context
Example #24
0
 def test_offline_with_context(self):
     self._old_offline_context = settings.COMPRESS_OFFLINE_CONTEXT
     settings.COMPRESS_OFFLINE_CONTEXT = {
         'color': 'blue',
     }
     count, result = CompressCommand().compress()
     self.assertEqual(2, count)
     self.assertEqual([
         u'<link rel="stylesheet" href="/media/CACHE/css/ee62fbfd116a.css" type="text/css">\n',
         u'<script type="text/javascript" src="/media/CACHE/js/0a2bb9a287c0.js" charset="utf-8"></script>',
     ], result)
     settings.COMPRESS_OFFLINE_CONTEXT = self._old_offline_context
Example #25
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(3, count)
     self.assertEqual([
         self._render_script('2c1f0f85a90d'),
         self._render_script('8b594c4f7264'),
         self._render_script('e0e424964c8c')
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template,
                      self._render_result([result[0], result[2]], ''))
Example #26
0
 def test_deleting_manifest_does_not_affect_rendering(self):
     count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
     get_offline_manifest()
     manifest_path = os.path.join('CACHE', 'manifest.json')
     if default_storage.exists(manifest_path):
         default_storage.delete(manifest_path)
     self.assertEqual(1, count)
     self.assertEqual([
         u'<script type="text/javascript" src="/media/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
     ], result)
     rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
     self.assertEqual(rendered_template, "".join(result) + "\n")
Example #27
0
 def _test_deleting_manifest_does_not_affect_rendering(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     get_offline_manifest()
     manifest_path = os.path.join("CACHE", "manifest.json")
     if default_storage.exists(manifest_path):
         default_storage.delete(manifest_path)
     self.assertEqual(1, count)
     self.assertEqual([self._render_script(self.expected_hash)], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template, self._render_result(result))
Example #28
0
 def _test_offline(self, engine):
     count, result = CompressCommand().handle_inner(engines=[engine],
                                                    verbosity=0)
     self.assertEqual(3, count)
     self.assertEqual([
         self._render_script('76a82cfab9ab'),
         self._render_script('7219642b8ab4'),
         self._render_script('567bb77b13db')
     ], result)
     rendered_template = self._render_template(engine)
     self.assertEqual(rendered_template,
                      self._render_result([result[0], result[2]], ''))
Example #29
0
 def _test_offline(self, engine):
     count, result = CompressCommand().compress(log=self.log,
                                                verbosity=self.verbosity,
                                                engine=engine)
     # Only one block compressed, the second identical one was skipped.
     self.assertEqual(1, count)
     # Only 1 <script> block in returned result as well.
     self.assertEqual([self._render_script("a432b6ddb2c4")], result)
     rendered_template = self._render_template(engine)
     # But rendering the template returns both (identical) scripts.
     self.assertEqual(rendered_template,
                      self._render_result(result * 2, ""))
Example #30
0
    def _test_offline(self, engine):
        count, result = CompressCommand().handle_inner(engines=[engine],
                                                       verbosity=0)
        self.assertEqual(1, count)
        self.assertEqual([self._render_script(self.expected_hash)], result)
        self.assertEqual(self._render_template(engine),
                         self._render_result(result))

        # Changing STATIC_URL setting doesn't break things despite that
        # offline compression was made with different STATIC_URL.
        with self.settings(STATIC_URL='/another/static/url/'):
            self.assertEqual(self._render_template(engine),
                             self._render_result(result))