brighter-trading/tests/test_Users.py

145 lines
5.2 KiB
Python

import json
import pytest
from DataCache_v3 import DataCache
from Users import Users
@pytest.fixture
def data_cache():
"""Create a fresh DataCache for each test."""
return DataCache()
@pytest.fixture
def users(data_cache):
"""Create a Users instance with the data cache."""
return Users(data_cache=data_cache)
class TestUsers:
"""Tests for the Users class."""
def test_create_guest(self, users):
"""Test creating a guest user."""
result = users.create_guest()
print(f'\n Test result: {result}')
assert isinstance(result, str)
assert result.startswith('guest_')
def test_create_unique_guest_name(self, users):
"""Test creating unique guest names."""
result = users.create_unique_guest_name()
print(f'\n Test result: {result}')
assert isinstance(result, str)
assert result.startswith('guest_')
def test_user_attr_is_taken(self, users):
"""Test checking if user attribute is taken."""
# Create a test user first
users.create_guest()
# Check for a name that doesn't exist
result = users.user_attr_is_taken('user_name', 'nonexistent_user_12345')
print(f'\n Test result for nonexistent: {result}')
assert isinstance(result, bool)
assert result is False
def test_scramble_text(self, users):
"""Test text scrambling (for password hashing)."""
original = 'SomeText'
result = users.scramble_text(original)
print(f'\n Test result: {result}')
assert isinstance(result, str)
assert result != original # Should be different from original
def test_create_new_user(self, users):
"""Test creating a new user with credentials."""
import random
username = f'test_user_{random.randint(1000, 9999)}'
result = users.create_new_user(
username=username,
email=f'{username}@email.com',
password='test_password123'
)
print(f'\n Test result: {result}')
assert result is True
def test_load_or_create_user_creates_guest(self, users):
"""Test that load_or_create_user creates a guest if user doesn't exist."""
result = users.load_or_create_user(None)
print(f'\n Test result: {result}')
assert isinstance(result, str)
assert result.startswith('guest_')
def test_get_id_after_create(self, users):
"""Test getting user ID after creation."""
guest_name = users.create_guest()
result = users.get_id(guest_name)
print(f'\n Test result: {result}')
assert result is not None
assert isinstance(result, int)
def test_get_username_by_id(self, users):
"""Test getting username by ID."""
guest_name = users.create_guest()
user_id = users.get_id(guest_name)
result = users.get_username(user_id)
print(f'\n Test result: {result}')
assert result == guest_name
def test_is_logged_in_false(self, users):
"""Test that a new guest is not logged in."""
guest_name = users.create_guest()
result = users.is_logged_in(guest_name)
print(f'\n Test result: {result}')
assert isinstance(result, bool)
def test_validate_password(self, users):
"""Test password validation."""
import random
username = f'test_user_{random.randint(1000, 9999)}'
password = 'correct_password123'
users.create_new_user(username=username, email=f'{username}@test.com', password=password)
# Should return True for correct password
result = users.validate_password(username=username, password=password)
print(f'\n Test result correct password: {result}')
assert result is True
# Should return False for wrong password
result = users.validate_password(username=username, password='wrong_password')
print(f'\n Test result wrong password: {result}')
assert result is False
def test_get_chart_view(self, users):
"""Test getting chart view settings."""
guest_name = users.create_guest()
# Get specific property
result = users.get_chart_view(user_name=guest_name, prop='timeframe')
print(f'\n Test result timeframe: {result}')
# Get all chart view settings
result = users.get_chart_view(user_name=guest_name)
print(f'\n Test result all: {result}')
# Result can be None or a dict, both are valid
def test_log_out_all_users(self, users):
"""Test logging out all users."""
result = users.log_out_all_users()
print(f'\n Test result: {result}')
# Should complete without error
def test_save_and_get_indicators(self, users, data_cache):
"""Test saving and retrieving indicators."""
# Create the indicators cache if it doesn't exist
if 'indicators' not in data_cache.caches:
data_cache.create_cache('indicators', cache_type='row')
guest_name = users.create_guest()
# Get indicators (may be empty initially)
result = users.get_indicators(guest_name)
print(f'\n Test result get: {result}')
# Result can be None or a DataFrame, both are valid