feat(tools): allow seed script to set user flags (#55534)

This commit is contained in:
Oliver Eyton-Williams
2024-07-21 18:41:32 +02:00
committed by GitHub
parent 13828c6a3f
commit d626997c51
21 changed files with 44 additions and 48 deletions
+1 -1
View File
@@ -69,6 +69,6 @@ test.describe('When the user has not accepted the Academic Honesty Policy', () =
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
});
+1 -1
View File
@@ -45,6 +45,6 @@ test.describe('Public profile certifications', () => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
});
+1 -1
View File
@@ -211,7 +211,7 @@ test.describe('Signed in user', () => {
});
test.afterEach(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('User can reset on a multi-file project after reloading and saving', async ({
+2 -2
View File
@@ -5,7 +5,7 @@ test.describe('Before completing the project', () => {
test.use({ storageState: 'playwright/.auth/development-user.json' });
test.beforeEach(() => {
execSync('node ./tools/scripts/seed/seed-demo-user --donor');
execSync('node ./tools/scripts/seed/seed-demo-user --set-true isDonating');
});
test('should not allow you to submit a URL', async ({ page }) => {
@@ -26,7 +26,7 @@ test.describe('After completing the project', () => {
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.beforeAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('should allow you to submit a URL', async ({ page }) => {
+1 -1
View File
@@ -17,7 +17,7 @@ test.beforeEach(async ({ page }) => {
test.afterAll(
async () =>
await Promise.all([
await execP('node ./tools/scripts/seed/seed-demo-user certified-user'),
await execP('node ./tools/scripts/seed/seed-demo-user --certified-user'),
await execP('node ./tools/scripts/seed/seed-surveys'),
await execP('node ./tools/scripts/seed/seed-ms-username')
])
+2 -2
View File
@@ -5,12 +5,12 @@ test.describe('Donate page', () => {
test.use({ storageState: 'playwright/.auth/development-user.json' });
test.beforeEach(async ({ page }) => {
execSync('node ./tools/scripts/seed/seed-demo-user --donor');
execSync('node ./tools/scripts/seed/seed-demo-user --set-true isDonating');
await page.goto('/donate');
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('should render the donate page correctly', async ({ page }) => {
+5 -3
View File
@@ -247,7 +247,7 @@ test.describe('Donation modal appearance logic - New user', () => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('should not appear if the user has less than 10 completed challenges in total and has just completed 3 challenges', async ({
@@ -373,11 +373,13 @@ test.describe('Donation modal appearance logic - Donor user', () => {
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.beforeAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user --donor');
execSync(
'node ./tools/scripts/seed/seed-demo-user --certified-user --set-true isDonating'
);
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('should not appear', async ({
+1 -1
View File
@@ -18,7 +18,7 @@ const newEmail = 'foo-update@bar.com';
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.beforeEach(async ({ page }) => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
await page.goto('/settings');
});
+1 -1
View File
@@ -5,7 +5,7 @@ const url =
test.describe('Exam Survey', () => {
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.beforeAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
execSync('node tools/scripts/seed/seed-surveys.js delete-only');
});
+1 -1
View File
@@ -26,7 +26,7 @@ test.beforeAll(() => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('failed update flushing', () => {
+1 -1
View File
@@ -19,7 +19,7 @@ setup.describe('developmentuser', () => {
});
setup.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
setup('can sign in', async ({ request }) => {
+1 -1
View File
@@ -33,7 +33,7 @@ test.describe('Header', () => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test('Has link for skip content', async ({ page }) => {
+1 -1
View File
@@ -4,7 +4,7 @@ import { clearEditor, focusEditor } from './utils/editor';
test.use({ storageState: 'playwright/.auth/certified-user.json' });
test.describe('multifileCertProjects', () => {
test.beforeEach(async ({ page }) => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
await page.goto(
'learn/2022/responsive-web-design/build-a-tribute-page-project/build-a-tribute-page'
);
+1 -1
View File
@@ -9,7 +9,7 @@ test.beforeAll(() => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('Add Portfolio Item', () => {
+1 -1
View File
@@ -11,7 +11,7 @@ test.beforeEach(async ({ page }) => {
});
test.afterEach(async () => {
await execP('node ./tools/scripts/seed/seed-demo-user certified-user');
await execP('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('Progress reset modal', () => {
+1 -1
View File
@@ -78,7 +78,7 @@ test.beforeAll(() => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('Projects', () => {
+1 -1
View File
@@ -99,7 +99,7 @@ test.describe('Email sign-up page when user is signed in', () => {
// terms, otherwise the user will be redirected away from the email sign-up
// page.
execSync(
'node ./tools/scripts/seed/seed-demo-user certified-user --unset-privacy-terms'
'node ./tools/scripts/seed/seed-demo-user --certified-user --set-false acceptedPrivacyTerms'
);
await page.goto('/email-sign-up');
+1 -1
View File
@@ -27,7 +27,7 @@ test.describe('When the user HAS NOT claimed their cert', () => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
});
+1 -1
View File
@@ -11,7 +11,7 @@ test.beforeEach(() => {
});
test.afterAll(() => {
execSync('node ./tools/scripts/seed/seed-demo-user certified-user');
execSync('node ./tools/scripts/seed/seed-demo-user --certified-user');
});
test.describe('Initially', () => {
+1 -1
View File
@@ -60,7 +60,7 @@
"playwright:install-build-tools": "npx playwright install --with-deps",
"rename-challenges": "ts-node tools/challenge-helper-scripts/rename-challenge-files.ts",
"seed": "pnpm seed:surveys && pnpm seed:exams && DEBUG=fcc:* node ./tools/scripts/seed/seed-demo-user",
"seed:certified-user": "pnpm seed:surveys && pnpm seed:exams && pnpm seed:ms-username && DEBUG=fcc:* node ./tools/scripts/seed/seed-demo-user certified-user",
"seed:certified-user": "pnpm seed:surveys && pnpm seed:exams && pnpm seed:ms-username && DEBUG=fcc:* node ./tools/scripts/seed/seed-demo-user --certified-user",
"seed:exams": "DEBUG=fcc:* node tools/scripts/seed-exams/create-exams",
"seed:surveys": "DEBUG=fcc:* node ./tools/scripts/seed/seed-surveys",
"seed:ms-username": "DEBUG=fcc:* node ./tools/scripts/seed/seed-ms-username",
+18 -24
View File
@@ -1,3 +1,5 @@
const { parseArgs } = require('node:util');
const path = require('path');
const debug = require('debug');
const { MongoClient } = require('mongodb');
@@ -11,23 +13,15 @@ const {
userIds
} = require('./user-data');
const args = process.argv.slice(2);
const options = {
'set-true': { type: 'string', multiple: true },
'top-contributor': { type: 'boolean' },
'set-false': { type: 'string', multiple: true },
'seed-trophy-challenges': { type: 'boolean' },
'certified-user': { type: 'boolean' }
};
const allowedArgs = [
'--donor',
'--top-contributor',
'--unset-privacy-terms',
'--seed-trophy-challenges',
'certified-user'
];
// Check for invalid arguments
args.forEach(arg => {
if (!allowedArgs.includes(arg))
throw new Error(
`Invalid argument ${arg}. Allowed arguments are ${allowedArgs.join(', ')}`
);
});
const { values: argValues } = parseArgs({ options });
const log = debug('fcc:tools:seedLocalAuthUser');
const { MONGOHQ_URL } = process.env;
@@ -87,16 +81,16 @@ const trophyChallenges = [
];
[demoUser, blankUser, fullyCertifiedUser].forEach(user => {
if (args.includes('--donor')) {
user.isDonating = true;
}
if (args.includes('--top-contributor')) {
if (argValues['top-contributor']) {
user.yearsTopContributor = ['2017', '2018', '2019'];
}
if (args.includes('--unset-privacy-terms')) {
user.acceptedPrivacyTerms = false;
for (const key of argValues['set-false'] || []) {
user[key] = false;
}
if (args.includes('--seed-trophy-challenges')) {
for (const key of argValues['set-true'] || []) {
user[key] = true;
}
if (argValues['--seed-trophy-challenges']) {
user.completedChallenges = trophyChallenges;
}
});
@@ -128,7 +122,7 @@ const run = async () => {
await dropUserTokens();
await dropUsers();
if (args.includes('certified-user')) {
if (argValues['certified-user']) {
await user.insertOne(fullyCertifiedUser);
await user.insertOne(blankUser);
await user.insertOne(publicUser);