def test_jinja_static_missing(tmpworkdir): tmpworkdir.join('index.html').write("{{ 'foo.txt'|S }}") config = Config() config.setup() with pytest.raises(HarrierProblem): build(config) assert gettree(tmpworkdir) == {'index.html': "{{ 'foo.txt'|S }}", 'build': {}}
def test_execute_different_dir(tmpworkdir): mktree(tmpworkdir, { 'path/different_root': { 'foo': 'C_foo', 'lib/test.js': 'C_test.js', }, 'harrier.yml': """\ root: path/different_root execute: commands: - command: 'cp {ROOT}/lib/test.js {ROOT}/foobar.js' generates: ['foobar.js'] patterns: - ./lib/*""" }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'foo': 'C_foo', 'foobar.js': 'C_test.js'} assert gettree(tmpworkdir.join('path').join('different_root')) == { 'foo': 'C_foo', 'lib': { 'test.js': 'C_test.js', } }
def test_git_commit(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'X', 'harrier.yml': """\ root: . assets: active: True""" }) with patch('harrier.tools.subprocess.run') as mock_run: mock_run.return_value = CompletedProcess(args=[], returncode=0, stdout=b'commit sha1\n') config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'test.js': 'X', 'assets.json': """\ { "commit": "commit sha1", "files": { "test.js": "/test.js" } } """, } assert mock_run.called
def test_subdirectory_bad(tmpworkdir): tmpworkdir.join('test.js').write('X') tmpworkdir.join('harrier.yml').write("""\ subdirectory: /apples""") config = Config('harrier.yml') with pytest.raises(HarrierProblem): config.setup()
def test_jinja_static(tmpworkdir): tmpworkdir.join('foo.txt').write('hello') tmpworkdir.join('index.html').write("{{ 'foo.txt'|S }}") config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'index.html': 'foo.txt', 'foo.txt': 'hello'}
def test_simple_assets(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'var hello = 1;', 'deep/static/path': { 'styles.css': 'body {color: green}', }, 'harrier.yml': """\ root: . assets: active: True""" }) config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'test.js': 'var hello = 1;', 'deep': {'static': {'path': {'styles.css': 'body {color: green}'}}}, 'assets.json': """\ { "commit": "unknown", "files": { "deep/static/path/styles.css": "/deep/static/path/styles.css", "test.js": "/test.js" } } """, }
def test_build_sass(tmpworkdir): mktree(tmpworkdir, {'styles.sass': 'a\n b\n color: blue;'}) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'styles.css': 'a b {\n color: blue; }\n' }
def test_jinja_static_library_missing(tmpworkdir): tmpworkdir.join('index.html').write("{{ 'lib_file.js'|S('libs/lib_file.js') }}") config = Config() config.setup() with pytest.raises(HarrierProblem): build(config) assert gettree(tmpworkdir) == {'index.html': "{{ 'lib_file.js'|S('libs/lib_file.js') }}", 'build': {}}
def test_jinja_static_abs_url(tmpworkdir): tmpworkdir.mkdir('path') tmpworkdir.join('foo.txt').write('hello') tmpworkdir.join('path', 'index.html').write("{{ '/foo.txt'|S }}") config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'path': {'index.html': '/foo.txt'}, 'foo.txt': 'hello'}
def test_jinja_live(tmpworkdir): tmpworkdir.join('index.html').write('{{ 42 + 5 }}') config = Config() config.setup('build', True) build(config) assert gettree(tmpworkdir.join('build')) == { 'index.html': '47\n<script src="http://localhost:8000/livereload.js"></script>\n', }
def test_sass_precision_5(tmpworkdir): mktree(tmpworkdir, {'styles.scss': 'a { width: (100 / 6)px}'}) config = Config(config_dict={'sass': {'precision': 5}}) config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'styles.css': 'a {\n width: 16.66667 px; }\n' }
def test_json_seperate_root(tmpworkdir): root_dir = tmpworkdir.mkdir('foobar') tmpworkdir.join('harrier.json').write('{"root": "foobar"}') root_dir.join('bar').write('hello') config = Config('harrier.json') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'bar': 'hello'}
def test_subdirectory(tmpworkdir): tmpworkdir.join('test.js').write('X') tmpworkdir.join('harrier.yml').write("""\ subdirectory: apples""") config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'apples': {'test.js': 'X'}}
def test_bad_config_base_dir(tmpworkdir): tmpworkdir.join('harrier.yml').write('root: whatever') config = Config() with pytest.raises(HarrierProblem) as excinfo: config.setup() assert excinfo.value.args[0] == 'config root "whatever" does not exist relative to config file directory "."' with pytest.raises(HarrierProblem) as excinfo: config.setup(base_dir='basedir') assert excinfo.value.args[0] == 'config root "whatever" does not exist relative to directory "basedir"'
def test_build_scss_bad(tmpworkdir, logcap): logcap.set_level(logging.ERROR) mktree(tmpworkdir, {'styles.scss': 'x = 42'}) config = Config() config.setup() with pytest.raises(HarrierProblem) as excinfo: build(config) assert excinfo.value.args[0] == 'Error compiling SASS' assert logcap.log == """Error: Invalid CSS after "x": expected "{", was "= 42"
def simpleharrier(tmpworkdir): js = tmpworkdir.join("test.js") js.write("var hello = 1;") _config = Config() _config.setup() class Tmp: tmpdir = tmpworkdir config = _config return Tmp
def test_simple_build(tmpworkdir): tmpworkdir.join('test.js').write('var hello = 1;') tmpworkdir.join('harrier.yml').write("""\ root: . target: build: path: build""") config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'test.js': 'var hello = 1;'}
def test_jinja_static_library(tmpworkdir, library): # here the library directory is inside the config root, shouldn't make any difference mktree(tmpworkdir, { 'bower_components/package/path/lib_file.js': 'lib content', 'index.html': "{{ 'lib_file.js'|S('%s') }}" % library }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'index.html': 'lib_file.js', 'lib_file.js': 'lib content'}
def test_execute_not_found(tmpworkdir): tmpworkdir.mkdir('lib').join('test.js').write('XX') tmpworkdir.join('harrier.yml').write("""\ execute: commands: ['cp missing.js foobar.js'] patterns: - ./lib/*.js""") config = Config() config.setup() with pytest.raises(HarrierProblem) as excinfo: build(config) assert excinfo.value.args[0] == 'command "cp missing.js foobar.js" returned non-zero exit status 1'
def test_execute_bad_command(tmpworkdir, logcap): tmpworkdir.mkdir('lib').join('test.js').write('XX') tmpworkdir.join('harrier.yml').write("""\ execute: commands: ['foobar'] patterns: - ./lib/*.js""") config = Config() config.setup() with pytest.raises(HarrierProblem) as excinfo: build(config) assert excinfo.value.args[0] == 'problem executing "foobar"' assert logcap.log == "FileNotFoundError: [Errno 2] No such file or directory: 'foobar'\n"
def test_execute(tmpworkdir): tmpworkdir.mkdir('lib').join('test.js').write('XX') tmpworkdir.join('harrier.yml').write("""\ execute: commands: - command: 'cp lib/test.js foobar.js' generates: ['foobar.js'] patterns: - ./lib/*.js""") config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'foobar.js': 'XX'} assert tmpworkdir.join('foobar.js').check() is False
def test_execute_generate_missing(tmpworkdir): tmpworkdir.mkdir('lib').join('test.js').write('XX') tmpworkdir.join('harrier.yml').write("""\ execute: commands: - command: 'cp lib/test.js foobar.js' generates: ['missing.js'] patterns: - ./lib/*.js""") config = Config() config.setup() with pytest.raises(HarrierProblem) as excinfo: build(config) assert excinfo.value.args[0] == 'command "cp lib/test.js foobar.js" failed to generate missing.js'
def test_sass_exclude(tmpworkdir): mktree(tmpworkdir, { 'src': { '_foo.scss': '$primary-colour: #016997;', 'bar.scss': """\ @import 'foo'; body { color: $primary-colour; }""" }, 'harrier.yml': '\nroot: src' }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == {'bar.css': 'body {\n color: #016997; }\n'}
def test_simple_frontmatter(tmpworkdir): mktree(tmpworkdir, { 'src': { 'foo.html': """\ --- test_var: "carrot cake" --- I would like some {{ test_var }}.""", }, 'harrier.yml': '\nroot: src' }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'foo.html': 'I would like some carrot cake.', }
def test_extends_build(tmpworkdir): mktree(tmpworkdir, { 'src': { 'foo.html': 'start\n{% block hello %}{% endblock %}', 'bar.html': """ {% extends 'foo.html' %} {% block hello %} body {% endblock %}""", }, 'harrier.yml': '\nroot: src' }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'foo.html': 'start\n', 'bar.html': '\nstart\n\nbody\n', }
def test_yaml(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'var hello = 1;', 'harrier.yml': """\ root: . assets: file: assets.yaml active: True""" }) config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'test.js': 'var hello = 1;', 'assets.yaml': """\ commit: unknown files: test.js: /test.js """, }
def test_extends_exclude_build(tmpworkdir): mktree(tmpworkdir, { 'bower_components/package/path/lib_file.js': 'lib content', 'src': { '_foo.html': """\ {{ 'lib_file.js'|S('lib_file.js') }} start {% block hello %}{% endblock %}""", 'bar.html': """\ {% extends '_foo.html' %} {% block hello %} body {% endblock %}""", }, 'harrier.yml': '\nroot: src' }) config = Config() config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'bar.html': 'lib_file.js\nstart\n\nbody\n', 'lib_file.js': 'lib content' }
def test_url_root(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'var hello = 1;', 'harrier.yml': """\ root: . assets: url_root: http://www.example.com active: True""" }) config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'test.js': 'var hello = 1;', 'assets.json': """\ { "commit": "unknown", "files": { "test.js": "http://www.example.com/test.js" } } """, }
def test_assets_blank_subdirectory(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'var hello = 1;', 'harrier.yml': """\ root: . subdirectory: my_static assets: active: True""" }) config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'my_static': { 'test.js': 'var hello = 1;', 'assets.json': """\ { "commit": "unknown", "files": { "test.js": "/my_static/test.js" } } """}}
def test_url_root_full_path_subdirectory(tmpworkdir): mktree(tmpworkdir, { 'test.js': 'var hello = 1;', 'harrier.yml': """\ root: . subdirectory: my_static assets: active: True url_root: https://www.foobar.com/whatever""" }) config = Config('harrier.yml') config.setup() build(config) assert gettree(tmpworkdir.join('build')) == { 'my_static': { 'test.js': 'var hello = 1;', 'assets.json': """\ { "commit": "unknown", "files": { "test.js": "https://www.foobar.com/whatever/test.js" } } """}}