From e91c11346eb8c5bd9f6fff06e6cde034e0905e77 Mon Sep 17 00:00:00 2001 From: Philippe Torrel Date: Fri, 30 Oct 2026 12:17:04 +0100 Subject: [PATCH] --- .../tag40/01_react-app-with-tests.zip | Bin 15820 -> 0 bytes .../01_react-app-with-tests/package-lock.json | 130 ++++++++++++++++++ .../01_react-app-with-tests/package.json | 4 +- .../tag40/01_react-app-with-tests/src/App.jsx | 3 + .../src/tests/FormContact.test.jsx | 82 +++++++++++ .../01_react-app-with-tests/vite.config.js | 2 + .../img/DevOps-Marketplace-Infinity-Loop.png | Bin 0 -> 125770 bytes .../assets/img/DevOps-Tools.svg | 122 ++++++++++++++++ .../tag40/02_devops-ci-cd/index.html | 18 +++ 9 files changed, 360 insertions(+), 1 deletion(-) delete mode 100644 06_react/unterricht/tag40/01_react-app-with-tests.zip create mode 100644 06_react/unterricht/tag40/01_react-app-with-tests/src/tests/FormContact.test.jsx create mode 100644 06_react/unterricht/tag40/02_devops-ci-cd/assets/img/DevOps-Marketplace-Infinity-Loop.png create mode 100644 06_react/unterricht/tag40/02_devops-ci-cd/assets/img/DevOps-Tools.svg create mode 100644 06_react/unterricht/tag40/02_devops-ci-cd/index.html diff --git a/06_react/unterricht/tag40/01_react-app-with-tests.zip b/06_react/unterricht/tag40/01_react-app-with-tests.zip deleted file mode 100644 index 191d5dd374bf88228dd2ba336bfc59d69ffabe94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15820 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" } }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/nanoid": { "version": "3.3.20", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", @@ -2290,6 +2378,13 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -2883,6 +2978,21 @@ "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "license": "MIT" }, + "node_modules/sirv": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", + "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/source-map-js": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", @@ -2989,6 +3099,16 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyrainbow": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.2.0.tgz", + "integrity": "sha512-LgO3D9yZJjApUiuUfl9iFAwrtaX4+lok3wJIqttGoKCHlWUqHqbQpnxCf82L8FjgKsh4iGo78hqJwgL8F6To2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tldts": { "version": "7.4.19", "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.4.19.tgz", @@ -3009,6 +3129,16 @@ "dev": true, "license": "MIT" }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/tough-cookie": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.2.tgz", diff --git a/06_react/unterricht/tag40/01_react-app-with-tests/package.json b/06_react/unterricht/tag40/01_react-app-with-tests/package.json index 0f13386..205bead 100644 --- a/06_react/unterricht/tag40/01_react-app-with-tests/package.json +++ b/06_react/unterricht/tag40/01_react-app-with-tests/package.json @@ -4,8 +4,9 @@ "version": "0.0.0", "type": "module", "scripts": { - "test": "vitest", + "test": "jest", "test:watch": "vitest --watch", + "test:ui": "npx vitest --ui", "dev": "vite", "build": "vite build", "lint": "oxlint", @@ -24,6 +25,7 @@ "@types/react": "^19.3.0", "@types/react-dom": "^19.3.0", "@vitejs/plugin-react": "^6.1.2", + "@vitest/ui": "^5.0.5", "jsdom": "^30.1.3", "oxlint": "^1.90.0", "sass-embedded": "^1.107.0", diff --git a/06_react/unterricht/tag40/01_react-app-with-tests/src/App.jsx b/06_react/unterricht/tag40/01_react-app-with-tests/src/App.jsx index 90e57ee..c798dc0 100644 --- a/06_react/unterricht/tag40/01_react-app-with-tests/src/App.jsx +++ b/06_react/unterricht/tag40/01_react-app-with-tests/src/App.jsx @@ -1,4 +1,5 @@ import Button from './components/buttons/Button'; +import FormContact from './components/forms/FormContact'; function App(props) { // const { } = props; @@ -8,6 +9,8 @@ function App(props) {

Testing in React