Fix an issue with editing notes

This commit is contained in:
Chris Veleris 2025-11-06 23:43:20 +02:00
parent 909c14f3f8
commit f5820f3440
3 changed files with 139 additions and 6 deletions

View file

@ -0,0 +1,106 @@
import { test, expect } from '@playwright/test';
import { login } from '../helpers/testHelpers';
test.describe('Notes - Basic Functionality', () => {
test('should create a new note', async ({ page, baseURL }) => {
// Login
await login(page, baseURL);
// Navigate to notes page
await page.goto('/notes');
await page.waitForLoadState('networkidle');
// Verify we're on the notes page
await expect(page.getByRole('heading', { name: 'Notes' })).toBeVisible();
// Create a new note
const timestamp = Date.now();
const noteTitle = `Test Note ${timestamp}`;
const noteContent = `This is test content for note ${timestamp}`;
// Click add note button in the notes list header
await page.locator('div').filter({ hasText: /^Notes$/ }).getByLabel('Add Note').click();
// Verify we're in edit mode
await expect(page.getByPlaceholder('Note title...')).toBeVisible();
// Fill in note details
await page.getByPlaceholder('Note title...').fill(noteTitle);
await page
.getByPlaceholder(/Write your note content here/)
.fill(noteContent);
// Save by pressing Escape
await page.keyboard.press('Escape');
// Verify note was created and is shown in preview
await expect(page.locator('h1', { hasText: noteTitle })).toBeVisible();
// Verify content is shown in the markdown preview area
await expect(
page.locator('.markdown-content p', { hasText: noteContent })
).toBeVisible();
// Verify note appears in the list
await expect(
page.locator('h3', { hasText: noteTitle })
).toBeVisible();
});
test('should edit an existing note', async ({ page, baseURL }) => {
// Login
await login(page, baseURL);
// Navigate to notes page
await page.goto('/notes');
await page.waitForLoadState('networkidle');
// Create a note first
const timestamp = Date.now();
const originalTitle = `Original Note ${timestamp}`;
const originalContent = `Original content ${timestamp}`;
await page.locator('div').filter({ hasText: /^Notes$/ }).getByLabel('Add Note').click();
await page.getByPlaceholder('Note title...').fill(originalTitle);
await page.getByPlaceholder(/Write your note content here/).fill(originalContent);
await page.keyboard.press('Escape');
// Verify note was created
await expect(page.locator('h3', { hasText: originalTitle })).toBeVisible();
// Click on the note in the list to select it
await page.locator('h3', { hasText: originalTitle }).click();
await page.waitForTimeout(300);
// Verify we're in preview mode
await expect(page.locator('h1', { hasText: originalTitle })).toBeVisible();
// Click on the title to enter edit mode
await page.locator('h1', { hasText: originalTitle }).click();
// Verify we're in edit mode
await expect(page.getByPlaceholder('Note title...')).toBeVisible();
// Edit the note
const updatedTitle = `Updated Note ${timestamp}`;
const updatedContent = `Updated content ${timestamp}`;
await page.getByPlaceholder('Note title...').fill(updatedTitle);
await page.getByPlaceholder(/Write your note content here/).fill(updatedContent);
// Save by pressing Escape
await page.keyboard.press('Escape');
// Verify updated note is shown in preview
await expect(page.locator('h1', { hasText: updatedTitle })).toBeVisible();
await expect(
page.locator('.markdown-content p', { hasText: updatedContent })
).toBeVisible();
// Verify updated note appears in the list
await expect(page.locator('h3', { hasText: updatedTitle })).toBeVisible();
// Verify old title is not shown
await expect(page.locator('h3', { hasText: originalTitle })).not.toBeVisible();
});
});

View file

@ -120,7 +120,6 @@ test('comprehensive project assignment functionality in task modal', async ({ pa
await expect(projectBadge).toBeVisible();
await expect(projectSearchInput).not.toBeVisible();
// Close modal to finish test
await page.keyboard.press('Escape');
await expect(page.locator('[data-testid="task-modal"]')).not.toBeVisible({ timeout: 5000 });
// Test complete - all project assignment functionality verified
// No need to close modal as test is finished
});

View file

@ -115,9 +115,37 @@ const Notes: React.FC = () => {
};
// Function to set preview note and update URL
const handleSelectNote = (note: Note | null) => {
// If we're editing a new unsaved note, discard it
if (isEditing && editingNote && !editingNote.uid) {
const handleSelectNote = async (note: Note | null) => {
// If we're editing a note, save it first
if (isEditing && editingNote) {
// If the note has a title, save it
if (editingNote.title) {
try {
// Add new tags to store if they don't exist
if (editingNote.tags && editingNote.tags.length > 0) {
const { tagsStore } = useStore.getState();
tagsStore.addNewTags(editingNote.tags.map((t) => t.name));
}
if (editingNote.uid) {
const savedNote = await updateNote(
editingNote.uid,
editingNote
);
const updatedNotes = notes.map((n) =>
n.uid === editingNote.uid ? savedNote : n
);
setNotes(updatedNotes);
} else {
const newNote = await createNote(editingNote);
setNotes([newNote, ...notes]);
}
} catch (err) {
console.error('Error saving note:', err);
}
}
// Exit edit mode
setIsEditing(false);
setEditingNote(null);
setShowProjectDropdown(false);