def test_build_work_items(fs):

    backlog = helpers.Backlog()
    backlog._build_epic = MagicMock(return_value=None)
    work_items = backlog._build_work_items(
        MockedFiles._mock_parsed_file_list(), MockedFiles._mock_config())

    backlog._build_epic.assert_any_call(
        MockedFiles._mock_parsed_file_list()[0], MockedFiles._mock_config())
    backlog._build_epic.assert_any_call(
        MockedFiles._mock_parsed_file_list()[1], MockedFiles._mock_config())
    backlog._build_epic.assert_any_call(
        MockedFiles._mock_parsed_file_list()[2], MockedFiles._mock_config())
    assert work_items == []

    epic = entities.Epic()
    epic.title = "Foobar"
    epic.description = "Some Description"
    backlog._build_epic = MagicMock(return_value=epic)
    work_items = backlog._build_work_items(
        [MockedFiles._mock_parsed_file_list()[0]], MockedFiles._mock_config())
    assert len(work_items) == 1
    assert work_items[0] == epic
    assert work_items[0].title == "Foobar"
    assert work_items[0].description == "Some Description"
def test_validate_roles():
    v = helpers.Validation()
    assert v._validate_roles(
        './somepath/metadata.json', {}, MockedFiles._mock_config()
    ) == (False,
          "'roles' property not found in metadata './somepath/metadata.json'")
    assert v._validate_roles('./somepath/metadata.json', {
        'roles': 'lorem ipsum'
    }, MockedFiles._mock_config()) == (
        False,
        "'roles' property is not in correct format in metadata './somepath/metadata.json'"
    )
    assert v._validate_roles('./somepath/metadata.json', {
        'roles': ['lorem ipsum']
    }, MockedFiles._mock_config()) == (
        False,
        "invalid role 'lorem ipsum' in metadata './somepath/metadata.json'")
    assert v._validate_roles('./somepath/metadata.json', {'roles': ['AppDev']},
                             MockedFiles._mock_config()) is True
def test_get_and_validate_json(monkeypatch, fs):
    MockedFiles._mock_correct_file_system(fs)

    def mock_file_system_read_file_returns_None(*args, **kwargs):
        return None

    def mock_parser_json_returns_json(*args, **kwargs):
        content = None
        with open('./workitems/correct/01_epic/metadata.json', 'r') as reader:
            content = reader.read()
            reader.close()

        return json.loads(content)

    def mock_validation_validate_metadata_returns_True(*args, **kwargs):
        return True

    def mock_validation_validate_metadata_returns_False(*args, **kwargs):
        return (False, "there's an error")

    monkeypatch.setattr(helpers.FileSystem, "read_file",
                        mock_file_system_read_file_returns_None)
    monkeypatch.setattr(helpers.Parser, "parse_json",
                        mock_parser_json_returns_json)

    backlog = helpers.Backlog()

    monkeypatch.setattr(helpers.Validation, "validate_metadata",
                        mock_validation_validate_metadata_returns_True)
    assert backlog._get_and_validate_json(
        '.', MockedFiles._mock_config()) == mock_parser_json_returns_json()

    monkeypatch.setattr(helpers.Validation, "validate_metadata",
                        mock_validation_validate_metadata_returns_False)
    with pytest.raises(ValueError) as exc:
        backlog._get_and_validate_json('.', MockedFiles._mock_config())
    assert "metadata not valid: there's an error" in str(exc.value)
def test_validate_metadata():
    v = helpers.Validation()

    assert v.validate_metadata(
        './somepath/metadata.json', None, MockedFiles._mock_config()) == (
            False, "metadata in './somepath/metadata.json' is empty")

    v._validate_title = MagicMock(return_value=(False, "no title"))
    assert v.validate_metadata('./somepath/metadata.json', {
        'description': 'lorem desc',
        'tags': ['01_Folder'],
        'roles': []
    }, MockedFiles._mock_config()) == (False, "no title")

    v._validate_title = MagicMock(return_value=True)
    v._validate_description = MagicMock(return_value=(False, "no description"))
    assert v.validate_metadata('./somepath/metadata.json', {
        'title': 'lorem ipsum',
        'tags': ['01_Folder'],
        'roles': []
    }, MockedFiles._mock_config()) == (False, "no description")

    v._validate_title = MagicMock(return_value=True)
    v._validate_description = MagicMock(return_value=True)
    v._validate_tags = MagicMock(return_value=(False, "no tags"))
    assert v.validate_metadata('./somepath/metadata.json', {
        'title': 'lorem ipsum',
        'description': 'lorem desc',
        'roles': []
    }, MockedFiles._mock_config()) == (False, "no tags")

    v._validate_title = MagicMock(return_value=True)
    v._validate_description = MagicMock(return_value=True)
    v._validate_tags = MagicMock(return_value=True)
    v._validate_roles = MagicMock(return_value=(False, "no roles"))
    assert v.validate_metadata('./somepath/metadata.json', {
        'title': 'lorem ipsum',
        'description': 'lorem desc',
        'tags': ['01_Folder']
    }, MockedFiles._mock_config()) == (False, "no roles")

    v._validate_title = MagicMock(return_value=True)
    v._validate_description = MagicMock(return_value=True)
    v._validate_tags = MagicMock(return_value=True)
    v._validate_roles = MagicMock(return_value=True)
    assert v.validate_metadata(
        './somepath/metadata.json', {
            'title': 'lorem ipsum',
            'description': 'lorem desc',
            'tags': ['01_Folder'],
            'roles': []
        }, MockedFiles._mock_config()) is True
 def mock_get_config_return_config(*args, **kwargs):
     return MockedFiles._mock_config()