Ejemplo n.º 1
0
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"
  }
}
""",
    }
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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': {}}
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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',
        }
    }
Ejemplo n.º 6
0
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'}
Ejemplo n.º 7
0
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'
    }
Ejemplo n.º 8
0
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'
    }
Ejemplo n.º 9
0
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'}
Ejemplo n.º 10
0
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'}}
Ejemplo n.º 11
0
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': {}}
Ejemplo n.º 12
0
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'}
Ejemplo n.º 13
0
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',
    }
Ejemplo n.º 14
0
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"
Ejemplo n.º 15
0
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"'
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
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;'}
Ejemplo n.º 18
0
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'}
Ejemplo n.º 19
0
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'
Ejemplo n.º 20
0
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"
Ejemplo n.º 21
0
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
Ejemplo n.º 22
0
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'
Ejemplo n.º 23
0
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'}
Ejemplo n.º 24
0
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.',
    }
Ejemplo n.º 25
0
def test_build_simple_som(tmpdir):
    mktree(
        tmpdir, {
            'dist/theme/assets/whatever.1234567.png': '**',
            'pages': {
                'foobar.md': '# hello\n\nthis is a test foo: {{ foo }}',
                'posts/2032-06-01-testing.html': '# testing',
                'static/image.png': '*',
            },
            'theme/templates/main.jinja': 'main, content:\n\n {{ content }}',
        })
    config = Config(source_dir=str(tmpdir),
                    tmp_dir=str(tmpdir.join('tmp')),
                    foo='bar',
                    defaults={'/posts/*': {
                        'uri': '/foobar/{slug}.html'
                    }})

    pages = build_pages(config)
    content_templates(pages.values(), config)
    source_dir = Path(tmpdir)
    # debug(som)
    assert {
        '/foobar.md': {
            'infile': source_dir / 'pages/foobar.md',
            'content_template': 'content/foobar.md',
            'title': 'Foobar',
            'slug': 'foobar',
            'created': CloseToNow(),
            'uri': '/foobar/',
            'template': None,
            'content': ('# hello\n'
                        '\n'
                        'this is a test foo: {{ foo }}'),
            'pass_through': False,
        },
        '/posts/2032-06-01-testing.html': {
            'infile': source_dir / 'pages/posts/2032-06-01-testing.html',
            'content_template': 'content/posts/2032-06-01-testing.html',
            'title': 'Testing',
            'slug': 'testing',
            'created': datetime(2032, 6, 1, 0, 0),
            'uri': '/foobar/testing.html',
            'template': None,
            'content': '# testing',
            'pass_through': False,
        },
        '/static/image.png': {
            'infile': source_dir / 'pages/static/image.png',
            'title': 'image.png',
            'slug': 'image.png',
            'created': CloseToNow(),
            'uri': '/static/image.png',
            'pass_through': True,
        }
    } == pages
Ejemplo n.º 26
0
def test_simple_render(tmpdir):
    foo_page = '# hello\n\nthis is a test foo: {{ foo }}'
    mktree(
        tmpdir, {
            'pages': {
                'foobar.md': foo_page,
                'spam.html': '# SPAM',
                'favicon.ico': '*',
            },
            'theme/templates/main.jinja': 'main, content:\n\n{{ content }}',
            'tmp/content/foobar.md': foo_page,
        })
    config = Config(
        source_dir=str(tmpdir),
        tmp_dir=str(tmpdir.join('tmp')),
        foo='bar',
    )

    som = {
        'pages': {
            'foobar.md': {
                'uri': '/foobar.html',
                'infile': config.pages_dir / 'foobar.md',
                'template': 'main.jinja',
                'content_template': Path('content') / 'foobar.md',
            },
            'favicon.ico': {
                'uri': '/favicon.ico',
                'infile': config.pages_dir / 'favicon.ico',
            },
        }
    }
    expected_tree = {
        'foobar.html': ('main, content:\n\n'
                        '<h1 id="1-hello">hello</h1>\n\n'
                        '<p>this is a test foo: </p>\n'),
        'favicon.ico':
        '*',
    }
    assert not tmpdir.join('dist').check()

    assert render_pages(config, som) is None
    assert gettree(tmpdir.join('dist')) == expected_tree

    tmpdir.join('dist').remove(rec=1)
    assert not tmpdir.join('dist').check()

    cache = render_pages(config, som, {})
    assert gettree(tmpdir.join('dist')) == expected_tree
    assert len(cache) == 2

    tmpdir.join('dist').remove(rec=1)
    assert not tmpdir.join('dist').check()

    render_pages(config, som, cache)
    assert gettree(tmpdir.join('dist')) != expected_tree
Ejemplo n.º 27
0
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',
    }
Ejemplo n.º 28
0
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
""",
    }
Ejemplo n.º 29
0
def test_harrier_watcher(tmpdir):
    mktree(tmpdir, {
        'pages/foobar.md': '# hello',
        'theme/templates/main.jinja': 'main:\n {{ content }}',
    })
    harrier.dev.CONFIG = Config(source_dir=tmpdir)
    watcher = HarrierWatcher(Path(tmpdir))
    assert not watcher.should_watch_dir(Entry(tmpdir.join('foobar')))
    assert not watcher.should_watch_dir(Entry(tmpdir.join('__pycache__')))
    assert watcher.should_watch_dir(Entry(tmpdir.join('pages')))
    assert watcher.should_watch_dir(Entry(tmpdir.join('pages/whatever')))
    harrier.dev.CONFIG = None
Ejemplo n.º 30
0
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'
    }
Ejemplo n.º 31
0
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"
  }
}
"""}}
Ejemplo n.º 32
0
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"
  }
}
""",
    }
Ejemplo n.º 33
0
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"
  }
}
"""}}
Ejemplo n.º 34
0
def test_placeholders_error(tmpdir):
    mktree(tmpdir, {
        'pages': {
            'posts/2032-06-01-testing.html': '# testing',
        },
    })
    config = Config(
        source_dir=str(tmpdir),
        tmp_dir=str(tmpdir.join('tmp')),
        foo='bar',
        defaults={'/posts/*': {
            'testing': '{{ title }}-{{ foobar }}',
        }})

    with pytest.raises(HarrierProblem):
        build_pages(config)
Ejemplo n.º 35
0
def test_build_default_placeholders(tmpdir):
    mktree(tmpdir, {
        'pages': {
            'posts/2032-06-01-testing.html': '# testing',
        },
    })
    config = Config(source_dir=str(tmpdir),
                    tmp_dir=str(tmpdir.join('tmp')),
                    foo='bar',
                    defaults={
                        '/posts/*': {
                            'uri':
                            '/foobar/{slug}.html',
                            'test_attr':
                            'Brain J',
                            'str_attr':
                            '{{ title }}-{{ test_attr }}',
                            'dict_attrs': {
                                'd_attr': '{{ test_attr }}',
                                'd_foo': 'foo',
                            },
                            'list_attrs': ['foo', 'bar', '{{ title }}'],
                            'list_of_dicts_attr': [{
                                'a_key': '{{ title }}-{{ test_attr }}',
                                'b_key': 'foo bar',
                            }]
                        }
                    })

    pages = build_pages(config)
    content_templates(pages.values(), config)
    source_dir = Path(tmpdir)
    assert {
        '/posts/2032-06-01-testing.html': {
            'infile':
            source_dir / 'pages/posts/2032-06-01-testing.html',
            'content_template':
            'content/posts/2032-06-01-testing.html',
            'title':
            'Testing',
            'slug':
            'testing',
            'created':
            datetime(2032, 6, 1, 0, 0),
            'uri':
            '/foobar/testing.html',
            'str_attr':
            'Testing-Brain J',
            'test_attr':
            'Brain J',
            'dict_attrs': {
                'd_attr': 'Brain J',
                'd_foo': 'foo'
            },
            'list_attrs': ['foo', 'bar', 'Testing'],
            'list_of_dicts_attr': [{
                'a_key': 'Testing-Brain J',
                'b_key': 'foo bar',
            }],
            'template':
            None,
            'content':
            '# testing',
            'pass_through':
            False,
        },
    } == pages