diff --git a/backend/routes/projects.js b/backend/routes/projects.js index d85f70f..f599dc4 100644 --- a/backend/routes/projects.js +++ b/backend/routes/projects.js @@ -9,7 +9,7 @@ const { Op } = require('sequelize'); const { extractUidFromSlug } = require('../utils/slug-utils'); const { validateTagName } = require('../services/tagsService'); const { uid } = require('../utils/uid'); -const { logError } = require("../services/logService"); +const { logError } = require('../services/logService'); const router = express.Router(); // Helper function to safely format dates @@ -130,7 +130,6 @@ router.post('/upload/project-image', upload.single('image'), (req, res) => { // GET /api/projects router.get('/projects', async (req, res) => { try { - const { state, active, pin_to_sidebar, area_id, area } = req.query; let whereClause = { user_id: req.session.userId }; diff --git a/e2e/bin/run-single-test.sh b/e2e/bin/run-single-test.sh index ae1113b..95936a9 100755 --- a/e2e/bin/run-single-test.sh +++ b/e2e/bin/run-single-test.sh @@ -11,7 +11,7 @@ if [ $# -lt 1 ]; then fi TEST_PATTERN="$1" -BROWSER="${2:-firefox}" +BROWSER="${2:-Chromium}" # Config APP_URL_DEFAULT="http://localhost:8080" diff --git a/e2e/tests/inbox.spec.ts b/e2e/tests/inbox.spec.ts index 3c5bdee..9d4b543 100644 --- a/e2e/tests/inbox.spec.ts +++ b/e2e/tests/inbox.spec.ts @@ -176,8 +176,8 @@ test('user can create project from inbox item', async ({ page, baseURL }) => { const projectNameInput = page.locator('input[name="name"], input[placeholder*="project" i], input[placeholder*="name" i]').first(); await expect(projectNameInput).toHaveValue(testContent); - // Save the project - Find submit button by looking for buttons in form context, force click through backdrop - await page.locator('form button[type="submit"], button:has-text("Save"), button:has-text("Create")').first().click({ force: true }); + // Save the project - Use the specific test ID + await page.locator('[data-testid="project-save-button"]').click(); // Wait for success message or modal to close await expect(page.locator('input[name="name"], input[placeholder*="project" i], input[placeholder*="name" i]')).not.toBeVisible({ timeout: 10000 }); @@ -191,16 +191,12 @@ test('user can create project from inbox item', async ({ page, baseURL }) => { // Navigate to projects page to verify the project was created there await page.goto(appUrl + '/projects'); await expect(page).toHaveURL(/\/projects$/); - - // Wait a moment for the page to load, then check if project exists (more lenient check) + + // Wait a moment for the page to load await page.waitForTimeout(2000); - const projectExists = await page.locator('*').filter({ hasText: testContent }).count() > 0; - if (!projectExists) { - // If exact match fails, just verify we're on projects page and there are projects - await expect(page.locator('h1, h2, h3').filter({ hasText: /projects/i }).first()).toBeVisible(); - } else { - await expect(page.locator('*').filter({ hasText: testContent })).toBeVisible(); - } + + // Verify the created project appears - use a more specific selector + await expect(page.getByRole('link', { name: new RegExp(testContent) }).first()).toBeVisible({ timeout: 10000 }); }); test('user can create note from inbox item', async ({ page, baseURL }) => { diff --git a/frontend/components/Inbox/InboxItems.tsx b/frontend/components/Inbox/InboxItems.tsx index ce8aa6e..bc47cf1 100644 --- a/frontend/components/Inbox/InboxItems.tsx +++ b/frontend/components/Inbox/InboxItems.tsx @@ -347,7 +347,7 @@ const InboxItems: React.FC = () => { setCurrentConversionItemUid(null); } - setIsProjectModalOpen(false); + // Don't set isProjectModalOpen here - the modal handles its own closing via handleClose() } catch (error) { console.error('Failed to create project:', error); showErrorToast(t('project.createError')); diff --git a/frontend/components/Project/ProjectModal.tsx b/frontend/components/Project/ProjectModal.tsx index e75b466..e6ece15 100644 --- a/frontend/components/Project/ProjectModal.tsx +++ b/frontend/components/Project/ProjectModal.tsx @@ -345,8 +345,8 @@ const ProjectModal: React.FC = ({ tags: tags.map((name) => ({ name })), }; - // Save the project - onSave(projectData); + // Save the project and wait for it to complete + await onSave(projectData); showSuccessToast( project