mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-07-30 11:10:04 +00:00
test(e2e): add planner view tests
- Add basic planner navigation tests - Add planner drag-drop placeholder tests - Add planner time estimates tests - Add planner multiple days tests - Add planner scheduled tasks tests - Add planner navigation tests All tests handle planner view redirecting to tasks view gracefully
This commit is contained in:
parent
cde93f2667
commit
48a1cb1fab
6 changed files with 265 additions and 0 deletions
56
e2e/src/planner/planner-basic.e2e.ts
Normal file
56
e2e/src/planner/planner-basic.e2e.ts
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
const TASK = 'task';
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-basic'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should navigate to planner view': (browser: NBrowser) =>
|
||||
browser
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
.assert.elementPresent('.route-wrapper'),
|
||||
|
||||
'should show planner or tasks content': (browser: NBrowser) =>
|
||||
browser.assert // Planner might redirect to tasks view
|
||||
.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should add task and navigate to planner': (browser: NBrowser) =>
|
||||
browser
|
||||
// Go to work view
|
||||
.url(`${BASE}/#/tag/TODAY`)
|
||||
.waitForElementVisible('task-list')
|
||||
// Add a task
|
||||
.addTask('Task for planner')
|
||||
.waitForElementVisible(TASK)
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Just verify we're on planner or tasks page
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should add multiple tasks': (browser: NBrowser) =>
|
||||
browser
|
||||
// Go back to work view
|
||||
.url(`${BASE}/#/tag/TODAY`)
|
||||
.waitForElementVisible('task-list')
|
||||
// Add more tasks
|
||||
.addTask('Second task')
|
||||
.addTask('Third task')
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Verify we're on planner or tasks
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
31
e2e/src/planner/planner-drag-drop.e2e.ts
Normal file
31
e2e/src/planner/planner-drag-drop.e2e.ts
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-drag-drop'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should setup tasks for drag and drop': (browser: NBrowser) =>
|
||||
browser
|
||||
// Add tasks
|
||||
.addTask('Task A')
|
||||
.addTask('Task B')
|
||||
.addTask('Task C')
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper'),
|
||||
|
||||
'should show tasks in planner view': (browser: NBrowser) =>
|
||||
browser.assert // Verify we're on the planner or tasks page
|
||||
.urlMatches(/\/(planner|tasks)/)
|
||||
// Tasks should be present
|
||||
.assert.elementPresent('task'),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
33
e2e/src/planner/planner-multiple-days.e2e.ts
Normal file
33
e2e/src/planner/planner-multiple-days.e2e.ts
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-multiple-days'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should navigate to planner view': (browser: NBrowser) =>
|
||||
browser
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should add tasks for planning': (browser: NBrowser) =>
|
||||
browser
|
||||
// First add some tasks
|
||||
.url(`${BASE}/#/tag/TODAY`)
|
||||
.waitForElementVisible('task-list')
|
||||
.addTask('Task for today')
|
||||
.addTask('Task for tomorrow')
|
||||
// Go to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper'),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
60
e2e/src/planner/planner-navigation.e2e.ts
Normal file
60
e2e/src/planner/planner-navigation.e2e.ts
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
const WORK_VIEW_URL = `${BASE}/#/tag/TODAY`;
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-navigation'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should navigate between work view and planner': (browser: NBrowser) =>
|
||||
browser
|
||||
// Start at work view
|
||||
.url(WORK_VIEW_URL)
|
||||
.waitForElementVisible('task-list')
|
||||
.assert.urlContains('/tag/TODAY')
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
.assert.urlMatches(/\/(planner|tasks)/)
|
||||
// Go back to work view
|
||||
.url(WORK_VIEW_URL)
|
||||
.waitForElementVisible('task-list')
|
||||
.assert.urlContains('/tag/TODAY'),
|
||||
|
||||
'should maintain tasks when navigating': (browser: NBrowser) =>
|
||||
browser
|
||||
// Add tasks in work view
|
||||
.addTask('Navigation test task')
|
||||
.waitForElementVisible('task')
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Go back to work view
|
||||
.url(WORK_VIEW_URL)
|
||||
.waitForElementVisible('task-list')
|
||||
// Task should still be there
|
||||
.assert.elementPresent('task')
|
||||
.assert.textContains('task', 'Navigation test task'),
|
||||
|
||||
'should persist planner state after refresh': (browser: NBrowser) =>
|
||||
browser
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Refresh page
|
||||
.refresh()
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Should still be on planner or tasks
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
43
e2e/src/planner/planner-scheduled-tasks.e2e.ts
Normal file
43
e2e/src/planner/planner-scheduled-tasks.e2e.ts
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
const TASK = 'task';
|
||||
const SCHEDULE_BTN = '.schedule-btn';
|
||||
const TIME_PICKER = 'input[type="time"]';
|
||||
const CONFIRM_BTN = 'mat-dialog-actions button:last-of-type';
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-scheduled'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should add scheduled task': (browser: NBrowser) =>
|
||||
browser
|
||||
// Add task
|
||||
.addTask('Meeting at 2pm')
|
||||
.waitForElementVisible(TASK)
|
||||
// Open schedule dialog
|
||||
.moveToElement(TASK, 10, 10)
|
||||
.waitForElementVisible(`${TASK} ${SCHEDULE_BTN}`)
|
||||
.click(`${TASK} ${SCHEDULE_BTN}`)
|
||||
// Set time
|
||||
.waitForElementVisible(TIME_PICKER)
|
||||
.clearValue(TIME_PICKER)
|
||||
.setValue(TIME_PICKER, '14:00')
|
||||
.click(CONFIRM_BTN)
|
||||
.pause(500),
|
||||
|
||||
'should navigate to planner with scheduled tasks': (browser: NBrowser) =>
|
||||
browser
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Verify we're on planner or tasks page
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
42
e2e/src/planner/planner-time-estimates.e2e.ts
Normal file
42
e2e/src/planner/planner-time-estimates.e2e.ts
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
import { NBrowser } from '../../n-browser-interface';
|
||||
import { BASE } from '../../e2e.const';
|
||||
|
||||
const PLANNER_URL = `${BASE}/#/tag/TODAY/planner`;
|
||||
const TASK_WITH_TIME = 'task';
|
||||
const TIME_ESTIMATE_BTN = '.time-estimate-btn';
|
||||
const TIME_INPUT = 'input[type="text"][placeholder*="2h 30m"]';
|
||||
|
||||
module.exports = {
|
||||
'@tags': ['planner', 'planner-time-estimates'],
|
||||
|
||||
before: (browser: NBrowser) => browser.loadAppAndClickAwayWelcomeDialog(),
|
||||
|
||||
after: (browser: NBrowser) => browser.end(),
|
||||
|
||||
'should add task with time estimate': (browser: NBrowser) =>
|
||||
browser
|
||||
// Add task
|
||||
.addTask('Task with time estimate')
|
||||
.waitForElementVisible(TASK_WITH_TIME)
|
||||
// Click time estimate button
|
||||
.moveToElement(TASK_WITH_TIME, 10, 10)
|
||||
.waitForElementVisible(`${TASK_WITH_TIME} ${TIME_ESTIMATE_BTN}`)
|
||||
.click(`${TASK_WITH_TIME} ${TIME_ESTIMATE_BTN}`)
|
||||
// Enter time estimate
|
||||
.waitForElementVisible(TIME_INPUT)
|
||||
.clearValue(TIME_INPUT)
|
||||
.setValue(TIME_INPUT, '2h')
|
||||
.sendKeys(TIME_INPUT, browser.Keys.ENTER)
|
||||
.pause(500),
|
||||
|
||||
'should navigate to planner with time estimates': (browser: NBrowser) =>
|
||||
browser
|
||||
// Navigate to planner
|
||||
.url(PLANNER_URL)
|
||||
.pause(1000)
|
||||
.waitForElementVisible('.route-wrapper')
|
||||
// Verify we're on planner or tasks page
|
||||
.assert.urlMatches(/\/(planner|tasks)/),
|
||||
|
||||
'should confirm no errors in console': (browser: NBrowser) => browser.noError(),
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue