From bd1ecc0073537ec802c2a4876dbc7a1e07866846 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nacho=20Codo=C3=B1er?= Date: Tue, 23 Jul 2024 16:58:58 +0200 Subject: [PATCH] scope by sessionId to ensure proper artillery scripts --- packages/tasks-common/tasks-api.js | 7 +++--- packages/tasks-common/tasks-common.client.js | 23 +++++++++++++------- playwright.config.ts | 2 +- tests/non-reactive.spec.ts | 2 +- tests/reactive.spec.ts | 2 +- tests/test-helpers.js | 8 +++++-- 6 files changed, 28 insertions(+), 16 deletions(-) diff --git a/packages/tasks-common/tasks-api.js b/packages/tasks-common/tasks-api.js index c384aa7..f6a3556 100644 --- a/packages/tasks-common/tasks-api.js +++ b/packages/tasks-common/tasks-api.js @@ -2,8 +2,9 @@ import { TasksCollection } from './tasks-common.client'; export const registerTaskApi = () => { Meteor.methods({ - insertTask({ description }) { + insertTask({ description, sessionId }) { return TasksCollection.insertAsync({ + sessionId, description, createdAt: new Date(), }); @@ -11,8 +12,8 @@ export const registerTaskApi = () => { removeTask({ taskId }) { return TasksCollection.removeAsync({ _id: taskId }); }, - removeAllTasks() { - return TasksCollection.removeAsync({}); + removeAllTasks({ sessionId }) { + return TasksCollection.removeAsync({ sessionId }); }, fetchTasks() { return TasksCollection.find({}).fetch(); diff --git a/packages/tasks-common/tasks-common.client.js b/packages/tasks-common/tasks-common.client.js index d6543be..82fd03d 100644 --- a/packages/tasks-common/tasks-common.client.js +++ b/packages/tasks-common/tasks-common.client.js @@ -1,16 +1,20 @@ import { TasksCollection, initializeTaskCollection, registerTaskApi } from './tasks-common'; -import React, { useCallback, useEffect, useState } from 'react'; +import React, { useCallback, useEffect, useState, useRef } from 'react'; import { useFind, useSubscribe } from 'meteor/react-meteor-data'; +import { Random } from 'meteor/random'; const App = () => { + const sessionIdRef = useRef(Random.id()); + const sessionId = sessionIdRef?.current; + const [reactive, setReactive] = useState(true); const [tasks, setTasks] = useState([]); const onToggleReactive = useCallback(() => { setReactive(!reactive); setTasks([]); }, [reactive]); - const firstTask = tasks[0]; - const lastTask = tasks[tasks.length - 1]; + const firstTask = tasks.find(_task => _task.sessionId === sessionId); + const lastTask = [...tasks].reverse().find(_task => _task.sessionId === sessionId); const onAction = useCallback(async () => { if (!reactive) { @@ -22,17 +26,17 @@ const App = () => { const descriptionsParts = lastTask?.description?.split(' ') || []; const lastDescriptionNum = (parseFloat(descriptionsParts[descriptionsParts.length - 1] || '0') || 0); const nextTaskNum = lastDescriptionNum + 1; - await Meteor.callAsync('insertTask', { description: `New Task ${nextTaskNum}` }); + await Meteor.callAsync('insertTask', { sessionId, description: `New Task ${nextTaskNum}` }); onAction(); - }, [onAction, lastTask?._id]); + }, [onAction, lastTask?._id, sessionId]); const onRemoveClick = useCallback(async () => { await Meteor.callAsync('removeTask', { taskId: firstTask?._id }); onAction(); }, [onAction, firstTask?._id]); const onRemoveAllClick = useCallback(async () => { - await Meteor.callAsync('removeAllTasks'); + await Meteor.callAsync('removeAllTasks', { sessionId }); onAction(); - }, [onAction]); + }, [onAction, sessionId]); const fetchTasks = useCallback(async () => { if (reactive) return; @@ -41,6 +45,9 @@ const App = () => { return (
+
+ Session: {sessionId} +
@@ -88,7 +95,7 @@ const TasksList = ({ tasks }) => {
    {tasks.map(task => { return ( -
  • {task.description}
  • +
  • {`${task.sessionId || ''} ${task.description}`}
  • ); })}
diff --git a/playwright.config.ts b/playwright.config.ts index 54ea9f5..82d56e9 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -11,7 +11,7 @@ import { defineConfig, devices } from '@playwright/test'; * See https://playwright.dev/docs/test-configuration. */ export default defineConfig({ - timeout: 260_000, + timeout: 1260_000, testDir: './tests', /* Run tests in files in parallel */ fullyParallel: true, diff --git a/tests/non-reactive.spec.ts b/tests/non-reactive.spec.ts index cbc9923..740d3c1 100644 --- a/tests/non-reactive.spec.ts +++ b/tests/non-reactive.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; import { addAndRemoveTasks } from './test-helpers'; -const taskCount = parseFloat(process.env.TASK_COUNT || 500); +const taskCount = parseFloat(process.env.TASK_COUNT || 1000); test('non-reactive', async ({ page }) => { await addAndRemoveTasks({ page, reactive: false, taskCount}); diff --git a/tests/reactive.spec.ts b/tests/reactive.spec.ts index 3e451e0..184ffd5 100644 --- a/tests/reactive.spec.ts +++ b/tests/reactive.spec.ts @@ -1,7 +1,7 @@ import { test, expect } from '@playwright/test'; import { addAndRemoveTasks } from './test-helpers'; -const taskCount = parseFloat(process.env.TASK_COUNT || 500); +const taskCount = parseFloat(process.env.TASK_COUNT || 1000); test('reactive', async ({ page }) => { await addAndRemoveTasks({ page, reactive: true, taskCount }); diff --git a/tests/test-helpers.js b/tests/test-helpers.js index e8692aa..59637b2 100644 --- a/tests/test-helpers.js +++ b/tests/test-helpers.js @@ -4,17 +4,21 @@ export const addAndRemoveTasks = async ({ page, reactive, taskCount }) => { await page.getByRole('button', { name: 'Remove all tasks' }).click(); + const sessionId = await page.textContent('span#sessionId'); + + console.log("-> sessionId", sessionId); + const tasks = Array.from({ length: taskCount }); let addedNum = 1; for await (const _addTask of tasks) { await page.getByRole('button', { name: 'Add task' }).click(); - await page.waitForSelector(`text="New Task ${addedNum}"`, { state: 'visible' }); + await page.waitForSelector(`text="${sessionId} New Task ${addedNum}"`, { state: 'visible' }); addedNum += 1; } let removedNum = 1; for await (const _removeTask of tasks) { await page.getByRole('button', { name: 'Remove task' }).click(); - await page.waitForSelector(`text="New Task ${removedNum}"`, { state: 'detached' }); + await page.waitForSelector(`text="${sessionId} New Task ${removedNum}"`, { state: 'detached' }); removedNum += 1; }