From d4507404fcb7dbfbb3a3eaa71ae16d395156a558 Mon Sep 17 00:00:00 2001 From: Braulio Diez Date: Sat, 7 Sep 2024 21:14:31 +0200 Subject: [PATCH 1/5] Update README.md --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index abaf4c91..d953ffce 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Mongo Modeler is a free, open source online web application that allows you to design and model MongoDB databases. -Now you can take a look at the desktop community preview at [mongomodeler.com](https://mongomodeler.com/). +Give it a try: [mongomodeler.com](https://mongomodeler.com/). Click to watch the video tutorial: @@ -25,8 +25,6 @@ Main features: - It is a 100% online application, no installation required. - It is a free and open source application. -We are working to release a 0.9 version in the coming months. - ## Installation Clone this repository: From c897e1f3da9ee01ed6b2906bfb911b1a55d69325 Mon Sep 17 00:00:00 2001 From: Fran Lopez Date: Fri, 25 Oct 2024 19:21:24 +0200 Subject: [PATCH 2/5] add setup Playwright with initial e2e test and scripts --- .gitignore | 4 + e2e/launch-mongodb-designer-link.spec.ts | 8 ++ package-lock.json | 94 ++++++++++++++++++++++++ package.json | 8 +- playwright.config.ts | 59 +++++++++++++++ 5 files changed, 171 insertions(+), 2 deletions(-) create mode 100644 e2e/launch-mongodb-designer-link.spec.ts create mode 100644 playwright.config.ts diff --git a/.gitignore b/.gitignore index a547bf36..b88c8135 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,7 @@ dist-ssr *.njsproj *.sln *.sw? +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/e2e/launch-mongodb-designer-link.spec.ts b/e2e/launch-mongodb-designer-link.spec.ts new file mode 100644 index 00000000..22501931 --- /dev/null +++ b/e2e/launch-mongodb-designer-link.spec.ts @@ -0,0 +1,8 @@ +import { test, expect } from '@playwright/test'; + +test('navigates to and verifies MongoDB Designer URL', async ({ page }) => { + await page.goto(''); + + await page.getByRole('link', { name: 'Launch MongoDB Designer' }).click(); + await expect(page).toHaveURL('http://localhost:5173/editor.html'); +}); diff --git a/package-lock.json b/package-lock.json index 5a456f90..73c9c072 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@playwright/test": "^1.48.1", "@testing-library/dom": "^9.3.4", "@testing-library/react": "^14.2.1", "@types/jest": "^29.5.11", @@ -1214,6 +1215,21 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@playwright/test": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.1.tgz", + "integrity": "sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==", + "dev": true, + "dependencies": { + "playwright": "1.48.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", @@ -5336,6 +5352,50 @@ "pathe": "^1.1.0" } }, + "node_modules/playwright": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.1.tgz", + "integrity": "sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==", + "dev": true, + "dependencies": { + "playwright-core": "1.48.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.1.tgz", + "integrity": "sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", @@ -7743,6 +7803,15 @@ "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, + "@playwright/test": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.48.1.tgz", + "integrity": "sha512-s9RtWoxkOLmRJdw3oFvhFbs9OJS0BzrLUc8Hf6l2UdCNd1rqeEyD4BhCJkvzeEoD1FsK4mirsWwGerhVmYKtZg==", + "dev": true, + "requires": { + "playwright": "1.48.1" + } + }, "@rollup/rollup-android-arm-eabi": { "version": "4.9.6", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", @@ -10683,6 +10752,31 @@ "pathe": "^1.1.0" } }, + "playwright": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.48.1.tgz", + "integrity": "sha512-j8CiHW/V6HxmbntOfyB4+T/uk08tBy6ph0MpBXwuoofkSnLmlfdYNNkFTYD6ofzzlSqLA1fwH4vwvVFvJgLN0w==", + "dev": true, + "requires": { + "fsevents": "2.3.2", + "playwright-core": "1.48.1" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } + } + }, + "playwright-core": { + "version": "1.48.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.48.1.tgz", + "integrity": "sha512-Yw/t4VAFX/bBr1OzwCuOMZkY1Cnb4z/doAFSwf4huqAGWmf9eMNjmK7NiOljCdLmxeRYcGPPmcDgU0zOlzP0YA==", + "dev": true + }, "postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", diff --git a/package.json b/package.json index c69851a4..270626c3 100644 --- a/package.json +++ b/package.json @@ -4,14 +4,17 @@ "version": "0.0.0", "type": "module", "scripts": { + "postinstall": "npm run install:e2e-browsers", + "install:e2e-browsers": "npx playwright install", "dev": "vite", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview", "format": "prettier --write .", "test": "vitest", - "prepare": "husky install", - "tsc-check": "tsc --noEmit" + "prepare": "husky || \"No need to install husky\"", + "tsc-check": "tsc --noEmit", + "e2e": "playwright test --ui" }, "dependencies": { "@lemoncode/fonk": "^1.5.4", @@ -26,6 +29,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@playwright/test": "^1.48.1", "@testing-library/dom": "^9.3.4", "@testing-library/react": "^14.2.1", "@types/jest": "^29.5.11", diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 00000000..02fd2236 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,59 @@ +import { defineConfig, devices } from '@playwright/test'; + +const BASE_URL = 'http://localhost:5173/'; + +export default defineConfig({ + testDir: './e2e', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + workers: process.env.CI ? 1 : undefined, + reporter: 'html', + use: { + baseURL: BASE_URL, + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + { + name: 'webkit', + use: { ...devices['Desktop Safari'] }, + }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + /* Run your local dev server before starting the tests */ + webServer: { + command: 'npm run dev', + reuseExistingServer: !process.env.CI, + }, +}); From 4a1b9c361b11223a7bc912957cce1a257b8e4a36 Mon Sep 17 00:00:00 2001 From: Fran Lopez Date: Fri, 25 Oct 2024 22:02:29 +0200 Subject: [PATCH 3/5] Update Vitest configuration to ignore e2e files --- vite.config.ts | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/vite.config.ts b/vite.config.ts index f87dbe61..be9808d7 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,16 +2,7 @@ import { defineConfig } from 'vite'; import { fileURLToPath, URL } from 'node:url'; import react from '@vitejs/plugin-react'; import checker from 'vite-plugin-checker'; -import type { UserConfig as VitestUserConfigInterface } from 'vitest/config'; - -const vitestConfig: VitestUserConfigInterface = { - test: { - setupFiles: ['./vitest.setup.ts'], - globals: true, - restoreMocks: true, - environment: 'jsdom', - }, -}; +import { configDefaults } from 'vitest/config'; // https://vitejs.dev/config/ export default defineConfig({ @@ -24,7 +15,14 @@ export default defineConfig({ }, }, }, - test: vitestConfig.test, + test: { + setupFiles: ['./vitest.setup.ts'], + globals: true, + environment: 'jsdom', + restoreMocks: true, + include: ['./src/**/*.spec.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + exclude: [...configDefaults.exclude, 'e2e/*'], + }, resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)), From 4d36fa7d0271b918ceae04e0279882f242a7264c Mon Sep 17 00:00:00 2001 From: IonutGabi Date: Thu, 31 Oct 2024 12:24:45 +0100 Subject: [PATCH 4/5] Change the eraser icon to the trash icon --- .../edit-table/components/commands/commands.component.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pods/edit-table/components/commands/commands.component.tsx b/src/pods/edit-table/components/commands/commands.component.tsx index 544eadc1..729eef16 100644 --- a/src/pods/edit-table/components/commands/commands.component.tsx +++ b/src/pods/edit-table/components/commands/commands.component.tsx @@ -3,7 +3,7 @@ import { CommandIconButton } from './command-icon-button'; import { FieldVm } from '../../edit-table.vm'; import { GUID, GenerateGUID } from '@/core/model'; import { isFirstItemInArray, isLastItemInArray } from './commands.business'; -import { AddFolder, UpIcon, DownIcon, RemoveIcon } from '@/common/components'; +import { AddFolder, UpIcon, DownIcon, TrashIcon } from '@/common/components'; interface Props { onDeleteField: (fieldId: GUID) => void; @@ -50,7 +50,7 @@ export const Commands: React.FC = (props: Props) => { )} {isDeleteVisible && ( } + icon={} onClick={() => onDeleteField(field.id)} ariaLabel={REMOVE_ICON + field.name} /> From 06d21ecbf7be6dc71e138c4acd14728bf809fac8 Mon Sep 17 00:00:00 2001 From: Fran Lopez Date: Thu, 31 Oct 2024 12:44:20 +0100 Subject: [PATCH 5/5] add fran lopez to about us --- public/assets/fran-lopez.jpg | Bin 0 -> 26251 bytes src/pods/about/members.ts | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 public/assets/fran-lopez.jpg diff --git a/public/assets/fran-lopez.jpg b/public/assets/fran-lopez.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cd65ba7ff7cefda919745de1e45d5b9e1f746311 GIT binary patch literal 26251 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 B0b&3E literal 0 HcmV?d00001 diff --git a/src/pods/about/members.ts b/src/pods/about/members.ts index 5dc03234..c2e1f531 100644 --- a/src/pods/about/members.ts +++ b/src/pods/about/members.ts @@ -78,4 +78,11 @@ export const memberList: Member[] = [ urlLinkedin: 'https://www.linkedin.com/in/deletidev/', image: './assets/leticia-de-la-osa.jpeg', }, + { + id: '11', + name: 'Fran', + surname: 'López', + urlLinkedin: 'https://linkedin.com/in/francisco-l%C3%B3pez-torres', + image: './assets/fran-lopez.jpg', + }, ];