def test_create_select(cur, user, tr_inner): invoice_usd = user.invoices.get(USD, None) invoice_eur = user.invoices.get(EUR, None) tr_inner2 = Transaction(invoice_usd.id, invoice_eur.id, invoice_usd.balance, id=tr_inner.id, uid=tr_inner.uid, created_at=tr_inner.created_at, updated_at=tr_inner.updated_at, status=tr_inner.get_status()).create(cur) assert tr_inner.id == tr_inner2.id, "Bad id in transaction create" assert tr_inner.uid == tr_inner2.uid, "Bad uid in transaction create" assert tr_inner.invoice_id_from == tr_inner2.invoice_id_from, "Bad invoice_id_from in transaction create" assert tr_inner.invoice_id_to == tr_inner2.invoice_id_to, "Bad invoice_id_to in transaction create" assert tr_inner.created_at == tr_inner2.created_at, "Bad created_at in transaction create" assert tr_inner.updated_at == tr_inner2.updated_at, "Bad updated_at in transaction create" assert tr_inner.get_status() == tr_inner2.get_status() == IN_PROCESS, "Bad status in transaction create" cur.execute(f''' SELECT count(id) FROM public.transaction WHERE uuid = '{tr_inner.uid}'::UUID OR uuid = '{tr_inner2.uid}'::UUID''') result = cur.fetchone() if result: count = result[0] assert count == 1, 'must be 1 transaction in bd' else: raise Exception('must be 1 transaction in bd')
def test_run_external(cur, user, user2, tr_external): try: # fixed all data cur.connection.commit() tr_external.run() assert tr_external.get_status() == SUCCESS inv_from_new = Invoice.find_by_id(tr_external.invoice_id_from) inv_to_new = Invoice.find_by_id(tr_external.invoice_id_to) user_invoice_usd = user.invoices.get(USD, None) context = Context(prec=1, rounding=ROUND_DOWN) com = context.create_decimal_from_float(COMMISSION) assert inv_from_new.balance == ( user_invoice_usd.balance - (tr_external.amount + tr_external.amount * com)).quantize(TWOPLACES) user_invoice_eur = user2.invoices.get(EUR, None) assert inv_to_new.balance == (user_invoice_eur.balance + tr_external.convert_amount(user_invoice_usd, user_invoice_eur)).quantize( TWOPLACES) finally: with get_db_cursor(commit=True) as cur: cur.execute(f'''DELETE FROM public.transaction WHERE id={tr_external.id}::int;''') cur.execute(f'''DELETE FROM public.invoice WHERE user_id={user.id}::int;''') cur.execute(f'''DELETE FROM public.invoice WHERE user_id={user2.id}::int;''') cur.execute(f'''DELETE FROM public.user WHERE id={user.id}::int;''') cur.execute(f'''DELETE FROM public.user WHERE id={user2.id}::int;''')
def user_fixed2(): user_name = "new_user_fixed2_test" user = User(name=user_name, email="*****@*****.**", password="******").create() try: yield user finally: with get_db_cursor(commit=True) as cur: cur.execute(f'''DELETE FROM public.invoice WHERE user_id={user.id}::int;''') cur.execute(f'''DELETE FROM public.user WHERE id={user.id}::int;''')
def test_create_insert(cur, tr_inner): cur.execute(f''' SELECT id, uuid, invoice_id_from, invoice_id_to, created_at, updated_at, amount, status FROM public.transaction WHERE id = {tr_inner.id}''') id, uid, invoice_id_from, invoice_id_to, created_at, updated_at, amount, status = cur.fetchone() assert tr_inner.id == id, "Bad id in transaction create" assert tr_inner.uid == uid, "Bad uid in transaction create" assert tr_inner.invoice_id_from == invoice_id_from, "Bad invoice_id_from in transaction create" assert tr_inner.invoice_id_to == invoice_id_to, "Bad invoice_id_to in transaction create" assert tr_inner.created_at == created_at, "Bad created_at in transaction create" assert tr_inner.updated_at == updated_at, "Bad updated_at in transaction create" assert tr_inner.get_status() == status == IN_PROCESS, "Bad status in transaction create"
def tr_list_completed(user_fixed, user_fixed2): tr_lst = [] invoice_usd = user_fixed.invoices.get(USD, None) invoice_eur = user_fixed2.invoices.get(EUR, None) tr_lst.append(Transaction(invoice_usd.id, invoice_eur.id, invoice_usd.balance // 10).create().run()) tr_lst.append(Transaction(invoice_usd.id, invoice_eur.id, invoice_usd.balance // 10).create().run()) tr_bad = Transaction(invoice_usd.id, invoice_eur.id, invoice_usd.balance).create() try: tr_bad.run() except Exception as err: tr_lst.append(tr_bad) print("Badly transaction created: ", err) try: yield tr_lst finally: with get_db_cursor(commit=True) as cur: for tr in tr_lst: cur.execute(f'''DELETE FROM public.transaction WHERE id={tr.id}::int;''')
def test_run_inner(cur, user, tr_inner): try: # fixed all data cur.connection.commit() tr_inner.run() assert tr_inner.get_status() == SUCCESS inv_from_new = Invoice.find_by_id(tr_inner.invoice_id_from) inv_to_new = Invoice.find_by_id(tr_inner.invoice_id_to) user_invoice_usd = user.invoices.get(USD, None) assert inv_from_new.balance == user_invoice_usd.balance - tr_inner.amount user_invoice_eur = user.invoices.get(EUR, None) assert inv_to_new.balance == user_invoice_eur.balance + tr_inner.convert_amount(user_invoice_usd, user_invoice_eur) finally: with get_db_cursor(commit=True) as cur: cur.execute(f'''DELETE FROM public.transaction WHERE id={tr_inner.id}::int;''') cur.execute(f'''DELETE FROM public.invoice WHERE user_id={user.id}::int;''') cur.execute(f'''DELETE FROM public.user WHERE id={user.id}::int;''')