freeCodeCamp/e2e/progress-reset-modal.spec.ts

160 lines
4.2 KiB
TypeScript

import { exec } from 'child_process';
import { promisify } from 'util';
import { test, expect } from '@playwright/test';
import translations from '../client/i18n/locales/english/translations.json';
const execP = promisify(exec);
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.beforeEach(async ({ page }) => {
await page.goto('/settings');
});
test.afterEach(async () => {
await execP('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('Progress reset modal', () => {
test('should display the content properly', async ({ page }) => {
await page
.getByRole('button', { name: 'Reset all of my progress' })
.click();
await expect(
page.getByRole('dialog', { name: 'Reset My Progress' })
).toBeVisible();
await expect(
page.getByText(
'This will permanently delete and reset all of the following:'
)
).toBeVisible();
await expect(
page.getByText(
'Your progress through each step/challenge (all completed challenges will be lost)'
)
).toBeVisible();
await expect(
page.getByText(
'Any saved code, including partially completed challenges, and certification project code'
)
).toBeVisible();
await expect(
page.getByText('All completed and claimed certifications')
).toBeVisible();
await expect(
page.getByText(
'You will effectively be set back to the very first day you signed up.'
)
).toBeVisible();
await expect(
page.getByText(
"We won't be able to recover any of it for you later, even if you change your mind."
)
).toBeVisible();
await expect(
page.getByRole('button', {
name: "Nevermind, I don't want to delete all of my progress"
})
).toBeVisible();
await expect(
page.getByRole('button', {
name: 'Reset everything. I want to start from the beginning'
})
).toBeVisible();
await expect(
page.getByRole('button', {
name: 'Reset everything. I want to start from the beginning'
})
).toBeDisabled();
});
test('should close the dialog if the user clicks the cancel button', async ({
page
}) => {
await page
.getByRole('button', { name: 'Reset all of my progress' })
.click();
await expect(
page.getByRole('dialog', { name: 'Reset My Progress' })
).toBeVisible();
await page
.getByRole('button', {
name: "Nevermind, I don't want to delete all of my progress"
})
.click();
await expect(
page.getByRole('dialog', { name: 'Reset My Progress' })
).toBeHidden();
});
test('Reset progress button should be disabled if user incorrectly fills verify input text', async ({
page
}) => {
await page
.getByRole('button', { name: 'Reset all of my progress' })
.click();
await expect(
page.getByRole('dialog', { name: 'Reset My Progress' })
).toBeVisible();
const verifyResetInput = page.getByRole('textbox', {
exact: true
});
await verifyResetInput.fill('incorrect text');
await expect(
page.getByRole('button', {
name: 'Reset everything. I want to start from the beginning'
})
).toBeDisabled();
});
test('should reset the progress if the user fills the verify input text and clicks the reset button', async ({
page
}) => {
await page
.getByRole('button', { name: 'Reset all of my progress' })
.click();
await expect(
page.getByRole('dialog', { name: 'Reset My Progress' })
).toBeVisible();
const verifyResetText = translations.settings.danger['verify-reset-text'];
const verifyResetInput = page.getByRole('textbox', {
exact: true
});
await verifyResetInput.fill(verifyResetText);
await page
.getByRole('button', {
name: 'Reset everything. I want to start from the beginning'
})
.click();
await page.waitForURL('/');
await expect(page.getByText('Your progress has been reset')).toBeVisible();
// Go to /settings and confirm that all certifications are reset
await page.goto('/settings');
await expect(
page.getByRole('link', { name: 'Show Certification' })
).toBeHidden();
});
});