Fix login and logout flows for newer Kalamar versions

Change-Id: If7d15f1ada102f7201b97c76f277f2a1db41afb9
diff --git a/lib/korap_rc.js b/lib/korap_rc.js
index 5a650a4..158ecbb 100644
--- a/lib/korap_rc.js
+++ b/lib/korap_rc.js
@@ -18,8 +18,31 @@
             if (username == "") return false;
             if (password == "") return false;
 
+            // Check if already logged in as the correct user
+            const currentLoggedInUser = await page.evaluate(() => {
+                const profileBtn = document.querySelector('.dropdown-btn.profile');
+                if (profileBtn) {
+                    const userNameEl = profileBtn.querySelector('.user-name');
+                    return userNameEl ? userNameEl.textContent.trim() : null;
+                }
+                return null;
+            });
+
+            if (currentLoggedInUser === username) {
+                console.log(`Already logged in as ${username}`);
+                return true;
+            } else if (currentLoggedInUser) {
+                console.log(`Logged in as different user: ${currentLoggedInUser}. Logging out...`);
+                await this.logout(page);
+                await page.goto(this.korap_url, { waitUntil: 'domcontentloaded' });
+            }
+
             await page.waitForSelector('.dropdown-btn', { visible: true });
-            await page.click('.dropdown-btn');
+            const loginBtn = await page.$('.dropdown-btn.login') || await page.$('.dropdown-btn');
+            if (!loginBtn) {
+                return false;
+            }
+            await loginBtn.click();
             await page.waitForSelector('input[name=handle_or_email]', { visible: true });
             const username_field = await page.$("input[name=handle_or_email]")
             if (username_field != null) {
@@ -35,7 +58,7 @@
 
             await page.waitForNavigation({ waitUntil: 'domcontentloaded' }); // Wait for navigation after login
             await page.waitForSelector("#q-field", { visible: true }); // Wait for query field to confirm login
-            const logout = await page.$(".logout")
+            const logout = await page.$(".logout, a[data-testid=\"logout\"], .dropdown-btn.profile")
             if (logout == null) {
                 return false
             }
@@ -143,17 +166,36 @@
 
     async logout(page) {
         try {
-            // Direct navigation to logout URL - most reliable method
-            const currentUrl = await page.url();
-            const logoutUrl = currentUrl.replace(/\/$/, '') + '/logout';
+            // First, try to find the logout link in the page
+            const logoutHref = await page.evaluate(() => {
+                const logoutEl = document.querySelector('a.logout, a[data-testid="logout"]');
+                return logoutEl ? logoutEl.getAttribute('href') : null;
+            });
 
-            await page.goto(logoutUrl, { waitUntil: 'domcontentloaded', timeout: 10000 });
+            if (logoutHref) {
+                const absoluteLogoutUrl = new URL(logoutHref, page.url()).href;
+                await page.goto(absoluteLogoutUrl, { waitUntil: 'domcontentloaded', timeout: 10000 });
+            } else {
+                const currentUrl = await page.url();
+                const baseUrl = currentUrl.replace(/\/$/, '');
+                try {
+                    await page.goto(baseUrl + '/user/logout', { waitUntil: 'domcontentloaded', timeout: 5000 });
+                } catch (e) {
+                    await page.goto(baseUrl + '/logout', { waitUntil: 'domcontentloaded', timeout: 5000 });
+                }
+            }
 
             // Navigate back to main page to ensure clean state for subsequent tests
             await page.goto(this.korap_url, { waitUntil: 'domcontentloaded', timeout: 10000 });
 
-            return true;
+            // Verify we are actually logged out
+            const loggedOut = await page.evaluate(() => {
+                return document.querySelector('a.logout, a[data-testid="logout"], .dropdown-btn.profile') === null;
+            });
+
+            return loggedOut;
         } catch (error) {
+            console.error(`Logout failed: ${error.message}`);
             return false;
         }
     }