199 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			No EOL
		
	
	
		
			8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { test, expect } from '@playwright/test';
 | |
| import { STAGING_URL, PATHS } from './config/staging-config';
 | |
| 
 | |
| /**
 | |
|  * Test to verify the Zoho CRM integration with the new domain
 | |
|  * This test verifies:
 | |
|  * 1. The login functionality works
 | |
|  * 2. The dashboard loads correctly
 | |
|  * 3. The Zoho CRM integration shows the correct domain in OAuth Redirect URI
 | |
|  */
 | |
| test.describe('Zoho Domain Update Verification', () => {
 | |
|   test('Login and verify dashboard', async ({ page }) => {
 | |
|     console.log('Step 1: Logging in as test_trainer');
 | |
|     
 | |
|     // Navigate to WordPress login page
 | |
|     await page.goto(`${STAGING_URL}/wp-login.php`);
 | |
|     
 | |
|     // Verify the login page loaded
 | |
|     const loginTitle = await page.title();
 | |
|     console.log(`Login page title: ${loginTitle}`);
 | |
|     
 | |
|     // Fill in login credentials
 | |
|     await page.fill('#user_login', 'test_trainer');
 | |
|     await page.fill('#user_pass', 'Test123!');
 | |
|     
 | |
|     // Take screenshot before login
 | |
|     await page.screenshot({ path: 'test-results/zoho-verification/before-login.png' });
 | |
|     
 | |
|     // Click login button
 | |
|     await page.click('#wp-submit');
 | |
|     
 | |
|     // Wait for navigation
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Take screenshot after login
 | |
|     await page.screenshot({ path: 'test-results/zoho-verification/after-login.png' });
 | |
|     
 | |
|     // URL might not change on failed login, so check if we're still on the login page
 | |
|     const currentUrl = page.url();
 | |
|     console.log(`Current URL after login: ${currentUrl}`);
 | |
|     
 | |
|     if (currentUrl.includes('wp-login.php')) {
 | |
|       // Check if there's an error message
 | |
|       const errorMessage = await page.textContent('.login-error, .login_error');
 | |
|       if (errorMessage) {
 | |
|         console.log(`Login error: ${errorMessage}`);
 | |
|       }
 | |
|       console.log('Login might have failed, trying to navigate to admin directly');
 | |
|     }
 | |
|     
 | |
|     // Navigate to the WordPress admin directly
 | |
|     console.log('Step 2: Navigating to WordPress admin');
 | |
|     await page.goto(`${STAGING_URL}/wp-admin/`);
 | |
|     await page.waitForLoadState('networkidle');
 | |
|     
 | |
|     // Verify admin access
 | |
|     const adminTitle = await page.title();
 | |
|     console.log(`Admin page title: ${adminTitle}`);
 | |
|     console.log(`Admin page should contain "Dashboard": ${adminTitle.includes('Dashboard')}`);
 | |
|     
 | |
|     // Check if admin panel loaded
 | |
|     const adminPanel = page.locator('#wpcontent');
 | |
|     const adminPanelExists = await adminPanel.isVisible();
 | |
|     console.log(`Admin panel is visible: ${adminPanelExists}`);
 | |
|     
 | |
|     // Take screenshot of admin panel
 | |
|     await page.screenshot({ path: 'test-results/zoho-verification/admin-panel.png' });
 | |
|     
 | |
|     // Try to find any HVAC Community Events menu (may be in different formats)
 | |
|     console.log('Looking for HVAC Community Events menu...');
 | |
|     const menuLocators = [
 | |
|       'li#toplevel_page_hvac-community-events',
 | |
|       'li.menu-top:has-text("HVAC Community Events")',
 | |
|       '#adminmenu li:has-text("HVAC")',
 | |
|       '#adminmenu li:has-text("Community Events")'
 | |
|     ];
 | |
|     
 | |
|     let hvacMenu = null;
 | |
|     let menuExists = false;
 | |
|     
 | |
|     for (const locator of menuLocators) {
 | |
|       const menu = page.locator(locator);
 | |
|       if (await menu.count() > 0 && await menu.isVisible()) {
 | |
|         hvacMenu = menu;
 | |
|         menuExists = true;
 | |
|         console.log(`Found HVAC menu using locator: ${locator}`);
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     
 | |
|     console.log(`HVAC Community Events menu exists: ${menuExists}`);
 | |
|     
 | |
|     // If menu exists, try to access Zoho CRM section
 | |
|     if (menuExists && hvacMenu) {
 | |
|       await hvacMenu.click();
 | |
|       await page.waitForTimeout(1000); // Small delay for submenu to appear
 | |
|       
 | |
|       // Take screenshot of admin menu
 | |
|       await page.screenshot({ path: 'test-results/zoho-verification/admin-menu.png' });
 | |
|       
 | |
|       // Look for the Zoho CRM Sync submenu item using multiple potential selectors
 | |
|       const zohoCrmMenuItems = [
 | |
|         'a:has-text("Zoho CRM Sync")',
 | |
|         'li:has-text("Zoho CRM")',
 | |
|         'a[href*="zoho"]'
 | |
|       ];
 | |
|       
 | |
|       let zohoCrmMenuItem = null;
 | |
|       for (const selector of zohoCrmMenuItems) {
 | |
|         const menuItem = page.locator(selector);
 | |
|         if (await menuItem.count() > 0 && await menuItem.isVisible()) {
 | |
|           zohoCrmMenuItem = menuItem;
 | |
|           console.log(`Found Zoho CRM menu item using selector: ${selector}`);
 | |
|           break;
 | |
|         }
 | |
|       }
 | |
|       
 | |
|       if (zohoCrmMenuItem) {
 | |
|         console.log('Step 3: Navigating to Zoho CRM Sync page');
 | |
|         await zohoCrmMenuItem.click();
 | |
|         await page.waitForLoadState('networkidle');
 | |
|         
 | |
|         // Take screenshot of Zoho CRM page
 | |
|         await page.screenshot({ path: 'test-results/zoho-verification/zoho-crm-page.png' });
 | |
|         
 | |
|         // Verify the page title
 | |
|         const zohoCrmTitle = await page.title();
 | |
|         console.log(`Zoho CRM page title: ${zohoCrmTitle}`);
 | |
|         expect(zohoCrmTitle).toContain('Zoho CRM Sync');
 | |
|         
 | |
|         // Verify staging mode banner is present
 | |
|         const stagingBanner = page.locator('.notice-info:has-text("STAGING MODE ACTIVE")');
 | |
|         const bannerVisible = await stagingBanner.isVisible();
 | |
|         console.log(`Staging mode banner visible: ${bannerVisible}`);
 | |
|         expect(bannerVisible).toBeTruthy();
 | |
|         
 | |
|         // Check for the OAuth Redirect URI in the banner
 | |
|         const redirectUriText = await page.textContent('.notice-info');
 | |
|         console.log(`Banner text: ${redirectUriText}`);
 | |
|         
 | |
|         // Verify the banner contains the new domain
 | |
|         expect(redirectUriText).toContain('upskill-staging.measurequick.com');
 | |
|         expect(redirectUriText).not.toContain('wordpress-974670-5399585.cloudwaysapps.com');
 | |
|         
 | |
|         // Test the connection button to verify enhanced error reporting
 | |
|         console.log('Step 4: Testing Zoho CRM connection');
 | |
|         const testButton = page.locator('button#test-connection');
 | |
|         if (await testButton.isVisible()) {
 | |
|           await testButton.click();
 | |
|           await page.waitForTimeout(3000); // Wait for the response
 | |
|           
 | |
|           // Take screenshot of connection test result
 | |
|           await page.screenshot({ path: 'test-results/zoho-verification/connection-test-result.png' });
 | |
|           
 | |
|           // Check for error message with enhanced details
 | |
|           const errorMessage = page.locator('#connection-status');
 | |
|           const errorVisible = await errorMessage.isVisible();
 | |
|           console.log(`Error message visible: ${errorVisible}`);
 | |
|           
 | |
|           if (errorVisible) {
 | |
|             const errorText = await errorMessage.textContent();
 | |
|             console.log(`Error message: ${errorText}`);
 | |
|             
 | |
|             // Verify the error message contains detailed information
 | |
|             expect(errorText).toContain('Connection failed');
 | |
|             
 | |
|             // Look for debug information section (enhanced reporting)
 | |
|             const debugToggle = page.locator('button.toggle-debug');
 | |
|             const debugToggleVisible = await debugToggle.isVisible();
 | |
|             
 | |
|             if (debugToggleVisible) {
 | |
|               console.log('Debug information toggle found, clicking to expand...');
 | |
|               await debugToggle.click();
 | |
|               await page.waitForTimeout(1000);
 | |
|               
 | |
|               // Take screenshot with expanded debug info
 | |
|               await page.screenshot({ path: 'test-results/zoho-verification/error-debug-expanded.png' });
 | |
|               
 | |
|               // Verify debug information is shown
 | |
|               const debugInfo = page.locator('.hvac-zoho-debug');
 | |
|               const debugVisible = await debugInfo.isVisible();
 | |
|               expect(debugVisible).toBeTruthy();
 | |
|               
 | |
|               // Look for the new domain in debug information
 | |
|               const debugText = await debugInfo.textContent();
 | |
|               expect(debugText).toContain('upskill-staging.measurequick.com');
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       } else {
 | |
|         console.log('Zoho CRM Sync menu item not found');
 | |
|       }
 | |
|     } else {
 | |
|       console.log('HVAC Community Events menu not found');
 | |
|       // Take a screenshot of the whole admin panel to debug
 | |
|       await page.screenshot({ path: 'test-results/zoho-verification/admin-panel-no-menu.png', fullPage: true });
 | |
|     }
 | |
|   });
 | |
| }); |