def test_admin_inspect_transactions(database, mock_message): User.create_admin(2, 2, database) character_hash_2 = User.create_user(3, 3, "Test user 2", database) character_hash_3 = User.create_user(4, 4, "Test user 3", database) client = BankingClientFactory(database).create_client(mock_message) results = client.admin_inspect_transactions( f"/admin_history_sent {character_hash_2}", True) assert results == NO_TRANSACTIONS_FOUND results = client.admin_inspect_transactions( f"/admin_history_recieved {character_hash_2}", False) assert results == NO_TRANSACTIONS_FOUND results = client.admin_inspect_transactions( f"/admin_history_recieved {character_hash_3}", False) assert results == NO_TRANSACTIONS_FOUND Transaction.create_transaction(character_hash_2, character_hash_3, 100, database) Transaction.create_transaction(character_hash_2, "0000000000", 100, database) results = client.admin_inspect_transactions( f"/admin_history_sent {character_hash_2}", True) assert results != NO_TRANSACTIONS_FOUND results = client.admin_inspect_transactions( f"/admin_history_recieved {character_hash_2}", False) assert results == NO_TRANSACTIONS_FOUND results = client.admin_inspect_transactions( f"/admin_history_recieved {character_hash_3}", False) assert results != NO_TRANSACTIONS_FOUND
def test_list_transactions_sender(database): user_hash_1 = User.create_user(2, 2, "Test user 1", database) user_hash_2 = User.create_user(3, 3, "Test user 2", database) assert len(Transaction.list_transactions(user_hash_1, True, database)) == 0 assert len(Transaction.list_transactions(user_hash_2, True, database)) == 0 Transaction.create_transaction(user_hash_1, user_hash_2, 100, database) assert len(Transaction.list_transactions(user_hash_1, True, database)) == 1 assert len(Transaction.list_transactions(user_hash_2, True, database)) == 0
def create_hacker_transaction_other(self, message): target_hashes = re.findall(r"[a-zA-Z0-9]{10}", message) target_first_user_hash = target_hashes[0] target_second_user_hash = target_hashes[1] target_user = self.get_user_by_user_hash(target_first_user_hash) reciever_user = self.get_user_by_user_hash(target_second_user_hash) message = re.search(r" [a-zA-Z0-9]{10} [a-zA-Z0-9]{10} [\w\W0-9.]+$", message).group(0)[22:].strip(' ') show_hack = self.hacker_validation( target_user.hacker_defence + HACKER_THEFT_DIFFICULTY, target_user.chat_id) def allowed_values(message): return all([char.isdigit() or char == '.' for char in message]) if not allowed_values(message): raise TransactionError( TRANSACTION_UNALLOWED_VALUE.substitute(value=message)) amount = float(message) if self.user.finances < amount: raise TransactionError(TRANSACTION_NO_FINANCES) if target_first_user_hash == self.user.character_hash: raise TransactionError(SELF_TRANSACTION) if amount <= 0: raise TransactionError(ZERO_TRANSACTION) if show_hack: transaction_hash = Transaction.create_transaction( target_first_user_hash, target_second_user_hash, amount, self.database) else: transaction_hash_out = Transaction.create_transaction( target_first_user_hash, HACKER_FAKE_HASH, amount, self.database) transaction_hash_in = Transaction.create_transaction( HACKER_FAKE_HASH, target_second_user_hash, amount, self.database) transaction_hash = transaction_hash_out + ' ' + transaction_hash_in reciever_amount = reciever_user.finances + amount sender_amount = target_user.finances - amount User.update_db_value(target_first_user_hash, "finances", sender_amount, self.database) User.update_db_value(target_second_user_hash, "finances", reciever_amount, self.database) transaction_message = TRANSACTION_MESSAGE.substitute( sender_hash=target_first_user_hash, reciever_hash=target_second_user_hash, amount=amount, transaction_hash=transaction_hash) return self.user.character_hash, target_user.chat_id, reciever_user.chat_id, transaction_message, show_hack
def create_transaction(self, message): self.user_validation() target_user_hash = re.search(r" [a-zA-Z0-9]{10} ", message).group(0).strip(' ') target_user = self.get_user_by_user_hash(target_user_hash) message = re.search(r" [a-zA-Z0-9]{10} [\w\W0-9.]+$", message).group(0)[12:].strip(' ') def allowed_values(message): return all([char.isdigit() or char == '.' for char in message]) if not allowed_values(message): raise TransactionError( TRANSACTION_UNALLOWED_VALUE.substitute(value=message)) amount = float(message) if self.user.finances < amount: raise TransactionError(TRANSACTION_NO_FINANCES) if target_user_hash == self.user.character_hash: raise TransactionError(SELF_TRANSACTION) if amount <= 0: raise TransactionError(ZERO_TRANSACTION) transaction_hash = Transaction.create_transaction( self.user.character_hash, target_user_hash, amount, self.database) reciever_amount = target_user.finances + amount sender_amount = self.user.finances - amount User.update_db_value(target_user_hash, "finances", reciever_amount, self.database) User.update_db_value(self.user.character_hash, "finances", sender_amount, self.database) transaction_message = TRANSACTION_MESSAGE.substitute( sender_hash=self.user.character_hash, reciever_hash=target_user_hash, amount=amount, transaction_hash=transaction_hash) return self.user.chat_id, target_user.chat_id, transaction_message
def test_hack_inspect_pair_transactions(database, mock_message): User.create_admin(1, 1, database) character_hash_1 = User.create_user(2, 2, "Test user", database) User.update_db_value(character_hash_1, "hacker_level", 1, database) character_hash_2 = User.create_user(3, 3, "Test user 2", database) character_hash_3 = User.create_user(4, 4, "Test user 3", database) character_hash_4 = User.create_user(5, 5, "Test user 4", database) User.update_db_value(character_hash_3, "hacker_defence", 1, database) User.update_db_value(character_hash_4, "hacker_defence", 2, database) client = BankingClientFactory(database).create_client(mock_message) results, chat_id, hash_1, chat_2_id, hash_2, show_hack = client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_2} {character_hash_3}") assert results == NO_TRANSACTIONS_FOUND assert not show_hack results, chat_id, hash_1, chat_2_id, hash_2, show_hack = client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_4} {character_hash_3}") assert results == NO_TRANSACTIONS_FOUND assert show_hack with pytest.raises(HackerError): client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_4} 0000000000") Transaction.create_transaction(character_hash_2, character_hash_4, 100, database) Transaction.create_transaction(character_hash_2, character_hash_3, 100, database) Transaction.create_transaction(character_hash_2, "0000000000", 100, database) Transaction.create_transaction(character_hash_3, character_hash_4, 100, database) results, chat_id, hash_1, chat_2_id, hash_2, show_hack = client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_2} {character_hash_3}") assert results != NO_TRANSACTIONS_FOUND assert not show_hack results, chat_id, hash_1, chat_2_id, hash_2, show_hack = client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_2} 0000000000") assert results != NO_TRANSACTIONS_FOUND assert not show_hack results, chat_id, hash_1, chat_2_id, hash_2, show_hack = client.hack_inspect_pair_history( f"/hack_history_pair {character_hash_4} {character_hash_3}") assert results != NO_TRANSACTIONS_FOUND assert show_hack
def test_create_transactions(database): user_hash_1 = User.create_user(2, 2, "Test user 1", database) user_hash_2 = User.create_user(3, 3, "Test user 2", database) Transaction.create_transaction(user_hash_1, user_hash_2, 100, database)