Files
overleaf-cep/server-ce/test/learn-wiki.spec.ts
Rebeka Dekany b4bfff1b67 Improve Server Pro tests to use semantic selectors (#29790)
* Replace placeholders with labels

* Add 'Close dialog' label to modal close button to distinguish from footer Close button

* Add and translate heading on the not found page

* Update textarea to have id matching label's for attribute
Simplify test for template description textarea

* Label PDF zoom level dropdown button

* Improve test selectors to use semantic roles and accessible names

GitOrigin-RevId: d215ddca30ddf844cfffbcf0e528a601b134d772
2025-11-25 09:05:48 +00:00

124 lines
3.7 KiB
TypeScript

import { isExcludedBySharding, startWith } from './helpers/config'
import { ensureUserExists, login } from './helpers/login'
describe('LearnWiki', function () {
const COPYING_A_PROJECT_URL = '/learn/how-to/Copying_a_project'
const UPLOADING_A_PROJECT_URL = '/learn/how-to/Uploading_a_project'
const WITHOUT_PROJECTS_USER = 'user-without-projects@example.com'
const REGULAR_USER = 'user@example.com'
// Re-use value for "exists" and "does not exist" tests
const LABEL_LEARN_LATEX = 'Learn LaTeX with a tutorial'
ensureUserExists({ email: WITHOUT_PROJECTS_USER })
ensureUserExists({ email: REGULAR_USER })
describe('enabled in Pro', function () {
if (isExcludedBySharding('PRO_CUSTOM_2')) return
startWith({
pro: true,
vars: {
OVERLEAF_PROXY_LEARN: 'true',
},
})
it('should add a documentation entry to the nav bar', function () {
login(REGULAR_USER)
cy.visit('/project')
cy.findByRole('navigation', { name: 'Primary' }).findByRole('menuitem', {
name: 'Documentation',
})
})
it('should display a tutorial link in the welcome page', function () {
login(WITHOUT_PROJECTS_USER)
cy.visit('/project')
cy.findByRole('link', { name: LABEL_LEARN_LATEX }).should(
'have.attr',
'href',
'/learn/latex/Learn_LaTeX_in_30_minutes'
)
})
it('should render wiki page', function () {
login(REGULAR_USER)
cy.visit(UPLOADING_A_PROJECT_URL)
cy.findByRole('heading', { name: 'Uploading a project' })
cy.contains(/how to create an Overleaf project/)
cy.findByRole('img', { name: 'Creating a new project on Overleaf' })
.should('be.visible')
.and((el: any) => {
expect(el[0].naturalWidth, 'renders image').to.be.greaterThan(0)
})
cy.visit(COPYING_A_PROJECT_URL)
cy.findByRole('heading', { name: 'Copying a project' })
cy.findByRole('link', {
name: '1 How to copy a project (option 1)',
}).should('exist')
cy.findByRole('link', {
name: '2 How to copy a project (option 2)',
}).should('exist')
})
it('should navigate within wiki page using table of contents', function () {
login(REGULAR_USER)
cy.visit(COPYING_A_PROJECT_URL)
cy.findByRole('heading', { name: 'Copying a project' })
cy.findByRole('link', {
name: '2 How to copy a project (option 2)',
}).click()
cy.url().should('contain', COPYING_A_PROJECT_URL)
cy.findByRole('heading', {
name: 'How to copy a project (option 2)',
}).should('be.visible')
})
})
describe('disabled in Pro', function () {
if (isExcludedBySharding('PRO_DEFAULT_1')) return
startWith({ pro: true })
checkDisabled()
})
describe('unavailable in CE', function () {
if (isExcludedBySharding('CE_CUSTOM_1')) return
startWith({
pro: false,
vars: {
OVERLEAF_PROXY_LEARN: 'true',
},
})
checkDisabled()
})
function checkDisabled() {
it('should not add a documentation entry to the nav bar', function () {
login(REGULAR_USER)
cy.visit('/project')
cy.findByRole('navigation', { name: 'Primary' })
.findByRole('menuitem', {
name: 'Documentation',
})
.should('not.exist')
})
it('should not render wiki page', function () {
login(REGULAR_USER)
cy.visit(COPYING_A_PROJECT_URL, {
failOnStatusCode: false,
})
cy.findByRole('heading', { name: 'Not found' })
})
it('should not display a tutorial link in the welcome page', function () {
login(WITHOUT_PROJECTS_USER)
cy.visit('/project')
cy.findByText(LABEL_LEARN_LATEX).should('not.exist')
})
}
})