blob: 698f5a93f7e547bf7a37829f8f0e382eea7e56ef [file] [log] [blame]
Marc Kupietz55fc3162022-12-04 16:25:49 +01001const chai = require('chai');
2const assert = chai.assert;
Marc Kupietz5e45a2f2022-12-03 15:32:40 +01003
4class KorAPRC {
5 korap_url = ""
6
7 constructor(korap_url) {
8 this.korap_url = korap_url
9 }
10
11 static new(korap_url) {
12 return new KorAPRC(korap_url)
13 }
14
15 async login(page, username, password) {
Marc Kupietz9e0f5192025-03-09 12:12:16 +010016 page.goto(this.korap_url);
17 await page.waitForNavigation({ waitUntil: 'networkidle2' });
Marc Kupietz55fc3162022-12-04 16:25:49 +010018 if (this.login == "") return false;
Marc Kupietz9e0f5192025-03-09 12:12:16 +010019 if (username == "") return false;
20 if (password == "") return false;
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010021
Marc Kupietz9e0f5192025-03-09 12:12:16 +010022 await page.click('.dropdown-btn');
23 await page.waitForSelector('input[name=handle_or_email]', { visible: true });
24 const username_field = await page.$("input[name=handle_or_email]")
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010025 if (username_field != null) {
Marc Kupietz9e0f5192025-03-09 12:12:16 +010026 await username_field.focus();
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010027 await username_field.type(username);
Marc Kupietz9e0f5192025-03-09 12:12:16 +010028 const password_field = await page.$("input[name=pwd]")
29 await password_field.focus()
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010030 await page.keyboard.type(password)
31 await page.keyboard.press("Enter")
Marc Kupietze533ca82022-12-06 07:53:22 +010032 } else {
33 return false
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010034 }
35
Marc Kupietz9e0f5192025-03-09 12:12:16 +010036 await page.waitForNavigation({ waitUntil: 'networkidle2' });
37 const logout = await page.$(".logout")
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010038 if (logout == null) {
39 return false
40 }
41
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010042 return true
43 }
44
45 async search(page, query) {
Marc Kupietz9e0f5192025-03-09 12:12:16 +010046 const query_field = await page.$("#q-field");
47 assert.notEqual(query_field, null, "Query field not found");
48
49 await page.waitForSelector("#q-field", { visible: true });
50 await query_field.click({ clickCount: 3 });
51 await page.keyboard.type(query);
52 await page.keyboard.press("Enter");
53
54 await page.waitForNavigation({ waitUntil: 'networkidle2' });
55 const total_results = await page.$("#total-results");
56 assert.notEqual(total_results, null, "Cannot find total results");
57
58 const hits = Number((await page.evaluate(total_results => total_results.textContent, total_results)).replace(/[,.]/g, ""));
59 return hits;
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010060 }
61
62 async logout(page) {
Marc Kupietz9e0f5192025-03-09 12:12:16 +010063 await page.click('.dropdown-btn');
64 await page.waitForSelector('.logout', { visible: true });
65 const logout_button = await page.$(".logout")
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010066 if (logout_button == null) {
Marc Kupietz9e0f5192025-03-09 12:12:16 +010067 console.log("Logout button not found")
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010068 return false
69 }
Marc Kupietz9e0f5192025-03-09 12:12:16 +010070 await logout_button.click()
71 await page.waitForNavigation({ waitUntil: 'networkidle2' });
72 const loginField = await page.$('input[name=handle_or_email]');
73 return loginField !== null;
Marc Kupietz5e45a2f2022-12-03 15:32:40 +010074 }
75
76 async assure_glimpse_off(page) {
77 const glimpse = await page.$("input[name=cutoff]")
78 const glimpse_value = await (await glimpse.getProperty('checked')).jsonValue()
79 if (glimpse_value) {
80 await page.click("#glimpse")
81 }
82
83 }
84}
85
86module.exports = KorAPRC