def test_can_edit_versions_in_statement(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) data = { 'previous_balance_id': 0, 'start_date': '2020-01-01', 'end_date': '2020-01-31' } json_data = json.dumps(data) response = test_client.post('/statements/generate', data=json_data) response = test_client.post('/statements/1/generate-summary', data=json_data) response = test_client.get('/statements/1/versions') assert response.status_code == 200 versions = json.loads(response.data)['versions'] assert len(versions) == 2 metadata = MetaData(db.engine) metadata.reflect() table = metadata.tables.get('statement_2020_01_01_2020_01_31') res = db.session.query(table).all() assert len(res) == 2 """ Send list of versions to delete to route. """ data = {'versions': ['1']} json_data = json.dumps(data) response = test_client.delete('/statements/1/versions', data=json_data) assert response.status_code == 200 res = db.session.query(table).all() assert len(res) == 1
def test_opening_balance_import(test_client, db): import_catalog(test_client, db, CASE) path = os.getcwd() + f'/tests/api/{CASE}/opening_balance.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200 """ Check table created """ metadata = MetaData(db.engine) metadata.reflect() table = metadata.tables.get('opening_balance') assert len(db.session.query(table).all()) == 1 assert db.session.query(table).all()[0].artist_id == 1 assert json.loads(response.data) == {'success': 'true'} """ Check table was added to Statement Generated """ res = db.session.query(StatementGenerated).one() assert res.statement_balance_table == 'opening_balance' data = { 'previous_balance_id': 1, 'start_date': '2020-01-01', 'end_date': '2020-01-31' } json_data = json.dumps(data) response = test_client.post('/statements/generate', data=json_data) assert response.status_code == 200 res = db.session.query(StatementGenerated).all()[1] assert res.previous_balance_id == 1
def test_opening_balance_fix_import_errors(test_client, db): import_catalog(test_client, db, CASE) path = os.getcwd() + f'/tests/api/{CASE}/opening_balance_errors.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200 metadata = MetaData(db.engine) metadata.reflect() table = metadata.tables.get('opening_balance') assert len(db.session.query(table).all()) == 2 id = db.session.query(table).filter( table.c.artist_name == 'Bondhead').first().id assert db.session.query(table).filter( table.c.id == id).first().artist_id == None """ Fix error.""" data = {'id': 2, 'artist_id': '1'} json_data = json.dumps(data) response = test_client.post('/statements/opening-balance-errors', data=json_data) assert response.status_code == 200 assert db.session.query(table).filter( table.c.id == id).first().artist_id == 1
def test_opening_balance_import_second_import(test_client, db): import_catalog(test_client, db, CASE) path = os.getcwd() + f'/tests/api/{CASE}/opening_balance.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200 path = os.getcwd() + f'/tests/api/{CASE}/opening_balance.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200
def test_statement_with_data_with_previous_balance(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) path = os.getcwd() + f'/tests/api/{CASE}/opening_balance.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200 data = { 'previous_balance_id': 1, 'start_date': '2020-01-01', 'end_date': '2020-01-31' } json_data = json.dumps(data) response = test_client.post('/statements/generate', data=json_data) assert response.status_code == 200 res = db.session.query(StatementGenerated).all()[1] assert res.previous_balance_id == 1 assert res.id == 2 response = test_client.post('/statements/2/generate-summary') assert response.status_code == 200 response = test_client.get('/statements/2') assert json.loads(response.data) == { 'summary': { 'statement_total': 150.0, 'previous_balance': 'opening_balance', 'previous_balance_id': 1, 'statement': 'statement_2020_01_01_2020_01_31', }, 'detail': [{ 'id': 1, 'artist_name': 'Bonehead', 'balance_forward': 150.0, 'split': 50.0, 'total_advance': 0.0, 'total_previous_balance': 100.0, 'total_recoupable': 0.0, 'total_sales': 100.0, 'total_to_split': 100.0 }], }
def test_can_list_generated_statements(test_client, db): """ Check empty list of statements. """ response = test_client.get('/statements') assert response.status_code == 200 assert json.loads(response.data) == [] """ Check list with generated statement. """ data = { 'previous_balance_id': 0, 'start_date': '2020-01-01', 'end_date': '2020-01-31' } json_data = json.dumps(data) response = test_client.post('/statements/generate', data=json_data) assert response.status_code == 200 response = test_client.get('/statements') assert json.loads(response.data) == [{ 'id': 1, 'statement_detail_table': 'statement_2020_01_01_2020_01_31', 'statement_summary_table': 'statement_summary_2020_01_01_2020_01_31' }] """ Add opening balance statement, verify opening doesn't show up """ import_catalog(test_client, db, CASE) path = os.getcwd() + f'/tests/api/{CASE}/opening_balance.csv' f = open(path, 'rb') data = {'CSV': f} response = test_client.post('/statements/import-opening-balance', data=data) assert response.status_code == 200 response = test_client.get('/statements') assert json.loads(response.data) == [{ 'id': 1, 'statement_detail_table': 'statement_2020_01_01_2020_01_31', 'statement_summary_table': 'statement_summary_2020_01_01_2020_01_31' }]
def test_refund_partial(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) sel = db.session.query(IncomePending).filter(IncomePending.description == 'PARTIAL REFUND').subquery() assert len(db.session.query(sel).all()) == 2 assert db.session.query(func.sum(sel.c.amount)).first()[0] == Decimal('10.13')
def test_refund_one_album_physical(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) sel = db.session.query(IncomePending).filter(IncomePending.description == 'REFUND 1 ALBUM PHY').subquery() assert len(db.session.query(sel).all()) == 2 assert db.session.query(func.sum(sel.c.amount)).first()[0] == Decimal('0')
def test_refund_multiple_items(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) sel = db.session.query(IncomePending).filter(IncomePending.description == 'REFUND MULT ALBUMS').subquery() assert len(db.session.query(sel).all()) == 4 assert db.session.query(func.sum(sel.c.amount)).first()[0] == Decimal('0')
def test_reversal_errors(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) sel = db.session.query(IncomePending).filter(IncomePending.description == 'REVERSAL').subquery() assert len(db.session.query(sel).all()) == 10 assert db.session.query(func.sum(sel.c.amount)).first()[0] == Decimal('0')
def test_statement_with_data_no_previous_balance(test_client, db): import_catalog(test_client, db, CASE) import_bandcamp_sales(test_client, db, CASE) assert len(db.session.query(IncomeTotal).all()) > 0 data = { 'previous_balance_id': 0, 'start_date': '2020-01-01', 'end_date': '2020-01-31' } json_data = json.dumps(data) response = test_client.post('/statements/generate', data=json_data) assert response.status_code == 200 response = test_client.post('/statements/1/generate-summary', data=json_data) assert response.status_code == 200 assert db.session.query(StatementGenerated).one().id == 1 response = test_client.get('/statements/1') assert json.loads(response.data) == { 'summary': { 'statement_total': 50.0, 'previous_balance': 'statement_balance_none', 'previous_balance_id': 0, 'statement': 'statement_2020_01_01_2020_01_31', }, 'detail': [{ 'id': 1, 'artist_name': 'Bonehead', 'balance_forward': 50.0, 'split': 50.0, 'total_advance': 0.0, 'total_previous_balance': 0.0, 'total_recoupable': 0.0, 'total_sales': 100.0, 'total_to_split': 100.0 }], } response = test_client.get('/statements/1/versions') assert response.status_code == 200 versions = json.loads(response.data)['versions'] assert len(versions) == 2 """Get artist statement info""" response = test_client.get('/statements/1/artist/1', data=json_data) assert response.status_code == 200 assert json.loads(response.data) == { 'artist': 'Bonehead', 'statement': 'statement_2020_01_01_2020_01_31', 'summary': [{ 'balance_forward': 50.0, 'previous_balance': 0.0, 'sales': 100.0, 'split': 50.0, 'advances': 0.0, 'recoupables': 0.0, 'total_to_split': 100.0 }], 'income': [ { 'catalog_name': 'Amazing', 'combined_net': 100.0, 'digital_net': 0, 'physical_net': 100.0, }, ], 'expense': [], 'advance': [], 'album_sales': [ { 'catalog_name': 'Amazing', 'version_number': 'TEST-01cass', 'format': 'cass', 'quantity': 1, 'net': 50.0, }, { 'catalog_name': 'Amazing', 'version_number': 'TEST-01lp', 'format': 'lp', 'quantity': 1, 'net': 50.0, }, ], 'track_sales': [], }