Skip to content

Commit

Permalink
scope by sessionId to ensure proper artillery scripts
Browse files Browse the repository at this point in the history
  • Loading branch information
nachocodoner committed Jul 23, 2024
1 parent b89bea4 commit bd1ecc0
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 16 deletions.
7 changes: 4 additions & 3 deletions packages/tasks-common/tasks-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ import { TasksCollection } from './tasks-common.client';

export const registerTaskApi = () => {
Meteor.methods({
insertTask({ description }) {
insertTask({ description, sessionId }) {
return TasksCollection.insertAsync({
sessionId,
description,
createdAt: new Date(),
});
},
removeTask({ taskId }) {
return TasksCollection.removeAsync({ _id: taskId });
},
removeAllTasks() {
return TasksCollection.removeAsync({});
removeAllTasks({ sessionId }) {
return TasksCollection.removeAsync({ sessionId });
},
fetchTasks() {
return TasksCollection.find({}).fetch();
Expand Down
23 changes: 15 additions & 8 deletions packages/tasks-common/tasks-common.client.js
Original file line number Diff line number Diff line change
@@ -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) {
Expand All @@ -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;
Expand All @@ -41,6 +45,9 @@ const App = () => {

return (
<div>
<div id="sessionIdSection" style={{ marginBottom: 8 }}>
<span>Session: </span><span id="sessionId">{sessionId}</span>
</div>
<div style={{ display: 'flex' }}>
<div>
<input type="radio" id="reactive" name="reactive" onChange={onToggleReactive} checked={reactive} />
Expand Down Expand Up @@ -88,7 +95,7 @@ const TasksList = ({ tasks }) => {
<ul>
{tasks.map(task => {
return (
<li key={task._id}>{task.description}</li>
<li key={task._id}>{`${task.sessionId || ''} ${task.description}`}</li>
);
})}
</ul>
Expand Down
2 changes: 1 addition & 1 deletion playwright.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion tests/non-reactive.spec.ts
Original file line number Diff line number Diff line change
@@ -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});
Expand Down
2 changes: 1 addition & 1 deletion tests/reactive.spec.ts
Original file line number Diff line number Diff line change
@@ -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 });
Expand Down
8 changes: 6 additions & 2 deletions tests/test-helpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit bd1ecc0

Please sign in to comment.