def test_not_valid_report_dir(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() os.mkdir(f'{fs.root_path}/tmp2') runner = CliRunner() result = runner.invoke( ccli, [ '-c', 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
def test_basic_report_5(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_wrong', '-d', './tests/fixtures/reports/basic_report', ], ) assert result.exit_code == 1 assert 'Error: The report `entrypoint_wrong` does not exist.' in result.output
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
def test_basic_report(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/basic_report', ], ) assert "Connect Reports Fixture version 1.0.0" in result.output
def test_marketplace_list(mocked_responses): param = { "id": "mkp", "type": "marketplace", "name": "Marketplaces", "description": "Select the marketplaces you want to include in report", } config = Config() config.load('/tmp') config.add_account('VA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') client = ConnectClient( api_key='ApiKey X', endpoint='https://localhost/public/v1', use_specs=False, ) mocked_responses.add( url='https://localhost/public/v1/marketplaces', method='GET', json=[ { "id": "MKP-1", "name": "Marketplace", }, ], ) result = marketplace_list(config, client, param) assert result['type'] == 'selectmany' assert len(result['values']) == 1 assert result['values'][0] == ('MKP-1', 'Marketplace (MKP-1)')
def test_product_2(mocked_responses, mocked_product_response): param = { "id": "product", "type": "product", "name": "Product list", "description": "Select the products you want to include in report", } config = Config() config.load('/tmp') config.add_account('PA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') client = ConnectClient( api_key='ApiKey X', endpoint='https://localhost/public/v1', use_specs=False, ) mocked_responses.add( url='https://localhost/public/v1/products', method='GET', json=[mocked_product_response], ) result = product_list(config.active, client, param) assert result['type'] == 'selectmany' assert len(result['values']) == 1 assert result['values'][0] == ('PRD-276-377-545', 'My Product (PRD-276-377-545)')
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
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
def test_remove_activate_other(config_mocker, mocker): config = Config() config.load('/tmp') assert config.active.id == 'VA-000' config.remove_account('VA-000') assert config.active.id == 'VA-001'
def test_activate(config_mocker, mocker): config = Config() config.load('/tmp') assert config.active.id == 'VA-000' config.activate('VA-001') assert config.active is not None assert config.active.id == 'VA-001' assert config.active.name == 'Account 1' assert config.active.api_key == 'ApiKey ZZZZ:SSSS'
def test_inject( config_mocker, fs, mocked_responses, mocker, ): config = Config() config.load('/tmp') config.add_account('VA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', ) os.mkdir(os.path.join( cloner.fs.root_path, 'PRD-123', ), ) wb = load_workbook('./tests/fixtures/comparation_product.xlsx') wb.save(os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) mocker.patch('connect.cli.plugins.product.clone.GeneralSynchronizer', ) mocker.patch( 'connect.cli.plugins.product.clone.CapabilitiesSynchronizer', ) mocker.patch('connect.cli.plugins.product.clone.TemplatesSynchronizer', ) mocker.patch('connect.cli.plugins.product.clone.ParamsSynchronizer', ) mocker.patch('connect.cli.plugins.product.clone.ActionsSynchronizer', ) mocker.patch('connect.cli.plugins.product.clone.MediaSynchronizer', ) mocker.patch( 'connect.cli.plugins.product.clone.ItemSynchronizer', return_value=FakeItemSynchronizer, ) mocked_responses.add( method='GET', url='https://localhost/public/v1/products/PRD-276-377-545/items', json=[], ) mocked_responses.add( method='GET', url= 'https://localhost/public/v1/products/PRD-276-377-545/templates?limit=100&offset=0', json=[], ) cloner.inject()
def test_create_product( config_mocker, fs, mocked_responses, mocked_categories_response, mocked_product_response, ): config = Config() config.load('/tmp') config.add_account('VA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', ) mocked_responses.add( method='GET', url='https://localhost/public/v1/categories?limit=100&offset=0', json=mocked_categories_response, ) mocked_responses.add( method='POST', url='https://localhost/public/v1/products', json=mocked_product_response, ) os.mkdir(os.path.join( cloner.fs.root_path, 'PRD-123', ), ) wb = load_workbook('./tests/fixtures/comparation_product.xlsx') wb.save(os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) cloner.load_wb() cloner.create_product() wb = load_workbook( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) assert wb['General Information']['B5'].value == 'PRD-276-377-545'
def test_dump(mocker, config_mocker): mock = mocker.patch('connect.cli.plugins.product.clone.dump_product', ) config = Config() config.load('/tmp') cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', ) cloner.dump() mock.assert_called_once()
def test_create_product_errordef( config_mocker, fs, mocked_responses, mocked_categories_response, mocked_product_response, ): config = Config() config.load('/tmp') config.add_account('VA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') stats = SynchronizerStats() cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', stats=stats, ) mocked_responses.add( method='GET', url='https://localhost/public/v1/categories?limit=100&offset=0', json=mocked_categories_response, ) mocked_responses.add( method='POST', url='https://localhost/public/v1/products', status=500, ) os.mkdir( os.path.join( cloner.fs.root_path, 'PRD-123', ), ) wb = load_workbook('./tests/fixtures/comparation_product.xlsx') wb.save( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) cloner.load_wb() with pytest.raises(ClickException) as e: cloner.create_product() assert 'Error on product creation' in str(e)
def test_input_parameters(mocker, 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() 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', 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
def test_clean_wb( config_mocker, fs, ): config = Config() config.load('/tmp') stats = SynchronizerStats() cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', stats=stats, ) os.mkdir( os.path.join( cloner.fs.root_path, 'PRD-123', ), ) wb = load_workbook('./tests/fixtures/comparation_product.xlsx') wb.save( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) cloner.load_wb() cloner.clean_wb() cloned_wb = load_workbook( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) for row in range(2, 11): assert cloned_wb['Capabilities'][f'B{row}'].value == 'update'
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
def test_basic_report_4(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() os.mkdir(f'{fs.root_path}/report') result = runner.invoke( ccli, [ '-c', 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
def test_create_product( mocked_responses, mocked_categories_response, mocked_product_response, ): config = Config() config.load('/tmp') config.add_account('VA-000', 'Account 0', 'Api 0', 'https://localhost/public/v1') stats = SynchronizerStats() cloner = ProductCloner( config=config, source_account='VA-000', destination_account='VA-000', product_id='PRD-123', stats=stats, ) mocked_responses.add( method='GET', url='https://localhost/public/v1/categories?limit=100&offset=0', json=mocked_categories_response, ) mocked_responses.add( method='POST', url='https://localhost/public/v1/products', match=[ matchers.json_params_matcher({ 'name': 'Clone of PRD-123 2022-04-05-20:15:00', 'category': { 'id': 'CAT-59128', }, 'translations': [ {'locale': {'id': 'FA'}, 'primary': True}, ], }), ], json=mocked_product_response, ) os.mkdir( os.path.join( cloner.fs.root_path, 'PRD-123', ), ) wb = load_workbook('./tests/fixtures/comparation_product.xlsx') wb.save( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) cloner.load_wb() cloner.create_product() wb = load_workbook( os.path.join( cloner.fs.root_path, 'PRD-123', 'PRD-123.xlsx', ), ) assert wb['General Information']['B5'].value == 'PRD-276-377-545'
def test_load(config_mocker, mocker): config = Config() config.load('/tmp') assert config.active is not None assert config.active.id == 'VA-000' assert len(config.accounts) == 2