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

11
tests/playwright/package-lock.json generated

@ -10,6 +10,7 @@
"license": "ISC",
"dependencies": {
"body-parser": "^1.20.1",
"dayjs": "^1.11.7",
"express": "^4.18.2",
"nocodb-sdk": "file:../../packages/nocodb-sdk",
"xlsx": "^0.18.5"
@ -1183,6 +1184,11 @@
"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": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -5796,6 +5802,11 @@
"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": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",

1
tests/playwright/package.json

@ -44,6 +44,7 @@
},
"dependencies": {
"body-parser": "^1.20.1",
"dayjs": "^1.11.7",
"express": "^4.18.2",
"nocodb-sdk": "file:../../packages/nocodb-sdk",
"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 }) {
if (isVisible) {
await expect(this.get()).toBeVisible();
await this.rootPage.waitForTimeout(1000);
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 {
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 { Api } from 'nocodb-sdk';
import { rowMixedValue } from '../setup/xcdb-records';
import dayjs from 'dayjs';
let dashboard: DashboardPage, toolbar: ToolbarPage;
let context: any;
@ -654,19 +655,23 @@ test.describe('Filter Tests: Select based', () => {
// 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', () => {
const today = new Date().setHours(0, 0, 0, 0);
const tomorrow = new Date(new Date().setDate(new Date().getDate() + 1)).setHours(0, 0, 0, 0);
const yesterday = new Date(new Date().setDate(new Date().getDate() - 1)).setHours(0, 0, 0, 0);
const oneWeekAgo = new Date(new Date().setDate(new Date().getDate() - 7)).setHours(0, 0, 0, 0);
const oneWeekFromNow = new Date(new Date().setDate(new Date().getDate() + 7)).setHours(0, 0, 0, 0);
const oneMonthAgo = new Date(new Date().setMonth(new Date().getMonth() - 1)).setHours(0, 0, 0, 0);
const oneMonthFromNow = new Date(new Date().setMonth(new Date().getMonth() + 1)).setHours(0, 0, 0, 0);
const daysAgo45 = new Date(new Date().setDate(new Date().getDate() - 45)).setHours(0, 0, 0, 0);
const daysFromNow45 = new Date(new Date().setDate(new Date().getDate() + 45)).setHours(0, 0, 0, 0);
const thisMonth15 = new Date(new Date().setDate(15)).setHours(0, 0, 0, 0);
const oneYearAgo = new Date(new Date().setFullYear(new Date().getFullYear() - 1)).setHours(0, 0, 0, 0);
const oneYearFromNow = new Date(new Date().setFullYear(new Date().getFullYear() + 1)).setHours(0, 0, 0, 0);
const today = getUTCEpochTime(new Date());
const tomorrow = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 1)));
const yesterday = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 1)));
const oneWeekAgo = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 7)));
const oneWeekFromNow = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 7)));
const oneMonthAgo = getUTCEpochTime(dayjs().subtract(1, 'month').toDate());
const oneMonthFromNow = getUTCEpochTime(dayjs().add(1, 'month').toDate());
const daysAgo45 = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() - 45)));
const daysFromNow45 = getUTCEpochTime(new Date(new Date().setDate(new Date().getDate() + 45)));
const thisMonth15 = getUTCEpochTime(new Date(new Date().setDate(15)));
const oneYearAgo = getUTCEpochTime(new Date(new Date().setFullYear(new Date().getFullYear() - 1)));
const oneYearFromNow = getUTCEpochTime(new Date(new Date().setFullYear(new Date().getFullYear() + 1)));
async function dateTimeBasedFilterTest(dataType, setCount) {
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
const recordsTimeSetToZero = records.list.map(r => {
const date = new Date(r[dataType]);
date.setHours(0, 0, 0, 0);
return date.getTime();
return getUTCEpochTime(date);
});
const isFilterList = [
@ -977,11 +981,11 @@ test.describe('Filter Tests: Date based', () => {
});
test('Date : filters-1', async () => {
await dateTimeBasedFilterTest('Date', 1);
await dateTimeBasedFilterTest('Date', 0);
});
test('Date : filters-2', async () => {
await dateTimeBasedFilterTest('Date', 2);
await dateTimeBasedFilterTest('Date', 1);
});
});

Loading…
Cancel
Save