Skip to content

Commit c82ce04

Browse files
committed
Develop: Finish local and deployment configuration
1 parent d6fadb7 commit c82ce04

File tree

9 files changed

+170
-14
lines changed

9 files changed

+170
-14
lines changed

pages/IDEPage.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { Page } from '@playwright/test';
2+
3+
/**
4+
* A class which encapsulates the landing page of Theia with UI selectors.
5+
*/
6+
export class IDEPage {
7+
private readonly page: Page;
8+
9+
constructor(page: Page) {
10+
this.page = page;
11+
}
12+
13+
async createNewFile() {
14+
await this.page.getByRole('menuitem', { name: 'File' }).click();
15+
await this.page.getByText('New Text File').click();
16+
}
17+
}

pages/LandingPage.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@ export class LandingPage {
2020
await this.page.getByRole('textbox', { name: 'Password' }).fill(password);
2121
await this.page.getByRole('button', { name: 'Sign in' }).click();
2222
}
23+
24+
async launchLanguage(language: string) {
25+
const languageButton = await this.page.getByRole('button', { name: `Launch ${language}` });
26+
await languageButton.click();
27+
}
2328
}

playwright.config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ export default defineConfig({
5353
name: 'local',
5454
testMatch: /.*\.ide\.spec\.ts/,
5555
use: {
56-
headless: false,
57-
baseURL: process.env.LOCAL_URL || 'http://localhost:3000',
56+
baseURL: process.env.INSTANCE_URL || 'http://localhost:3000',
57+
storageState: undefined,
5858
},
5959
},
6060

playwright.env.template

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
BASE_URL=https://theia.artemis.cit.tum.de # The URL of the Theia Landing Page
2-
LOCAL_URL=http://localhost:3000 # Locally deployed Theia (Change the URL/Port if needed)
3-
INSTANCE_URL=https://instance.theia.artemis.cit.tum.de # The URL of the Theia Onlinde IDE (Local or Deployed)
2+
INSTANCE_URL=http://localhost:3000 # The URL of the Theia Onlinde IDE (Local or Deployed)
43
KEYCLOAK_USER= # Username for Keycloak
54
KEYCLOAK_PWD= # Password for Keycloak

tests/.auth/user.json

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
{
2+
"cookies": [
3+
{
4+
"name": "AUTH_SESSION_ID",
5+
"value": "MjhjNjkwNmItMTViNy00ZjE5LThiMTUtNGYxZDc4OGMxNDg1LmhBeDNSanZpLVZJNzloTlZoek9Cclc4Y2dPd1U1cGt2YjhJdlozakUtek1FTk5saEZ4eHlBQ1lSamdoSDAyc2twLURPaDR0ekRvZHRpN0JPa1ZQSVp3.d35dfc25d242-2995",
6+
"domain": "keycloak.ase.in.tum.de",
7+
"path": "/realms/Test/",
8+
"expires": -1,
9+
"httpOnly": true,
10+
"secure": true,
11+
"sameSite": "None"
12+
},
13+
{
14+
"name": "KC_AUTH_SESSION_HASH",
15+
"value": "MWsVS0SI6r9XGjO2BSJJABiSt2m7zimJSFR+qCwInAg",
16+
"domain": "keycloak.ase.in.tum.de",
17+
"path": "/realms/Test/",
18+
"expires": 1747062299.411927,
19+
"httpOnly": false,
20+
"secure": true,
21+
"sameSite": "Strict"
22+
},
23+
{
24+
"name": "KEYCLOAK_SESSION",
25+
"value": "MWsVS0SI6r9XGjO2BSJJABiSt2m7zimJSFR-qCwInAg",
26+
"domain": "keycloak.ase.in.tum.de",
27+
"path": "/realms/Test/",
28+
"expires": 1747148654.138574,
29+
"httpOnly": false,
30+
"secure": true,
31+
"sameSite": "None"
32+
},
33+
{
34+
"name": "KC_RESTART",
35+
"value": "eyJhbGciOiJkaXIiLCJlbmMiOiJBMTI4Q0JDLUhTMjU2In0..8cIy8UENgDSQYHMRJsHRNw.vfE9ZBE5hRye4-qVGG3Zd35dK9Aoi6FRbt6l-lbvWrrIWFl-oE2P9o4gbj7CtZx-UDdJPIVSGsPMuhj2qofLSlmI1lgrYzomOg1WUo9hZyGlJR91WagGvGQnimEP8TTvDpy3F-Q_1idfr0zE2fbGmTwv7KoY4_WjELHkwAXcNQWoprxcgDccWfa2utSJSd-Xmfv6I9XpC3M_oRITIRGo1imbePnnfnngpYSCflW2qaoQohmnnJXhQRfOZ6AvaCI9VT9Wj2zXsk9OdGi-ZI3DMQQ11kZRF3ZoRMrhF-xKasjBPZCdWS1kVYrAqESh7npLqWw02tWnaodi7rJBDqzszeurUi0TYJic2qWdkIjqXV3g8o6LuWfrAzjd5HJpwh_kZXjhmqfXas42OzMXXT7r9u3E8x3nKTRJYM3u_ZK7zQohUZVfFaPpeuchPoPNy_bsjQTr4dVq2VrKVgTtwhIgsuW_r6ERva4FF-xCzoz2OxCip2G-X13bpImukyp_dlfmMqhlwIb567UsAitxIaDAD-_nLCpaHl74kiEeEm5KnSwH73x2biTyQvIHolu3RMbpo9gW04FsQpgvqLr0lnsmdxjt97xzGfAY1-uplaSmBCUXqjXiYsMD87k1-S32iteu2Da6lQD_P62zz0_oayHpB7lMN8JFv1h5r5Ms-uV2qXqWvAcI1CsL3q4BF7r6CE_ydGFMPcjs39UltER81QjM29xKwrEwewFYj0F2-tcHi5uLM8oR8MsMa9c8rvttAkUMbAwIdcoq_ftURPcfFctqZ9ICpNXt_WBQNVet5TwaCanSiWPX6VMV0jIFOnNhNv8glfNLQb6rwyEoFtE6DlwJtVFzZT2V_SfX5UsYXjvx9lnhK0qbauE_N06bqlscKbW67YbAFaZRpT5WurEMLbL9AEvdLtDsvR1dLTj733gJ8s0t4x1qw4MZ86XckqFoZ7-WV-wUH0B9YBFGmXUC25-HDXh9D6BjeclY8AGcla0VB8gX3z-t-pXekNaHcM_ieRySexv5iu6RtcY5xtyUHEIRhWKq3SJNzszT6pNnff-b9fSlXYA3yT5LoE6-XpdZ4px2dky7qMN_kYRS9AAnd0gjV9B0GKYL2F1DW6iwUUSmcayZvRclwIyNNHRD_WWtBn3rDtlwJQMDEyXhEguNjolk2k7DjK5QNpaCo90CE0sTwuBmwMyNv9XaX1L7v5aolxYQzeLjAxsy9Id1ojvuHiRSb-xu5NoK4QSO8nGa8cwkfOz41NmN7w0gT8vpGQt0rXI_RpCB6d3RgkYKGMmy_fzRG0FOt4vMTKMZkQX18bGtI8s.fbIR6AYeLeScMQI0EfXOTg",
36+
"domain": "keycloak.ase.in.tum.de",
37+
"path": "/realms/Test/",
38+
"expires": -1,
39+
"httpOnly": true,
40+
"secure": true,
41+
"sameSite": "None"
42+
},
43+
{
44+
"name": "KEYCLOAK_IDENTITY",
45+
"value": "eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJmODNhODA0My1jMzFkLTQzNWQtYmM0Ni1lMzZiNzY3MGJhYmMifQ.eyJleHAiOjE3NDcxNDg2NTQsImlhdCI6MTc0NzA2MjI1NCwianRpIjoiMTU1Y2RlMGQtMGEzMC00MTI4LWEwZjAtNWJmZWY0YWU2ZTMzIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay5hc2UuaW4udHVtLmRlL3JlYWxtcy9UZXN0Iiwic3ViIjoiOWYyNTg2ZjEtZDUzNC00NWViLTg1MmYtZjBjNTU3M2FiNWM1IiwidHlwIjoiU2VyaWFsaXplZC1JRCIsInNpZCI6IjI4YzY5MDZiLTE1YjctNGYxOS04YjE1LTRmMWQ3ODhjMTQ4NSIsInN0YXRlX2NoZWNrZXIiOiJCbFNmcWhYcGdzNE90MW8xN1BfVTVRa2tWZWQ4c3FtUXJ2RnJ6SU5RRXlRIn0.lciZFd0R4AlUWDlilO7u9jazI0pijAWmFxuv_-R4KfArTv69SUIhgpM-GZUkhQjZqjWKWvVa0Nuz9lnjIcMUFg",
46+
"domain": "keycloak.ase.in.tum.de",
47+
"path": "/realms/Test/",
48+
"expires": -1,
49+
"httpOnly": true,
50+
"secure": true,
51+
"sameSite": "None"
52+
},
53+
{
54+
"name": "_oauth2_proxy_0",
55+
"value": "cO0BvUHs3AdLdGVWgtHv9kkmLW9xrOtMTJqa3JpH5JOsWBLpZR8q3XKsqgYpouWcxt-lndqHT_cHR8Xm8nbTH0ZX049k6AslzouIhpMlud51ZPhlbBf-28Y3WBz5DgqVUkDWst_t4HQmCxE5BuS85LAHY5ib3XCfMQdNhjI-eRUUtC44YPIPfZWFur58lYuXZdc4P40bgI_5B1kSSjf4QidsMGanSQ4S9k4g4Kd4XN3-lPmzBoXxBN8MlOqxtmZeSFRtGuJRp-2xjfuZCDC_X7PISRO4VindZR7WGEJe4z_SSQGEEpK0gowBv4sPgqG7cyOtsFWbObcS6fUdfmTMsJ293M41gy0JCKseRe6Acg5QgnHRigamNrVcAY4da4AQlkD6jsD4Irb9UXnlODpmG4mWgSF5MatlxoH1HlKrq87Inln_FE_cCREblbm0pseYG4i7Gb9w2l0h0uuJsVgbl1sCqP1HJpzcDa2ZTvVgiVw8aHZlR85q7BfUwa0UrHv7ltMb3BrgBC7OsOxf28f5LcOZ_gB5xYiMU05dNTG9YWZxYW5byL2SaIldU49G_aozAoZJgFfu0RbxyLVxj1TvXUPil3TSZiF4N4UX-mt4ogQgMSjzuO42AVFHduvzVliOy7rRJy4lHc_XNn3Rxdoz0WR5Z7wSaKBb1pr5kgw0vR7yBjKyU_kkiTOFX_eAQ7bsNiCLUrIYXz3appfK_UkeRQYQVVCTPzxlDHsGzgHLELmtAOAJDqaTgOTB_uxwPQJGDZjBoocMGOTNIkvCUh1nk6YebyL9MsXgyxRWS4XY9Pf743VllR7hg1j27xBuKvAWgyQXWCSzpwb1GF_QODZ9UiT_qE4U9qnhWCLjPo0-EiI5WbPMkycrCWrF7Z5wqa4e_m3QGcfEWA5FViwCdMpQALoq7T2IsOayf1VrgAim1XBzp-YZmRCyGWjZoZQl2JokjBLON1nS3rBMjdW0U194p4bgnLCCsMIzArGIumWtK9vR6wGMDlArHVivtCE7vv_EdXKuiy0xik0ecIC--Xd90VFDGjgw3FqH46RYXkr4DKDhlKSOxXint-7TbowXNCH-i9i8C1WcPmeNKpBVb2oCMP55sHeB-6kdKKloNO5TseXMX3NDQybirIvaaW_lJqPH29A8Cui3w-jrvdH15iJugkOOpwZXcmltZu1tR9BbWENeTyprMeYaCIh6rh1Dtuo8vG28hh_baTvwSz5pXzBjaLWpTWoH28RJU6Hz_ucQtT9QEb93LwYa3GszPJx5T0wP2InLkzTT08O4Rd3w9b0JRtkjygQAbyBVKXhlHOA10adaQxJ02LJKxfylB5h-oA-786N5zOGCotsbBwLnWSRw-2RPsAoMAMxqIkXf2WiXkHIykGUUN8Mz1OsGTDX4Cqi6CH-CyEOnrO_pgjrrMC8BRwHwi-Y6PumCMcqKHV8TeJ6lB9K1MM5EfcZGycHyOFeoy8XOq87sHzyiGCHwlODpsQK0UkJwhRbkJuyLWM6iQdLisce1wfTawdIQ2Fc-uie1o7WXfSRbMg4mZI2yjqoO_8juQntTHTTFw5724c5XTAdq9LyCoSnY_YRMX3v9-LrauZLPUk_KDrM9afUPpJWK0WrNqlkAnvRsl4x2emeWK0jLoqSBOcl5UlT0m5b4WR9YU9mDCq3wyKX-mESLmAQMrPVziUNCvOTQW1LEV2vjlN4xdv-pxSEE55n9HAVYBb0priGiu6FzDVDOAtg70zViOIx6bhYJNKpD1LuTLs2CmerykW73JPC96jWCTGqvTVo-d3dq1pvdStYhwZBwk-I2t5piv4aOv0JXjGnP2E8tc9RqQDeaTcZWvQayHruHxaxB2zjjr5U3q8rPkubH9qbkk-X2uDTpwnGdGwFewpprXsp-3AWxcxHW1kVOZQ1FbYk8SqA9ojLvRoTnal9zn9khGTQo4yVrPf8P5sqcsZNWmB6UUvvR2Sa7LLfx3oNUO9So-juN7IUfry1BT04Xg0_vPB9A4bfy-fd62v-EwhmTJPv8Iuty4TCyAITmnJXN1UZmVX4z14RK5-cFJLfaczHX85ZMQcgnlosHc6qaxXvrzTB8um13tT25Ous9relv6aqxPuaNEVgbWGNQ0--d3ibce4_INM74eU_0mwYB92fi9U6O74yGNm0dqXgxaW7UtHbdDeTGGPfvQZ3QDDG6eLmcGIIre082wkverMACyUTssnL_p0tsmo1yywaqE1Bduh3FL2tGRSR3WjCGUIW8n6dwcfK8MtsbDh0s6bc-ncXIz8w9Z8dqmnam-drdn1hyiKa6GXDpK2TBKIAIjQGpd0ju1tC6C2lBLx0Ex0BtJkD3YWTn-D6OuJrgw5B1X5PjyY2pHr8NOvs3ssMJnHPNaVi9PxbMCRv6m2s55R5Fq_FC7nMnyoVVduOzrOUj84JKX9qJMO0TAwIqlGtmQ1lYR8qrZwtTexdVC0lN6_JzmP4QETcpsREB2MgomBuPtx7c1U-1Ae7YpisE6D41CV-bAYeAOYnCKhY8J2221BOIgDMNAGPEOs1rTS9820vEE3Qzl2aeX1pY4ivXNWtuN-5CjZt5SFyOAYhvSK3C8A3GYgZhS8z6xBI8_nPYp9guYm6NHYaHuoSbLokE_oZ7tCM7M9TbHbL95kvikdtmkgzm4lmEJVmcwf2bHlgy9IVYtOu7dYE8QhzjgKtV44xGRLclIrN6rb3JKUi3zfaJrNyeFuHCLUi_h7dWUTLQWpphFZgdhQX9-dlNFHiqnQgHSXMvlhnqOsdsxLq5nBhgQntN4LnN-LyYhhN0MPc5G4RiuJGimmDCUijbaXV0Hhi5I3Idh6VfTBm-WK4OQLUeQokUu7enoPrck0qpz28bsV8XM_gdBclrtw8FDls8Y7xm1AbCzBjb7N0qcqm2pzruaxQRgGt2-f4b9bURrkLVDQAkiAlxkXx-C9F-sOXYq92-vSYztu3d9OPhZ1ZYsNrfPt83_lrI-_GvOOFoIuAnBA4QDIO7jtDg4NloxWLqNlcT12ZvSiDQECLb_zKesEG6-kZ7JV5qOc-BYdyRMeWx-yGdiDtiEDAX1_v_a5K4buA2crCAjXUotjg_OOEJQ1ak6jHp9pFG7xlFZnjvyybVhIN11vpf5Vvx1YqdWINWr3AuKdy4sKF6S8_R_Fh9gpudVG3OqR0JP83ePpYaYzVNMFIGT-Wq9zMhwJolTs4fN4g7SQQIGDL04w5DsoDE-rsXdlkX-zd77428NpNzA3CEpy90v1W6RNBN3SBViHjq23_m4gH5m_T10ZBWOpit07MVmMPFWIt8xBaEdgi9690hX2mSoz8yFPwgxM5o6uYbSn-5DX6vU2vweLPUYrz6jvlbvZaakLE_w5trlsOatT5HQYAlAwyBZoZZAqr-ONqPkNWSNVtNaXdp4t_b21J-v3M_2IG8hdqmE0dmuurJUCBnH-mGVpEH5GEk4sEpeOOyPsKtgycVsdb_KO3fLLW-GBpi8TSb2xK-ZCfTAw5uru-vZc6CW5JHduvd7OiJNsjq1v52-iTw1dEHlptX19CDSuPa4JzYCrfIl03ECnfuyg8kwkdzD9JAR9z8KqXtoH9v1Yn2HEoVrByzczTBQ9MHWZsxgydsDZpI-6OvKZRk3Y_zomeWpzosTqpLiARplYV0U-u_rXrTBj65N3zehYdTzxCWjoIxbr31fJ8P0vu7XsMvuKqT5ai3DhG0bKxSKMaZS62BVkDzXCGZENeQKkRI1nu7KIKKstZxcIZ5XyssL7FmdUmH0NnQsxJnY-YEr4uek6i_LYZrWVeMzMXaMaGtkPGM7n4vGWnMIvEOXCnA6uLLpgUhKjXaW5ogcZ_35rCl73kXJlaZUKSLIGHEDjZQAwNPwEcPFrbSn_Jjn",
56+
"domain": ".instance.theia.artemis.cit.tum.de",
57+
"path": "/",
58+
"expires": 1747667054.163838,
59+
"httpOnly": true,
60+
"secure": false,
61+
"sameSite": "Lax"
62+
},
63+
{
64+
"name": "_oauth2_proxy_1",
65+
"value": "hzIAP6rwfff3TMM4CdrBVzcDhMBSsSAFfqw26pIGkQ79vAktpShfEnf3Pv5i9-4pH3oCsaKDikzYLCXltCwjB_GggOo_QY=|1747062254|Smzj3Sm9uBDsh45U7iYYsT9jUFHA_JJsTn08dm9pKug=",
66+
"domain": ".instance.theia.artemis.cit.tum.de",
67+
"path": "/",
68+
"expires": 1747667054.163988,
69+
"httpOnly": true,
70+
"secure": false,
71+
"sameSite": "Lax"
72+
}
73+
],
74+
"origins": [
75+
{
76+
"origin": "https://instance.theia.artemis.cit.tum.de",
77+
"localStorage": [
78+
{
79+
"name": "theia:/bb38278b-1f39-4743-a0fd-7e0ceb8821ba/:keyboard",
80+
"value": "{\"tester\":{\"scores\":{\"en-US-pc\":36,\"en-US-mac\":36,\"en-Dvorak-pc\":12,\"en-Dvorak-mac\":12,\"en-Dvorak_Lefthanded-pc\":5,\"en-Dvorak_Lefthanded-mac\":5,\"en-Dvorak_Righthanded-pc\":6,\"en-Dvorak_Righthanded-mac\":6,\"en-Colemak-mac\":21,\"en-British-pc\":37,\"en-British-mac\":36,\"de-German-pc\":46,\"de-German-mac\":48,\"de-Swiss_German-pc\":42,\"de-Swiss_German-mac\":43,\"fr-French-pc\":20,\"fr-French-mac\":21,\"fr-Canadian_French-pc\":36,\"fr-Canadian_French-mac\":36,\"fr-Swiss_French-pc\":39,\"fr-Swiss_French-mac\":40,\"fr-Bepo-pc\":1,\"pt-Portuguese-pc\":37,\"pt-Portuguese-mac\":38,\"pt-Brazilian-mac\":36,\"pl-Polish-pc\":39,\"pl-Polish-mac\":39,\"nl-Dutch-pc\":37,\"nl-Dutch-mac\":36,\"es-Spanish-pc\":38,\"es-Spanish-mac\":37,\"it-Italian-pc\":38,\"it-Italian-mac\":39,\"sv-Swedish-pc\":40,\"sv-Swedish-mac\":41,\"tr-Turkish_Q-pc\":33,\"tr-Turkish_Q-mac\":34,\"cs-Czech-pc\":30,\"cs-Czech-mac\":29,\"ro-Romanian-pc\":36,\"ro-Romanian-mac\":36,\"da-Danish-pc\":38,\"da-Danish-mac\":39,\"nb-Norwegian-pc\":37,\"nb-Norwegian-mac\":39,\"hu-Hungarian-pc\":38,\"hu-Hungarian-mac\":38},\"topScore\":48,\"testedInputs\":{\"IntlYen.value\":\"^\",\"KeyK.value\":\"k\",\"KeyG.value\":\"g\",\"Digit2.value\":\"2\",\"Digit0.value\":\"0\",\"KeyV.value\":\"v\",\"KeyA.value\":\"a\",\"Backquote.value\":\"<\",\"KeyL.value\":\"l\",\"IntlBackslash.value\":\"^\",\"Quote.value\":\"ä\",\"KeyW.value\":\"w\",\"Digit8.value\":\"8\",\"KeyM.value\":\"m\",\"KeyH.value\":\"h\",\"Period.value\":\".\",\"Digit7.value\":\"7\",\"Digit1.value\":\"1\",\"KeyP.value\":\"p\",\"KeyD.value\":\"d\",\"KeyF.value\":\"f\",\"KeyO.value\":\"o\",\"KeyQ.value\":\"q\",\"KeyC.value\":\"c\",\"KeyN.value\":\"n\",\"BracketLeft.value\":\"ü\",\"KeyZ.value\":\"y\",\"KeyY.value\":\"z\",\"Digit3.value\":\"3\",\"Digit6.value\":\"6\",\"Digit5.value\":\"5\",\"KeyX.value\":\"x\",\"Slash.value\":\"-\",\"Backslash.value\":\"#\",\"Comma.value\":\",\",\"Minus.value\":\"ß\",\"Digit4.value\":\"4\",\"KeyB.value\":\"b\",\"KeyT.value\":\"t\",\"Digit9.value\":\"9\",\"KeyS.value\":\"s\",\"KeyI.value\":\"i\",\"KeyU.value\":\"u\",\"IntlRo.value\":\"<\",\"Equal.value\":\"´\",\"KeyJ.value\":\"j\",\"Semicolon.value\":\"ö\",\"KeyR.value\":\"r\",\"BracketRight.value\":\"+\",\"KeyE.value\":\"e\"}},\"source\":\"navigator.keyboard\",\"currentLayout\":\"de-German-mac\"}"
81+
}
82+
]
83+
}
84+
]
85+
}

tests/IDE.ide.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { test, expect, chromium, BrowserContext, Page } from '@playwright/test';
2+
import { IDEPage } from '../pages/IDEPage';
3+
import { LandingPage } from '../pages/LandingPage';
4+
5+
let context: BrowserContext;
6+
let page: Page;
7+
8+
test.describe('IDE Tests', () => {
9+
10+
test.beforeEach(async ({ page }) => {
11+
await page.goto(`${process.env.INSTANCE_URL}/`);
12+
await page.waitForURL(/.*#\/home\/project/);
13+
});
14+
15+
test('IDE: Create new File', async ( {page} ) => {
16+
const idePage = new IDEPage(page);
17+
await idePage.createNewFile();
18+
await expect(page.getByRole('listitem', { name: '/Untitled-' })).toBeVisible();
19+
});
20+
21+
22+
})

tests/LandingPage.spec.ts

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@ test.describe('Landing Page Tests', () => {
99
await page.goto(`${process.env.BASE_URL}/`);
1010
});
1111

12-
test('Login button should be visible', async ({ page }) => {
12+
test('LandingPage: Login button should be visible', async ({ page }) => {
1313
const landingPage = new LandingPage(page);
1414
const loginButton = await page.getByRole('button', { name: 'Login' });
1515
await expect(loginButton).toBeVisible();
1616
});
1717

18-
test('Login should redirect to Keycloak', async ({ page }) => {
18+
test('LandingPage: Login should redirect to Keycloak', async ({ page }) => {
1919
const landingPage = new LandingPage(page);
2020
const loginButton = await page.getByRole('button', { name: 'Login' }).click();
2121
await expect(page).toHaveURL(/.*keycloak\.ase\.in\.tum\.de.*/);
2222
});
2323

24-
test('Login via the UI', async ({ page }) => {
24+
test('LandingPage: Login via the UI', async ({ page }) => {
2525
const landingPage = new LandingPage(page);
2626
await landingPage.login(process.env.KEYCLOAK_USER || '', process.env.KEYCLOAK_PWD || '');
2727
const logoutButton = await page.getByRole('link', { name: 'logout' });
@@ -31,16 +31,40 @@ test.describe('Landing Page Tests', () => {
3131

3232
});
3333

34-
test.describe('Landing Page Setup', { tag: '@slow' }, () => {
34+
test.describe.configure({ mode: 'serial' });
35+
36+
test.describe('LandingPage: Landing Page Setup', () => {
3537

3638
test.beforeEach(async ({ page }) => {
3739
await page.goto(`${process.env.BASE_URL}/`);
3840
});
3941

40-
test('User should be logged in', async ({ page }) => {
41-
const landingPage = new LandingPage(page);
42+
test('LandingPage: User should be logged in', async ({ page }) => {
43+
4244
const logoutButton = await page.getByRole('link', { name: 'logout' });
4345
await expect(logoutButton).toBeVisible();
4446
});
4547

48+
test('LandingPage: Programming language instances should be visible', async ({ page }) => {
49+
const languageC = await page.getByRole('button', { name: 'Launch C' })
50+
await expect(languageC).toBeVisible();
51+
const languageJava = await page.getByRole('button', { name: 'Launch Java', exact: true })
52+
await expect(languageJava).toBeVisible();
53+
const languageJS = await page.getByRole('button', { name: 'Launch Javascript' })
54+
await expect(languageJS).toBeVisible();
55+
const languageOcaml = await page.getByRole('button', { name: 'Launch Ocaml' })
56+
await expect(languageOcaml).toBeVisible();
57+
const languagePython = await page.getByRole('button', { name: 'Launch Python' })
58+
await expect(languagePython).toBeVisible();
59+
const languageRust = await page.getByRole('button', { name: 'Launch Rust' })
60+
await expect(languageRust).toBeVisible();
61+
}
62+
);
63+
64+
test('LandingPage: Launch C instance', { tag: '@slow' }, async ({ page }) => {
65+
const landingPage = new LandingPage(page);
66+
await landingPage.launchLanguage('C');
67+
await page.waitForURL(/.*#\/home\/project/);
68+
});
69+
4670
});
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
import { test as setup, expect } from '@playwright/test';
2-
import { LandingPage } from '../pages/LandingPage';
2+
import { LandingPage } from '../../pages/LandingPage';
33
import path from 'path';
44

55
const authFile = path.join(__dirname, '../.auth/user.json');
66

77
/**
88
* @remarks
99
* This function is used to log in to Keycloak for theia via using the UI.
10+
* @tag slow (starting the instance takes a while)
1011
* @description This function automates the login process for the Keycloak UI.
1112
*/
12-
setup('authenticate', async ({ page }) => {
13+
setup('Auth: Authenticate and start Instance', { tag: '@slow' }, async ({ page }) => {
1314
await page.goto(`${process.env.BASE_URL}/`);
1415

1516
const landingPage = new LandingPage(page);
1617
await landingPage.login(process.env.KEYCLOAK_USER || '', process.env.KEYCLOAK_PWD || '');
1718

1819
await page.waitForURL(`${process.env.BASE_URL}/`);
1920

21+
await landingPage.launchLanguage('C');
22+
23+
await page.waitForURL(/.*#\/home\/project/);
24+
2025
await page.context().storageState({ path: authFile });
2126
});

utils/global-setup.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { FullConfig, chromium } from '@playwright/test';
2-
import { LandingPage } from '../pages/LandingPage';
1+
import { FullConfig } from '@playwright/test';
32
import 'dotenv';
43

54
/**

0 commit comments

Comments
 (0)