from __future__ import absolute_import
from __future__ import unicode_literals

import pytest

from pre_commit_hooks.check_yaml import check_yaml
from testing.util import get_resource_path


@pytest.mark.parametrize(
    ('filename', 'expected_retval'), (
        ('bad_yaml.notyaml', 1),
        ('ok_yaml.yaml', 0),
    ),
)
def test_check_yaml(filename, expected_retval):
    ret = check_yaml([get_resource_path(filename)])
    assert ret == expected_retval


def test_check_yaml_allow_multiple_documents(tmpdir):
    f = tmpdir.join('test.yaml')
    f.write('---\nfoo\n---\nbar\n')

    # should failw without the setting
    assert check_yaml((f.strpath,))

    # should pass when we allow multiple documents
    assert not check_yaml(('--allow-multiple-documents', f.strpath))


def test_fails_even_with_allow_multiple_documents(tmpdir):
    f = tmpdir.join('test.yaml')
    f.write('[')
    assert check_yaml(('--allow-multiple-documents', f.strpath))
