{"version":3,"file":"index.cjs","sources":["../../lib/commands/getNc.ts","../../lib/commands/sessions.ts","../../lib/User.ts","../../lib/commands/users.ts","../../lib/commands/docker.ts","../../lib/commands/state.ts","../../lib/commands/occ.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Selector } from \"../selectors\"\n\nexport const getNc = function(selector: Selector, args: Object = {}): Cypress.Chainable> {\n\tif (typeof selector !== 'function') {\n\t\tconsole.error(selector)\n\t\tthrow new Error('Invalid selector')\n\t}\n\treturn selector(args)\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { User } from \"../User\"\n\n/**\n * You should always upload files and/or create users\n * before login, so that the cookies are NOT YET defined.\n *\n * @see https://docs.cypress.io/api/commands/session\n */\nexport const login = function(user: User) {\n\tcy.session(user, function() {\n\t\tcy.request('/csrftoken').then(({ body }) => {\n\t\t\tconst requestToken = body.token\n\t\t\tcy.request({\n\t\t\t\tmethod: 'POST',\n\t\t\t\turl: '/login',\n\t\t\t\tbody: {\n\t\t\t\t\tuser: user.userId,\n\t\t\t\t\tpassword: user.password,\n\t\t\t\t\trequesttoken: requestToken\n\t\t\t\t},\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t\t\t\t// Add the Origin header so that the request is not blocked by the browser.\n\t\t\t\t\t'Origin': (Cypress.config('baseUrl') ?? '').replace('index.php/', ''),\n\t\t\t\t},\n\t\t\t\tfollowRedirect: false,\n\t\t\t})\n\t\t})\n\t}, {\n\t\tvalidate() {\n\t\t\tcy.request('/apps/files').its('status').should('eq', 200)\n\t\t},\n\t})\n}\n\n/**\n * Theoretically, should rarely be needed as we\n * are either login in with another user, which\n * change the active session, or changing specs\n * which reset active sessions too\n *\n * @see https://docs.cypress.io/api/commands/session#Session-caching\n */\nexport const logout = function() {\n\tcy.request('/csrftoken').then(({ body }) => {\n\t\tconst requestToken = body.token\n\t\tcy.visit(`/logout?requesttoken=${encodeURIComponent(requestToken)}`)\n\t})\n\tcy.clearCookies()\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nexport class User {\n\tuserId: string\n\tpassword: string\n\tlanguage: string\n\n\tconstructor(user: string, password: string = user, language = 'en') {\n\t\tthis.userId = user\n\t\tthis.password = password\n\t\tthis.language = language\n\t}\n\n\tstatic createRandom() {\n\t\tconst uid = (Math.random() + 1).toString(36).substring(7)\n\t\treturn new User(uid)\n\t}\n}\n\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { User } from \"../User\"\n\nexport const randHash = () => Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 10)\n\n/**\n * Create a random user\n */\nexport const createRandomUser = function(): Cypress.Chainable {\n\tconst user = new User(randHash())\n\tcy.log(`Generated user ${user.userId}`)\n\n\tcreateUser(user)\n\treturn cy.wrap(user)\n}\n\n/**\n * Create a user\n *\n * **Warning**: Using this function will reset the previous session\n */\nexport const createUser = function(user: User): Cypress.Chainable> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users?format=json`.replace('index.php/', '')\n\n\tcy.clearCookies()\n\treturn cy.request({\n\t\tmethod: 'POST',\n\t\turl,\n\t\tbody: {\n\t\t\tuserid: user.userId,\n\t\t\tpassword: user.password\n\t\t},\n\t\tauth: {\n\t\t\tuser: 'admin',\n\t\t\tpass: 'admin'\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t},\n\t\tfollowRedirect: false,\n\t\t// Allow us to test\n\t\tfailOnStatusCode: false,\n\t}).then((response) => {\n\t\tcy.log(`Created user ${user.userId}`)\n\n\t\t// Avoid that any follow up request reuses the admin cookies\n\t\tcy.clearCookies()\n\n\t\treturn cy.wrap(response)\n\t})\n}\n\n/**\n * Query list of users on the Nextcloud instance\n *\n * **Warning**: Using this function will reset the previous session\n * @returns list of user IDs\n */\nexport function listUsers(details?: b): Cypress.Chainable[] : string[]>;\nexport function listUsers(details = false): Cypress.Chainable[] | string[]> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users${details ? '/details' : ''}`.replace('index.php/', '')\n\n\tcy.clearCookies()\n\treturn cy.request({\n\t\tmethod: 'GET',\n\t\turl,\n\t\tauth: {\n\t\t\tuser: 'admin',\n\t\t\tpass: 'admin'\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t},\n\t}).then((response) => {\n\t\tconst parser = new DOMParser();\n\t\tconst xmlDoc = parser.parseFromString(response.body, \"text/xml\");\n\n\t\tif (!details) {\n\t\t\tconst users = Array.from(xmlDoc.querySelectorAll('users element')).map(v => v.textContent)\n\t\t\treturn users.filter(v => typeof v === 'string') as string[]\n\t\t} else {\n\t\t\tconst list = Array.from(xmlDoc.querySelectorAll('users > *')).map(v => {\n\t\t\t\t// We only handle simple text properties for the moment\n\t\t\t\tconst properties = [...v.childNodes].filter(c => c.childNodes.length <= 1)\n\n\t\t\t\treturn Object.fromEntries(properties.map(p => [p.nodeName, p.textContent || '']))\n\t\t\t})\n\t\t\treturn list as Record[]\n\t\t}\n\t})\n}\n\n/**\n * Delete an user on the Nextcloud instance\n *\n * **Warning**: Using this function will reset the previous session\n * @param user User to delete\n */\nexport const deleteUser = function(user: User): Cypress.Chainable> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users/${user.userId}`.replace('index.php/', '')\n\n\tcy.clearCookies()\n\treturn cy.request({\n\t\tmethod: 'DELETE',\n\t\turl,\n\t\tform: true,\n\t\tauth: {\n\t\t\tuser: 'admin',\n\t\t\tpass: 'admin'\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t},\n\t\tfailOnStatusCode: false,\n\t}).then((response) => {\n\t\tcy.log(`Deleted user ${user}`, response.status)\n\t\tcy.clearCookies()\n\t\treturn cy.wrap(response)\n\t})\n}\n\n/**\n * Modify an attribute of a given user on the Nextcloud instance\n *\n * @param user User who performs the modification\n * @param key Attribute name\n * @param value New attribute value\n */\nexport const modifyUser = function(user: User, key: string, value: any): Cypress.Chainable> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users/${user.userId}`.replace('index.php/', '')\n\n\treturn cy.request({\n\t\tmethod: 'PUT',\n\t\turl,\n\t\tform: true,\n\t\tbody: {\n\t\t\tkey,\n\t\t\tvalue\n\t\t},\n\t\tauth: {\n\t\t\tuser: user.userId,\n\t\t\tpassword: user.password\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t},\n\t}).then((response) => {\n\t\tcy.log(`Updated user ${user} ${key} to ${value}`, response.status)\n\t\treturn cy.wrap(response)\n\t})\n}\n\n/**\n * Query metadata for and in behalf of a given user\n *\n * @param user User to change\n */\nexport const getUserData = function(user: User): Cypress.Chainable> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users/${user.userId}`.replace('index.php/', '')\n\n\treturn cy.request({\n\t\tmethod: 'GET',\n\t\turl,\n\t\tauth: {\n\t\t\tuser: user.userId,\n\t\t\tpass: user.password\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t},\n\t}).then((response) => {\n\t\tcy.log(`Loaded metadata for user ${user}`, response.status)\n\n\t\treturn cy.wrap(response)\n\t})\n}\n\n/**\n * Enable or disable a user\n *\n * @param {User} user the user to dis- / enable\n * @param {boolean} enable True if the user should be enable, false to disable\n */\nexport const enableUser = function(user: User, enable = true): Cypress.Chainable> {\n\tconst url = `${Cypress.config('baseUrl')}/ocs/v2.php/cloud/users/${user.userId}/${enable ? 'enable' : 'disable'}`.replace('index.php/', '')\n\n\treturn cy.request({\n\t\tmethod: 'PUT',\n\t\turl,\n\t\tform: true,\n\t\tauth: {\n\t\t\tuser: 'admin',\n\t\t\tpassword: 'admin',\n\t\t},\n\t\theaders: {\n\t\t\t'OCS-ApiRequest': 'true',\n\t\t\t'Content-Type': 'application/x-www-form-urlencoded',\n\t\t},\n\t}).then((response) => {\n\t\tcy.log(`Enabled user ${user}`, response.status)\n\t\treturn cy.wrap(response)\n\t})\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { basename } from 'path'\n\nfunction getContainerName(): Cypress.Chainable {\n\treturn cy.exec('pwd').then(({ stdout }) => {\n\t\tconst name = basename(stdout).replace(' ', '')\n\t\treturn cy.wrap(`nextcloud-e2e-test-server_${name}`)\n\t})\n}\n\nexport function runCommand(command: string, options?: Partial) {\n\tconst env = Object.entries(options?.env ?? {})\n\t\t.map(([name, value]) => `-e '${name}=${value}'`)\n\t\t.join(' ')\n\n\tgetContainerName()\n\t\t.then((containerName) => {\n\t\t\t// Wrapping command inside bash -c \"...\" to allow using '*'.\n\t\t\treturn cy.exec(`docker exec --user www-data --workdir /var/www/html ${env} ${containerName} bash -c \"${command}\"`, options)\n\t\t})\n\n}\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { runCommand } from \"./docker\"\n\nexport function saveState(): Cypress.Chainable {\n\tconst snapshot = Math.random().toString(36).substring(7)\n\n\trunCommand(`rm /var/www/html/data-${snapshot}.tar`, { failOnNonZeroExit: false })\n\trunCommand(`tar cf /var/www/html/data-${snapshot}.tar ./data`)\n\n\tcy.log(`Created snapshot ${snapshot}`)\n\n\treturn cy.wrap(snapshot)\n}\n\nexport function restoreState(snapshot: string = 'init') {\n\trunCommand(`rm -vfr ./data/*`)\n\trunCommand(`tar -xf '/var/www/html/data-${snapshot}.tar'`)\n\n\tcy.log(`Restored snapshot ${snapshot}`)\n}\n","/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { runCommand } from \"./docker\"\n\nexport function runOccCommand(command: string, options?: Partial) {\n\trunCommand(`php ./occ ${command}`, options)\n}\n"],"names":["basename"],"mappings":"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"}