Browse Source

Merge branch 'develop' into refactor/webhooks

pull/5349/head
Wing-Kam Wong 2 years ago
parent
commit
133946cc82
  1. 42
      packages/nc-gui/lang/uk.json
  2. 11
      tests/playwright/package-lock.json
  3. 1
      tests/playwright/package.json
  4. 20
      tests/playwright/pages/Dashboard/TreeView.ts
  5. 36
      tests/playwright/tests/filters.spec.ts

42
packages/nc-gui/lang/uk.json

@ -39,7 +39,7 @@
"signIn": "Увійти", "signIn": "Увійти",
"signOut": "Вийти", "signOut": "Вийти",
"required": "Обов'язково", "required": "Обов'язково",
"enableScanner": "Enable Scanner for filling", "enableScanner": "Увімкнути сканер для заповнення",
"preferred": "Бажане", "preferred": "Бажане",
"mandatory": "Обов’язкове", "mandatory": "Обов’язкове",
"loading": "Завантаження ...", "loading": "Завантаження ...",
@ -76,7 +76,7 @@
"hideField": "Приховати поле", "hideField": "Приховати поле",
"sortAsc": "За зростанням", "sortAsc": "За зростанням",
"sortDesc": "За спаданням", "sortDesc": "За спаданням",
"geoDataField": "GeoData Field" "geoDataField": "Поле геоданих"
}, },
"objects": { "objects": {
"project": "Проєкт", "project": "Проєкт",
@ -101,7 +101,7 @@
"form": "Форма", "form": "Форма",
"kanban": "Канбан", "kanban": "Канбан",
"calendar": "Календар", "calendar": "Календар",
"map": "Map" "map": "Мапа"
}, },
"user": "Користувач", "user": "Користувач",
"users": "Користувачі", "users": "Користувачі",
@ -139,7 +139,7 @@
"Currency": "Валюта", "Currency": "Валюта",
"Percent": "Відсоток", "Percent": "Відсоток",
"Duration": "Тривалість", "Duration": "Тривалість",
"GeoData": "GeoData", "GeoData": "Геодані",
"Rating": "Рейтинг", "Rating": "Рейтинг",
"Formula": "Формула", "Formula": "Формула",
"Rollup": "Накопичення", "Rollup": "Накопичення",
@ -211,7 +211,7 @@
"codeSnippet": "Фрагмент коду", "codeSnippet": "Фрагмент коду",
"keyboardShortcut": "Клавіатурні скорочення", "keyboardShortcut": "Клавіатурні скорочення",
"generateRandomName": "Згенерувати випадкове ім’я", "generateRandomName": "Згенерувати випадкове ім’я",
"findRowByScanningCode": "Find row by scanning a QR or Barcode" "findRowByScanningCode": "Знайти рядок, відсканувавши QR-код або штрих-код"
}, },
"labels": { "labels": {
"createdBy": "Автор", "createdBy": "Автор",
@ -221,7 +221,7 @@
"viewName": "Назва вигляду", "viewName": "Назва вигляду",
"viewLink": "Вигляд посилання", "viewLink": "Вигляд посилання",
"columnName": "Назва стовпця", "columnName": "Назва стовпця",
"columnToScanFor": "Column to scan", "columnToScanFor": "Стовпець для сканування",
"columnType": "Тип стовпця", "columnType": "Тип стовпця",
"roleName": "Ім'я ролі", "roleName": "Ім'я ролі",
"roleDescription": "Опис ролі", "roleDescription": "Опис ролі",
@ -238,7 +238,7 @@
"action": "Дія", "action": "Дія",
"actions": "Дії", "actions": "Дії",
"operation": "Операція", "operation": "Операція",
"operationSub": "Sub Operation", "operationSub": "Субоперація",
"operationType": "Тип операції", "operationType": "Тип операції",
"operationSubType": "Підтип операції", "operationSubType": "Підтип операції",
"description": "Опис", "description": "Опис",
@ -260,9 +260,9 @@
"barcodeFormat": "Формат штрих-коду", "barcodeFormat": "Формат штрих-коду",
"qrCodeValueTooLong": "Забагато символів для QR-коду", "qrCodeValueTooLong": "Забагато символів для QR-коду",
"barcodeValueTooLong": "Забагато символів для штрих-коду", "barcodeValueTooLong": "Забагато символів для штрих-коду",
"currentLocation": "Current Location", "currentLocation": "Розташування",
"lng": "Lng", "lng": "Lng",
"lat": "Lat", "lat": "Широта",
"aggregateFunction": "Агрегатна функція", "aggregateFunction": "Агрегатна функція",
"dbCreateIfNotExists": "База даних: створити, якщо не існує", "dbCreateIfNotExists": "База даних: створити, якщо не існує",
"clientKey": "Ключ клієнта", "clientKey": "Ключ клієнта",
@ -390,13 +390,13 @@
"renameTable": "Перейменувати таблицю", "renameTable": "Перейменувати таблицю",
"deleteTable": "Видалити таблицю", "deleteTable": "Видалити таблицю",
"addField": "Додати нове поле до цієї таблиці", "addField": "Додати нове поле до цієї таблиці",
"setDisplay": "Set as Display value", "setDisplay": "Встановити як основне значення",
"addRow": "Додати новий рядок", "addRow": "Додати новий рядок",
"saveRow": "Зберегти рядок", "saveRow": "Зберегти рядок",
"saveAndExit": "Зберегти та вийти", "saveAndExit": "Зберегти та вийти",
"saveAndStay": "Зберегти та залишитись", "saveAndStay": "Зберегти та залишитись",
"insertRow": "Вставити новий рядок", "insertRow": "Вставити новий рядок",
"duplicateRow": "Duplicate Row", "duplicateRow": "Дублювати рядок",
"deleteRow": "Видалити рядок", "deleteRow": "Видалити рядок",
"deleteSelectedRow": "Видалити вибрані рядки", "deleteSelectedRow": "Видалити вибрані рядки",
"importExcel": "Імпортувати з Excel", "importExcel": "Імпортувати з Excel",
@ -412,8 +412,8 @@
"changePwd": "Змінити пароль", "changePwd": "Змінити пароль",
"createView": "Створити вигляд", "createView": "Створити вигляд",
"shareView": "Поділитися виглядом", "shareView": "Поділитися виглядом",
"findRowByCodeScan": "Find row by scan", "findRowByCodeScan": "Знайти рядок за скануванням",
"fillByCodeScan": "Fill by scan", "fillByCodeScan": "Заповнити за допомогою сканування",
"listSharedView": "Список спільних виглядів", "listSharedView": "Список спільних виглядів",
"ListView": "Список виглядів", "ListView": "Список виглядів",
"copyView": "Копіювати вигляд", "copyView": "Копіювати вигляд",
@ -429,10 +429,10 @@
"openTab": "Відкрийте нову вкладку", "openTab": "Відкрийте нову вкладку",
"iFrame": "Копіювати вбудований HTML-код", "iFrame": "Копіювати вбудований HTML-код",
"addWebhook": "Додати новий Webhook", "addWebhook": "Додати новий Webhook",
"enableWebhook": "Enable Webhook", "enableWebhook": "Увімкнути webhook",
"testWebhook": "Test Webhook", "testWebhook": "Перевірити вебхук",
"copyWebhook": "Copy Webhook", "copyWebhook": "Скопіювати веб-хук",
"deleteWebhook": "Delete Webhook", "deleteWebhook": "Видалити веб-хук",
"newToken": "Додати новий токен", "newToken": "Додати новий токен",
"exportZip": "Експорт Zip-файлу", "exportZip": "Експорт Zip-файлу",
"importZip": "Імпорт Zip-файлу", "importZip": "Імпорт Zip-файлу",
@ -471,11 +471,11 @@
}, },
"map": { "map": {
"mappedBy": "Mapped By", "mappedBy": "Mapped By",
"chooseMappingField": "Choose a Mapping Field", "chooseMappingField": "Виберіть поле для мапування",
"openInGoogleMaps": "Google Maps", "openInGoogleMaps": "Google Карти",
"openInOpenStreetMap": "OSM" "openInOpenStreetMap": "OSM"
}, },
"toggleMobileMode": "Toggle Mobile Mode" "toggleMobileMode": "Увімкнути мобільний режим"
}, },
"tooltip": { "tooltip": {
"saveChanges": "Зберегти зміни", "saveChanges": "Зберегти зміни",
@ -542,7 +542,7 @@
"orgViewer": "Глядач не може створювати нові проєкти, але він може отримати доступ до будь-якого відкритого проєкту." "orgViewer": "Глядач не може створювати нові проєкти, але він може отримати доступ до будь-якого відкритого проєкту."
}, },
"codeScanner": { "codeScanner": {
"loadingScanner": "Loading the scanner...", "loadingScanner": "Завантаження сканера...",
"selectColumn": "Select a column (QR code or Barcode) that you want to use for finding a row by scanning.", "selectColumn": "Select a column (QR code or Barcode) that you want to use for finding a row by scanning.",
"moreThanOneRowFoundForCode": "More than one row found for this code. Currently only unique codes are supported.", "moreThanOneRowFoundForCode": "More than one row found for this code. Currently only unique codes are supported.",
"noRowFoundForCode": "No row found for this code for the selected column" "noRowFoundForCode": "No row found for this code for the selected column"

11
tests/playwright/package-lock.json generated

@ -10,6 +10,7 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"body-parser": "^1.20.1", "body-parser": "^1.20.1",
"dayjs": "^1.11.7",
"express": "^4.18.2", "express": "^4.18.2",
"nocodb-sdk": "file:../../packages/nocodb-sdk", "nocodb-sdk": "file:../../packages/nocodb-sdk",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"
@ -1183,6 +1184,11 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/dayjs": {
"version": "1.11.7",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
"integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
},
"node_modules/debug": { "node_modules/debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -5796,6 +5802,11 @@
"which": "^2.0.1" "which": "^2.0.1"
} }
}, },
"dayjs": {
"version": "1.11.7",
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz",
"integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ=="
},
"debug": { "debug": {
"version": "2.6.9", "version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",

1
tests/playwright/package.json

@ -44,6 +44,7 @@
}, },
"dependencies": { "dependencies": {
"body-parser": "^1.20.1", "body-parser": "^1.20.1",
"dayjs": "^1.11.7",
"express": "^4.18.2", "express": "^4.18.2",
"nocodb-sdk": "file:../../packages/nocodb-sdk", "nocodb-sdk": "file:../../packages/nocodb-sdk",
"xlsx": "^0.18.5" "xlsx": "^0.18.5"

20
tests/playwright/pages/Dashboard/TreeView.ts

@ -23,10 +23,24 @@ export class TreeViewPage extends BasePage {
} }
async verifyVisibility({ isVisible }: { isVisible: boolean }) { async verifyVisibility({ isVisible }: { isVisible: boolean }) {
if (isVisible) { await this.rootPage.waitForTimeout(1000);
await expect(this.get()).toBeVisible();
const domElement = await this.get();
// get width of treeview dom element
const width = (await domElement.boundingBox()).width;
// if (isVisible) {
// await expect(this.get()).toBeVisible();
// } else {
// await expect(this.get()).not.toBeVisible();
// }
// border for treeview is 1px
// if not-visible, width should be < 5;
if (!isVisible) {
expect(width).toBeLessThan(5);
} else { } else {
await expect(this.get()).not.toBeVisible(); expect(width).toBeGreaterThan(5);
} }
} }

36
tests/playwright/tests/filters.spec.ts

@ -5,6 +5,7 @@ import { ToolbarPage } from '../pages/Dashboard/common/Toolbar';
import { UITypes } from 'nocodb-sdk'; import { UITypes } from 'nocodb-sdk';
import { Api } from 'nocodb-sdk'; import { Api } from 'nocodb-sdk';
import { rowMixedValue } from '../setup/xcdb-records'; import { rowMixedValue } from '../setup/xcdb-records';
import dayjs from 'dayjs';
let dashboard: DashboardPage, toolbar: ToolbarPage; let dashboard: DashboardPage, toolbar: ToolbarPage;
let context: any; let context: any;
@ -654,19 +655,23 @@ test.describe('Filter Tests: Select based', () => {
// Date & Time related // Date & Time related
// //
function getUTCEpochTime(date) {
return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0);
}
test.describe('Filter Tests: Date based', () => { test.describe('Filter Tests: Date based', () => {
const today = new Date().setHours(0, 0, 0, 0); const today = getUTCEpochTime(new Date());
const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1)).setHours(0, 0, 0, 0); const tomorrow = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 1)));
const yesterday = new Date(new Date().setDate(new Date().getDate() - 1)).setHours(0, 0, 0, 0); const yesterday = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 1)));
const oneWeekAgo = new Date(new Date().setDate(new Date().getDate() - 7)).setHours(0, 0, 0, 0); const oneWeekAgo = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 7)));
const oneWeekFromNow = new Date(new Date().setDate(new Date().getDate() + 7)).setHours(0, 0, 0, 0); const oneWeekFromNow = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 7)));
const oneMonthAgo = new Date(new Date().setMonth(new Date().getMonth() - 1)).setHours(0, 0, 0, 0); const oneMonthAgo = getUTCEpochTime(dayjs().subtract(1, 'month').toDate());
const oneMonthFromNow = new Date(new Date().setMonth(new Date().getMonth() + 1)).setHours(0, 0, 0, 0); const oneMonthFromNow = getUTCEpochTime(dayjs().add(1, 'month').toDate());
const daysAgo45 = new Date(new Date().setDate(new Date().getDate() - 45)).setHours(0, 0, 0, 0); const daysAgo45 = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 45)));
const daysFromNow45 = new Date(new Date().setDate(new Date().getDate() + 45)).setHours(0, 0, 0, 0); const daysFromNow45 = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 45)));
const thisMonth15 = new Date(new Date().setDate(15)).setHours(0, 0, 0, 0); const thisMonth15 = getUTCEpochTime(new Date(new Date().setDate(15)));
const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).setHours(0, 0, 0, 0); const oneYearAgo = getUTCEpochTime(new Date(new Date().setFullYear(new Date().getFullYear() - 1)));
const oneYearFromNow = new Date(new Date().setFullYear(new Date().getFullYear() + 1)).setHours(0, 0, 0, 0); const oneYearFromNow = getUTCEpochTime(new Date(new Date().setFullYear(new Date().getFullYear() + 1)));
async function dateTimeBasedFilterTest(dataType, setCount) { async function dateTimeBasedFilterTest(dataType, setCount) {
await dashboard.closeTab({ title: 'Team & Auth' }); await dashboard.closeTab({ title: 'Team & Auth' });
@ -679,8 +684,7 @@ test.describe('Filter Tests: Date based', () => {
// records array with time set to 00:00:00; store time in unix epoch // records array with time set to 00:00:00; store time in unix epoch
const recordsTimeSetToZero = records.list.map(r => { const recordsTimeSetToZero = records.list.map(r => {
const date = new Date(r[dataType]); const date = new Date(r[dataType]);
date.setHours(0, 0, 0, 0); return getUTCEpochTime(date);
return date.getTime();
}); });
const isFilterList = [ const isFilterList = [
@ -977,11 +981,11 @@ test.describe('Filter Tests: Date based', () => {
}); });
test('Date : filters-1', async () => { test('Date : filters-1', async () => {
await dateTimeBasedFilterTest('Date', 1); await dateTimeBasedFilterTest('Date', 0);
}); });
test('Date : filters-2', async () => { test('Date : filters-2', async () => {
await dateTimeBasedFilterTest('Date', 2); await dateTimeBasedFilterTest('Date', 1);
}); });
}); });

Loading…
Cancel
Save