import json
import sys

from flexmock import flexmock

from borgmatic.commands import borgmatic


def test_run_commands_handles_multiple_json_outputs_in_array():
    (
        flexmock(borgmatic)
        .should_receive('_run_commands_on_repository')
        .times(3)
        .replace_with(
            lambda args, consistency, json_results, local_path, location, remote_path, retention, storage, unexpanded_repository: json_results.append(
                {"whatever": unexpanded_repository}
            )
        )
    )

    (
        flexmock(sys.stdout)
        .should_call("write")
        .with_args(
            json.dumps(
                json.loads(
                    '''
                        [
                            {"whatever": "fake_repo1"},
                            {"whatever": "fake_repo2"},
                            {"whatever": "fake_repo3"}
                        ]
                    '''
                )
            )
        )
    )

    borgmatic._run_commands(
        args=flexmock(json=True),
        consistency=None,
        local_path=None,
        location={'repositories': ['fake_repo1', 'fake_repo2', 'fake_repo3']},
        remote_path=None,
        retention=None,
        storage=None,
    )
