Ejemplo n.º 1
0
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
Ejemplo n.º 2
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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 def inspect_all_transactions(self, user_hash=None):
     self.user_validation()
     if user_hash is None:
         user_hash = self.user.character_hash
     transactions = Transaction.list_all_transactions(
         user_hash, self.database)
     resulting_data = ""
     for transaction in transactions:
         resulting_data += str(transaction) + '\n\n'
     if not transactions:
         resulting_data = NO_TRANSACTIONS_FOUND
     return resulting_data
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
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
Ejemplo n.º 7
0
 def inspect_pair_history(self,
                          message,
                          sender_hash=None,
                          reciever_hash=None):
     self.user_validation()
     if sender_hash is None:
         sender_hash = self.user.character_hash
     if reciever_hash is None:
         reciever_hash = re.search(r" [a-zA-Z0-9]{10}",
                                   message).group(0).strip(' ')
     transactions = Transaction.list_pair_history_transactions(
         sender_hash, reciever_hash, self.database)
     resulting_data = ""
     for transaction in transactions:
         resulting_data += str(transaction) + '\n\n'
     if not transactions:
         resulting_data = NO_TRANSACTIONS_FOUND
     return resulting_data
Ejemplo n.º 8
0
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)