Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 0 additions & 65 deletions e2e/app.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@ test.describe('Task Manager App', () => {
await page.click('#addTaskBtn');
await page.fill('#taskTitle', 'Buy groceries');
await page.fill('#taskDescription', 'Milk, eggs, bread');
await page.selectOption('#taskPriority', 'high');
await page.click('#taskForm button[type="submit"]');

await expect(page.locator('#taskModal')).not.toHaveClass(/active/);
Expand Down Expand Up @@ -292,7 +291,6 @@ test.describe('Task Manager App', () => {
id: 'overdue-test-1',
title: 'Overdue Task',
dueDate: dueDate,
priority: 'medium',
repeatType: 'none',
completed: false,
createdDate: new Date().toISOString()
Expand All @@ -318,7 +316,6 @@ test.describe('Task Manager App', () => {
id: 'completed-overdue-1',
title: 'Completed Old Task',
dueDate: dueDate,
priority: 'medium',
repeatType: 'none',
completed: true,
completedDate: dueDate,
Expand Down Expand Up @@ -346,56 +343,6 @@ test.describe('Task Manager App', () => {
});
});

// ========================
// Task Group By
// ========================
test.describe('task group by', () => {
test.beforeEach(async ({ page }) => {
// Add tasks with different priorities and categories via localStorage
await page.evaluate(() => {
const data = JSON.parse(localStorage.getItem('taskManagerData') || '{}');
data.tasks = [
{ id: 'task-high', title: 'High Task', priority: 'high', repeatType: 'none', completed: false, createdDate: new Date().toISOString(), category: 'Work' },
{ id: 'task-medium', title: 'Medium Task', priority: 'medium', repeatType: 'none', completed: false, createdDate: new Date().toISOString(), category: 'Personal' },
{ id: 'task-low', title: 'Low Task', priority: 'low', repeatType: 'none', completed: false, createdDate: new Date().toISOString() },
];
localStorage.setItem('taskManagerData', JSON.stringify(data));
});
await page.reload();
await page.waitForSelector('.header');
await page.click('[data-tab="tasks"]');
});

test('should show group by dropdown', async ({ page }) => {
await expect(page.locator('#groupBySelect')).toBeVisible();
});

test('should group tasks by priority', async ({ page }) => {
await page.selectOption('#groupBySelect', 'priority');
const headers = page.locator('.task-section-header');
await expect(headers).toHaveCount(3);
await expect(headers.nth(0)).toHaveText('High Priority');
await expect(headers.nth(1)).toHaveText('Medium Priority');
await expect(headers.nth(2)).toHaveText('Low Priority');
});

test('should group tasks by category', async ({ page }) => {
await page.selectOption('#groupBySelect', 'category');
const headers = page.locator('.task-section-header');
await expect(headers).toHaveCount(3);
await expect(headers.nth(0)).toHaveText('Personal');
await expect(headers.nth(1)).toHaveText('Work');
await expect(headers.nth(2)).toHaveText('Ungrouped');
});

test('should revert to default grouping when no grouping selected', async ({ page }) => {
await page.selectOption('#groupBySelect', 'priority');
await page.selectOption('#groupBySelect', '');
// Default view shows no task-section-header for tasks with no due date
await expect(page.locator('.task-item')).toHaveCount(3);
});
});

// ========================
// Settings
// ========================
Expand Down Expand Up @@ -445,15 +392,6 @@ test.describe('Task Manager App', () => {
expect(value).toBe('completed');
});

test('should persist groupBy filter across page reloads', async ({ page }) => {
await page.selectOption('#groupBySelect', 'priority');
await page.reload();
await page.waitForSelector('.header');
await page.click('[data-tab="tasks"]');
const value = await page.locator('#groupBySelect').inputValue();
expect(value).toBe('priority');
});

test('should persist hideCompleted state across page reloads', async ({ page }) => {
await page.click('#hideCompletedBtn');
await expect(page.locator('#hideCompletedBtn')).toContainText('Show Completed');
Expand All @@ -465,15 +403,12 @@ test.describe('Task Manager App', () => {

test('should reset all filters when Reset Filters is clicked', async ({ page }) => {
await page.selectOption('#statusFilter', 'pending');
await page.selectOption('#groupBySelect', 'category');
await page.click('#hideCompletedBtn');

await page.click('#resetFiltersBtn');

const statusValue = await page.locator('#statusFilter').inputValue();
const groupByValue = await page.locator('#groupBySelect').inputValue();
expect(statusValue).toBe('');
expect(groupByValue).toBe('');
await expect(page.locator('#hideCompletedBtn')).toContainText('Hide Completed');
});

Expand Down
32 changes: 0 additions & 32 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -129,20 +129,12 @@ <h2>Tasks</h2>

<!-- Task Filters -->
<div class="filters">
<select id="categoryFilter" class="filter-select">
<option value="">All Categories</option>
</select>
<select id="statusFilter" class="filter-select">
<option value="">All Statuses</option>
<option value="pending">Pending</option>
<option value="completed">Completed</option>
<option value="overdue">Overdue</option>
</select>
<select id="groupBySelect" class="filter-select">
<option value="">No Grouping</option>
<option value="priority">Group by Priority</option>
<option value="category">Group by Category</option>
</select>
<input type="text" id="searchTasks" class="filter-input" placeholder="Search tasks...">
<button class="btn btn-secondary" id="hideCompletedBtn">👁 Hide Completed</button>
<button class="btn btn-secondary" id="resetFiltersBtn">↺ Reset Filters</button>
Expand Down Expand Up @@ -175,30 +167,6 @@ <h3>Task Details</h3>
<label for="taskDueDate">Due Date</label>
<input type="date" id="taskDueDate">
</div>
<div class="form-group">
<label for="taskCategory">Category</label>
<select id="taskCategory">
<option value="">Select category...</option>
<option value="__add_new__">+ Add New Category</option>
</select>
<div id="taskCategoryInput" style="display: none; margin-top: 0.5rem;">
<input type="text" id="taskCategoryText" placeholder="Enter new category name">
<div style="display: flex; gap: 0.5rem; margin-top: 0.5rem;">
<button type="button" class="btn btn-secondary" id="taskCategorySave">Add</button>
<button type="button" class="btn btn-secondary" id="taskCategoryCancel">Cancel</button>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="taskPriority">Priority</label>
<select id="taskPriority">
<option value="low">Low</option>
<option value="medium" selected>Medium</option>
<option value="high">High</option>
</select>
</div>
</div>
<div class="form-group">
<label for="taskRepeatType">Repeat Type</label>
Expand Down
Loading
Loading