test: exercise Todo reminder controls from source
This commit is contained in:
parent
e223ccccc6
commit
c3836ef1a6
|
|
@ -27,7 +27,13 @@ test.describe('Todo plugin workflow', () => {
|
||||||
await todos.locator('[data-todo-input="description"]').fill('Collect factual review notes.');
|
await todos.locator('[data-todo-input="description"]').fill('Collect factual review notes.');
|
||||||
await todos.locator('[data-todo-input="priority"]').selectOption('high');
|
await todos.locator('[data-todo-input="priority"]').selectOption('high');
|
||||||
await todos.locator('[data-todo-input="dueAt"]').fill('2000-01-01');
|
await todos.locator('[data-todo-input="dueAt"]').fill('2000-01-01');
|
||||||
await todos.locator('[data-todo-input="reminderAt"]').fill('2000-01-01T09:00');
|
await todos.locator('[data-todo-input="reminderDate"]').fill('2000-01-01');
|
||||||
|
const reminderHour = todos.locator('[data-todo-input="reminderHour"]');
|
||||||
|
const reminderMinute = todos.locator('[data-todo-input="reminderMinute"]');
|
||||||
|
await expect(reminderHour).toHaveCSS('appearance', 'none');
|
||||||
|
await expect(reminderMinute).toHaveCSS('appearance', 'none');
|
||||||
|
await reminderHour.selectOption('09');
|
||||||
|
await reminderMinute.selectOption('30');
|
||||||
await todos.locator('[data-todo-action="save"]').click();
|
await todos.locator('[data-todo-action="save"]').click();
|
||||||
|
|
||||||
await expect(todos).toContainText('Overdue');
|
await expect(todos).toContainText('Overdue');
|
||||||
|
|
@ -37,7 +43,7 @@ test.describe('Todo plugin workflow', () => {
|
||||||
const settings = Array.isArray(result) ? result[0] : result;
|
const settings = Array.isArray(result) ? result[0] : result;
|
||||||
const todo = settings['todos:global'].find((item) => item.title === 'Prepare project review');
|
const todo = settings['todos:global'].find((item) => item.title === 'Prepare project review');
|
||||||
return todo && [todo.workspaceRootPath, todo.priority, todo.dueAt, todo.reminderAt].join('|');
|
return todo && [todo.workspaceRootPath, todo.priority, todo.dueAt, todo.reminderAt].join('|');
|
||||||
})).toBe('Project|high|2000-01-01|2000-01-01T09:00');
|
})).toBe('Project|high|2000-01-01|2000-01-01T09:30');
|
||||||
|
|
||||||
await todos.locator('[data-todo-action="edit"]').click();
|
await todos.locator('[data-todo-action="edit"]').click();
|
||||||
await todos.locator('[data-todo-input="title"]').fill('Prepare project review updated');
|
await todos.locator('[data-todo-input="title"]').fill('Prepare project review updated');
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,9 @@ test.describe('Workspace templates', () => {
|
||||||
|
|
||||||
test('creation modal validates names, shows template tools, and persists the selected snapshot', async ({ page }) => {
|
test('creation modal validates names, shows template tools, and persists the selected snapshot', async ({ page }) => {
|
||||||
const modal = await openCreateModal(page);
|
const modal = await openCreateModal(page);
|
||||||
await expect(modal.locator('[data-workspace-template]')).toHaveValue('default');
|
const templateSelect = modal.locator('[data-workspace-template]');
|
||||||
|
await expect(templateSelect).toHaveValue('default');
|
||||||
|
await expect(templateSelect).toHaveCSS('appearance', 'none');
|
||||||
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Notes');
|
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Notes');
|
||||||
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Browser Inbox');
|
await expect(modal.locator('[data-workspace-template-tools]')).toContainText('Browser Inbox');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
import defaultEditorSource from '../../../../../verstak-official-plugins/plugins/default-editor/frontend/src/index.js?raw';
|
import defaultEditorSource from '../../../../../verstak-official-plugins/plugins/default-editor/frontend/src/index.js?raw';
|
||||||
import secretsSource from '../../../../../verstak-official-plugins/plugins/secrets/frontend/src/index.js?raw';
|
import secretsSource from '../../../../../verstak-official-plugins/plugins/secrets/frontend/src/index.js?raw';
|
||||||
import activitySource from '../../../../../verstak-official-plugins/plugins/activity/frontend/src/index.js?raw';
|
import activitySource from '../../../../../verstak-official-plugins/plugins/activity/frontend/src/index.js?raw';
|
||||||
|
import todoSource from '../../../../../verstak-official-plugins/plugins/todo/frontend/src/index.js?raw';
|
||||||
|
|
||||||
(function () {
|
(function () {
|
||||||
if (window.__wailsMockReady) return;
|
if (window.__wailsMockReady) return;
|
||||||
|
|
@ -363,6 +364,7 @@ import activitySource from '../../../../../verstak-official-plugins/plugins/acti
|
||||||
var pluginSettings = {
|
var pluginSettings = {
|
||||||
'verstak.platform-test': { savedText: 'initial value' }
|
'verstak.platform-test': { savedText: 'initial value' }
|
||||||
};
|
};
|
||||||
|
var pluginNotifications = {};
|
||||||
var pluginData = {};
|
var pluginData = {};
|
||||||
var secretRecords = makeDefaultSecretRecords();
|
var secretRecords = makeDefaultSecretRecords();
|
||||||
var vaultFiles = makeDefaultVaultFiles();
|
var vaultFiles = makeDefaultVaultFiles();
|
||||||
|
|
@ -571,7 +573,8 @@ import activitySource from '../../../../../verstak-official-plugins/plugins/acti
|
||||||
source: 'official',
|
source: 'official',
|
||||||
icon: 'list-todo',
|
icon: 'list-todo',
|
||||||
provides: ['todo.list', 'todo.workspace'],
|
provides: ['todo.list', 'todo.workspace'],
|
||||||
permissions: ['files.read', 'storage.namespace', 'ui.register'],
|
requires: ['verstak/core/notifications/v1'],
|
||||||
|
permissions: ['files.read', 'storage.namespace', 'ui.register', 'notifications.schedule'],
|
||||||
frontend: { entry: 'frontend/dist/index.js' },
|
frontend: { entry: 'frontend/dist/index.js' },
|
||||||
contributes: {
|
contributes: {
|
||||||
views: [{ id: 'verstak.todo.view', title: 'Todos', icon: 'list-todo', component: 'TodoView' }],
|
views: [{ id: 'verstak.todo.view', title: 'Todos', icon: 'list-todo', component: 'TodoView' }],
|
||||||
|
|
@ -3405,8 +3408,22 @@ import activitySource from '../../../../../verstak-official-plugins/plugins/acti
|
||||||
pluginSettings[pluginId] = Object.assign({}, settings || {});
|
pluginSettings[pluginId] = Object.assign({}, settings || {});
|
||||||
return Promise.resolve('');
|
return Promise.resolve('');
|
||||||
},
|
},
|
||||||
ReadPluginSetting: function () { return Promise.resolve(null); },
|
ReadPluginSetting: function (pluginId, key) {
|
||||||
WritePluginSetting: function () { return Promise.resolve(null); },
|
return Promise.resolve([pluginSettings[pluginId] && pluginSettings[pluginId][key], '']);
|
||||||
|
},
|
||||||
|
WritePluginSetting: function (pluginId, key, value) {
|
||||||
|
pluginSettings[pluginId] = pluginSettings[pluginId] || {};
|
||||||
|
pluginSettings[pluginId][key] = value;
|
||||||
|
return Promise.resolve('');
|
||||||
|
},
|
||||||
|
ReplacePluginNotifications: function (pluginId, items) {
|
||||||
|
pluginNotifications[pluginId] = Array.isArray(items) ? items.slice() : [];
|
||||||
|
return Promise.resolve('');
|
||||||
|
},
|
||||||
|
ClearPluginNotifications: function (pluginId) {
|
||||||
|
delete pluginNotifications[pluginId];
|
||||||
|
return Promise.resolve('');
|
||||||
|
},
|
||||||
ReadPluginDataJSON: function (pluginId, name) {
|
ReadPluginDataJSON: function (pluginId, name) {
|
||||||
var data = (pluginData[pluginId] && pluginData[pluginId][name]) || {};
|
var data = (pluginData[pluginId] && pluginData[pluginId][name]) || {};
|
||||||
return Promise.resolve([Object.assign({}, data), '']);
|
return Promise.resolve([Object.assign({}, data), '']);
|
||||||
|
|
@ -3547,7 +3564,7 @@ import activitySource from '../../../../../verstak-official-plugins/plugins/acti
|
||||||
return Promise.resolve(browserInboxBundle());
|
return Promise.resolve(browserInboxBundle());
|
||||||
}
|
}
|
||||||
if (pluginId === 'verstak.todo' && assetPath === 'frontend/dist/index.js') {
|
if (pluginId === 'verstak.todo' && assetPath === 'frontend/dist/index.js') {
|
||||||
return Promise.resolve(todoBundle());
|
return Promise.resolve(todoSource);
|
||||||
}
|
}
|
||||||
if (pluginId === 'verstak.secrets') {
|
if (pluginId === 'verstak.secrets') {
|
||||||
return Promise.resolve(secretsSource);
|
return Promise.resolve(secretsSource);
|
||||||
|
|
@ -4234,6 +4251,7 @@ import activitySource from '../../../../../verstak-official-plugins/plugins/acti
|
||||||
workbenchPreferences = {};
|
workbenchPreferences = {};
|
||||||
openedResources = [];
|
openedResources = [];
|
||||||
pluginSettings = { 'verstak.platform-test': { savedText: 'initial value' } };
|
pluginSettings = { 'verstak.platform-test': { savedText: 'initial value' } };
|
||||||
|
pluginNotifications = {};
|
||||||
secretRecords = makeDefaultSecretRecords();
|
secretRecords = makeDefaultSecretRecords();
|
||||||
vaultFiles = makeDefaultVaultFiles();
|
vaultFiles = makeDefaultVaultFiles();
|
||||||
externalOpens = [];
|
externalOpens = [];
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue