예제 #1
0
def test_store(mocker):
    mock_open = mocker.mock_open()
    mocker.patch(
        'connect.cli.core.config.open',
        mock_open,
    )

    config = Config()
    config._config_path = '/tmp'
    config.add_account('VA-000', 'Account 1', 'ApiKey XXXX:YYYY')

    config.store()
    assert mock_open.mock_calls[0][1][1] == 'w'
    expected_output = {
        'active':
        'VA-000',
        'accounts': [
            {
                'id': 'VA-000',
                'name': 'Account 1',
                'api_key': 'ApiKey XXXX:YYYY',
                'endpoint': DEFAULT_ENDPOINT,
            },
        ],
    }
    assert json.loads(mock_open.mock_calls[2][1][0]) == expected_output
예제 #2
0
def test_report_client_exception(fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()

    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'execute',
            'entrypoint',
            '-d',
            './tests/fixtures/reports/connect_exception',
        ],
    )

    assert result.exit_code == 1
    assert "Error returned by Connect when executing the report" in result.output
예제 #3
0
def test_not_valid_report_dir(fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    os.mkdir(f'{fs.root_path}/tmp2')
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'list',
            '-d',
            f'{fs.root_path}/tmp2',
        ],
    )

    assert result.exit_code == 1
    assert f"The directory `{fs.root_path}/tmp2` is not a reports project root directory." in result.output
예제 #4
0
def test_list_products(fs, mocked_responses, ccli):
    with open('./tests/fixtures/product_response.json') as prod_response:
        mocked_responses.add(
            method='GET',
            url='https://localhost/public/v1/products',
            json=[json.load(prod_response)],
        )
    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    assert os.path.isfile(f'{fs.root_path}/config.json') is True
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            fs.root_path,
            'product',
            'list',
        ],
    )

    assert result.exit_code == 0
    assert "PRD-276-377-545 - My Produc" in result.output
예제 #5
0
def test_basic_report_5(fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'info',
            'entrypoint_wrong',
            '-d',
            './tests/fixtures/reports/basic_report',
        ],
    )

    assert result.exit_code == 1
    assert 'Error: The report `entrypoint_wrong` does not exist.' in result.output
예제 #6
0
def test_basic_report(fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'list',
            '-d',
            './tests/fixtures/reports/basic_report',
        ],
    )

    assert "Connect Reports Fixture version 1.0.0" in result.output
예제 #7
0
def test_report_generic_exception(fs, ccli):
    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()

    result = runner.invoke(
        ccli,
        [
            '-c',
            fs.root_path,
            'report',
            'execute',
            'entrypoint',
            '-d',
            './tests/fixtures/reports/generic_exception',
        ],
    )

    assert result.exit_code == 1
    assert "Unexpected error while executing the report" in result.output
예제 #8
0
def test_no_reports(fs, ccli):
    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            fs.root_path,
            'report',
            'list',
            '-d',
            './tests/fixtures/reports/no_reports',
        ],
    )

    assert result.exit_code == 1
    assert 'Invalid `reports.json`: [] is too short' in result.output
예제 #9
0
def test_basic_report_3(fs, ccli):
    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            fs.root_path,
            'report',
            'execute',
            'invalid',
            '-d',
            './tests/fixtures/reports/basic_report',
        ],
    )

    assert result.exit_code == 1
    assert 'The report `invalid` does not exist.' in result.output
예제 #10
0
def test_basic_report_2(fs, ccli):

    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    result = runner.invoke(
        ccli,
        [
            '-c',
            fs.root_path,
            'report',
            'info',
            'entrypoint',
            '-d',
            './tests/fixtures/reports/basic_report',
        ],
    )

    assert result.exit_code == 0
    assert "Basic report info" in result.output
예제 #11
0
def test_input_parameters(mocker, fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()

    mocker.patch(
        'connect.cli.plugins.report.wizard.dialogus',
        side_effect=[
            {
                'status': 'Active',
            },
            {
                'date': {
                    'from': '2021-01-01',
                    'to': '2021-02-01',
                },
            },
        ],
    )
    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'execute',
            'entrypoint',
            '-d',
            './tests/fixtures/reports/report_with_inputs',
            '-o',
            f'{fs.root_path}/report.xlsx',
        ],
    )

    assert result.exit_code == 0
    assert "100%" in result.output
예제 #12
0
def test_sync_general_sync(fs, get_general_env, mocked_responses, ccli):
    config = Config()
    config.load(fs.root_path)
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    assert os.path.isfile(f'{fs.root_path}/config.json') is True

    with open('./tests/fixtures/units_response.json') as units_response:
        mocked_responses.add(
            method='GET',
            url='https://localhost/public/v1/settings/units',
            json=json.load(units_response),
        )

        with open('./tests/fixtures/product_response.json') as prod_response:
            mocked_responses.add(
                method='PUT',
                url='https://localhost/public/v1/products/PRD-276-377-545',
                json=json.load(prod_response),
            )
            get_general_env.save(f'{fs.root_path}/test.xlsx')

            runner = CliRunner()
            result = runner.invoke(
                ccli,
                [
                    '-c',
                    fs.root_path,
                    'product',
                    'sync',
                    '--yes',
                    f'{fs.root_path}/test.xlsx',
                ],
            )

            assert result.exit_code == 0
예제 #13
0
def test_basic_report_4(fs, ccli):
    config = Config()
    config._config_path = f'{fs.root_path}/config.json'
    config.add_account(
        'VA-000',
        'Account 1',
        'ApiKey XXXX:YYYY',
        endpoint='https://localhost/public/v1',
    )
    config.activate('VA-000')
    config.store()
    runner = CliRunner()
    os.mkdir(f'{fs.root_path}/report')
    result = runner.invoke(
        ccli,
        [
            '-c',
            f'{fs.root_path}/',
            'report',
            'execute',
            'entrypoint',
            '-d',
            './tests/fixtures/reports/basic_report',
            '-o'
            f'{fs.root_path}/report/report',
        ],
    )

    assert result.exit_code == 0
    assert "Processing report test report" in result.output

    wb = load_workbook(f'{fs.root_path}/report/report.xlsx')

    assert wb['Data']['A1'].value == 'Row'
    assert wb['Data']['A2'].value == 1
    assert wb['Data']['A3'].value == 2
    assert wb['Data']['A4'].value is None
예제 #14
0
def test_add_account(mocker, mocked_responses):
    config = Config()
    config.add_account = mocker.MagicMock()
    config.store = mocker.MagicMock()
    mocked_responses.add(
        'GET',
        'https://localhost/public/v1/accounts',
        status=200,
        json=[{'id': 'VA-000', 'name': 'Test account'}],
    )
    acc_id, acc_name = add_account(config, 'api_key', 'https://localhost/public/v1')
    config.add_account.assert_called_once_with(
        'VA-000', 'Test account',
        'api_key', 'https://localhost/public/v1',
    )
    assert acc_id == 'VA-000'
    assert acc_name == 'Test account'
    config.store.assert_called()