160 lines
4.2 KiB
TypeScript
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();
|
|
});
|
|
});
|