mirror of
https://github.com/MCV-Software/TWBlue.git
synced 2026-03-06 09:27:33 +01:00
Commit
This commit is contained in:
186
test_atproto_session.py
Normal file
186
test_atproto_session.py
Normal file
@@ -0,0 +1,186 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Test script for Blueski session functionality.
|
||||
|
||||
This script demonstrates how to use the Blueski session implementation.
|
||||
It can be used to verify that the authentication flow works correctly.
|
||||
|
||||
Usage:
|
||||
python test_atproto_session.py
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# Add src to path
|
||||
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
|
||||
|
||||
# Import required modules
|
||||
from sessions.blueski import session
|
||||
import paths
|
||||
import logging
|
||||
|
||||
# Setup logging
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
|
||||
def test_authorization():
|
||||
"""Test the authorization flow."""
|
||||
print("\n" + "="*60)
|
||||
print("Blueski Session Authorization Test")
|
||||
print("="*60)
|
||||
print("\nThis test will:")
|
||||
print("1. Create a new Blueski session")
|
||||
print("2. Walk you through the authorization process")
|
||||
print("3. Verify the session was created correctly")
|
||||
print("\nNOTE: You'll need:")
|
||||
print(" - Your Blueski handle (e.g., user.bsky.social)")
|
||||
print(" - An app password (NOT your main password)")
|
||||
print("\n" + "="*60 + "\n")
|
||||
|
||||
# Create a test session
|
||||
test_session_id = "test_blueski_001"
|
||||
print(f"Creating session with ID: {test_session_id}")
|
||||
|
||||
s = session.Session(session_id=test_session_id)
|
||||
|
||||
try:
|
||||
# Try to login first (should fail for new session)
|
||||
print("\nAttempting to login with existing credentials...")
|
||||
s.get_configuration()
|
||||
s.login()
|
||||
print("✓ Login successful! Session already exists.")
|
||||
print(f" Session name: {s.get_name()}")
|
||||
print(f" Logged in: {s.logged}")
|
||||
|
||||
except Exception as e:
|
||||
# Expected for first run
|
||||
print(f"✗ Login failed (expected): {type(e).__name__}")
|
||||
print("\nStarting authorization process...")
|
||||
print("(GUI dialogs will open for handle and password)")
|
||||
|
||||
try:
|
||||
result = s.authorise()
|
||||
|
||||
if result:
|
||||
print("\n✓ Authorization successful!")
|
||||
print(f" Session name: {s.get_name()}")
|
||||
print(f" Logged in: {s.logged}")
|
||||
print(f" User DID: {s.settings['blueski']['did']}")
|
||||
print(f" Handle: {s.settings['blueski']['handle']}")
|
||||
|
||||
# Check that session_string was saved
|
||||
if s.settings['blueski']['session_string']:
|
||||
print(" ✓ Session string saved")
|
||||
else:
|
||||
print(" ✗ WARNING: Session string not saved!")
|
||||
|
||||
# Check that app_password was cleared
|
||||
if not s.settings['blueski']['app_password']:
|
||||
print(" ✓ App password cleared (secure)")
|
||||
else:
|
||||
print(" ✗ WARNING: App password still in config!")
|
||||
|
||||
print(f"\nSession configuration saved to:")
|
||||
print(f" {os.path.join(paths.config_path(), test_session_id, 'session.conf')}")
|
||||
|
||||
return s
|
||||
else:
|
||||
print("\n✗ Authorization cancelled or failed")
|
||||
return None
|
||||
|
||||
except Exception as e:
|
||||
print(f"\n✗ Authorization error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
def test_logout(s):
|
||||
"""Test the logout functionality."""
|
||||
if not s:
|
||||
print("\nSkipping logout test (no active session)")
|
||||
return
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("Testing logout functionality")
|
||||
print("="*60)
|
||||
|
||||
print(f"\nCurrent state: logged={s.logged}")
|
||||
|
||||
s.logout()
|
||||
|
||||
print(f"After logout: logged={s.logged}")
|
||||
|
||||
# Check that session_string was cleared
|
||||
if not s.settings['blueski']['session_string']:
|
||||
print("✓ Session string cleared")
|
||||
else:
|
||||
print("✗ WARNING: Session string not cleared!")
|
||||
|
||||
print("\nLogout test complete")
|
||||
|
||||
def test_session_restoration():
|
||||
"""Test restoring a session from saved credentials."""
|
||||
print("\n" + "="*60)
|
||||
print("Testing session restoration")
|
||||
print("="*60)
|
||||
|
||||
test_session_id = "test_blueski_001"
|
||||
print(f"\nCreating new session object with ID: {test_session_id}")
|
||||
|
||||
s = session.Session(session_id=test_session_id)
|
||||
|
||||
try:
|
||||
s.get_configuration()
|
||||
s.login()
|
||||
print("✓ Session restored successfully!")
|
||||
print(f" Session name: {s.get_name()}")
|
||||
print(f" Logged in: {s.logged}")
|
||||
return s
|
||||
except Exception as e:
|
||||
print(f"✗ Failed to restore session: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
def main():
|
||||
"""Main test function."""
|
||||
print("\nBlueski Session Test Suite")
|
||||
print("Ensure you have wxPython installed for GUI dialogs\n")
|
||||
|
||||
# Test 1: Authorization
|
||||
session_obj = test_authorization()
|
||||
|
||||
if not session_obj:
|
||||
print("\nTests aborted (authorization failed)")
|
||||
return
|
||||
|
||||
input("\nPress Enter to test session restoration...")
|
||||
|
||||
# Test 2: Logout
|
||||
test_logout(session_obj)
|
||||
|
||||
input("\nPress Enter to test session restoration after logout...")
|
||||
|
||||
# Test 3: Try to restore (should fail after logout)
|
||||
restored_session = test_session_restoration()
|
||||
|
||||
if not restored_session:
|
||||
print("\n✓ Session restoration correctly failed after logout")
|
||||
else:
|
||||
print("\n✗ WARNING: Session was restored after logout (unexpected)")
|
||||
|
||||
print("\n" + "="*60)
|
||||
print("All tests complete!")
|
||||
print("="*60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
print("\n\nTest interrupted by user")
|
||||
except Exception as e:
|
||||
print(f"\n\nUnexpected error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
Reference in New Issue
Block a user