swayamshetkar's picture
itial commit
0bda635
import requests
import time
from algosdk import account, mnemonic, util
import sys
import os
import random
import string
# URL
BASE_URL = "http://localhost:8000"
def generate_username():
return "user_" + ''.join(random.choices(string.ascii_lowercase + string.digits, k=6))
def sign_message(private_key, message):
# Determine how backend expects signature.
# algorand_service.verify_signature uses util.verify_bytes
# which expects the signature of the byte encoded message.
# We need to sign the bytes of the message.
# In Pera/standard dApps, usually we sign "MX..." if it's a specific format
# But here backend does: util.verify_bytes(message.encode('utf-8'), signature, wallet_address)
# So we just sign the raw bytes.
signature = util.sign_bytes(message.encode('utf-8'), private_key)
return signature
def test_signup_login():
print("--- Testing Auth Flow ---")
# 1. Generate Wallet
private_key, address = account.generate_account()
print(f"Generated Wallet: {address}")
username = generate_username()
print(f"Username: {username}")
message = "Login to Rift" # In real app, this should be a nonce
signature = sign_message(private_key, message)
# 2. Test Login (Unregistered) -> Should Fail
print("\n[Test 1] Login Unregistered User...")
login_payload = {
"wallet_address": address,
"signature": signature,
"message": message
}
res = requests.post(f"{BASE_URL}/auth/login", json=login_payload)
if res.status_code == 404:
print("SUCCESS: Login failed as expected (404 User not found).")
else:
print(f"FAILURE: Login unexpected response: {res.status_code} {res.text}")
return
# 3. Test Signup -> Should Success
print("\n[Test 2] Signup New User...")
signup_payload = {
"wallet_address": address,
"signature": signature,
"message": message,
"username": username
}
res = requests.post(f"{BASE_URL}/auth/signup", json=signup_payload)
if res.status_code == 200:
print("SUCCESS: Signup successful.")
token = res.json().get("access_token")
print(f"Token received: {token[:10]}...")
else:
print(f"FAILURE: Signup failed: {res.status_code} {res.text}")
return
# 4. Test Login (Registered) -> Should Success
print("\n[Test 3] Login Registered User...")
res = requests.post(f"{BASE_URL}/auth/login", json=login_payload)
if res.status_code == 200:
print("SUCCESS: Login successful.")
else:
print(f"FAILURE: Login failed: {res.status_code} {res.text}")
# 5. Test Signup (Duplicate) -> Should Fail
print("\n[Test 4] Signup Duplicate User...")
res = requests.post(f"{BASE_URL}/auth/signup", json=signup_payload)
if res.status_code == 400:
print("SUCCESS: Duplicate signup failed as expected (400).")
else:
print(f"FAILURE: Duplicate signup unexpected response: {res.status_code} {res.text}")
if __name__ == "__main__":
test_signup_login()