You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
282 lines
12 KiB
282 lines
12 KiB
import { test, expect } from '@playwright/test';
|
|
import { getTestUserData, importUser } from './testUtils';
|
|
|
|
/**
|
|
* Active Identity Migration - Step-by-Step Test
|
|
*
|
|
* Comprehensive test that verifies actual identity switching functionality
|
|
*
|
|
* @author Matthew Raymer
|
|
* @date 2025-08-22T12:35Z
|
|
*/
|
|
|
|
test.describe('Active Identity Migration - Step-by-Step Test', () => {
|
|
test('should successfully switch between identities step by step', async ({ page }) => {
|
|
// Step 1: Setup - Ensure we have test users
|
|
console.log('🔧 Step 1: Setting up test users...');
|
|
const userZeroData = getTestUserData('00');
|
|
const userOneData = getTestUserData('01');
|
|
|
|
// Import User Zero if not present
|
|
try {
|
|
console.log('📥 Importing User Zero...');
|
|
await importUser(page, '00');
|
|
await page.waitForLoadState('networkidle');
|
|
console.log('✅ User Zero imported successfully');
|
|
} catch (error) {
|
|
console.log('ℹ️ User Zero might already exist, continuing...');
|
|
}
|
|
|
|
// Import User One if not present
|
|
try {
|
|
console.log('📥 Importing User One...');
|
|
await importUser(page, '01');
|
|
await page.waitForLoadState('networkidle');
|
|
console.log('✅ User One imported successfully');
|
|
} catch (error) {
|
|
console.log('ℹ️ User One might already exist, continuing...');
|
|
}
|
|
|
|
// Step 2: Navigate to account page and verify initial state
|
|
console.log('🔍 Step 2: Checking initial account page state...');
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify page loads with correct heading
|
|
await expect(page.locator('h1:has-text("Your Identity")')).toBeVisible();
|
|
console.log('✅ Account page loaded with correct heading');
|
|
|
|
// Check current active user
|
|
const didWrapper = page.getByTestId('didWrapper');
|
|
const currentDid = await didWrapper.locator('code').innerText();
|
|
console.log(`📋 Current active user: ${currentDid}`);
|
|
|
|
// Step 3: Access identity switcher
|
|
console.log('🔧 Step 3: Accessing identity switcher...');
|
|
await page.getByTestId('advancedSettings').click();
|
|
|
|
// Wait for and verify identity switcher link
|
|
const switchIdentityLink = page.locator('#switch-identity-link');
|
|
await switchIdentityLink.waitFor({ state: 'visible', timeout: 10000 });
|
|
await expect(switchIdentityLink).toBeVisible();
|
|
console.log('✅ Identity switcher link is visible');
|
|
|
|
// Click to open identity switcher
|
|
await switchIdentityLink.click();
|
|
console.log('🔄 Navigating to identity switcher page...');
|
|
|
|
// Step 4: Verify identity switcher page loads
|
|
console.log('🔍 Step 4: Verifying identity switcher page...');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Verify we're on the identity switcher page
|
|
await expect(page.locator('h1:has-text("Switch Identity")')).toBeVisible();
|
|
console.log('✅ Identity switcher page loaded');
|
|
|
|
// Verify basic elements are present
|
|
await expect(page.locator('#start-link')).toBeVisible();
|
|
console.log('✅ Start link is visible');
|
|
|
|
// Step 5: Check available identities
|
|
console.log('🔍 Step 5: Checking available identities...');
|
|
|
|
// Look for User Zero in the identity list
|
|
const userZeroElement = page.locator(`code:has-text("${userZeroData.did}")`);
|
|
const userZeroVisible = await userZeroElement.isVisible();
|
|
console.log(`👤 User Zero visible: ${userZeroVisible}`);
|
|
|
|
// Look for User One in the identity list
|
|
const userOneElement = page.locator(`code:has-text("${userOneData.did}")`);
|
|
const userOneVisible = await userOneElement.isVisible();
|
|
console.log(`👤 User One visible: ${userOneVisible}`);
|
|
|
|
// Step 6: Attempt to switch to User Zero
|
|
console.log('🔄 Step 6: Attempting to switch to User Zero...');
|
|
|
|
if (userZeroVisible) {
|
|
console.log('🖱️ Clicking on User Zero...');
|
|
await userZeroElement.click();
|
|
|
|
// Wait for navigation to home page (default behavior after identity switch)
|
|
await page.waitForLoadState('networkidle');
|
|
console.log('✅ Clicked User Zero, waiting for page load...');
|
|
|
|
// Verify we're on home page (default after identity switch)
|
|
await expect(page.locator('#ViewHeading')).toBeVisible();
|
|
console.log('✅ Navigated to home page after identity switch');
|
|
|
|
// Check if active user changed by going back to account page
|
|
console.log('🔍 Checking if active user changed...');
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Wait a moment for the component to refresh its state
|
|
await page.waitForTimeout(1000);
|
|
|
|
const newDidWrapper = page.getByTestId('didWrapper');
|
|
const newCurrentDid = await newDidWrapper.locator('code').innerText();
|
|
console.log(`📋 New active user: ${newCurrentDid}`);
|
|
|
|
if (newCurrentDid === userZeroData.did) {
|
|
console.log('✅ SUCCESS: Successfully switched to User Zero!');
|
|
} else {
|
|
console.log(`❌ FAILED: Expected User Zero (${userZeroData.did}), got ${newCurrentDid}`);
|
|
}
|
|
} else {
|
|
console.log('❌ User Zero not visible in identity list - cannot test switching');
|
|
}
|
|
|
|
// Step 7: Test summary
|
|
console.log('📊 Step 7: Test Summary');
|
|
console.log(`- Initial user: ${currentDid}`);
|
|
console.log(`- User Zero available: ${userZeroVisible}`);
|
|
console.log(`- User One available: ${userOneVisible}`);
|
|
console.log(`- Final user: ${userZeroVisible ? await page.getByTestId('didWrapper').locator('code').innerText() : 'N/A'}`);
|
|
|
|
// Final verification - ensure we can still access identity switcher
|
|
console.log('🔍 Final verification: Testing identity switcher access...');
|
|
|
|
// After identity switch, advanced settings are closed by default
|
|
// We need to click advanced settings to access the identity switcher
|
|
await page.getByTestId('advancedSettings').click();
|
|
|
|
// Wait for the switch identity link to be visible
|
|
const finalSwitchLink = page.locator('#switch-identity-link');
|
|
await expect(finalSwitchLink).toBeVisible({ timeout: 10000 });
|
|
console.log('✅ Identity switcher still accessible after switching');
|
|
});
|
|
|
|
test('should verify advanced settings state persistence issue', async ({ page }) => {
|
|
console.log('🔍 Testing advanced settings state persistence...');
|
|
|
|
// Step 1: Navigate to account page
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Step 2: Open advanced settings
|
|
console.log('📂 Opening advanced settings...');
|
|
await page.getByTestId('advancedSettings').click();
|
|
|
|
// Step 3: Verify identity switcher link is visible
|
|
const switchIdentityLink = page.locator('#switch-identity-link');
|
|
await expect(switchIdentityLink).toBeVisible();
|
|
console.log('✅ Identity switcher link is visible');
|
|
|
|
// Step 4: Navigate to identity switcher
|
|
console.log('🔄 Navigating to identity switcher...');
|
|
await switchIdentityLink.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Step 5: Go back to account page
|
|
console.log('⬅️ Going back to account page...');
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Step 6: Check if advanced settings are still open
|
|
console.log('🔍 Checking if advanced settings state persisted...');
|
|
const switchIdentityLinkAfter = page.locator('#switch-identity-link');
|
|
|
|
try {
|
|
await expect(switchIdentityLinkAfter).toBeVisible({ timeout: 5000 });
|
|
console.log('✅ SUCCESS: Advanced settings state persisted!');
|
|
} catch (error) {
|
|
console.log('❌ FAILED: Advanced settings state did NOT persist');
|
|
console.log('🔍 This confirms the state persistence issue in Active Identity migration');
|
|
|
|
// Verify the link is hidden
|
|
await expect(switchIdentityLinkAfter).toBeHidden();
|
|
console.log('✅ Confirmed: Identity switcher link is hidden (advanced settings closed)');
|
|
}
|
|
});
|
|
|
|
test('should debug identity switching behavior', async ({ page }) => {
|
|
console.log('🔍 Debugging identity switching behavior...');
|
|
|
|
// Step 1: Setup - Ensure we have test users
|
|
const userZeroData = getTestUserData('00');
|
|
const userOneData = getTestUserData('01');
|
|
|
|
// Import both users
|
|
try {
|
|
await importUser(page, '00');
|
|
await importUser(page, '01');
|
|
} catch (error) {
|
|
// Users might already exist
|
|
}
|
|
|
|
// Step 2: Start with current user
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
const currentDidWrapper = page.getByTestId('didWrapper');
|
|
const currentDid = await currentDidWrapper.locator('code').innerText();
|
|
console.log(`👤 Current active user: ${currentDid}`);
|
|
|
|
// Step 3: Navigate to identity switcher
|
|
await page.getByTestId('advancedSettings').click();
|
|
const switchIdentityLink = page.locator('#switch-identity-link');
|
|
await expect(switchIdentityLink).toBeVisible();
|
|
await switchIdentityLink.click();
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Step 4: Debug - Check what elements exist
|
|
console.log('🔍 Debugging available elements...');
|
|
const allDivs = await page.locator('div').filter({ hasText: userZeroData.did }).count();
|
|
console.log(`📊 Found ${allDivs} divs containing User Zero DID`);
|
|
|
|
// Step 5: Try different click strategies
|
|
console.log('🔄 Trying different click strategies...');
|
|
|
|
// Strategy 1: Click on the identity list item with specific class structure
|
|
try {
|
|
// Look for the identity list item - it should be in the identity list area, not QuickNav
|
|
const clickableDiv = page.locator('li div').filter({ hasText: userZeroData.did }).first();
|
|
await clickableDiv.waitFor({ state: 'visible', timeout: 5000 });
|
|
console.log('✅ Found clickable div with User Zero DID');
|
|
|
|
// Debug: Log the element's attributes
|
|
const elementInfo = await clickableDiv.evaluate((el) => ({
|
|
tagName: el.tagName,
|
|
className: el.className,
|
|
innerHTML: el.innerHTML.slice(0, 100) + '...',
|
|
hasClickHandler: el.onclick !== null || el.addEventListener !== undefined
|
|
}));
|
|
console.log('📋 Element info:', JSON.stringify(elementInfo, null, 2));
|
|
|
|
await clickableDiv.click();
|
|
console.log('✅ Clicked on User Zero element');
|
|
|
|
// Wait for navigation
|
|
await page.waitForLoadState('networkidle');
|
|
|
|
// Check if we're on home page
|
|
const homeHeading = page.locator('#ViewHeading');
|
|
if (await homeHeading.isVisible()) {
|
|
console.log('✅ Navigated to home page after click');
|
|
} else {
|
|
console.log('❌ Did not navigate to home page');
|
|
}
|
|
|
|
// Check if identity actually switched
|
|
await page.goto('./account');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(1000); // Wait for component to update
|
|
|
|
const newDidWrapper = page.getByTestId('didWrapper');
|
|
const newCurrentDid = await newDidWrapper.locator('code').innerText();
|
|
console.log(`📋 Active user after click: ${newCurrentDid}`);
|
|
|
|
if (newCurrentDid === userZeroData.did) {
|
|
console.log('✅ SUCCESS: Identity switching works!');
|
|
} else if (newCurrentDid === currentDid) {
|
|
console.log('❌ FAILED: Identity did not change - still on original user');
|
|
} else {
|
|
console.log(`❌ UNEXPECTED: Identity changed to different user: ${newCurrentDid}`);
|
|
}
|
|
|
|
} catch (error) {
|
|
console.log('❌ Failed to find/click User Zero element');
|
|
console.log(`Error: ${error}`);
|
|
}
|
|
});
|
|
});
|
|
|