from django.test import SimpleTestCase
from django.test.utils import override_settings
from compressor.conf import settings
from compressor.conf import CompressorConf


default_css_filters = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.rCSSMinFilter'
]
default_js_filters = ['compressor.filters.jsmin.rJSMinFilter']


def create_conf(**attrs):
    # Creating a new appconf.AppConf subclass will cause
    # its configuration to be resolved.
    # We use this to force the CompressorConf to be re-resolved,
    # when we've changed the settings.
    attrs['__module__'] = None
    return type(
        'TestCompressorConf',
        (CompressorConf, ),
        attrs)


class ConfTestCase(SimpleTestCase):
    def test_filter_defaults(self):
        # This used the settings from compressor/test_settings.py
        # which contains no values for filers and therefore uses the defaults.
        self.assertEqual(settings.COMPRESS_FILTERS['css'], default_css_filters)
        self.assertEqual(settings.COMPRESS_FILTERS['js'], default_js_filters)

    @override_settings(COMPRESS_FILTERS=dict(css=['ham'], js=['spam']))
    def test_filters_by_main_setting(self):
        conf = create_conf()
        self.assertEqual(conf.FILTERS['css'], ['ham'])
        self.assertEqual(conf.FILTERS['js'], ['spam'])
