From ccd69234158a4c591f4f8790f3735c4beb18e8d1 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 15:13:37 -0400 Subject: [PATCH 01/46] Add initial playwright config --- .drone.yml | 66 + .gitignore | 2 + Makefile | 21 + package-lock.json | 7693 +++++++++++++++++++++---------- package.json | 1 + playwright.config.js | 115 + tools/e2e/tests/example.spec.js | 8 + 7 files changed, 5590 insertions(+), 2316 deletions(-) create mode 100644 playwright.config.js create mode 100644 tools/e2e/tests/example.spec.js diff --git a/.drone.yml b/.drone.yml index 928e75d1ac75e..0924290cc2590 100644 --- a/.drone.yml +++ b/.drone.yml @@ -498,6 +498,72 @@ steps: - name: deps path: /go +--- +kind: pipeline +type: docker +name: testing-e2e + +platform: + os: linux + arch: amd64 + +#depends_on: +# - testing-amd64 +# - testing-arm64 + +trigger: + event: + - push + - tag + - pull_request + +services: + - name: pgsql + pull: default + image: postgres:10 + environment: + POSTGRES_DB: test + POSTGRES_PASSWORD: postgres + +steps: + - name: fetch-tags + image: docker:git + commands: + - git fetch --tags --force + when: + event: + exclude: + - pull_request + + - name: tag-pre-condition + pull: always + image: drone/git + commands: + - git update-ref refs/heads/tag_test ${DRONE_COMMIT_SHA} + + - name: build + pull: always + image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env + commands: + - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs + - make build + environment: + GOPROXY: https://goproxy.cn # proxy.golang.org is blocked in China, this proxy is not + GOSUMDB: sum.golang.org + TAGS: bindata sqlite sqlite_unlock_notify + + - name: test-e2e + image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env + commands: + - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs + - timeout -s ABRT 40m make test-e2e-pgsql + environment: + GOPROXY: https://goproxy.cn + TAGS: bindata + USE_REPO_TEST_DIR: 1 + depends_on: + - build + --- kind: pipeline name: update_translations diff --git a/.gitignore b/.gitignore index eab92b49ad189..1ea9609f23d95 100644 --- a/.gitignore +++ b/.gitignore @@ -118,3 +118,5 @@ prime/ # Manpage /man +test-results/ +playwright-report/ diff --git a/Makefile b/Makefile index 2e2c86376b3b0..101a8642b2113 100644 --- a/Makefile +++ b/Makefile @@ -183,6 +183,7 @@ help: @echo " - test test everything" @echo " - test-frontend test frontend files" @echo " - test-backend test backend files" + @echo " - test-e2e[\#TestSpecificName] test end to end using playwright" @echo " - webpack build webpack files" @echo " - svg build svg files" @echo " - fomantic build fomantic files" @@ -495,6 +496,26 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.mssql.test -test.failfast GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.individual.mssql.test -test.failfast +.PHONY: test-e2e +test-e2e: test-e2e-pgsql + +.PHONY: test-e2e\#% +test-e2e\#%: test-e2e-pgsql\#% + echo "Why do I need this?" + +# Can I share the database with integration tests? Is it cleaned up between tests? +.PHONY: test-e2e-pgsql +test-e2e-pgsql: build generate-ini-pgsql + npx playwright install --with-deps + GITEA_ROOT="$(CURDIR)" ./$(EXECUTABLE) web -c integrations/pgsql.ini --quiet & \ + (wait $i && npx playwright test && killall gitea) + +.PHONY: test-e2e-pgsql\#% +test-e2e-pgsql\#%: build generate-ini-pgsql + npx playwright install --with-deps + GITEA_ROOT="$(CURDIR)" ./$(EXECUTABLE) web -c integrations/pgsql.ini --quiet & \ + (wait $i && npx playwright test $* && killall gitea) + .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . diff --git a/package-lock.json b/package-lock.json index 8f8f7013a51c2..efa05250082be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,6 +45,7 @@ }, "devDependencies": { "@happy-dom/jest-environment": "4.0.1", + "@playwright/test": "1.18.1", "eslint": "8.15.0", "eslint-plugin-html": "6.2.0", "eslint-plugin-import": "2.26.0", @@ -64,13 +65,12 @@ } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.0" }, "engines": { "node": ">=6.0.0" @@ -89,34 +89,34 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", - "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.0", - "@babel/parser": "^7.18.0", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.1.2", "semver": "^6.3.0" }, "engines": { @@ -137,12 +137,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", - "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "dependencies": { - "@babel/types": "^7.18.0", + "@babel/types": "^7.18.2", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" }, @@ -150,29 +150,27 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@babel/types": "^7.16.7" }, "engines": { - "node": ">=6.0.0" + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.17.10", + "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "engines": { @@ -191,14 +189,32 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "dev": true, "dependencies": { - "@babel/types": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -228,6 +244,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", @@ -259,6 +287,18 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", @@ -268,13 +308,41 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "dependencies": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -311,23 +379,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", - "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -410,9 +478,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -421,6 +489,153 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -457,6 +672,30 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -481,6 +720,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -553,6 +807,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -583,65 +852,136 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.0.tgz", - "integrity": "sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.4" + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", - "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/@babel/preset-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", + "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + }, "engines": { - "node": ">=4" + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", + "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" } }, "node_modules/@babel/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", - "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -671,23 +1011,23 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "engines": { "node": ">=10.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.2", - "globals": "^13.9.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -713,9 +1053,9 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", @@ -859,16 +1199,16 @@ } }, "node_modules/@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", + "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", "slash": "^3.0.0" }, "engines": { @@ -876,9 +1216,9 @@ } }, "node_modules/@jest/console/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -901,19 +1241,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/console/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -922,12 +1274,12 @@ } }, "node_modules/@jest/console/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -938,17 +1290,38 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/console/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/console/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@jest/core": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", - "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.1.tgz", + "integrity": "sha512-3pYsBoZZ42tXMdlcFeCc/0j9kOlK7MYuXs2B1QbvDgMoW1K9NJ4G/VYvIbMb26iqlkTfPHo7SC2JgjDOk/mxXw==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/reporters": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/reporters": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", @@ -956,20 +1329,20 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", + "jest-config": "^28.1.1", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-resolve-dependencies": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "jest-watcher": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-resolve-dependencies": "^28.1.1", + "jest-runner": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "jest-watcher": "^28.1.1", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" @@ -987,9 +1360,9 @@ } }, "node_modules/@jest/core/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -1012,19 +1385,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/core/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -1032,13 +1417,22 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/core/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/core/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -1049,6 +1443,27 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/core/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/core/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@jest/environment": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", @@ -1065,22 +1480,22 @@ } }, "node_modules/@jest/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg==", "dev": true, "dependencies": { - "expect": "^28.1.0", - "jest-snapshot": "^28.1.0" + "expect": "^28.1.1", + "jest-snapshot": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", - "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz", + "integrity": "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==", "dev": true, "dependencies": { "jest-get-type": "^28.0.2" @@ -1089,6 +1504,175 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/expect-utils/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@jest/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@jest/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/expect/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/jest-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", + "dev": true, + "dependencies": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/expect/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@jest/fake-timers": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", @@ -1107,55 +1691,55 @@ } }, "node_modules/@jest/globals": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", - "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.1.tgz", + "integrity": "sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/types": "^28.1.0" + "@jest/environment": "^28.1.1", + "@jest/expect": "^28.1.1", + "@jest/types": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/globals/node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/globals/node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/@jest/globals/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -1187,19 +1771,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/globals/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/@jest/globals/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -1208,12 +1804,12 @@ } }, "node_modules/@jest/globals/node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" }, "engines": { @@ -1221,12 +1817,12 @@ } }, "node_modules/@jest/globals/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -1237,17 +1833,38 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/globals/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/globals/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/@jest/reporters": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", - "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.1.tgz", + "integrity": "sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@jridgewell/trace-mapping": "^0.3.7", "@types/node": "*", "chalk": "^4.0.0", @@ -1260,8 +1877,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -1281,9 +1899,9 @@ } }, "node_modules/@jest/reporters/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -1306,13 +1924,45 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@jest/reporters/node_modules/jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/reporters/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -1323,6 +1973,56 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/@jest/reporters/node_modules/jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/@jest/schemas": { "version": "28.0.2", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", @@ -1350,13 +2050,13 @@ } }, "node_modules/@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", + "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/types": "^28.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -1365,9 +2065,9 @@ } }, "node_modules/@jest/test-result/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -1391,14 +2091,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", - "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz", + "integrity": "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.0", + "@jest/test-result": "^28.1.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "slash": "^3.0.0" }, "engines": { @@ -1406,22 +2106,22 @@ } }, "node_modules/@jest/transform": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", - "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.1.tgz", + "integrity": "sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@jridgewell/trace-mapping": "^0.3.7", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", + "jest-util": "^28.1.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -1432,9 +2132,9 @@ } }, "node_modules/@jest/transform/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -1457,13 +2157,22 @@ "@types/yargs-parser": "*" } }, + "node_modules/@jest/transform/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/@jest/transform/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -1491,22 +2200,23 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1522,9 +2232,9 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { @@ -1537,36 +2247,127 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@playwright/test": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.18.1.tgz", + "integrity": "sha512-v6jAM2GpRvf4MUvSLkrAXg101XT9mLu2X2NbCnEoj7GHBXwavDlAJDMwh4Hn8oipDxB6MS6FTcr7opXsIMNwrA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/core": "^7.14.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/preset-typescript": "^7.14.5", + "babel-plugin-module-resolver": "^4.1.0", + "colors": "1.4.0", + "commander": "^8.2.0", + "debug": "^4.1.1", + "expect": "=27.2.5", + "jest-matcher-utils": "=27.2.5", + "jpeg-js": "^0.4.2", + "json5": "^2.2.0", + "mime": "^2.4.6", + "minimatch": "^3.0.3", + "ms": "^2.1.2", + "open": "^8.3.0", + "pirates": "^4.0.1", + "pixelmatch": "^5.2.1", + "playwright-core": "=1.18.1", + "pngjs": "^5.0.0", + "rimraf": "^3.0.2", + "source-map-support": "^0.4.18", + "stack-utils": "^2.0.3", + "yazl": "^2.5.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@playwright/test/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/@playwright/test/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" }, "engines": { - "node": ">= 8" + "node": ">=4.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@playwright/test/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@playwright/test/node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "source-map": "^0.5.6" } }, "node_modules/@primer/octicons": { @@ -1674,9 +2475,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -1739,9 +2540,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "node_modules/@types/json5": { "version": "0.0.29", @@ -1750,9 +2551,9 @@ "dev": true }, "node_modules/@types/marked": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", - "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.2.tgz", + "integrity": "sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ==" }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -1761,9 +2562,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -1778,9 +2579,9 @@ "dev": true }, "node_modules/@types/prettier": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.1.tgz", - "integrity": "sha512-XFjFHmaLVifrAKaZ+EKghFHtHSUonyw8P2Qmy2/+osBnrKbH9UYtlK10zg8/kCt47MFilll/DEDKy3DHfJ0URw==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", "dev": true }, "node_modules/@types/qs": { @@ -1818,6 +2619,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -2087,6 +2898,18 @@ "webpack": ">=5" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2119,9 +2942,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -2217,20 +3040,20 @@ "node_modules/array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", "engines": { "node": ">=0.10.0" } }, "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" }, @@ -2251,15 +3074,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "es-abstract": "^1.19.0" }, "engines": { "node": ">= 0.4" @@ -2271,7 +3093,7 @@ "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true, "engines": { "node": ">=0.10.0" @@ -2299,15 +3121,15 @@ "dev": true }, "node_modules/babel-jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", - "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.1.tgz", + "integrity": "sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw==", "dev": true, "dependencies": { - "@jest/transform": "^28.1.0", + "@jest/transform": "^28.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.0.2", + "babel-preset-jest": "^28.1.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" @@ -2319,6 +3141,15 @@ "@babel/core": "^7.8.0" } }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -2336,9 +3167,9 @@ } }, "node_modules/babel-plugin-jest-hoist": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", - "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz", + "integrity": "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==", "dev": true, "dependencies": { "@babel/template": "^7.3.3", @@ -2350,6 +3181,22 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/babel-plugin-module-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", + "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "dev": true, + "dependencies": { + "find-babel-config": "^1.2.0", + "glob": "^7.1.6", + "pkg-up": "^3.1.0", + "reselect": "^4.0.0", + "resolve": "^1.13.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -2374,12 +3221,12 @@ } }, "node_modules/babel-preset-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", - "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz", + "integrity": "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==", "dev": true, "dependencies": { - "babel-plugin-jest-hoist": "^28.0.2", + "babel-plugin-jest-hoist": "^28.1.1", "babel-preset-current-node-syntax": "^1.0.0" }, "engines": { @@ -2410,7 +3257,7 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "node_modules/brace-expansion": { @@ -2434,24 +3281,14 @@ } }, "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^2.0.3", + "node-releases": "^2.0.1", "picocolors": "^1.0.0" }, "bin": { @@ -2459,6 +3296,10 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, "node_modules/bser": { @@ -2470,15 +3311,24 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, "engines": { "node": ">=6" @@ -2536,19 +3386,13 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/caseless": { "version": "0.12.0", @@ -2590,9 +3434,9 @@ } }, "node_modules/ci-info": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "node_modules/cjs-module-lexer": { @@ -2604,7 +3448,7 @@ "node_modules/clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" @@ -2689,7 +3533,7 @@ "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { "iojs": ">= 1.0.0", @@ -2697,9 +3541,9 @@ } }, "node_modules/codemirror": { - "version": "5.65.4", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.4.tgz", - "integrity": "sha512-tytrSm5Rh52b6j36cbDXN+FHwHCl9aroY4BrDZB2NFFL3Wjfq9nuYVLFFhaOYOczKAg3JXTr8BuT8LcE5QY4Iw==" + "version": "5.65.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.1.tgz", + "integrity": "sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA==" }, "node_modules/codemirror-spell-checker": { "version": "1.1.2", @@ -2742,6 +3586,15 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -2849,9 +3702,9 @@ } }, "node_modules/css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true, "engines": { "node": ">=12.22" @@ -2883,14 +3736,14 @@ } }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, @@ -2912,9 +3765,9 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, "engines": { "node": ">= 6" @@ -2926,7 +3779,7 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, "node_modules/cssesc": { @@ -2953,9 +3806,9 @@ } }, "node_modules/d3": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz", - "integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.3.0.tgz", + "integrity": "sha512-MDRLJCMK232OJQRqGljQ/gCxtB8k3/sLKFjftMjzPB3nKVUODpdW9Rb3vcq7U8Ka5YKoZkAmp++Ur6I+6iNWIw==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -2993,9 +3846,9 @@ } }, "node_modules/d3-array": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz", - "integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz", + "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==", "dependencies": { "internmap": "1 - 2" }, @@ -3043,9 +3896,9 @@ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz", + "integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw==", "engines": { "node": ">=12" } @@ -3168,9 +4021,9 @@ } }, "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz", + "integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA==", "engines": { "node": ">=12" } @@ -3689,7 +4542,7 @@ "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "node_modules/deep-is": { @@ -3707,20 +4560,25 @@ "node": ">=0.10.0" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/delaunator": { @@ -3734,7 +4592,7 @@ "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "engines": { "node": ">=0.4.0" @@ -3750,9 +4608,9 @@ } }, "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", + "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", "dev": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" @@ -3783,9 +4641,9 @@ } }, "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", @@ -3806,9 +4664,9 @@ } }, "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -3818,9 +4676,9 @@ ] }, "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3878,9 +4736,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==" }, "node_modules/emittery": { "version": "0.10.2", @@ -3907,6 +4765,15 @@ "node": ">= 4" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", @@ -3964,34 +4831,31 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", + "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", + "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -4005,76 +4869,262 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "dependencies": { - "has": "^1.0.3" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", + "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.47", + "esbuild-android-arm64": "0.14.47", + "esbuild-darwin-64": "0.14.47", + "esbuild-darwin-arm64": "0.14.47", + "esbuild-freebsd-64": "0.14.47", + "esbuild-freebsd-arm64": "0.14.47", + "esbuild-linux-32": "0.14.47", + "esbuild-linux-64": "0.14.47", + "esbuild-linux-arm": "0.14.47", + "esbuild-linux-arm64": "0.14.47", + "esbuild-linux-mips64le": "0.14.47", + "esbuild-linux-ppc64le": "0.14.47", + "esbuild-linux-riscv64": "0.14.47", + "esbuild-linux-s390x": "0.14.47", + "esbuild-netbsd-64": "0.14.47", + "esbuild-openbsd-64": "0.14.47", + "esbuild-sunos-64": "0.14.47", + "esbuild-windows-32": "0.14.47", + "esbuild-windows-64": "0.14.47", + "esbuild-windows-arm64": "0.14.47" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", + "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", + "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", + "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", + "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", + "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", + "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", + "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", + "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", + "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", + "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", + "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", + "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", + "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" } }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "node_modules/esbuild-linux-s390x": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", + "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", "cpu": [ - "x64" + "s390x" ], "optional": true, "os": [ - "darwin" + "linux" ], "engines": { "node": ">=12" @@ -4099,6 +5149,96 @@ "webpack": "^4.40.0 || ^5.0.0" } }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", + "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", + "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", + "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", + "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", + "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", + "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -4347,6 +5487,30 @@ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.2.tgz", + "integrity": "sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, "node_modules/eslint-scope": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", @@ -4508,89 +5672,74 @@ "node_modules/exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", + "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0" + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.2.5", + "jest-message-util": "^27.2.5", + "jest-regex-util": "^27.0.6" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/expect/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/expect/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/expect/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "pump": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/fast-deep-equal": { @@ -4657,6 +5806,15 @@ "bser": "2.1.1" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -4680,6 +5838,28 @@ "node": ">=8" } }, + "node_modules/find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "dependencies": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-babel-config/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -4757,39 +5937,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4834,7 +5987,7 @@ "node_modules/get-port": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true, "engines": { "node": ">=4" @@ -4880,14 +6033,14 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -4995,9 +6148,9 @@ "dev": true }, "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/graphlib": { "version": "2.1.8", @@ -5008,14 +6161,14 @@ } }, "node_modules/gsap": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.10.4.tgz", - "integrity": "sha512-6QatdkKxXCMfvCW4rM++0RqyLQAzFX5nwl3yHS0XPgkZBkiSEY3VZVbMltrdtsbER/xZonLtyHt684wRp4erlQ==" + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.9.1.tgz", + "integrity": "sha512-JSGVYoC6da4pIjdF/yxFU6Rz8OojOIDkbooveZlfNg0+JIoFoRruyfWAEi6R/gUeNcuOiTqUIb0gi1nCNrHf8w==" }, "node_modules/happy-dom": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-4.0.1.tgz", - "integrity": "sha512-GUj2ayfbWYHPeQfcK0N+lygRE/DsrjQbALJq0zrxHLc9KYzhFSCmaCOISuNgHV/21EEeVIX55KoPTqMcX362+g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-4.1.0.tgz", + "integrity": "sha512-x/W72MnJ3VENTXrIlvdkb5t+f7Tkeze8CEcUEiVAbPovZnsB6vl/szkWCKuuovmdWBxJtqP147qedos9wWxllg==", "dev": true, "dependencies": { "css.escape": "^1.5.1", @@ -5048,9 +6201,9 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5064,22 +6217,10 @@ "node": ">=8" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" @@ -5189,6 +6330,19 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -5351,6 +6505,12 @@ "node": ">= 0.10" } }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5410,9 +6570,9 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dependencies": { "has": "^1.0.3" }, @@ -5435,6 +6595,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -5492,9 +6667,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -5550,13 +6725,10 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5619,10 +6791,22 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "node_modules/isexe": { @@ -5752,27 +6936,27 @@ } }, "node_modules/jest-circus": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", - "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.1.tgz", + "integrity": "sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/expect": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0", + "jest-each": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" @@ -5782,41 +6966,41 @@ } }, "node_modules/jest-circus/node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus/node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-circus/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -5848,19 +7032,79 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-circus/node_modules/diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -5869,12 +7113,12 @@ } }, "node_modules/jest-circus/node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" }, "engines": { @@ -5882,12 +7126,12 @@ } }, "node_modules/jest-circus/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -5898,22 +7142,43 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-cli": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", - "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.1.tgz", + "integrity": "sha512-+sUfVbJqb1OjBZ0OdBbI6OWfYM1i7bSfzYy6gze1F1w3OKWq8ZTEKkZ8a7ZQPq6G/G1qMh/uKqpdWhgl11NFQQ==", "dev": true, "dependencies": { - "@jest/core": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/core": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-config": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -5933,9 +7198,9 @@ } }, "node_modules/jest-cli/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -5959,12 +7224,12 @@ } }, "node_modules/jest-cli/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -5976,31 +7241,31 @@ } }, "node_modules/jest-config": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", - "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.1.tgz", + "integrity": "sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.0", - "@jest/types": "^28.1.0", - "babel-jest": "^28.1.0", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.0", - "jest-environment-node": "^28.1.0", + "jest-circus": "^28.1.1", + "jest-environment-node": "^28.1.1", "jest-get-type": "^28.0.2", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -6021,9 +7286,9 @@ } }, "node_modules/jest-config/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6046,13 +7311,43 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-config/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-config/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-config/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6063,66 +7358,46 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", "dev": true, "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-diff/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "node_modules/jest-diff": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", + "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "chalk": "^4.0.0", + "diff-sequences": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" }, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, "node_modules/jest-docblock": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", - "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, "dependencies": { "detect-newline": "^3.0.0" @@ -6132,25 +7407,25 @@ } }, "node_modules/jest-each": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", - "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz", + "integrity": "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "jest-get-type": "^28.0.2", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0" + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-each/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6173,13 +7448,34 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-each/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-each/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6190,59 +7486,80 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-each/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-environment-node": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", - "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.1.tgz", + "integrity": "sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-environment-node/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6274,19 +7591,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-environment-node/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-environment-node/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -6295,12 +7624,12 @@ } }, "node_modules/jest-environment-node/node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" }, "engines": { @@ -6308,12 +7637,12 @@ } }, "node_modules/jest-environment-node/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6324,6 +7653,27 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-environment-node/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-environment-node/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-extended": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jest-extended/-/jest-extended-2.0.0.tgz", @@ -6340,41 +7690,32 @@ "jest": ">=27.2.5" } }, - "node_modules/jest-extended/node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", + "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-haste-map": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", - "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz", + "integrity": "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" @@ -6384,9 +7725,9 @@ } }, "node_modules/jest-haste-map/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6409,13 +7750,22 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-haste-map/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-haste-map/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6423,59 +7773,106 @@ "picomatch": "^2.2.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-haste-map/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/jest-leak-detector": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", - "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz", + "integrity": "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==", "dev": true, "dependencies": { "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-leak-detector/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", + "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "jest-diff": "^27.2.5", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.2.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-message-util": { @@ -6524,12 +7921,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, "node_modules/jest-mock": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", @@ -6561,26 +7952,26 @@ } }, "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/jest-resolve": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", - "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", + "integrity": "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" @@ -6590,22 +7981,31 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", - "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.1.tgz", + "integrity": "sha512-p8Y150xYJth4EXhOuB8FzmS9r8IGLEioiaetgdNGb9VHka4fl0zqWlVe4v7mSkYOuEUg2uB61iE+zySDgrOmgQ==", "dev": true, "dependencies": { "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.0" + "jest-snapshot": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-resolve-dependencies/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-resolve/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6629,12 +8029,12 @@ } }, "node_modules/jest-resolve/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6646,30 +8046,30 @@ } }, "node_modules/jest-runner": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", - "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.1.tgz", + "integrity": "sha512-W5oFUiDBgTsCloTAj6q95wEvYDB0pxIhY6bc5F26OucnwBN+K58xGTGbliSMI4ChQal5eANDF+xvELaYkJxTmA==", "dev": true, "dependencies": { - "@jest/console": "^28.1.0", - "@jest/environment": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/environment": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^28.0.2", - "jest-environment-node": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-leak-detector": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-resolve": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-util": "^28.1.0", - "jest-watcher": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.1", + "jest-haste-map": "^28.1.1", + "jest-leak-detector": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-resolve": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-util": "^28.1.1", + "jest-watcher": "^28.1.1", + "jest-worker": "^28.1.1", "source-map-support": "0.5.13", "throat": "^6.0.1" }, @@ -6678,41 +8078,41 @@ } }, "node_modules/jest-runner/node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runner/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6744,19 +8144,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -6765,12 +8177,12 @@ } }, "node_modules/jest-runner/node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" }, "engines": { @@ -6778,12 +8190,12 @@ } }, "node_modules/jest-runner/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6794,32 +8206,92 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-runner/node_modules/jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runner/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest-runner/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jest-runtime": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", - "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.1.tgz", + "integrity": "sha512-J89qEJWW0leOsqyi0D9zHpFEYHwwafFdS9xgvhFHtIdRghbadodI0eA+DrthK/1PebBv3Px8mFSMGKrtaVnleg==", "dev": true, "dependencies": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/globals": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/globals": "^28.1.1", "@jest/source-map": "^28.0.2", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -6828,41 +8300,41 @@ } }, "node_modules/jest-runtime/node_modules/@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "dependencies": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-runtime/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -6894,19 +8366,31 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-runtime/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -6915,25 +8399,34 @@ } }, "node_modules/jest-runtime/node_modules/jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-runtime/node_modules/jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-runtime/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -6944,10 +8437,31 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-runtime/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-runtime/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-snapshot": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", - "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.1.tgz", + "integrity": "sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", @@ -6955,23 +8469,23 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/expect-utils": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.0", + "expect": "^28.1.1", "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.0", + "jest-diff": "^28.1.1", "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-haste-map": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "semver": "^7.3.5" }, "engines": { @@ -6979,9 +8493,9 @@ } }, "node_modules/jest-snapshot/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -7004,43 +8518,95 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", + "jest-diff": "^28.1.1", "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -7049,12 +8615,12 @@ } }, "node_modules/jest-snapshot/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -7065,6 +8631,27 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, + "node_modules/jest-snapshot/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", @@ -7083,26 +8670,26 @@ } }, "node_modules/jest-validate": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", - "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz", + "integrity": "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" }, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, "node_modules/jest-validate/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -7125,6 +8712,18 @@ "@types/yargs-parser": "*" } }, + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/jest-validate/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -7137,19 +8736,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/jest-validate/node_modules/jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/jest-validate/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, "node_modules/jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", + "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", "dev": true, "dependencies": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.10.2", - "jest-util": "^28.1.0", + "jest-util": "^28.1.1", "string-length": "^4.0.1" }, "engines": { @@ -7157,9 +8786,9 @@ } }, "node_modules/jest-watcher/node_modules/@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "dependencies": { "@jest/schemas": "^28.0.2", @@ -7183,12 +8812,12 @@ } }, "node_modules/jest-watcher/node_modules/jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "dependencies": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -7200,24 +8829,22 @@ } }, "node_modules/jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", - "dev": true, + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": ">= 10.13.0" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7236,6 +8863,12 @@ "node": ">=10" } }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true + }, "node_modules/jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -7299,9 +8932,12 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dependencies": { + "minimist": "^1.2.5" + }, "bin": { "json5": "lib/cli.js" }, @@ -7494,9 +9130,9 @@ "dev": true }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "engines": { "node": ">=6.11.5" } @@ -7543,11 +9179,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -7628,9 +9259,9 @@ } }, "node_modules/marked": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", - "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", "bin": { "marked": "bin/marked.js" }, @@ -7781,19 +9412,19 @@ } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -7975,13 +9606,13 @@ "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -8125,6 +9756,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -8190,7 +9838,7 @@ "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "dev": true }, "node_modules/parse-json": { @@ -8266,6 +9914,12 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -8300,6 +9954,27 @@ "node": ">= 6" } }, + "node_modules/pixelmatch": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", + "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", + "dev": true, + "dependencies": { + "pngjs": "^6.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true, + "engines": { + "node": ">=12.13.0" + } + }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -8375,6 +10050,130 @@ "node": ">=8" } }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/playwright-core": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz", + "integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==", + "dev": true, + "dependencies": { + "commander": "^8.2.0", + "debug": "^4.1.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.0", + "jpeg-js": "^0.4.2", + "mime": "^2.4.6", + "pngjs": "^5.0.0", + "progress": "^2.0.3", + "proper-lockfile": "^4.1.1", + "proxy-from-env": "^1.1.0", + "rimraf": "^3.0.2", + "socks-proxy-agent": "^6.1.0", + "stack-utils": "^2.0.3", + "ws": "^7.4.6", + "yauzl": "^2.10.0", + "yazl": "^2.5.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/playwright-core/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/playwright-core/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -8384,6 +10183,15 @@ "node": ">=4" } }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -8539,33 +10347,29 @@ } }, "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "optional": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", + "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", "dev": true, "dependencies": { - "@jest/schemas": "^28.0.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, "node_modules/pretty-format/node_modules/ansi-styles": { @@ -8600,6 +10404,15 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/promise": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", @@ -8622,6 +10435,23 @@ "node": ">= 6" } }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -8633,6 +10463,16 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -8642,9 +10482,9 @@ } }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.10.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz", + "integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==", "dev": true, "dependencies": { "side-channel": "^1.0.4" @@ -8693,9 +10533,9 @@ } }, "node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/read-pkg": { @@ -8871,23 +10711,6 @@ "regexp-tree": "bin/regexp-tree" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -8903,7 +10726,7 @@ "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -8917,6 +10740,12 @@ "node": ">=0.10.0" } }, + "node_modules/reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", + "dev": true + }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -8970,6 +10799,15 @@ "node": ">=10" } }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -9070,9 +10908,9 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -9203,6 +11041,44 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", @@ -9230,10 +11106,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9313,13 +11188,14 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", "dev": true }, "node_modules/stack-utils": { @@ -9379,28 +11255,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.1.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9523,15 +11397,6 @@ "url": "https://opencollective.com/stylelint" } }, - "node_modules/stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true, - "peerDependencies": { - "stylelint": "^14.4.0" - } - }, "node_modules/stylelint-config-standard": { "version": "25.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz", @@ -9544,6 +11409,15 @@ "stylelint": "^14.4.0" } }, + "node_modules/stylelint-config-standard/node_modules/stylelint-config-recommended": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", + "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", + "dev": true, + "peerDependencies": { + "stylelint": "^14.4.0" + } + }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", @@ -9560,9 +11434,9 @@ } }, "node_modules/stylis": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz", - "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ==" + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "node_modules/superstruct": { "version": "0.10.13", @@ -9677,9 +11551,9 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -9723,13 +11597,12 @@ } }, "node_modules/terser": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", - "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dependencies": { - "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.8.0-beta.0", + "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "bin": { @@ -9737,6 +11610,14 @@ }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } } }, "node_modules/terser-webpack-plugin": { @@ -9765,24 +11646,11 @@ "optional": true }, "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" + "optional": true + }, + "uglify-js": { + "optional": true + } } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { @@ -9802,76 +11670,19 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "node_modules/terser/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dependencies": { - "whatwg-url": "^7.0.0" - }, + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "engines": { "node": ">= 8" } }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/terser/node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/terser/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "node_modules/terser/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -9955,7 +11766,7 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "node_modules/tributejs": { @@ -9999,16 +11810,16 @@ "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "node_modules/type-check": { "version": "0.4.0", @@ -10046,7 +11857,7 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "node_modules/typo-js": { @@ -10060,14 +11871,14 @@ "integrity": "sha512-r13jrghEYZAN99GeYpEjM107DOxqB65enskpwce8rRHVAGEtaWmsF5GqoGdPMf8DIXc9XyAJTdvlvRZi4LsszA==" }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -10117,12 +11928,12 @@ "dev": true }, "node_modules/v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" }, @@ -10162,30 +11973,6 @@ "v-tooltip": "^2.0.0-rc.32" } }, - "node_modules/vue-eslint-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.2.tgz", - "integrity": "sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, "node_modules/vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -10508,7 +12295,7 @@ "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "dependencies": { "tr46": "~0.0.3", @@ -10518,7 +12305,7 @@ "node_modules/whatwg-url/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, "node_modules/which": { @@ -10666,9 +12453,9 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -10713,6 +12500,27 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, + "node_modules/ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -10780,17 +12588,35 @@ "engines": { "node": ">=12" } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3" + } } }, "dependencies": { "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.0.4.tgz", + "integrity": "sha512-zU3pj3pf//YhaoozRTYKaL20KopXrzuZFc/8Ylc49AuV8grYKH23TTq9JJoR70F8zQbil58KjSchZTWeX+jrIQ==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.0" } }, "@babel/code-frame": { @@ -10803,31 +12629,31 @@ } }, "@babel/compat-data": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz", - "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true }, "@babel/core": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.0.tgz", - "integrity": "sha512-Xyw74OlJwDijToNi0+6BBI5mLLR5+5R3bcSH80LXzjzEGEUlvNzujEE71BaD/ApEZHAvFI/Mlmp4M5lIkdeeWw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.0.tgz", + "integrity": "sha512-x/5Ea+RO5MvF9ize5DeVICJoVrNv0Mi2RnIABrZEKYvPEpldXwauPkgvYA17cKa6WpU3LoYvYbuEMFtSNFsarA==", "dev": true, "requires": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-compilation-targets": "^7.17.10", - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helpers": "^7.18.0", - "@babel/parser": "^7.18.0", + "@babel/generator": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.17.0", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.1.2", "semver": "^6.3.0" }, "dependencies": { @@ -10840,38 +12666,34 @@ } }, "@babel/generator": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.0.tgz", - "integrity": "sha512-81YO9gGx6voPXlvYdZBliFXAZU8vZ9AZ6z+CjlmcnaeOcYSFbMTpdeDUO9xD9dh/68Vq03I8ZspfUTPfitcDHg==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", "dev": true, "requires": { - "@babel/types": "^7.18.0", + "@babel/types": "^7.18.2", "@jridgewell/gen-mapping": "^0.3.0", "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", - "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { - "version": "7.17.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.10.tgz", - "integrity": "sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "requires": { - "@babel/compat-data": "^7.17.10", + "@babel/compat-data": "^7.16.4", "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.20.2", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "dependencies": { @@ -10883,15 +12705,27 @@ } } }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "@babel/helper-create-class-features-plugin": { + "version": "7.18.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", + "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" } }, + "@babel/helper-environment-visitor": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", + "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==", + "dev": true + }, "@babel/helper-function-name": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", @@ -10911,6 +12745,15 @@ "@babel/types": "^7.16.7" } }, + "@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "requires": { + "@babel/types": "^7.17.0" + } + }, "@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", @@ -10936,19 +12779,50 @@ "@babel/types": "^7.18.0" } }, + "@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "dev": true }, + "@babel/helper-replace-supers": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", + "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.2", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.18.2", + "@babel/types": "^7.18.2" + } + }, "@babel/helper-simple-access": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", - "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", + "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "@babel/types": "^7.18.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "requires": { + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { @@ -10973,20 +12847,20 @@ "dev": true }, "@babel/helpers": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.0.tgz", - "integrity": "sha512-AE+HMYhmlMIbho9nbvicHyxFwhrO+xhKB6AhRxzl8w46Yj0VXTZjEsAoBVC7rB2I0jzX+yWyVybnO08qkfx6kg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.0.tgz", + "integrity": "sha512-Xe/9NFxjPwELUvW2dsukcMZIp6XwPSbI4ojFBJuX5ramHuVE22SVcZIwqzdWo5uCgeTXW8qV97lMvSOjq+1+nQ==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.18.0", - "@babel/types": "^7.18.0" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", - "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -11053,11 +12927,104 @@ } }, "@babel/parser": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz", - "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.5.tgz", + "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true }, + "@babel/plugin-proposal-class-properties": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", + "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", + "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", + "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", + "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", + "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", + "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", + "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.17.12", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -11085,6 +13052,24 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -11103,6 +13088,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -11157,6 +13151,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -11175,10 +13178,57 @@ "@babel/helper-plugin-utils": "^7.17.12" } }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", + "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-simple-access": "^7.18.2", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", + "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-jsx": "^7.17.12", + "@babel/types": "^7.17.12" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", + "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.0", + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/plugin-syntax-typescript": "^7.17.12" + } + }, + "@babel/preset-typescript": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", + "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.17.12", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-transform-typescript": "^7.17.12" + } + }, "@babel/runtime": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.0.tgz", - "integrity": "sha512-YMQvx/6nKEaucl0MY56mwIG483xk8SDNdlUwb2Ts6FUpr7fm85DxEmsY18LXBNhcTz6tO6JwZV8w1W06v8UKeg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", + "integrity": "sha512-etcO/ohMNaNA2UBdaXBBSX/3aEzFMRrVfaPv8Ptc0k+cWpWW0QFiGZ2XnVqQZI1Cf734LbPGmqBKWESfW4x/dQ==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -11195,19 +13245,19 @@ } }, "@babel/traverse": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.0.tgz", - "integrity": "sha512-oNOO4vaoIQoGjDQ84LgtF/IAlxlyqL4TUuoQ7xLkQETFaHkY1F7yazhB4Kt3VcZGL0ZF/jhrEpnXqUb0M7V3sw==", + "version": "7.18.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.5.tgz", + "integrity": "sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.18.0", - "@babel/helper-environment-visitor": "^7.16.7", + "@babel/generator": "^7.18.2", + "@babel/helper-environment-visitor": "^7.18.2", "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.18.0", - "@babel/types": "^7.18.0", + "@babel/parser": "^7.18.5", + "@babel/types": "^7.18.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -11221,9 +13271,9 @@ } }, "@babel/types": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.0.tgz", - "integrity": "sha512-vhAmLPAiC8j9K2GnsnLPCIH5wCrPpYIVBCWRBFDCB7Y/BXLqi/O+1RSTTM2bsmg6U/551+FCf9PNPxjABmxHTw==", + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -11248,20 +13298,20 @@ "requires": {} }, "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==" }, "@eslint/eslintrc": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.3.tgz", - "integrity": "sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.2", - "globals": "^13.9.0", + "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -11284,9 +13334,9 @@ } }, "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", + "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -11396,23 +13446,23 @@ "dev": true }, "@jest/console": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.0.tgz", - "integrity": "sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", + "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11432,50 +13482,74 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "@jest/core": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.0.tgz", - "integrity": "sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.1.tgz", + "integrity": "sha512-3pYsBoZZ42tXMdlcFeCc/0j9kOlK7MYuXs2B1QbvDgMoW1K9NJ4G/VYvIbMb26iqlkTfPHo7SC2JgjDOk/mxXw==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/reporters": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/reporters": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", @@ -11483,29 +13557,29 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", + "jest-config": "^28.1.1", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-resolve-dependencies": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", - "jest-watcher": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-resolve-dependencies": "^28.1.1", + "jest-runner": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", + "jest-watcher": "^28.1.1", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "rimraf": "^3.0.0", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11525,36 +13599,66 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, @@ -11571,22 +13675,159 @@ } }, "@jest/expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg==", "dev": true, "requires": { - "expect": "^28.1.0", - "jest-snapshot": "^28.1.0" + "expect": "^28.1.1", + "jest-snapshot": "^28.1.1" + }, + "dependencies": { + "@jest/types": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@types/yargs": { + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", + "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + } + }, + "jest-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + } + }, + "jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + } } }, "@jest/expect-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.0.tgz", - "integrity": "sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz", + "integrity": "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==", "dev": true, "requires": { "jest-get-type": "^28.0.2" + }, + "dependencies": { + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + } } }, "@jest/fake-timers": { @@ -11604,46 +13845,46 @@ } }, "@jest/globals": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.0.tgz", - "integrity": "sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.1.tgz", + "integrity": "sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/types": "^28.1.0" + "@jest/environment": "^28.1.1", + "@jest/expect": "^28.1.1", + "@jest/types": "^28.1.1" }, "dependencies": { "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11672,60 +13913,84 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "@jest/reporters": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.0.tgz", - "integrity": "sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.1.tgz", + "integrity": "sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg==", "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@jridgewell/trace-mapping": "^0.3.7", "@types/node": "*", "chalk": "^4.0.0", @@ -11738,8 +14003,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -11748,9 +14014,9 @@ }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11770,19 +14036,80 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-message-util": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.1", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.1", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, @@ -11807,21 +14134,21 @@ } }, "@jest/test-result": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.0.tgz", - "integrity": "sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", + "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/types": "^28.1.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11844,34 +14171,34 @@ } }, "@jest/test-sequencer": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.0.tgz", - "integrity": "sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz", + "integrity": "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==", "dev": true, "requires": { - "@jest/test-result": "^28.1.0", + "@jest/test-result": "^28.1.1", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "slash": "^3.0.0" } }, "@jest/transform": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.0.tgz", - "integrity": "sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.1.tgz", + "integrity": "sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@jridgewell/trace-mapping": "^0.3.7", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^1.4.0", "fast-json-stable-stringify": "^2.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", + "jest-util": "^28.1.1", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -11879,9 +14206,9 @@ }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -11901,13 +14228,19 @@ "@types/yargs-parser": "*" } }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11931,19 +14264,20 @@ } }, "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" } }, "@jridgewell/resolve-uri": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", - "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", "dev": true }, "@jridgewell/set-array": { @@ -11953,9 +14287,9 @@ "dev": true }, "@jridgewell/sourcemap-codec": { - "version": "1.4.13", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", - "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==", + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", "dev": true }, "@jridgewell/trace-mapping": { @@ -11991,6 +14325,81 @@ "fastq": "^1.6.0" } }, + "@playwright/test": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.18.1.tgz", + "integrity": "sha512-v6jAM2GpRvf4MUvSLkrAXg101XT9mLu2X2NbCnEoj7GHBXwavDlAJDMwh4Hn8oipDxB6MS6FTcr7opXsIMNwrA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/core": "^7.14.8", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/preset-typescript": "^7.14.5", + "babel-plugin-module-resolver": "^4.1.0", + "colors": "1.4.0", + "commander": "^8.2.0", + "debug": "^4.1.1", + "expect": "=27.2.5", + "jest-matcher-utils": "=27.2.5", + "jpeg-js": "^0.4.2", + "json5": "^2.2.0", + "mime": "^2.4.6", + "minimatch": "^3.0.3", + "ms": "^2.1.2", + "open": "^8.3.0", + "pirates": "^4.0.1", + "pixelmatch": "^5.2.1", + "playwright-core": "=1.18.1", + "pngjs": "^5.0.0", + "rimraf": "^3.0.2", + "source-map-support": "^0.4.18", + "stack-utils": "^2.0.3", + "yazl": "^2.5.1" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } + } + }, "@primer/octicons": { "version": "17.2.0", "resolved": "https://registry.npmjs.org/@primer/octicons/-/octicons-17.2.0.tgz", @@ -12093,9 +14502,9 @@ } }, "@types/eslint": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.2.tgz", - "integrity": "sha512-Z1nseZON+GEnFjJc04sv4NSALGjhFwy6K0HXt7qsn5ArfAKtb63dXNJHf+1YW6IpOIYRBGUbu3GwJdj8DGnCjA==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "requires": { "@types/estree": "*", "@types/json-schema": "*" @@ -12158,9 +14567,9 @@ } }, "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" }, "@types/json5": { "version": "0.0.29", @@ -12169,9 +14578,9 @@ "dev": true }, "@types/marked": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", - "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.2.tgz", + "integrity": "sha512-auNrZ/c0w6wsM9DccwVxWHssrMDezHUAXNesdp2RQrCVCyrQbOiSq7yqdJKrUQQpw9VTm7CGYJH2A/YG7jjrjQ==" }, "@types/minimist": { "version": "1.2.2", @@ -12180,9 +14589,9 @@ "dev": true }, "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==" + "version": "17.0.15", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.15.tgz", + "integrity": "sha512-zWt4SDDv1S9WRBNxLFxFRHxdD9tvH8f5/kg5/IaLFdnSNXsDY4eL3Q3XXN+VxUnWIhyVFDwcsmAprvwXoM/ClA==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -12197,9 +14606,9 @@ "dev": true }, "@types/prettier": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.1.tgz", - "integrity": "sha512-XFjFHmaLVifrAKaZ+EKghFHtHSUonyw8P2Qmy2/+osBnrKbH9UYtlK10zg8/kCt47MFilll/DEDKy3DHfJ0URw==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", + "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==", "dev": true }, "@types/qs": { @@ -12237,6 +14646,16 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, + "@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -12468,6 +14887,15 @@ "integrity": "sha512-Hx9EKnirCUfdh684y1yhx8QOFolpkIG2VRHHgNm8wFy1Cf7P3RGwS678hoN7Y1XvZRPpVXWa+6QnfL/2i0CMCA==", "requires": {} }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -12488,9 +14916,9 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -12560,17 +14988,17 @@ "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==" + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" }, "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", "get-intrinsic": "^1.1.1", "is-string": "^1.0.7" } @@ -12582,21 +15010,20 @@ "dev": true }, "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", + "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" + "es-abstract": "^1.19.0" } }, "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, "asap": { @@ -12618,20 +15045,29 @@ "dev": true }, "babel-jest": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.0.tgz", - "integrity": "sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.1.tgz", + "integrity": "sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw==", "dev": true, "requires": { - "@jest/transform": "^28.1.0", + "@jest/transform": "^28.1.1", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.0.2", + "babel-preset-jest": "^28.1.1", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "slash": "^3.0.0" } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -12646,9 +15082,9 @@ } }, "babel-plugin-jest-hoist": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.0.2.tgz", - "integrity": "sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz", + "integrity": "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==", "dev": true, "requires": { "@babel/template": "^7.3.3", @@ -12657,6 +15093,19 @@ "@types/babel__traverse": "^7.0.6" } }, + "babel-plugin-module-resolver": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", + "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", + "dev": true, + "requires": { + "find-babel-config": "^1.2.0", + "glob": "^7.1.6", + "pkg-up": "^3.1.0", + "reselect": "^4.0.0", + "resolve": "^1.13.1" + } + }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -12678,12 +15127,12 @@ } }, "babel-preset-jest": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.0.2.tgz", - "integrity": "sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz", + "integrity": "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==", "dev": true, "requires": { - "babel-plugin-jest-hoist": "^28.0.2", + "babel-plugin-jest-hoist": "^28.1.1", "babel-preset-current-node-syntax": "^1.0.0" } }, @@ -12705,7 +15154,7 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "brace-expansion": { @@ -12726,14 +15175,14 @@ } }, "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^2.0.3", + "node-releases": "^2.0.1", "picocolors": "^1.0.0" } }, @@ -12746,15 +15195,21 @@ "node-int64": "^0.4.0" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true }, "call-bind": { @@ -12791,9 +15246,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001341", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001341.tgz", - "integrity": "sha512-2SodVrFFtvGENGCv0ChVJIDQ0KPaS1cg7/qtfMaICgeMolDdo/Z2OD32F0Aq9yl6F4YFwGPBS5AaPqNYiW4PoA==" + "version": "1.0.30001307", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001307.tgz", + "integrity": "sha512-+MXEMczJ4FuxJAUp0jvAl6Df0NI/OfW1RWEE61eSmzS7hw6lz4IKutbhbXendwq8BljfFuHtu26VWsg4afQ7Ng==" }, "caseless": { "version": "0.12.0", @@ -12823,9 +15278,9 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" }, "ci-info": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", + "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, "cjs-module-lexer": { @@ -12837,7 +15292,7 @@ "clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", + "integrity": "sha1-jffHquUf02h06PjQW5GAvBGj/tc=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -12907,13 +15362,13 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true }, "codemirror": { - "version": "5.65.4", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.4.tgz", - "integrity": "sha512-tytrSm5Rh52b6j36cbDXN+FHwHCl9aroY4BrDZB2NFFL3Wjfq9nuYVLFFhaOYOczKAg3JXTr8BuT8LcE5QY4Iw==" + "version": "5.65.1", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.65.1.tgz", + "integrity": "sha512-s6aac+DD+4O2u1aBmdxhB7yz2XU7tG3snOyQ05Kxifahz7hoxnfxIRHxiCSEv3TUC38dIVH8G+lZH9UWSfGQxA==" }, "codemirror-spell-checker": { "version": "1.1.2", @@ -12953,6 +15408,12 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -13039,9 +15500,9 @@ } }, "css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", "dev": true }, "css-loader": { @@ -13060,14 +15521,14 @@ } }, "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", "domutils": "^2.8.0", "nth-check": "^2.0.1" } @@ -13083,15 +15544,15 @@ } }, "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, "cssesc": { @@ -13109,9 +15570,9 @@ } }, "d3": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.4.4.tgz", - "integrity": "sha512-97FE+MYdAlV3R9P74+R3Uar7wUKkIFu89UWMjEaDhiJ9VxKvqaMxauImy8PC2DdBkdM2BxJOIoLxPrcZUyrKoQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.3.0.tgz", + "integrity": "sha512-MDRLJCMK232OJQRqGljQ/gCxtB8k3/sLKFjftMjzPB3nKVUODpdW9Rb3vcq7U8Ka5YKoZkAmp++Ur6I+6iNWIw==", "requires": { "d3-array": "3", "d3-axis": "3", @@ -13146,9 +15607,9 @@ } }, "d3-array": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.6.tgz", - "integrity": "sha512-DCbBBNuKOeiR9h04ySRBMW52TFVc91O9wJziuyXw6Ztmy8D3oZbmCkOO3UHKC7ceNJsN2Mavo9+vwV8EAEUXzA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.1.1.tgz", + "integrity": "sha512-33qQ+ZoZlli19IFiQx4QEpf2CBEayMRzhlisJHSCsSUbDXv6ZishqS1x7uFVClKG4Wr7rZVHvaAttoLow6GqdQ==", "requires": { "internmap": "1 - 2" } @@ -13184,9 +15645,9 @@ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" }, "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.0.1.tgz", + "integrity": "sha512-6/SlHkDOBLyQSJ1j1Ghs82OIUXpKWlR0hCsw0XrLSQhuUPuCSmLQ1QPH98vpnQxMUQM2/gfAkUEWsupVpd9JGw==" }, "d3-contour": { "version": "3.0.1", @@ -13265,9 +15726,9 @@ } }, "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.1.tgz", + "integrity": "sha512-LtAIu54UctRmhGKllleflmHalttH3zkfSi4NlKrTAoFKjC+AFBJohsCAdgCBYQwH0F8hIOGY89X1pPqAchlMkA==" }, "d3-interpolate": { "version": "3.0.1", @@ -13711,7 +16172,7 @@ "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", "dev": true }, "deep-is": { @@ -13726,14 +16187,19 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" + "object-keys": "^1.0.12" } }, "delaunator": { @@ -13747,7 +16213,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, "detect-newline": { @@ -13757,9 +16223,9 @@ "dev": true }, "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.0.tgz", + "integrity": "sha512-ZsOBWnhXiH+Zn0DcBNX/tiQsqrREHs/6oQsEVy2VJJjrTblykPima11pyHMSA/7PGmD+fwclTnKVKL/qtNREDQ==", "dev": true }, "dir-glob": { @@ -13781,9 +16247,9 @@ } }, "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", @@ -13800,15 +16266,15 @@ } }, "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -13857,9 +16323,9 @@ } }, "electron-to-chromium": { - "version": "1.4.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.137.tgz", - "integrity": "sha512-0Rcpald12O11BUogJagX3HsCN3FE83DSqWjgXoHo5a72KUKMSfI39XBgJpgNNxS9fuGzytaFjE06kZkiVFy2qA==" + "version": "1.4.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.65.tgz", + "integrity": "sha512-0/d8Skk8sW3FxXP0Dd6MnBlrwx7Qo9cqQec3BlIAlvKnrmS3pHsIbaroEi+nd0kZkGpQ6apMEre7xndzjlEnLw==" }, "emittery": { "version": "0.10.2", @@ -13877,6 +16343,15 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, "enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", @@ -13916,34 +16391,31 @@ } }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", + "has-symbols": "^1.0.2", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", + "is-negative-zero": "^2.0.1", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" } }, "es-module-lexer": { @@ -13951,15 +16423,6 @@ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -13972,36 +16435,114 @@ } }, "esbuild": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.39.tgz", - "integrity": "sha512-2kKujuzvRWYtwvNjYDY444LQIA3TyJhJIX3Yo4+qkFlDDtGlSicWgeHVJqMUP/2sSfH10PGwfsj+O2ro1m10xQ==", - "requires": { - "esbuild-android-64": "0.14.39", - "esbuild-android-arm64": "0.14.39", - "esbuild-darwin-64": "0.14.39", - "esbuild-darwin-arm64": "0.14.39", - "esbuild-freebsd-64": "0.14.39", - "esbuild-freebsd-arm64": "0.14.39", - "esbuild-linux-32": "0.14.39", - "esbuild-linux-64": "0.14.39", - "esbuild-linux-arm": "0.14.39", - "esbuild-linux-arm64": "0.14.39", - "esbuild-linux-mips64le": "0.14.39", - "esbuild-linux-ppc64le": "0.14.39", - "esbuild-linux-riscv64": "0.14.39", - "esbuild-linux-s390x": "0.14.39", - "esbuild-netbsd-64": "0.14.39", - "esbuild-openbsd-64": "0.14.39", - "esbuild-sunos-64": "0.14.39", - "esbuild-windows-32": "0.14.39", - "esbuild-windows-64": "0.14.39", - "esbuild-windows-arm64": "0.14.39" - } + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", + "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", + "requires": { + "esbuild-android-64": "0.14.47", + "esbuild-android-arm64": "0.14.47", + "esbuild-darwin-64": "0.14.47", + "esbuild-darwin-arm64": "0.14.47", + "esbuild-freebsd-64": "0.14.47", + "esbuild-freebsd-arm64": "0.14.47", + "esbuild-linux-32": "0.14.47", + "esbuild-linux-64": "0.14.47", + "esbuild-linux-arm": "0.14.47", + "esbuild-linux-arm64": "0.14.47", + "esbuild-linux-mips64le": "0.14.47", + "esbuild-linux-ppc64le": "0.14.47", + "esbuild-linux-riscv64": "0.14.47", + "esbuild-linux-s390x": "0.14.47", + "esbuild-netbsd-64": "0.14.47", + "esbuild-openbsd-64": "0.14.47", + "esbuild-sunos-64": "0.14.47", + "esbuild-windows-32": "0.14.47", + "esbuild-windows-64": "0.14.47", + "esbuild-windows-arm64": "0.14.47" + } + }, + "esbuild-android-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", + "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", + "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", + "optional": true }, "esbuild-darwin-64": { - "version": "0.14.39", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.39.tgz", - "integrity": "sha512-ImT6eUw3kcGcHoUxEcdBpi6LfTRWaV6+qf32iYYAfwOeV+XaQ/Xp5XQIBiijLeo+LpGci9M0FVec09nUw41a5g==", + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", + "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", + "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", + "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", + "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", + "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", + "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", + "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", + "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", + "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", + "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", + "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", + "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", "optional": true }, "esbuild-loader": { @@ -14017,6 +16558,42 @@ "webpack-sources": "^2.2.0" } }, + "esbuild-netbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", + "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", + "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", + "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", + "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", + "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", + "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", + "optional": true + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -14216,6 +16793,23 @@ "semver": "^7.3.5", "vue-eslint-parser": "^9.0.1", "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "vue-eslint-parser": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.2.tgz", + "integrity": "sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + } + } } }, "eslint-scope": { @@ -14329,74 +16923,50 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, "expect": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.0.tgz", - "integrity": "sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==", + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", + "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", "dev": true, "requires": { - "@jest/expect-utils": "^28.1.0", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0" + "@jest/types": "^27.2.5", + "ansi-styles": "^5.0.0", + "jest-get-type": "^27.0.6", + "jest-matcher-utils": "^27.2.5", + "jest-message-util": "^27.2.5", + "jest-regex-util": "^27.0.6" }, "dependencies": { - "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", - "dev": true, - "requires": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + } + } + }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "pump": "^3.0.0" } } } @@ -14461,6 +17031,15 @@ "bser": "2.1.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -14478,6 +17057,24 @@ "to-regex-range": "^5.0.1" } }, + "find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "requires": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true + } + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -14536,30 +17133,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -14592,7 +17171,7 @@ "get-port": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", "dev": true }, "get-stdin": { @@ -14617,14 +17196,14 @@ } }, "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } @@ -14704,9 +17283,9 @@ "dev": true }, "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "graphlib": { "version": "2.1.8", @@ -14717,14 +17296,14 @@ } }, "gsap": { - "version": "3.10.4", - "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.10.4.tgz", - "integrity": "sha512-6QatdkKxXCMfvCW4rM++0RqyLQAzFX5nwl3yHS0XPgkZBkiSEY3VZVbMltrdtsbER/xZonLtyHt684wRp4erlQ==" + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.9.1.tgz", + "integrity": "sha512-JSGVYoC6da4pIjdF/yxFU6Rz8OojOIDkbooveZlfNg0+JIoFoRruyfWAEi6R/gUeNcuOiTqUIb0gi1nCNrHf8w==" }, "happy-dom": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-4.0.1.tgz", - "integrity": "sha512-GUj2ayfbWYHPeQfcK0N+lygRE/DsrjQbALJq0zrxHLc9KYzhFSCmaCOISuNgHV/21EEeVIX55KoPTqMcX362+g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-4.1.0.tgz", + "integrity": "sha512-x/W72MnJ3VENTXrIlvdkb5t+f7Tkeze8CEcUEiVAbPovZnsB6vl/szkWCKuuovmdWBxJtqP147qedos9wWxllg==", "dev": true, "requires": { "css.escape": "^1.5.1", @@ -14751,9 +17330,9 @@ } }, "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, "has-flag": { @@ -14761,19 +17340,10 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-tostringtag": { @@ -14854,6 +17424,16 @@ } } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -14963,6 +17543,12 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -15004,9 +17590,9 @@ "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "requires": { "has": "^1.0.3" } @@ -15020,6 +17606,12 @@ "has-tostringtag": "^1.0.0" } }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -15056,9 +17648,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -15093,13 +17685,10 @@ "dev": true }, "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true }, "is-stream": { "version": "2.0.1", @@ -15138,10 +17727,19 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "isexe": { @@ -15235,62 +17833,62 @@ } }, "jest-circus": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.0.tgz", - "integrity": "sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.1.tgz", + "integrity": "sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/expect": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/expect": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", "dedent": "^0.7.0", "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0", + "jest-each": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3", "throat": "^6.0.1" }, "dependencies": { "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15319,73 +17917,133 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "diff-sequences": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", + "dev": true + }, + "jest-diff": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + } + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "jest-cli": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.0.tgz", - "integrity": "sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.1.tgz", + "integrity": "sha512-+sUfVbJqb1OjBZ0OdBbI6OWfYM1i7bSfzYy6gze1F1w3OKWq8ZTEKkZ8a7ZQPq6G/G1qMh/uKqpdWhgl11NFQQ==", "dev": true, "requires": { - "@jest/core": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/core": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-config": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "prompts": "^2.0.1", "yargs": "^17.3.1" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15406,12 +18064,12 @@ } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15422,39 +18080,39 @@ } }, "jest-config": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.0.tgz", - "integrity": "sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.1.tgz", + "integrity": "sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA==", "dev": true, "requires": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.0", - "@jest/types": "^28.1.0", - "babel-jest": "^28.1.0", + "@jest/test-sequencer": "^28.1.1", + "@jest/types": "^28.1.1", + "babel-jest": "^28.1.1", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.0", - "jest-environment-node": "^28.1.0", + "jest-circus": "^28.1.1", + "jest-environment-node": "^28.1.1", "jest-get-type": "^28.0.2", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-runner": "^28.1.0", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-runner": "^28.1.1", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15474,91 +18132,96 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true }, "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", "dev": true, "requires": { + "@jest/schemas": "^28.0.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "react-is": "^18.0.0" } }, "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true } } }, + "jest-diff": { + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.0.tgz", + "integrity": "sha512-zztvHDCq/QcAVv+o6rts0reupSOxyrX+KLQEOMWCW2trZgcBFgp/oTK7hJCGpXvEIqKrQzyQlaPKn9W04+IMQg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^27.5.0", + "jest-get-type": "^27.5.0", + "pretty-format": "^27.5.0" + } + }, "jest-docblock": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.0.2.tgz", - "integrity": "sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", + "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", "dev": true, "requires": { "detect-newline": "^3.0.0" } }, "jest-each": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.0.tgz", - "integrity": "sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz", + "integrity": "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "jest-get-type": "^28.0.2", - "jest-util": "^28.1.0", - "pretty-format": "^28.1.0" + "jest-util": "^28.1.1", + "pretty-format": "^28.1.1" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15578,66 +18241,96 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "jest-environment-node": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.0.tgz", - "integrity": "sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.1.tgz", + "integrity": "sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" }, "dependencies": { "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15666,46 +18359,70 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, @@ -15717,29 +18434,21 @@ "requires": { "jest-diff": "^27.2.5", "jest-get-type": "^27.0.6" - }, - "dependencies": { - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - } } }, "jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.0.tgz", + "integrity": "sha512-Vp6O8a52M/dahXRG/E0EJuWQROps2mDQ0sJYPgO8HskhdLwj9ajgngy2OAqZgV6e/RcU67WUHq6TgfvJb8flbA==", "dev": true }, "jest-haste-map": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.0.tgz", - "integrity": "sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz", + "integrity": "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", @@ -15747,16 +18456,16 @@ "fsevents": "^2.3.2", "graceful-fs": "^4.2.9", "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-util": "^28.1.1", + "jest-worker": "^28.1.1", "micromatch": "^4.0.4", - "walker": "^1.0.7" + "walker": "^1.0.8" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15776,64 +18485,102 @@ "@types/yargs-parser": "*" } }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "jest-leak-detector": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.0.tgz", - "integrity": "sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==", - "dev": true, - "requires": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" - } - }, - "jest-matcher-utils": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.0.tgz", - "integrity": "sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz", + "integrity": "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==", "dev": true, "requires": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.0", "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" }, "dependencies": { - "diff-sequences": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-get-type": { "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", "dev": true }, - "jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", "dev": true, "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, + "jest-matcher-utils": { + "version": "27.2.5", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", + "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^27.2.5", + "jest-get-type": "^27.0.6", + "pretty-format": "^27.2.5" + } + }, "jest-message-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", @@ -15867,12 +18614,6 @@ "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true } } }, @@ -15894,32 +18635,32 @@ "requires": {} }, "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", + "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true }, "jest-resolve": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.0.tgz", - "integrity": "sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", + "integrity": "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==", "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", + "jest-haste-map": "^28.1.1", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.0", - "jest-validate": "^28.1.0", + "jest-util": "^28.1.1", + "jest-validate": "^28.1.1", "resolve": "^1.20.0", "resolve.exports": "^1.1.0", "slash": "^3.0.0" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -15940,12 +18681,12 @@ } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -15956,74 +18697,82 @@ } }, "jest-resolve-dependencies": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.0.tgz", - "integrity": "sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.1.tgz", + "integrity": "sha512-p8Y150xYJth4EXhOuB8FzmS9r8IGLEioiaetgdNGb9VHka4fl0zqWlVe4v7mSkYOuEUg2uB61iE+zySDgrOmgQ==", "dev": true, "requires": { "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.0" + "jest-snapshot": "^28.1.1" + }, + "dependencies": { + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + } } }, "jest-runner": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.0.tgz", - "integrity": "sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.1.tgz", + "integrity": "sha512-W5oFUiDBgTsCloTAj6q95wEvYDB0pxIhY6bc5F26OucnwBN+K58xGTGbliSMI4ChQal5eANDF+xvELaYkJxTmA==", "dev": true, "requires": { - "@jest/console": "^28.1.0", - "@jest/environment": "^28.1.0", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/console": "^28.1.1", + "@jest/environment": "^28.1.1", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.10.2", "graceful-fs": "^4.2.9", - "jest-docblock": "^28.0.2", - "jest-environment-node": "^28.1.0", - "jest-haste-map": "^28.1.0", - "jest-leak-detector": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-resolve": "^28.1.0", - "jest-runtime": "^28.1.0", - "jest-util": "^28.1.0", - "jest-watcher": "^28.1.0", - "jest-worker": "^28.1.0", + "jest-docblock": "^28.1.1", + "jest-environment-node": "^28.1.1", + "jest-haste-map": "^28.1.1", + "jest-leak-detector": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-resolve": "^28.1.1", + "jest-runtime": "^28.1.1", + "jest-util": "^28.1.1", + "jest-watcher": "^28.1.1", + "jest-worker": "^28.1.1", "source-map-support": "0.5.13", "throat": "^6.0.1" }, "dependencies": { "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -16052,109 +18801,163 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "jest-worker": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", + "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, "jest-runtime": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.0.tgz", - "integrity": "sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.1.tgz", + "integrity": "sha512-J89qEJWW0leOsqyi0D9zHpFEYHwwafFdS9xgvhFHtIdRghbadodI0eA+DrthK/1PebBv3Px8mFSMGKrtaVnleg==", "dev": true, "requires": { - "@jest/environment": "^28.1.0", - "@jest/fake-timers": "^28.1.0", - "@jest/globals": "^28.1.0", + "@jest/environment": "^28.1.1", + "@jest/fake-timers": "^28.1.1", + "@jest/globals": "^28.1.1", "@jest/source-map": "^28.0.2", - "@jest/test-result": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "execa": "^5.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", + "jest-haste-map": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.0", - "jest-snapshot": "^28.1.0", - "jest-util": "^28.1.0", + "jest-resolve": "^28.1.1", + "jest-snapshot": "^28.1.1", + "jest-util": "^28.1.1", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, "dependencies": { "@jest/environment": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.0.tgz", - "integrity": "sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.1.tgz", + "integrity": "sha512-9auVQ2GzQ7nrU+lAr8KyY838YahElTX9HVjbQPPS2XjlxQ+na18G113OoBhyBGBtD6ZnO/SrUy5WR8EzOj1/Uw==", "dev": true, "requires": { - "@jest/fake-timers": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/fake-timers": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", - "jest-mock": "^28.1.0" + "jest-mock": "^28.1.1" } }, "@jest/fake-timers": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.0.tgz", - "integrity": "sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.1.tgz", + "integrity": "sha512-BY/3+TyLs5+q87rGWrGUY5f8e8uC3LsVHS9Diz8+FV3ARXL4sNnkLlIB8dvDvRrp+LUCGM+DLqlsYubizGUjIA==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@sinonjs/fake-timers": "^9.1.1", "@types/node": "*", - "jest-message-util": "^28.1.0", - "jest-mock": "^28.1.0", - "jest-util": "^28.1.0" + "jest-message-util": "^28.1.1", + "jest-mock": "^28.1.1", + "jest-util": "^28.1.1" } }, "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -16183,53 +18986,83 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-mock": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.0.tgz", - "integrity": "sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", + "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*" } }, + "jest-regex-util": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", + "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", + "dev": true + }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "jest-snapshot": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.0.tgz", - "integrity": "sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.1.tgz", + "integrity": "sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A==", "dev": true, "requires": { "@babel/core": "^7.11.6", @@ -16237,30 +19070,30 @@ "@babel/plugin-syntax-typescript": "^7.7.2", "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.0", - "@jest/transform": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/expect-utils": "^28.1.1", + "@jest/transform": "^28.1.1", + "@jest/types": "^28.1.1", "@types/babel__traverse": "^7.0.6", "@types/prettier": "^2.1.5", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^28.1.0", + "expect": "^28.1.1", "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.0", + "jest-diff": "^28.1.1", "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.0", - "jest-matcher-utils": "^28.1.0", - "jest-message-util": "^28.1.0", - "jest-util": "^28.1.0", + "jest-haste-map": "^28.1.1", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1", "natural-compare": "^1.4.0", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "semver": "^7.3.5" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -16280,54 +19113,109 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "diff-sequences": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.0.2.tgz", - "integrity": "sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", + "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", "dev": true }, + "expect": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", + "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", + "dev": true, + "requires": { + "@jest/expect-utils": "^28.1.1", + "jest-get-type": "^28.0.2", + "jest-matcher-utils": "^28.1.1", + "jest-message-util": "^28.1.1", + "jest-util": "^28.1.1" + } + }, "jest-diff": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.0.tgz", - "integrity": "sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", + "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^28.1.1", + "jest-get-type": "^28.0.2", + "pretty-format": "^28.1.1" + } + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "jest-matcher-utils": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", + "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", "dev": true, "requires": { "chalk": "^4.0.0", - "diff-sequences": "^28.0.2", + "jest-diff": "^28.1.1", "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" } }, "jest-message-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.0.tgz", - "integrity": "sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", + "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^28.1.0", + "pretty-format": "^28.1.1", "slash": "^3.0.0", "stack-utils": "^2.0.3" } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, @@ -16346,23 +19234,23 @@ } }, "jest-validate": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.0.tgz", - "integrity": "sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz", + "integrity": "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^28.0.2", "leven": "^3.1.0", - "pretty-format": "^28.1.0" + "pretty-format": "^28.1.1" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -16382,34 +19270,64 @@ "@types/yargs-parser": "*" } }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true + }, + "jest-get-type": { + "version": "28.0.2", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", + "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", + "dev": true + }, + "pretty-format": { + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", + "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", + "dev": true, + "requires": { + "@jest/schemas": "^28.0.2", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + }, + "react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true } } }, "jest-watcher": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.0.tgz", - "integrity": "sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", + "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", "dev": true, "requires": { - "@jest/test-result": "^28.1.0", - "@jest/types": "^28.1.0", + "@jest/test-result": "^28.1.1", + "@jest/types": "^28.1.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.10.2", - "jest-util": "^28.1.0", + "jest-util": "^28.1.1", "string-length": "^4.0.1" }, "dependencies": { "@jest/types": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.0.tgz", - "integrity": "sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", + "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", "dev": true, "requires": { "@jest/schemas": "^28.0.2", @@ -16430,12 +19348,12 @@ } }, "jest-util": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.0.tgz", - "integrity": "sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==", + "version": "28.1.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", + "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", "dev": true, "requires": { - "@jest/types": "^28.1.0", + "@jest/types": "^28.1.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -16446,10 +19364,9 @@ } }, "jest-worker": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.0.tgz", - "integrity": "sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==", - "dev": true, + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.0.tgz", + "integrity": "sha512-8OEHiPNOPTfaWnJ2SUHM8fmgeGq37uuGsQBvGKQJl1f+6WIy6g7G3fE2ruI5294bUKUI9FaCWt5hDvO8HSwsSg==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -16460,7 +19377,6 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -16472,6 +19388,12 @@ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" }, + "jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", + "dev": true + }, "jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -16523,9 +19445,12 @@ "dev": true }, "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "requires": { + "minimist": "^1.2.5" + } }, "just-extend": { "version": "5.1.1", @@ -16667,9 +19592,9 @@ "dev": true }, "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" }, "loader-utils": { "version": "2.0.2", @@ -16707,11 +19632,6 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" - }, "lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", @@ -16776,9 +19696,9 @@ "dev": true }, "marked": { - "version": "4.0.16", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.16.tgz", - "integrity": "sha512-wahonIQ5Jnyatt2fn8KqF/nIqZM8mh3oRu2+l5EANGMhu6RFjiSG52QNE2eWzFMI94HqYSgN184NurgNG6CztA==" + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==" }, "mathml-tag-names": { "version": "2.1.3", @@ -16891,16 +19811,16 @@ "optional": true }, "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "requires": { - "mime-db": "1.52.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -17029,13 +19949,13 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "dev": true }, "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" }, "normalize-package-data": { "version": "2.5.0", @@ -17142,6 +20062,17 @@ "mimic-fn": "^2.1.0" } }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -17192,7 +20123,7 @@ "parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", "dev": true }, "parse-json": { @@ -17244,6 +20175,12 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -17266,6 +20203,23 @@ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, + "pixelmatch": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", + "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", + "dev": true, + "requires": { + "pngjs": "^6.0.0" + }, + "dependencies": { + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "dev": true + } + } + }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -17319,12 +20273,110 @@ } } }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + } + } + }, + "playwright-core": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz", + "integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==", + "dev": true, + "requires": { + "commander": "^8.2.0", + "debug": "^4.1.1", + "extract-zip": "^2.0.1", + "https-proxy-agent": "^5.0.0", + "jpeg-js": "^0.4.2", + "mime": "^2.4.6", + "pngjs": "^5.0.0", + "progress": "^2.0.3", + "proper-lockfile": "^4.1.1", + "proxy-from-env": "^1.1.0", + "rimraf": "^3.0.2", + "socks-proxy-agent": "^6.1.0", + "stack-utils": "^2.0.3", + "ws": "^7.4.6", + "yauzl": "^2.10.0", + "yazl": "^2.5.1" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + } + } + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "dev": true + }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -17419,21 +20471,20 @@ "dev": true }, "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "optional": true }, "pretty-format": { - "version": "28.1.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.0.tgz", - "integrity": "sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==", + "version": "27.5.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.0.tgz", + "integrity": "sha512-xEi6BRPZ+J1AIS4BAtFC/+rh5jXlXObGZjx5+OSpM95vR/PGla78bFVHMy5GdZjP9wk3AHAMHROXq/r69zXltw==", "dev": true, "requires": { - "@jest/schemas": "^28.0.2", "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "dependencies": { "ansi-styles": { @@ -17458,6 +20509,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", @@ -17477,6 +20534,23 @@ "sisteransi": "^1.0.5" } }, + "proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -17488,15 +20562,25 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.10.5", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.5.tgz", + "integrity": "sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ==", "dev": true, "requires": { "side-channel": "^1.0.4" @@ -17522,9 +20606,9 @@ } }, "react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "read-pkg": { @@ -17659,17 +20743,6 @@ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -17679,7 +20752,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, "require-from-string": { @@ -17687,6 +20760,12 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, + "reselect": { + "version": "4.1.6", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", + "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", + "dev": true + }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -17724,6 +20803,12 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -17793,9 +20878,9 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -17894,6 +20979,33 @@ "is-fullwidth-code-point": "^3.0.0" } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, "sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", @@ -17915,10 +21027,9 @@ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" }, "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -17995,7 +21106,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, "stable": { @@ -18051,25 +21162,23 @@ } }, "string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" + "define-properties": "^1.1.3" } }, "strip-ansi": { @@ -18175,13 +21284,6 @@ } } }, - "stylelint-config-recommended": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", - "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", - "dev": true, - "requires": {} - }, "stylelint-config-standard": { "version": "25.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-25.0.0.tgz", @@ -18189,12 +21291,21 @@ "dev": true, "requires": { "stylelint-config-recommended": "^7.0.0" + }, + "dependencies": { + "stylelint-config-recommended": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-7.0.0.tgz", + "integrity": "sha512-yGn84Bf/q41J4luis1AZ95gj0EQwRX8lWmGmBwkwBNSkpGSpl66XcPTulxGa/Z91aPoNGuIGBmFkcM1MejMo9Q==", + "dev": true, + "requires": {} + } } }, "stylis": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.1.tgz", - "integrity": "sha512-lVrM/bNdhVX2OgBFNa2YJ9Lxj7kPzylieHd3TNjuGE0Re9JB7joL5VUKOVH1kdNNJTgGPpT8hmwIAPLaSyEVFQ==" + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" }, "superstruct": { "version": "0.10.13", @@ -18285,9 +21396,9 @@ }, "dependencies": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -18320,13 +21431,12 @@ } }, "terser": { - "version": "5.13.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", - "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "requires": { - "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.8.0-beta.0", + "source-map": "~0.7.2", "source-map-support": "~0.5.20" }, "dependencies": { @@ -18336,51 +21446,9 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" }, "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, @@ -18396,16 +21464,6 @@ "terser": "^5.7.2" }, "dependencies": { - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -18415,14 +21473,6 @@ "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } } } }, @@ -18499,7 +21549,7 @@ "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "dev": true }, "tributejs": { @@ -18537,15 +21587,15 @@ "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "type-check": { "version": "0.4.0", @@ -18571,7 +21621,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true }, "typo-js": { @@ -18585,14 +21635,14 @@ "integrity": "sha512-r13jrghEYZAN99GeYpEjM107DOxqB65enskpwce8rRHVAGEtaWmsF5GqoGdPMf8DIXc9XyAJTdvlvRZi4LsszA==" }, "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", "which-boxed-primitive": "^1.0.2" } }, @@ -18633,12 +21683,12 @@ "dev": true }, "v8-to-istanbul": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz", - "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", + "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", "dev": true, "requires": { - "@jridgewell/trace-mapping": "^0.3.7", + "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", "convert-source-map": "^1.6.0" } @@ -18675,21 +21725,6 @@ "v-tooltip": "^2.0.0-rc.32" } }, - "vue-eslint-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.2.tgz", - "integrity": "sha512-uCPQwTGjOtAYrwnU+76pYxalhjsh7iFBsHwBqDHiOPTxtICDaraO4Szw54WFTNZTAEsgHHzqFOu1mmnBOBRzDA==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - } - }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -18919,7 +21954,7 @@ "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, "requires": { "tr46": "~0.0.3", @@ -18929,7 +21964,7 @@ "webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true } } @@ -19034,9 +22069,9 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.0.tgz", + "integrity": "sha512-7x54QnN21P+XL/v8SuNKvfgsUre6PXpN7mc77N3HlZv+f1SBRGmjxtOud2Z6FZ8DmdkD/IdjCaf9XXbnqmTZGQ==", "requires": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -19068,6 +22103,13 @@ "signal-exit": "^3.0.7" } }, + "ws": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", + "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", + "dev": true, + "requires": {} + }, "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -19119,6 +22161,25 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } } } } diff --git a/package.json b/package.json index addf5633fbf98..b9450bf806e27 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ }, "devDependencies": { "@happy-dom/jest-environment": "4.0.1", + "@playwright/test": "1.18.1", "eslint": "8.15.0", "eslint-plugin-html": "6.2.0", "eslint-plugin-import": "2.26.0", diff --git a/playwright.config.js b/playwright.config.js new file mode 100644 index 0000000000000..3406e9eb96a82 --- /dev/null +++ b/playwright.config.js @@ -0,0 +1,115 @@ +// @ts-check +import {devices} from '@playwright/test'; + +/** + * @see https://playwright.dev/docs/test-configuration + * @type {import('@playwright/test').PlaywrightTestConfig} + */ +const config = { + testDir: './tools/e2e/tests', + + /* Maximum time one test can run for. */ + timeout: 30 * 1000, + + expect: { + + /** + * Maximum time expect() should wait for the condition to be met. + * For example in `await expect(locator).toHaveText();` + */ + timeout: 2000 + }, + + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + + /* Opt out of parallel tests on CI. */ + // workers: process.env.CI ? 1 : undefined, + + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: process.env.CI ? 'dot' : 'html', + + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + headless: true, + + locale: 'en-US', + + /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ + actionTimeout: 1000, + + /* Base URL to use in actions like `await page.goto('/')`. */ + baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + trace: 'on-first-retry', + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + + /* Project-specific settings. */ + 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: { + // channel: 'msedge', + // }, + // }, + // { + // name: 'Google Chrome', + // use: { + // channel: 'chrome', + // }, + // }, + ], + + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + // outputDir: 'test-results/', + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // port: 3000, + // }, +}; + +export default config; diff --git a/tools/e2e/tests/example.spec.js b/tools/e2e/tests/example.spec.js new file mode 100644 index 0000000000000..305f4ee3a21b5 --- /dev/null +++ b/tools/e2e/tests/example.spec.js @@ -0,0 +1,8 @@ +// @ts-check +import { test, expect } from '@playwright/test'; + +test('basic test', async ({ page }) => { + await page.goto('/'); + await expect(page).toHaveTitle(/.*Gitea*/); + //await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg') +}); From 601a6563fb627305a32c60e6b1b1a0d1e8e45ac9 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 31 Jan 2022 16:52:23 -0700 Subject: [PATCH 02/46] Simplify Makefile --- .drone.yml | 26 +++++++++----------------- Makefile | 21 ++++++++++++++------- tools/e2e/run_e2e.sh | 7 +++++++ 3 files changed, 30 insertions(+), 24 deletions(-) create mode 100644 tools/e2e/run_e2e.sh diff --git a/.drone.yml b/.drone.yml index 0924290cc2590..f06473ae37aa5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -541,28 +541,20 @@ steps: commands: - git update-ref refs/heads/tag_test ${DRONE_COMMIT_SHA} - - name: build - pull: always - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env - commands: - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs - - make build - environment: - GOPROXY: https://goproxy.cn # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata sqlite sqlite_unlock_notify - + # TODO: We should probably build all dependencies into a test image - name: test-e2e - image: gitea/test_env:linux-amd64 # https://gitea.com/gitea/test-env + image: mcr.microsoft.com/playwright:v1.18.1-focal commands: - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs - - timeout -s ABRT 40m make test-e2e-pgsql - environment: + - curl -sL https://go.dev/dl/go1.17.6.linux-amd64.tar.gz -o go1.17.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz + - groupadd --gid 1001 gitea + - useradd -m --gid 1001 --uid 1001 gitea + - ./build/test-env-prepare.sh + - su gitea GOPROXY=$GOPROXY GOSUMDB=$GOSUMDB TAGS=$TAGS NO_DEPS_PLAYWRIGHT=$NO_DEPS_PLAYWRIGHT bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" GOPROXY: https://goproxy.cn + GOSUMDB: sum.golang.org TAGS: bindata USE_REPO_TEST_DIR: 1 - depends_on: - - build + NO_DEPS_PLAYWRIGHT: 1 --- kind: pipeline diff --git a/Makefile b/Makefile index 101a8642b2113..b22d69669a878 100644 --- a/Makefile +++ b/Makefile @@ -132,6 +132,15 @@ ifeq ($(filter $(TAGS_SPLIT),bindata),bindata) GO_SOURCES += $(BINDATA_DEST) endif +<<<<<<< HEAD +======= +ifneq ($(NO_DEPS_PLAYWRIGHT),1) + PLAYWRIGHT_FLAGS += --with-deps +endif + +#To update swagger use: GO111MODULE=on go get -u github.com/go-swagger/go-swagger/cmd/swagger +SWAGGER := $(GO) run github.com/go-swagger/go-swagger/cmd/swagger +>>>>>>> d2c9f5bba (Simplify Makefile) SWAGGER_SPEC := templates/swagger/v1_json.tmpl SWAGGER_SPEC_S_TMPL := s|"basePath": *"/api/v1"|"basePath": "{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|g SWAGGER_SPEC_S_JSON := s|"basePath": *"{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|"basePath": "/api/v1"|g @@ -501,20 +510,18 @@ test-e2e: test-e2e-pgsql .PHONY: test-e2e\#% test-e2e\#%: test-e2e-pgsql\#% - echo "Why do I need this?" + true # Can I share the database with integration tests? Is it cleaned up between tests? .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql - npx playwright install --with-deps - GITEA_ROOT="$(CURDIR)" ./$(EXECUTABLE) web -c integrations/pgsql.ini --quiet & \ - (wait $i && npx playwright test && killall gitea) + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: build generate-ini-pgsql - npx playwright install --with-deps - GITEA_ROOT="$(CURDIR)" ./$(EXECUTABLE) web -c integrations/pgsql.ini --quiet & \ - (wait $i && npx playwright test $* && killall gitea) + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh new file mode 100644 index 0000000000000..ac9ad532fffab --- /dev/null +++ b/tools/e2e/run_e2e.sh @@ -0,0 +1,7 @@ +#!/bin/bash +set -euo pipefail + +./${GITEA_EXECUTABLE:-gitea} web -c integrations/pgsql.ini --quiet & +npx playwright test ${E2E_TESTS:-""} + +trap 'kill $(jobs -p)' EXIT From e307d342a07451c386f02fb9eb885f19834ddb3e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 31 Jan 2022 18:14:14 -0700 Subject: [PATCH 03/46] Simplify Makefile --- .drone.yml | 12 +----------- Makefile | 37 +++++++++++++++++++++++++++++++++++-- tools/e2e/run_e2e.sh | 0 3 files changed, 36 insertions(+), 13 deletions(-) mode change 100644 => 100755 tools/e2e/run_e2e.sh diff --git a/.drone.yml b/.drone.yml index f06473ae37aa5..5fe14e5b8223b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -513,8 +513,6 @@ platform: trigger: event: - - push - - tag - pull_request services: @@ -526,15 +524,6 @@ services: POSTGRES_PASSWORD: postgres steps: - - name: fetch-tags - image: docker:git - commands: - - git fetch --tags --force - when: - event: - exclude: - - pull_request - - name: tag-pre-condition pull: always image: drone/git @@ -550,6 +539,7 @@ steps: - useradd -m --gid 1001 --uid 1001 gitea - ./build/test-env-prepare.sh - su gitea GOPROXY=$GOPROXY GOSUMDB=$GOSUMDB TAGS=$TAGS NO_DEPS_PLAYWRIGHT=$NO_DEPS_PLAYWRIGHT bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" + environment: GOPROXY: https://goproxy.cn GOSUMDB: sum.golang.org TAGS: bindata diff --git a/Makefile b/Makefile index b22d69669a878..6c0ad25c3d735 100644 --- a/Makefile +++ b/Makefile @@ -506,13 +506,36 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.individual.mssql.test -test.failfast .PHONY: test-e2e -test-e2e: test-e2e-pgsql +test-e2e: test-e2e-sqlite .PHONY: test-e2e\#% -test-e2e\#%: test-e2e-pgsql\#% +test-e2e\#%: test-e2e-sqlite\#% +# Kind of a hack to get makefile to accept passing arguement true # Can I share the database with integration tests? Is it cleaned up between tests? +.PHONY: test-e2e-sqlite +test-e2e-sqlite: GOFLAGS+=sqlite sqlite_unlock_notify +test-e2e-sqlite: build generate-ini-sqlite + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + +.PHONY: test-e2e-sqlite\#% +test-e2e-sqlite\#%: GOFLAGS+=sqlite sqlite_unlock_notify +test-e2e-sqlite\#%: build generate-ini-sqlite + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + +.PHONY: test-e2e-mysql8 +test-e2e-mysql8: build generate-ini-mysql8 + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + +.PHONY: test-e2e-mysql8\#% +test-e2e-mysql8\#%: build generate-ini-mysql8 + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) @@ -523,6 +546,16 @@ test-e2e-pgsql\#%: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh +.PHONY: test-e2e-mssql +test-e2e-mssql: build generate-ini-mssql + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + +.PHONY: test-e2e-mssql\#% +test-e2e-mssql\#%: build generate-ini-mssql + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh old mode 100644 new mode 100755 From 935aef0bf8e5f1bd558ec53810f565529ade80db Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 31 Jan 2022 18:59:51 -0700 Subject: [PATCH 04/46] Use correct config files --- Makefile | 16 ++++++++-------- tools/e2e/run_e2e.sh | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 6c0ad25c3d735..0301dd503d471 100644 --- a/Makefile +++ b/Makefile @@ -518,43 +518,43 @@ test-e2e\#%: test-e2e-sqlite\#% test-e2e-sqlite: GOFLAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-sqlite\#% test-e2e-sqlite\#%: GOFLAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite\#%: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE)GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8 test-e2e-mysql8: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql test-e2e-mssql: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh index ac9ad532fffab..ced3900e889c3 100755 --- a/tools/e2e/run_e2e.sh +++ b/tools/e2e/run_e2e.sh @@ -1,7 +1,7 @@ #!/bin/bash set -euo pipefail -./${GITEA_EXECUTABLE:-gitea} web -c integrations/pgsql.ini --quiet & +./${GITEA_EXECUTABLE:-gitea} web --quiet & npx playwright test ${E2E_TESTS:-""} trap 'kill $(jobs -p)' EXIT From c54cb84fe10abe69b1e2c07c605a6eb2b9d2015e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Sat, 5 Feb 2022 18:19:45 -0700 Subject: [PATCH 05/46] Update playwright settings --- Makefile | 2 +- playwright.config.js | 6 +++++- tools/e2e/tests/example.spec.js | 8 -------- tools/e2e/tests/example.test.e2e.js | 9 +++++++++ 4 files changed, 15 insertions(+), 10 deletions(-) delete mode 100644 tools/e2e/tests/example.spec.js create mode 100644 tools/e2e/tests/example.test.e2e.js diff --git a/Makefile b/Makefile index 0301dd503d471..62c68bb8a922a 100644 --- a/Makefile +++ b/Makefile @@ -524,7 +524,7 @@ test-e2e-sqlite: build generate-ini-sqlite test-e2e-sqlite\#%: GOFLAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite\#%: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE)GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8 test-e2e-mysql8: build generate-ini-mysql8 diff --git a/playwright.config.js b/playwright.config.js index 3406e9eb96a82..5f3578ca7721c 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -6,7 +6,8 @@ import {devices} from '@playwright/test'; * @type {import('@playwright/test').PlaywrightTestConfig} */ const config = { - testDir: './tools/e2e/tests', + testDir: './tools/e2e/tests', // TODO: Change this to the ./web_src/ dir? + testMatch: /.*\.test\.e2e\.js/, // Match any .test.e2e.js files /* Maximum time one test can run for. */ timeout: 30 * 1000, @@ -41,6 +42,9 @@ const config = { /* Maximum time each action such as `click()` can take. Defaults to 0 (no limit). */ actionTimeout: 1000, + /* Maximum time allowed for navigation, such as `page.goto()`. */ + navigationTimeout: 5 * 1000, + /* Base URL to use in actions like `await page.goto('/')`. */ baseURL: 'http://localhost:3000', diff --git a/tools/e2e/tests/example.spec.js b/tools/e2e/tests/example.spec.js deleted file mode 100644 index 305f4ee3a21b5..0000000000000 --- a/tools/e2e/tests/example.spec.js +++ /dev/null @@ -1,8 +0,0 @@ -// @ts-check -import { test, expect } from '@playwright/test'; - -test('basic test', async ({ page }) => { - await page.goto('/'); - await expect(page).toHaveTitle(/.*Gitea*/); - //await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg') -}); diff --git a/tools/e2e/tests/example.test.e2e.js b/tools/e2e/tests/example.test.e2e.js new file mode 100644 index 0000000000000..7442ec1faab42 --- /dev/null +++ b/tools/e2e/tests/example.test.e2e.js @@ -0,0 +1,9 @@ +// @ts-check +import {test, expect} from '@playwright/test'; + +test('Load Homepage', async ({page}) => { + const response = await page.goto('/'); + await expect(response.status()).toBe(200); // Status OK + await expect(page).toHaveTitle(/^Gitea: Test\s*$/); + await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); +}); From 5deabe517d7e4c79a2ec17360d2ad7a72ff18ffd Mon Sep 17 00:00:00 2001 From: Kyle D Date: Sat, 5 Feb 2022 19:17:24 -0700 Subject: [PATCH 06/46] Fix package-lock file --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index efa05250082be..c2205ebbd2a64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20198,9 +20198,9 @@ "optional": true }, "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", + "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", "dev": true }, "pixelmatch": { From 6589fc75adba0e92a18b48d8e0f8c7dd417a950a Mon Sep 17 00:00:00 2001 From: Kyle D Date: Sun, 6 Feb 2022 23:38:43 -0700 Subject: [PATCH 07/46] Don't use test logger for e2e tests --- Makefile | 34 +++++++++++++++++++---------- integrations/mssql.ini.tmpl | 2 +- integrations/mysql.ini.tmpl | 2 +- integrations/mysql8.ini.tmpl | 2 +- integrations/pgsql.ini.tmpl | 2 +- integrations/sqlite.ini.tmpl | 2 +- playwright.config.js | 4 +++- tools/e2e/run_e2e.sh | 4 +++- tools/e2e/tests/example.test.e2e.js | 2 +- 9 files changed, 35 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 62c68bb8a922a..8f9e1204b3953 100644 --- a/Makefile +++ b/Makefile @@ -399,7 +399,9 @@ gomod-check: tidy fi generate-ini-sqlite: + $(TEST_LOGGER) ?= test,file sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ + -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ integrations/sqlite.ini.tmpl > integrations/sqlite.ini .PHONY: test-sqlite @@ -421,11 +423,13 @@ test-sqlite-migration\#%: migrations.sqlite.test migrations.individual.sqlite.t generate-ini-mysql: + $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \ -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \ -e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \ -e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ + -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ integrations/mysql.ini.tmpl > integrations/mysql.ini .PHONY: test-mysql @@ -442,11 +446,13 @@ test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./migrations.individual.mysql.test generate-ini-mysql8: + $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MYSQL8_HOST}}|${TEST_MYSQL8_HOST}|g' \ -e 's|{{TEST_MYSQL8_DBNAME}}|${TEST_MYSQL8_DBNAME}|g' \ -e 's|{{TEST_MYSQL8_USERNAME}}|${TEST_MYSQL8_USERNAME}|g' \ -e 's|{{TEST_MYSQL8_PASSWORD}}|${TEST_MYSQL8_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ + -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ integrations/mysql8.ini.tmpl > integrations/mysql8.ini .PHONY: test-mysql8 @@ -463,12 +469,14 @@ test-mysql8-migration: migrations.mysql8.test migrations.individual.mysql8.test GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./migrations.individual.mysql8.test generate-ini-pgsql: + $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \ -e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \ -e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \ -e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \ -e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ + -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ integrations/pgsql.ini.tmpl > integrations/pgsql.ini .PHONY: test-pgsql @@ -485,11 +493,13 @@ test-pgsql-migration: migrations.pgsql.test migrations.individual.pgsql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./migrations.individual.pgsql.test generate-ini-mssql: + $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \ -e 's|{{TEST_MSSQL_DBNAME}}|${TEST_MSSQL_DBNAME}|g' \ -e 's|{{TEST_MSSQL_USERNAME}}|${TEST_MSSQL_USERNAME}|g' \ -e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ + -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ integrations/mssql.ini.tmpl > integrations/mssql.ini .PHONY: test-mssql @@ -505,6 +515,9 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.mssql.test -test.failfast GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.individual.mssql.test -test.failfast +# Use only file logging for end-to-end tests +test-e2e%: TEST_LOGGER = file + .PHONY: test-e2e test-e2e: test-e2e-sqlite @@ -513,48 +526,47 @@ test-e2e\#%: test-e2e-sqlite\#% # Kind of a hack to get makefile to accept passing arguement true -# Can I share the database with integration tests? Is it cleaned up between tests? .PHONY: test-e2e-sqlite -test-e2e-sqlite: GOFLAGS+=sqlite sqlite_unlock_notify +test-e2e-sqlite: TAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-sqlite\#% -test-e2e-sqlite\#%: GOFLAGS+=sqlite sqlite_unlock_notify +test-e2e-sqlite\#%: TAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite\#%: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8 test-e2e-mysql8: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql test-e2e-mssql: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/integrations/mssql.ini.tmpl b/integrations/mssql.ini.tmpl index da15e9ef69ee4..cef03e589ae81 100644 --- a/integrations/mssql.ini.tmpl +++ b/integrations/mssql.ini.tmpl @@ -82,7 +82,7 @@ PROVIDER = file PROVIDER_CONFIG = integrations/gitea-integration-mssql/data/sessions [log] -MODE = test,file +MODE = {{TEST_LOGGER}} ROOT_PATH = {{REPO_TEST_DIR}}mssql-log ROUTER = , XORM = file diff --git a/integrations/mysql.ini.tmpl b/integrations/mysql.ini.tmpl index 4df49336424a6..090b7c3c1421f 100644 --- a/integrations/mysql.ini.tmpl +++ b/integrations/mysql.ini.tmpl @@ -101,7 +101,7 @@ PROVIDER = file PROVIDER_CONFIG = integrations/gitea-integration-mysql/data/sessions [log] -MODE = test,file +MODE = {{TEST_LOGGER}} ROOT_PATH = {{REPO_TEST_DIR}}mysql-log ROUTER = , XORM = file diff --git a/integrations/mysql8.ini.tmpl b/integrations/mysql8.ini.tmpl index 4b63dd51a1fdd..c043474bfe3a3 100644 --- a/integrations/mysql8.ini.tmpl +++ b/integrations/mysql8.ini.tmpl @@ -79,7 +79,7 @@ PROVIDER = file PROVIDER_CONFIG = integrations/gitea-integration-mysql8/data/sessions [log] -MODE = test,file +MODE = {{TEST_LOGGER}} ROOT_PATH = {{REPO_TEST_DIR}}mysql8-log ROUTER = , XORM = file diff --git a/integrations/pgsql.ini.tmpl b/integrations/pgsql.ini.tmpl index 5b54a02c9fac8..510d70a709ed6 100644 --- a/integrations/pgsql.ini.tmpl +++ b/integrations/pgsql.ini.tmpl @@ -83,7 +83,7 @@ PROVIDER = file PROVIDER_CONFIG = integrations/gitea-integration-pgsql/data/sessions [log] -MODE = test,file +MODE = {{TEST_LOGGER}} ROOT_PATH = {{REPO_TEST_DIR}}pgsql-log ROUTER = , XORM = file diff --git a/integrations/sqlite.ini.tmpl b/integrations/sqlite.ini.tmpl index 2da7fd65d392b..b251c15a2e162 100644 --- a/integrations/sqlite.ini.tmpl +++ b/integrations/sqlite.ini.tmpl @@ -78,7 +78,7 @@ PROVIDER = file PROVIDER_CONFIG = integrations/gitea-integration-sqlite/data/sessions [log] -MODE = test,file +MODE = {{TEST_LOGGER}} ROOT_PATH = {{REPO_TEST_DIR}}sqlite-log ROUTER = , XORM = file diff --git a/playwright.config.js b/playwright.config.js index 5f3578ca7721c..95fe4d8a5c623 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -1,6 +1,8 @@ // @ts-check import {devices} from '@playwright/test'; +const BASE_URL = process.env.GITEA_URL? process.env.GITEA_URL: 'http://localhost:3000'; + /** * @see https://playwright.dev/docs/test-configuration * @type {import('@playwright/test').PlaywrightTestConfig} @@ -46,7 +48,7 @@ const config = { navigationTimeout: 5 * 1000, /* Base URL to use in actions like `await page.goto('/')`. */ - baseURL: 'http://localhost:3000', + baseURL: BASE_URL, /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh index ced3900e889c3..2dd56527712c1 100755 --- a/tools/e2e/run_e2e.sh +++ b/tools/e2e/run_e2e.sh @@ -1,7 +1,9 @@ #!/bin/bash set -euo pipefail -./${GITEA_EXECUTABLE:-gitea} web --quiet & +[[ -z "${GITEA_CONF}" ]] && GiteaConfig='' || GiteaConfig="-C . -c ${GITEA_CONF}" + +./${GITEA_EXECUTABLE:-gitea} ${GiteaConfig} --quiet web & npx playwright test ${E2E_TESTS:-""} trap 'kill $(jobs -p)' EXIT diff --git a/tools/e2e/tests/example.test.e2e.js b/tools/e2e/tests/example.test.e2e.js index 7442ec1faab42..c4c2b7424be1c 100644 --- a/tools/e2e/tests/example.test.e2e.js +++ b/tools/e2e/tests/example.test.e2e.js @@ -4,6 +4,6 @@ import {test, expect} from '@playwright/test'; test('Load Homepage', async ({page}) => { const response = await page.goto('/'); await expect(response.status()).toBe(200); // Status OK - await expect(page).toHaveTitle(/^Gitea: Test\s*$/); + await expect(page).toHaveTitle(/^Gitea: Git with a cup of tea\s*$/); await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); }); From 1055426459d85aeaaf9d470a0c0b9b66f2b51824 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 7 Feb 2022 00:13:23 -0700 Subject: [PATCH 08/46] fix frontend lint --- playwright.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playwright.config.js b/playwright.config.js index 95fe4d8a5c623..e45cdf3bf8476 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -1,7 +1,7 @@ // @ts-check import {devices} from '@playwright/test'; -const BASE_URL = process.env.GITEA_URL? process.env.GITEA_URL: 'http://localhost:3000'; +const BASE_URL = process.env.GITEA_URL ? process.env.GITEA_URL : 'http://localhost:3000'; /** * @see https://playwright.dev/docs/test-configuration From 8e888066bee5a6ea2abc3e95791c6e72c3312b8e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 7 Feb 2022 00:14:26 -0700 Subject: [PATCH 09/46] Allow passing TEST_LOGGER variable --- .drone.yml | 1 + Makefile | 18 +++++++----------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/.drone.yml b/.drone.yml index 5fe14e5b8223b..83ddba8bc014c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -545,6 +545,7 @@ steps: TAGS: bindata USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 + TEST_LOGGER: console,file --- kind: pipeline diff --git a/Makefile b/Makefile index 8f9e1204b3953..fb16b80941b9f 100644 --- a/Makefile +++ b/Makefile @@ -399,9 +399,8 @@ gomod-check: tidy fi generate-ini-sqlite: - $(TEST_LOGGER) ?= test,file sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ - -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ + -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ integrations/sqlite.ini.tmpl > integrations/sqlite.ini .PHONY: test-sqlite @@ -423,13 +422,12 @@ test-sqlite-migration\#%: migrations.sqlite.test migrations.individual.sqlite.t generate-ini-mysql: - $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \ -e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \ -e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \ -e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ - -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ + -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ integrations/mysql.ini.tmpl > integrations/mysql.ini .PHONY: test-mysql @@ -446,13 +444,12 @@ test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./migrations.individual.mysql.test generate-ini-mysql8: - $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MYSQL8_HOST}}|${TEST_MYSQL8_HOST}|g' \ -e 's|{{TEST_MYSQL8_DBNAME}}|${TEST_MYSQL8_DBNAME}|g' \ -e 's|{{TEST_MYSQL8_USERNAME}}|${TEST_MYSQL8_USERNAME}|g' \ -e 's|{{TEST_MYSQL8_PASSWORD}}|${TEST_MYSQL8_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ - -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ + -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ integrations/mysql8.ini.tmpl > integrations/mysql8.ini .PHONY: test-mysql8 @@ -469,14 +466,13 @@ test-mysql8-migration: migrations.mysql8.test migrations.individual.mysql8.test GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./migrations.individual.mysql8.test generate-ini-pgsql: - $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \ -e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \ -e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \ -e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \ -e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ - -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ + -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ integrations/pgsql.ini.tmpl > integrations/pgsql.ini .PHONY: test-pgsql @@ -493,13 +489,12 @@ test-pgsql-migration: migrations.pgsql.test migrations.individual.pgsql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./migrations.individual.pgsql.test generate-ini-mssql: - $(TEST_LOGGER) ?= test,file sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \ -e 's|{{TEST_MSSQL_DBNAME}}|${TEST_MSSQL_DBNAME}|g' \ -e 's|{{TEST_MSSQL_USERNAME}}|${TEST_MSSQL_USERNAME}|g' \ -e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ - -e 's|{{TEST_LOGGER}}|${TEST_LOGGER}|g' \ + -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ integrations/mssql.ini.tmpl > integrations/mssql.ini .PHONY: test-mssql @@ -515,8 +510,9 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.mssql.test -test.failfast GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.individual.mssql.test -test.failfast +.PHONY: test-e2e% # Use only file logging for end-to-end tests -test-e2e%: TEST_LOGGER = file +test-e2e%: TEST_LOGGER ?= file .PHONY: test-e2e test-e2e: test-e2e-sqlite From 606f1abc4ff084a7b14a12ddc6b94e2ae83adadb Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 7 Feb 2022 10:39:28 -0700 Subject: [PATCH 10/46] Init postgres database --- .drone.yml | 12 +++++++----- tools/e2e/run_e2e.sh | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 83ddba8bc014c..3b5181c25128c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -520,8 +520,9 @@ services: pull: default image: postgres:10 environment: - POSTGRES_DB: test + POSTGRES_DB: testgitea POSTGRES_PASSWORD: postgres + POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' steps: - name: tag-pre-condition @@ -535,17 +536,18 @@ steps: image: mcr.microsoft.com/playwright:v1.18.1-focal commands: - curl -sL https://go.dev/dl/go1.17.6.linux-amd64.tar.gz -o go1.17.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz - - groupadd --gid 1001 gitea - - useradd -m --gid 1001 --uid 1001 gitea + - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - ./build/test-env-prepare.sh - - su gitea GOPROXY=$GOPROXY GOSUMDB=$GOSUMDB TAGS=$TAGS NO_DEPS_PLAYWRIGHT=$NO_DEPS_PLAYWRIGHT bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" + - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: GOPROXY: https://goproxy.cn GOSUMDB: sum.golang.org TAGS: bindata USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 - TEST_LOGGER: console,file + TEST_LOGGER: console,file # Debug + TEST_PGSQL_SCHEMA: '' + NPX_FLAGS: '--yes' --- kind: pipeline diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh index 2dd56527712c1..a1482196049a0 100755 --- a/tools/e2e/run_e2e.sh +++ b/tools/e2e/run_e2e.sh @@ -4,6 +4,7 @@ set -euo pipefail [[ -z "${GITEA_CONF}" ]] && GiteaConfig='' || GiteaConfig="-C . -c ${GITEA_CONF}" ./${GITEA_EXECUTABLE:-gitea} ${GiteaConfig} --quiet web & +sleep 30 npx playwright test ${E2E_TESTS:-""} trap 'kill $(jobs -p)' EXIT From 3017e5523cf3c7c5fe43cdbc4c84d5230ee636c3 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 15:15:57 -0400 Subject: [PATCH 11/46] use standard gitea env variables --- .drone.yml | 2 +- Makefile | 14 +++++++------- package-lock.json | 6 +++--- tools/e2e/run_e2e.sh | 18 +++++++++++++----- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.drone.yml b/.drone.yml index 3b5181c25128c..c9b7eaf28c91e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -533,7 +533,7 @@ steps: # TODO: We should probably build all dependencies into a test image - name: test-e2e - image: mcr.microsoft.com/playwright:v1.18.1-focal + image: mcr.microsoft.com/playwright:v1.19.1-focal commands: - curl -sL https://go.dev/dl/go1.17.6.linux-amd64.tar.gz -o go1.17.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea diff --git a/Makefile b/Makefile index fb16b80941b9f..a87dd7142a276 100644 --- a/Makefile +++ b/Makefile @@ -532,37 +532,37 @@ test-e2e-sqlite: build generate-ini-sqlite test-e2e-sqlite\#%: TAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite\#%: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8 test-e2e-mysql8: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mysql8.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/pgsql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql test-e2e-mssql: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mssql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/package-lock.json b/package-lock.json index c2205ebbd2a64..efa05250082be 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20198,9 +20198,9 @@ "optional": true }, "pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", + "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, "pixelmatch": { diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh index a1482196049a0..8df07cb17d004 100755 --- a/tools/e2e/run_e2e.sh +++ b/tools/e2e/run_e2e.sh @@ -1,10 +1,18 @@ #!/bin/bash set -euo pipefail -[[ -z "${GITEA_CONF}" ]] && GiteaConfig='' || GiteaConfig="-C . -c ${GITEA_CONF}" +# Kill any processes on exit +trap 'kill $(jobs -p)' EXIT -./${GITEA_EXECUTABLE:-gitea} ${GiteaConfig} --quiet web & -sleep 30 -npx playwright test ${E2E_TESTS:-""} +GiteaFlags=() -trap 'kill $(jobs -p)' EXIT +[[ -v GITEA_CUSTOM ]] && GiteaFlags+=(-C ${GITEA_CUSTOM}) +[[ -v GITEA_CONF ]] && GiteaFlags+=(-c ${GITEA_CONF}) + +./${GITEA_EXECUTABLE:-gitea} ${GiteaFlags[@]} --quiet web & + +# Wait up to 30s for server to start +timeout 30 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${GITEA_URL:-http://localhost:3000})" != "200" ]]; do sleep 2; done' || \ + (echo -e "\033[0;31mTimed out testing server up: ${GITEA_URL:-http://localhost:3000}\033[0m"; false) + +npx playwright test ${E2E_TESTS:-""} From d557713467327f70f63f51e3d6e709ed0ee6d17e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 17:06:51 -0400 Subject: [PATCH 12/46] Update playwright --- .drone.yml | 7 +- Makefile | 5 - package-lock.json | 1826 +-------------------------- package.json | 2 +- tools/e2e/tests/example.test.e2e.js | 1 + 5 files changed, 67 insertions(+), 1774 deletions(-) diff --git a/.drone.yml b/.drone.yml index c9b7eaf28c91e..f3a7d2b77588d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -520,7 +520,7 @@ services: pull: default image: postgres:10 environment: - POSTGRES_DB: testgitea + POSTGRES_DB: testgitea-e2e POSTGRES_PASSWORD: postgres POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' @@ -533,9 +533,9 @@ steps: # TODO: We should probably build all dependencies into a test image - name: test-e2e - image: mcr.microsoft.com/playwright:v1.19.1-focal + image: mcr.microsoft.com/playwright:v1.22.2-focal commands: - - curl -sL https://go.dev/dl/go1.17.6.linux-amd64.tar.gz -o go1.17.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz + - curl -sL https://go.dev/dl/go1.18.3.linux-amd64.tar.gz -o go1.18.3.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" @@ -547,6 +547,7 @@ steps: NO_DEPS_PLAYWRIGHT: 1 TEST_LOGGER: console,file # Debug TEST_PGSQL_SCHEMA: '' + TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' --- diff --git a/Makefile b/Makefile index a87dd7142a276..9a1ac486ae04a 100644 --- a/Makefile +++ b/Makefile @@ -132,15 +132,10 @@ ifeq ($(filter $(TAGS_SPLIT),bindata),bindata) GO_SOURCES += $(BINDATA_DEST) endif -<<<<<<< HEAD -======= ifneq ($(NO_DEPS_PLAYWRIGHT),1) PLAYWRIGHT_FLAGS += --with-deps endif -#To update swagger use: GO111MODULE=on go get -u github.com/go-swagger/go-swagger/cmd/swagger -SWAGGER := $(GO) run github.com/go-swagger/go-swagger/cmd/swagger ->>>>>>> d2c9f5bba (Simplify Makefile) SWAGGER_SPEC := templates/swagger/v1_json.tmpl SWAGGER_SPEC_S_TMPL := s|"basePath": *"/api/v1"|"basePath": "{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|g SWAGGER_SPEC_S_JSON := s|"basePath": *"{{AppSubUrl \| JSEscape \| Safe}}/api/v1"|"basePath": "/api/v1"|g diff --git a/package-lock.json b/package-lock.json index efa05250082be..14db6e2f2f3cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@happy-dom/jest-environment": "4.0.1", - "@playwright/test": "1.18.1", + "@playwright/test": "1.22.2", "eslint": "8.15.0", "eslint-plugin-html": "6.2.0", "eslint-plugin-import": "2.26.0", @@ -150,18 +150,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", @@ -189,27 +177,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", @@ -244,18 +211,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", @@ -287,18 +242,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", @@ -308,22 +251,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-simple-access": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", @@ -336,18 +263,6 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", @@ -489,153 +404,6 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -672,30 +440,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -720,21 +464,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -807,21 +536,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", @@ -852,77 +566,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/runtime": { "version": "7.17.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.0.tgz", @@ -2276,98 +1919,23 @@ "fastq": "^1.6.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.18.1.tgz", - "integrity": "sha512-v6jAM2GpRvf4MUvSLkrAXg101XT9mLu2X2NbCnEoj7GHBXwavDlAJDMwh4Hn8oipDxB6MS6FTcr7opXsIMNwrA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/core": "^7.14.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/preset-typescript": "^7.14.5", - "babel-plugin-module-resolver": "^4.1.0", - "colors": "1.4.0", - "commander": "^8.2.0", - "debug": "^4.1.1", - "expect": "=27.2.5", - "jest-matcher-utils": "=27.2.5", - "jpeg-js": "^0.4.2", - "json5": "^2.2.0", - "mime": "^2.4.6", - "minimatch": "^3.0.3", - "ms": "^2.1.2", - "open": "^8.3.0", - "pirates": "^4.0.1", - "pixelmatch": "^5.2.1", - "playwright-core": "=1.18.1", - "pngjs": "^5.0.0", - "rimraf": "^3.0.2", - "source-map-support": "^0.4.18", - "stack-utils": "^2.0.3", - "yazl": "^2.5.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@playwright/test/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/@playwright/test/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@playwright/test/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/@playwright/test/node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "node_modules/@playwright/test": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.22.2.tgz", + "integrity": "sha512-cCl96BEBGPtptFz7C2FOSN3PrTnJ3rPpENe+gYCMx4GNNDlN4tmo2D89y13feGKTMMAIVrXfSQ/UmaQKLy1XLA==", "dev": true, "dependencies": { - "source-map": "^0.5.6" + "@types/node": "*", + "playwright-core": "1.22.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" } }, "node_modules/@primer/octicons": { @@ -2619,16 +2187,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -2898,18 +2456,6 @@ "webpack": ">=5" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3141,15 +2687,6 @@ "@babel/core": "^7.8.0" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -3181,22 +2718,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", - "dev": true, - "dependencies": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -3311,15 +2832,6 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3586,15 +3098,6 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4560,15 +4063,6 @@ "node": ">=0.10.0" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -4765,15 +4259,6 @@ "node": ">= 4" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", @@ -5678,70 +5163,6 @@ "node": ">= 0.8.0" } }, - "node_modules/expect": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", - "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-regex-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -5806,15 +5227,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5838,28 +5250,6 @@ "node": ">=8" } }, - "node_modules/find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "dev": true, - "dependencies": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-babel-config/node_modules/json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -6330,19 +5720,6 @@ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", "dev": true }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6505,12 +5882,6 @@ "node": ">= 0.10" } }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -6595,21 +5966,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6791,18 +6147,6 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -7860,21 +7204,6 @@ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/jest-matcher-utils": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", - "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.2.5", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-message-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", @@ -7951,15 +7280,6 @@ } } }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, "node_modules/jest-resolve": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", @@ -8863,12 +8183,6 @@ "node": ">=10" } }, - "node_modules/jpeg-js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", - "dev": true - }, "node_modules/jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -9756,23 +9070,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -9914,12 +9211,6 @@ "node": ">=8" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -9954,27 +9245,6 @@ "node": ">= 6" } }, - "node_modules/pixelmatch": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", - "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", - "dev": true, - "dependencies": { - "pngjs": "^6.0.0" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "dev": true, - "engines": { - "node": ">=12.13.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -9997,101 +9267,22 @@ "engines": { "node": ">=8" } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up/node_modules/p-limit": { + "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -10102,76 +9293,43 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-up/node_modules/p-try": { + "node_modules/pkg-dir/node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, "engines": { "node": ">=6" } }, - "node_modules/playwright-core": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz", - "integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==", - "dev": true, - "dependencies": { - "commander": "^8.2.0", - "debug": "^4.1.1", - "extract-zip": "^2.0.1", - "https-proxy-agent": "^5.0.0", - "jpeg-js": "^0.4.2", - "mime": "^2.4.6", - "pngjs": "^5.0.0", - "progress": "^2.0.3", - "proper-lockfile": "^4.1.1", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "socks-proxy-agent": "^6.1.0", - "stack-utils": "^2.0.3", - "ws": "^7.4.6", - "yauzl": "^2.10.0", - "yazl": "^2.5.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/playwright-core/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "engines": { - "node": ">= 12" + "node": ">=8" } }, - "node_modules/playwright-core/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "node_modules/playwright-core": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.2.tgz", + "integrity": "sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q==", "dev": true, "bin": { - "mime": "cli.js" + "playwright": "cli.js" }, "engines": { - "node": ">=4.0.0" + "node": ">=14" } }, "node_modules/pluralize": { @@ -10183,15 +9341,6 @@ "node": ">=4" } }, - "node_modules/pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -10404,15 +9553,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/promise": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", @@ -10435,23 +9575,6 @@ "node": ">= 6" } }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -10463,16 +9586,6 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -10740,12 +9853,6 @@ "node": ">=0.10.0" } }, - "node_modules/reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "dev": true - }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -10799,15 +9906,6 @@ "node": ">=10" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -11041,44 +10139,6 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, "node_modules/sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", @@ -12500,27 +11560,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16" } }, - "node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -12588,25 +11627,6 @@ "engines": { "node": ">=12" } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3" - } } }, "dependencies": { @@ -12676,15 +11696,6 @@ "jsesc": "^2.5.1" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, "@babel/helper-compilation-targets": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", @@ -12705,21 +11716,6 @@ } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz", - "integrity": "sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.17.9", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - } - }, "@babel/helper-environment-visitor": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz", @@ -12745,15 +11741,6 @@ "@babel/types": "^7.16.7" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", - "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", - "dev": true, - "requires": { - "@babel/types": "^7.17.0" - } - }, "@babel/helper-module-imports": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", @@ -12779,34 +11766,12 @@ "@babel/types": "^7.18.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, "@babel/helper-plugin-utils": { "version": "7.17.12", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==", "dev": true }, - "@babel/helper-replace-supers": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz", - "integrity": "sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.2", - "@babel/helper-member-expression-to-functions": "^7.17.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.18.2", - "@babel/types": "^7.18.2" - } - }, "@babel/helper-simple-access": { "version": "7.18.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz", @@ -12816,15 +11781,6 @@ "@babel/types": "^7.18.2" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.0" - } - }, "@babel/helper-split-export-declaration": { "version": "7.16.7", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", @@ -12932,99 +11888,6 @@ "integrity": "sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==", "dev": true }, - "@babel/plugin-proposal-class-properties": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.17.12.tgz", - "integrity": "sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.17.12.tgz", - "integrity": "sha512-j7Ye5EWdwoXOpRmo5QmRyHPsDIe6+u70ZYZrd7uz+ebPYFKfRcLcNu3Ro0vOlJ5zuv8rU7xa+GttNiRzX56snQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.17.12.tgz", - "integrity": "sha512-EqFo2s1Z5yy+JeJu7SFfbIUtToJTVlC61/C7WLKDntSw4Sz6JNAIfL7zQ74VvirxpjB5kz/kIx0gCcb+5OEo2Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.17.12.tgz", - "integrity": "sha512-ws/g3FSGVzv+VH86+QvgtuJL/kR67xaEIF2x0iPqdDfYW6ra6JF3lKVBkWynRLcNtIC1oCTfDRVxmm2mKzy+ag==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.17.12.tgz", - "integrity": "sha512-7wigcOs/Z4YWlK7xxjkvaIw84vGhDv/P1dFGQap0nHkc8gFKY/r+hXc8Qzf5k1gY7CvGIcHqAnOagVKJJ1wVOQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.17.12.tgz", - "integrity": "sha512-SllXoxo19HmxhDWm3luPz+cPhtoTSKLJE9PXshsfrOzBqs60QP0r8OaJItrPhAj0d7mZMnNF0Y1UUggCDgMz1A==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.17.12.tgz", - "integrity": "sha512-/6BtVi57CJfrtDNKfK5b66ydK2J5pXUKBKSPD2G1whamMuEnZWgoOIfO8Vf9F/DoD4izBLD/Au4NMQfruzzykg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.17.12", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", @@ -13052,24 +11915,6 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, "@babel/plugin-syntax-import-meta": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", @@ -13088,15 +11933,6 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", - "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, "@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", @@ -13148,81 +11984,25 @@ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", - "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.17.12" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.2.tgz", - "integrity": "sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-simple-access": "^7.18.2", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.17.12.tgz", - "integrity": "sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/types": "^7.17.12" + "@babel/helper-plugin-utils": "^7.8.0" } }, - "@babel/plugin-transform-typescript": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.4.tgz", - "integrity": "sha512-l4vHuSLUajptpHNEOUDEGsnpl9pfRLsN1XUoDQDD/YBuXTM+v37SHGS+c6n4jdcZy96QtuUuSvZYMLSSsjH8Mw==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.0", - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/plugin-syntax-typescript": "^7.17.12" + "@babel/helper-plugin-utils": "^7.14.5" } }, - "@babel/preset-typescript": { + "@babel/plugin-syntax-typescript": { "version": "7.17.12", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.17.12.tgz", - "integrity": "sha512-S1ViF8W2QwAKUGJXxP9NAfNaqGDdEBJKpYkxHf5Yy2C4NPPzXGeR3Lhk7G8xJaaLcFTRfNjVbtbVtm8Gb0mqvg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.17.12.tgz", + "integrity": "sha512-TYY0SXFiO31YXtNg3HtFwNJHjLsAyIIhAhNWkQ5whPPS7HWUFlg9z0Ta4qAQNjQbP1wsSt/oKkmZ/4/WWdMUpw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.17.12", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.17.12" + "@babel/helper-plugin-utils": "^7.17.12" } }, "@babel/runtime": { @@ -14326,78 +13106,13 @@ } }, "@playwright/test": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.18.1.tgz", - "integrity": "sha512-v6jAM2GpRvf4MUvSLkrAXg101XT9mLu2X2NbCnEoj7GHBXwavDlAJDMwh4Hn8oipDxB6MS6FTcr7opXsIMNwrA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/core": "^7.14.8", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@babel/preset-typescript": "^7.14.5", - "babel-plugin-module-resolver": "^4.1.0", - "colors": "1.4.0", - "commander": "^8.2.0", - "debug": "^4.1.1", - "expect": "=27.2.5", - "jest-matcher-utils": "=27.2.5", - "jpeg-js": "^0.4.2", - "json5": "^2.2.0", - "mime": "^2.4.6", - "minimatch": "^3.0.3", - "ms": "^2.1.2", - "open": "^8.3.0", - "pirates": "^4.0.1", - "pixelmatch": "^5.2.1", - "playwright-core": "=1.18.1", - "pngjs": "^5.0.0", - "rimraf": "^3.0.2", - "source-map-support": "^0.4.18", - "stack-utils": "^2.0.3", - "yazl": "^2.5.1" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "requires": { - "source-map": "^0.5.6" - } - } + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.22.2.tgz", + "integrity": "sha512-cCl96BEBGPtptFz7C2FOSN3PrTnJ3rPpENe+gYCMx4GNNDlN4tmo2D89y13feGKTMMAIVrXfSQ/UmaQKLy1XLA==", + "dev": true, + "requires": { + "@types/node": "*", + "playwright-core": "1.22.2" } }, "@primer/octicons": { @@ -14646,16 +13361,6 @@ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", "dev": true }, - "@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "*" - } - }, "@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -14887,15 +13592,6 @@ "integrity": "sha512-Hx9EKnirCUfdh684y1yhx8QOFolpkIG2VRHHgNm8wFy1Cf7P3RGwS678hoN7Y1XvZRPpVXWa+6QnfL/2i0CMCA==", "requires": {} }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -15059,15 +13755,6 @@ "slash": "^3.0.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, "babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -15093,19 +13780,6 @@ "@types/babel__traverse": "^7.0.6" } }, - "babel-plugin-module-resolver": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.1.0.tgz", - "integrity": "sha512-MlX10UDheRr3lb3P0WcaIdtCSRlxdQsB1sBqL7W0raF070bGl1HQQq5K3T2vf2XAYie+ww+5AKC/WrkjRO2knA==", - "dev": true, - "requires": { - "find-babel-config": "^1.2.0", - "glob": "^7.1.6", - "pkg-up": "^3.1.0", - "reselect": "^4.0.0", - "resolve": "^1.13.1" - } - }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -15195,12 +13869,6 @@ "node-int64": "^0.4.0" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -15408,12 +14076,6 @@ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==" }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -16187,12 +14849,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -16343,15 +14999,6 @@ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, "enhanced-resolve": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz", @@ -16926,51 +15573,6 @@ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", "dev": true }, - "expect": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", - "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", - "dev": true, - "requires": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-regex-util": "^27.0.6" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "requires": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - } - } - }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -17031,15 +15633,6 @@ "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -17057,24 +15650,6 @@ "to-regex-range": "^5.0.1" } }, - "find-babel-config": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/find-babel-config/-/find-babel-config-1.2.0.tgz", - "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", - "dev": true, - "requires": { - "json5": "^0.5.1", - "path-exists": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", - "dev": true - } - } - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -17424,16 +15999,6 @@ } } }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -17543,12 +16108,6 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==" }, - "ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -17606,12 +16165,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -17727,15 +16280,6 @@ "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -18569,18 +17113,6 @@ } } }, - "jest-matcher-utils": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", - "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.2.5", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - } - }, "jest-message-util": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", @@ -18634,12 +17166,6 @@ "dev": true, "requires": {} }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, "jest-resolve": { "version": "28.1.1", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", @@ -19388,12 +17914,6 @@ "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==" }, - "jpeg-js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==", - "dev": true - }, "jquery": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", @@ -20062,17 +18582,6 @@ "mimic-fn": "^2.1.0" } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, "optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", @@ -20175,12 +18684,6 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -20203,23 +18706,6 @@ "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", "dev": true }, - "pixelmatch": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.3.0.tgz", - "integrity": "sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==", - "dev": true, - "requires": { - "pngjs": "^6.0.0" - }, - "dependencies": { - "pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "dev": true - } - } - }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -20273,97 +18759,11 @@ } } }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - } - } - }, "playwright-core": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.18.1.tgz", - "integrity": "sha512-NALGl8R1GHzGLlhUApmpmfh6M1rrrPcDTygWvhTbprxwGB9qd/j9DRwyn4HTQcUB6o0/VOpo46fH9ez3+D/Rog==", - "dev": true, - "requires": { - "commander": "^8.2.0", - "debug": "^4.1.1", - "extract-zip": "^2.0.1", - "https-proxy-agent": "^5.0.0", - "jpeg-js": "^0.4.2", - "mime": "^2.4.6", - "pngjs": "^5.0.0", - "progress": "^2.0.3", - "proper-lockfile": "^4.1.1", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "socks-proxy-agent": "^6.1.0", - "stack-utils": "^2.0.3", - "ws": "^7.4.6", - "yauzl": "^2.10.0", - "yazl": "^2.5.1" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true - } - } + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.22.2.tgz", + "integrity": "sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q==", + "dev": true }, "pluralize": { "version": "8.0.0", @@ -20371,12 +18771,6 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, - "pngjs": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", - "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", - "dev": true - }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", @@ -20509,12 +18903,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true - }, "promise": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", @@ -20534,23 +18922,6 @@ "sisteransi": "^1.0.5" } }, - "proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -20562,16 +18933,6 @@ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -20760,12 +19121,6 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, - "reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==", - "dev": true - }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", @@ -20803,12 +19158,6 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true - }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -20979,33 +19328,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true - }, - "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - } - }, "sortablejs": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.0.tgz", @@ -22103,13 +20425,6 @@ "signal-exit": "^3.0.7" } }, - "ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "requires": {} - }, "xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -22161,25 +20476,6 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3" - } } } } diff --git a/package.json b/package.json index b9450bf806e27..ad7d1196a96aa 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ }, "devDependencies": { "@happy-dom/jest-environment": "4.0.1", - "@playwright/test": "1.18.1", + "@playwright/test": "1.22.2", "eslint": "8.15.0", "eslint-plugin-html": "6.2.0", "eslint-plugin-import": "2.26.0", diff --git a/tools/e2e/tests/example.test.e2e.js b/tools/e2e/tests/example.test.e2e.js index c4c2b7424be1c..056e8d9ed69ee 100644 --- a/tools/e2e/tests/example.test.e2e.js +++ b/tools/e2e/tests/example.test.e2e.js @@ -6,4 +6,5 @@ test('Load Homepage', async ({page}) => { await expect(response.status()).toBe(200); // Status OK await expect(page).toHaveTitle(/^Gitea: Git with a cup of tea\s*$/); await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); + await page.screenshot({ path: 'screenshot.png', fullPage: true}); }); From d19c959439bf051145a0a702afef39b5ec052c6f Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 20:27:04 -0400 Subject: [PATCH 13/46] update drone --- .drone.yml | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index f3a7d2b77588d..aff4c8ab3e802 100644 --- a/.drone.yml +++ b/.drone.yml @@ -515,6 +515,10 @@ trigger: event: - pull_request +volumes: + - name: deps + temp: {} + services: - name: pgsql pull: default @@ -525,11 +529,20 @@ services: POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' steps: - - name: tag-pre-condition + - name: deps-frontend + image: node:16 pull: always - image: drone/git commands: - - git update-ref refs/heads/tag_test ${DRONE_COMMIT_SHA} + - make deps-frontend + + - name: deps-backend + image: golang:1.18 + pull: always + commands: + - make deps-backend + volumes: + - name: deps + path: /go # TODO: We should probably build all dependencies into a test image - name: test-e2e @@ -537,10 +550,12 @@ steps: commands: - curl -sL https://go.dev/dl/go1.18.3.linux-amd64.tar.gz -o go1.18.3.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea + - apt-get update + - apt-get install build-essential --yes - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: - GOPROXY: https://goproxy.cn + GOPROXY: https://goproxy.io GOSUMDB: sum.golang.org TAGS: bindata USE_REPO_TEST_DIR: 1 @@ -549,6 +564,10 @@ steps: TEST_PGSQL_SCHEMA: '' TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' + depends_on: [deps-backend, deps-frontend] + volumes: + - name: deps + path: /go --- kind: pipeline From ba5734459e27022b4de83ce0a5b339ce07c0979e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 20:45:58 -0400 Subject: [PATCH 14/46] Move empty env var to commands --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index aff4c8ab3e802..1b6c4aaac57bd 100644 --- a/.drone.yml +++ b/.drone.yml @@ -552,6 +552,7 @@ steps: - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - apt-get update - apt-get install build-essential --yes + - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: @@ -561,7 +562,6 @@ steps: USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 TEST_LOGGER: console,file # Debug - TEST_PGSQL_SCHEMA: '' TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' depends_on: [deps-backend, deps-frontend] From 5ebadc588f13c8c3b37dbbf5ac403383112c8ab2 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 22 Jun 2022 23:18:48 -0400 Subject: [PATCH 15/46] Cleanup --- .gitignore | 4 +++- playwright.config.js | 2 +- tools/e2e/run_e2e.sh | 6 +++--- tools/e2e/tests/example.test.e2e.js | 20 +++++++++++++++++--- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 1ea9609f23d95..cbd8643f3e4bf 100644 --- a/.gitignore +++ b/.gitignore @@ -119,4 +119,6 @@ prime/ # Manpage /man test-results/ -playwright-report/ + +# E2E +tools/e2e/reports/ diff --git a/playwright.config.js b/playwright.config.js index e45cdf3bf8476..8190b5bfe9f9c 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -33,7 +33,7 @@ const config = { // workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: process.env.CI ? 'dot' : 'html', + reporter: process.env.CI ? 'dot' : [['html', {outputFolder: 'tools/e2e/reports/', open: 'never'}]], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh index 8df07cb17d004..1872880470a90 100755 --- a/tools/e2e/run_e2e.sh +++ b/tools/e2e/run_e2e.sh @@ -6,10 +6,10 @@ trap 'kill $(jobs -p)' EXIT GiteaFlags=() -[[ -v GITEA_CUSTOM ]] && GiteaFlags+=(-C ${GITEA_CUSTOM}) -[[ -v GITEA_CONF ]] && GiteaFlags+=(-c ${GITEA_CONF}) +[[ -v GITEA_CUSTOM ]] && GiteaFlags+=(-C "${GITEA_CUSTOM}") +[[ -v GITEA_CONF ]] && GiteaFlags+=(-c "${GITEA_CONF}") -./${GITEA_EXECUTABLE:-gitea} ${GiteaFlags[@]} --quiet web & +./"${GITEA_EXECUTABLE:-gitea}" "${GiteaFlags[@]}" --quiet web & # Wait up to 30s for server to start timeout 30 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${GITEA_URL:-http://localhost:3000})" != "200" ]]; do sleep 2; done' || \ diff --git a/tools/e2e/tests/example.test.e2e.js b/tools/e2e/tests/example.test.e2e.js index 056e8d9ed69ee..4638f11022e41 100644 --- a/tools/e2e/tests/example.test.e2e.js +++ b/tools/e2e/tests/example.test.e2e.js @@ -1,10 +1,24 @@ // @ts-check import {test, expect} from '@playwright/test'; -test('Load Homepage', async ({page}) => { +test('Load Homepage', async ({page}, workerInfo) => { const response = await page.goto('/'); - await expect(response.status()).toBe(200); // Status OK + await expect(response?.status()).toBe(200); // Status OK await expect(page).toHaveTitle(/^Gitea: Git with a cup of tea\s*$/); await expect(page.locator('.logo')).toHaveAttribute('src', '/assets/img/logo.svg'); - await page.screenshot({ path: 'screenshot.png', fullPage: true}); }); + +test('Test Register Form', async ({page}, workerInfo) => { + const response = await page.goto('/user/sign_up'); + await expect(response?.status()).toBe(200); // Status OK + await page.type('input[name=user_name]', `test-${workerInfo.workerIndex}`); + await page.type('input[name=email]', `test-${workerInfo.workerIndex}@test.com`); + await page.type('input[name=password]', 'test123'); + await page.type('input[name=retype]', 'test123'); + await page.click('form button.ui.green.button:visible'); + // Make sure we routed to the home page. Else login failed. + await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); + // Uncomment to see visual testing + //await expect(page).toHaveScreenshot({ timeout: 20000, mask: [page.locator('footer div.ui.left')] }); + //await page.screenshot({ path: `tools/e2e/screenshots/${workerInfo.title}-${workerInfo.project.name}.png` }); +}); \ No newline at end of file From a099a57c295f82cf5ce85b74707aa1ca44d3c5ce Mon Sep 17 00:00:00 2001 From: Kyle D Date: Thu, 23 Jun 2022 12:49:28 -0400 Subject: [PATCH 16/46] Move integrations to subfolder --- .gitignore | 30 ++--- Makefile | 121 +++++++++--------- build/code-batch-process.go | 6 +- contrib/pr/checkout.go | 2 +- .../doc/developers/hacking-on-gitea.en-us.md | 2 +- models/migrations/migrations_test.go | 4 +- models/migrations/testlogger_test.go | 2 +- models/unittest/testdb.go | 4 +- modules/markup/html_test.go | 2 +- modules/markup/markdown/markdown_test.go | 2 +- .../private_repo_on_limited_org.git/HEAD | 0 .../private_repo_on_limited_org.git/config | 0 .../description | 0 .../info/exclude | 0 .../74/8bf557dfc9c6457998b5118a6c8b2129f56c30 | Bin .../a5/46f86c7dd182592b96639045e176dde8df76ef | Bin .../b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 | Bin .../refs/heads/master | 0 .../public_repo_on_limited_org.git/HEAD | 0 .../public_repo_on_limited_org.git/config | 0 .../description | 0 .../info/exclude | 0 .../21/2f14c8b713de38bd0b3fb23bd288369b01668a | Bin .../90/e402c3937a4639725fcc59ca1f529e7dc8506f | Bin .../ed/d9c1000cd1444efd63e153e3554c8d5656bf65 | Bin .../refs/heads/master | 0 .../migration/lfs-test.git/HEAD | 0 .../migration/lfs-test.git/config | 0 .../migration/lfs-test.git/description | 0 .../lfs-test.git/hooks/post-checkout | 0 .../migration/lfs-test.git/hooks/post-commit | 0 .../migration/lfs-test.git/hooks/post-merge | 0 .../migration/lfs-test.git/hooks/pre-push | 0 .../migration/lfs-test.git/index | Bin ...15326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 | 0 ...a92395be4d16f2f63116caf36c8ad35c60831ab041 | 0 .../54/6244003622c64b2fc3c2cd544d7a29882c8383 | Bin .../6a/6ccf5d874fec134ee712572cc03a0f2dd7afec | Bin .../a6/7134b8484c2abe9fa954e1fd83b39b271383ed | Bin .../b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 | Bin .../f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 | Bin .../migration/lfs-test.git/refs/heads/master | 0 .../repo_external_tracker.git/COMMITMESSAGE | 0 .../repo_external_tracker.git/COMMIT_EDITMSG | 0 .../org26/repo_external_tracker.git/HEAD | 0 .../org26/repo_external_tracker.git/config | 0 .../repo_external_tracker.git/config.backup | 0 .../repo_external_tracker.git/description | 0 .../org26/repo_external_tracker.git/index | Bin .../repo_external_tracker.git/info/exclude | 0 .../org26/repo_external_tracker.git/logs/HEAD | 0 .../logs/refs/heads/branch1 | 0 .../logs/refs/heads/master | 0 .../ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 | Bin .../c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb | Bin .../cd/aca8cf1d36e1e4e508a940f6e157e239beccfa | 0 .../refs/heads/branch1 | 0 .../refs/heads/master | 0 .../COMMITMESSAGE | 0 .../COMMIT_EDITMSG | 0 .../repo_external_tracker_alpha.git/HEAD | 0 .../repo_external_tracker_alpha.git/config | 0 .../config.backup | 0 .../description | 0 .../repo_external_tracker_alpha.git/index | Bin .../info/exclude | 0 .../repo_external_tracker_alpha.git/logs/HEAD | 0 .../logs/refs/heads/branch1 | 0 .../logs/refs/heads/master | 0 .../ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 | Bin .../c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb | Bin .../cd/aca8cf1d36e1e4e508a940f6e157e239beccfa | 0 .../refs/heads/branch1 | 0 .../refs/heads/master | 0 .../COMMITMESSAGE | 0 .../COMMIT_EDITMSG | 0 .../repo_external_tracker_numeric.git/HEAD | 0 .../repo_external_tracker_numeric.git/config | 0 .../config.backup | 0 .../description | 0 .../repo_external_tracker_numeric.git/index | Bin .../info/exclude | 0 .../logs/HEAD | 0 .../logs/refs/heads/branch1 | 0 .../logs/refs/heads/master | 0 .../ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 | Bin .../c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb | Bin .../cd/aca8cf1d36e1e4e508a940f6e157e239beccfa | 0 .../refs/heads/branch1 | 0 .../refs/heads/master | 0 .../private_repo_on_private_org.git/HEAD | 0 .../private_repo_on_private_org.git/config | 0 .../description | 0 .../info/exclude | 0 .../6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 | Bin .../7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 | Bin .../b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 | Bin .../refs/heads/master | 0 .../public_repo_on_private_org.git/HEAD | 0 .../public_repo_on_private_org.git/config | 0 .../description | 0 .../info/exclude | 0 .../04/f99c528b643b9175a4b156cdfc13aba6b43853 | Bin .../86/de16d8658f5c0a17ec6aa313871295d7072f78 | Bin .../bf/19fd4707acb403c4aca44f126ab69142ac59ce | Bin .../refs/heads/master | 0 .../user12/repo10.git/HEAD | 0 .../user12/repo10.git/config | 0 .../user12/repo10.git/description | 0 .../user12/repo10.git/hooks/post-receive | 0 .../repo10.git/hooks/post-receive.d/gitea | 0 .../user12/repo10.git/hooks/pre-receive | 0 .../repo10.git/hooks/pre-receive.d/gitea | 0 .../user12/repo10.git/hooks/update | 0 .../user12/repo10.git/hooks/update.d/gitea | 0 .../user12/repo10.git/info/exclude | 0 .../user12/repo10.git/info/refs | 0 .../2a/2f1d4670728a2e10049e345bd7a276468beab6 | Bin .../4b/4851ad51df6a7d9f25c979345979eaeb5b349f | Bin .../65/f1bf27bc3bf70f64657658635e66094edbcb4d | Bin .../user12/repo10.git/objects/info/packs | 0 .../repo10.git/refs/heads/DefaultBranch | 0 .../user12/repo10.git/refs/heads/develop | 0 .../user12/repo10.git/refs/heads/feature/1 | 0 .../user12/repo10.git/refs/heads/master | 0 .../user12/repo10.git/refs/tags/v1.1 | 0 .../user13/repo11.git/HEAD | 0 .../user13/repo11.git/config | 0 .../user13/repo11.git/description | 0 .../user13/repo11.git/hooks/post-receive | 0 .../repo11.git/hooks/post-receive.d/gitea | 0 .../user13/repo11.git/hooks/pre-receive | 0 .../repo11.git/hooks/pre-receive.d/gitea | 0 .../user13/repo11.git/hooks/update | 0 .../user13/repo11.git/hooks/update.d/gitea | 0 .../user13/repo11.git/info/exclude | 0 .../user13/repo11.git/info/refs | 0 .../0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 | Bin .../2a/2f1d4670728a2e10049e345bd7a276468beab6 | Bin .../4b/4851ad51df6a7d9f25c979345979eaeb5b349f | Bin .../65/f1bf27bc3bf70f64657658635e66094edbcb4d | Bin .../75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 | Bin .../ed/447543e0c85d628b91f7f466f4921908f4c5ea | Bin .../user13/repo11.git/objects/info/packs | 0 .../repo11.git/refs/heads/DefaultBranch | 0 .../user13/repo11.git/refs/heads/branch2 | 0 .../user13/repo11.git/refs/heads/develop | 0 .../user13/repo11.git/refs/heads/feature/1 | 0 .../user13/repo11.git/refs/heads/master | 0 .../user13/repo11.git/refs/tags/v1.1 | 0 .../user2/commits_search_test.git/HEAD | 0 .../user2/commits_search_test.git/config | 2 +- .../user2/commits_search_test.git/description | 0 .../commits_search_test.git/info/exclude | 0 .../0a/8499a22ad32a80beda9d75efe15f9f94582468 | 0 .../0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 | Bin .../3e/a192a6466793d4b7cd8641801ca0c6bec3979c | Bin .../3f/6594f108842b7c50772510e53ce113d3583c4a | Bin .../58/e97d1a24fb9e1599d8a467ec409430f3d3569e | Bin .../67/68c1fc1d9448422f05cc84267d94ee62085fe8 | Bin .../6e/8eabd9a7f8d6acd2a1219facfd37415564b144 | 0 .../85/f46d747a68adf79cc01e2c25ba6a56932d298d | Bin .../8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 | Bin .../95/fd0c4138480e4b3913e7cf71a90623fb926fe8 | Bin .../98/00fe78cabf4fe774fcf376f97fa2a0ed06987b | Bin .../9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a | Bin .../c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 | 0 .../c5/2ba74685f5c8c593efbbb38f62fe024110adef | Bin .../d6/ae8023a10ff446b6a4e7f441554834008e99c3 | Bin .../user2/commits_search_test.git/packed-refs | 0 .../commits_search_test.git/refs/heads/master | 0 .../user2/git_hooks_test.git/HEAD | 0 .../user2/git_hooks_test.git/config | 0 .../user2/git_hooks_test.git/description | 0 .../git_hooks_test.git/hooks/post-receive | 0 .../hooks/post-receive.d/gitea | 0 .../git_hooks_test.git/hooks/pre-receive | 0 .../hooks/pre-receive.d/gitea | 0 .../hooks/pre-receive.d/pre-receive | 0 .../user2/git_hooks_test.git/hooks/update | 0 .../git_hooks_test.git/hooks/update.d/gitea | 0 .../user2/git_hooks_test.git/info/exclude | 0 .../user2/git_hooks_test.git/info/refs | 0 .../2a/2f1d4670728a2e10049e345bd7a276468beab6 | Bin .../4b/4851ad51df6a7d9f25c979345979eaeb5b349f | Bin .../65/f1bf27bc3bf70f64657658635e66094edbcb4d | Bin .../git_hooks_test.git/objects/info/packs | 0 .../refs/heads/DefaultBranch | 0 .../git_hooks_test.git/refs/heads/develop | 0 .../git_hooks_test.git/refs/heads/feature/1 | 0 .../git_hooks_test.git/refs/heads/master | 0 .../user2/git_hooks_test.git/refs/tags/v1.1 | 0 .../user2/glob.git/HEAD | 0 .../user2/glob.git/config | 0 .../user2/glob.git/description | 0 .../user2/glob.git/info/exclude | 0 .../48/06cb9df135782b818c968c2fadbd2c150d23d6 | Bin .../59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 | Bin .../7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 | Bin .../8e/592e636d27ac144f92f7fe8c33631cbdea594d | Bin .../95/aff026f99a9ab76fbd01decb63dd3dbc03e498 | Bin .../ae/d1ffed24cc3cf9b80490795e893cae4bddd684 | Bin .../bf/d6a6583f9a9ac59bd726c1df26c64a89427ede | Bin .../c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a | 0 .../de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 | Bin .../ef/6b814b610d8e7717aa0f71fbe5842bcf814697 | 0 .../user2/glob.git/refs/heads/master | 0 .../user2/repo1.git/HEAD | 0 .../user2/repo1.git/config | 0 .../user2/repo1.git/description | 0 .../user2/repo1.git/hooks/post-receive | 0 .../repo1.git/hooks/post-receive.d/gitea | 0 .../user2/repo1.git/hooks/pre-receive | 0 .../user2/repo1.git/hooks/pre-receive.d/gitea | 0 .../user2/repo1.git/hooks/update | 0 .../user2/repo1.git/hooks/update.d/gitea | 0 .../user2/repo1.git/info/exclude | 0 .../user2/repo1.git/info/refs | 0 .../00/750edc07d6415dcc07ae0351e9397b0222b7ba | Bin .../2a/2f1d4670728a2e10049e345bd7a276468beab6 | Bin .../3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 | Bin .../4a/357436d925b5c974181ff12a994538ddc5a269 | Bin .../4b/4851ad51df6a7d9f25c979345979eaeb5b349f | Bin .../5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 | Bin .../5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd | Bin .../62/fb502a7172d4453f0322a2cc85bddffa57f07a | Bin .../65/f1bf27bc3bf70f64657658635e66094edbcb4d | Bin .../6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb | Bin .../7c/4df115542e05c700f297519e906fd63c9c9804 | Bin .../90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 | 0 .../94/922e1295c678267de1193b7b84ad8a086c27f9 | Bin .../98/5f0301dba5e7b34be866819cd15ad3d8f508ee | Bin .../a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a | Bin .../a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d | Bin .../b2/60587271671842af0b036e4fe643c9d45b7ddd | Bin .../d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 | Bin .../d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 | Bin .../dc/7a8ba127fee870dd683310ce660dfe59333a1b | Bin .../dd/59742c0f6672911f2b64cba5711ac00593ed32 | Bin .../user2/repo1.git/objects/info/packs | 0 .../user2/repo1.git/refs/heads/DefaultBranch | 0 .../user2/repo1.git/refs/heads/branch2 | 0 .../user2/repo1.git/refs/heads/develop | 0 .../user2/repo1.git/refs/heads/feature/1 | 0 .../user2/repo1.git/refs/heads/master | 0 .../user2/repo1.git/refs/heads/pr-to-update | 0 .../user2/repo1.git/refs/notes/commits | 0 .../user2/repo1.git/refs/pull/2/head | 0 .../user2/repo1.git/refs/pull/3/head | 0 .../user2/repo1.git/refs/pull/5/head | 0 .../user2/repo1.git/refs/tags/v1.1 | 0 .../user2/repo1.wiki.git/HEAD | 0 .../user2/repo1.wiki.git/config | 0 .../user2/repo1.wiki.git/description | 0 .../user2/repo1.wiki.git/info/exclude | 0 .../0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 | 0 .../0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 | Bin .../2c/54faec6c45d31c1abfaecdab471eac6633738a | Bin .../32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 | Bin .../42/3313fbd38093bb10d0c8387db9105409c6f196 | Bin .../71/911bf48766c7181518c1070911019fbb00b1fc | 0 .../72/fc6251cc648e914c10009d31431fa2e38b9a20 | Bin .../74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e | Bin .../7c/d7c8fa852973c72c66eb120a6677c54a8697f7 | Bin .../89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c | Bin .../c1/0d10b7e655b3dab1f53176db57c8219a5488d6 | 0 .../c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 | Bin .../e5/3d079e581fbfdea1075a54d5b621eab0090e52 | Bin .../ea/82fc8777a24b07c26b3a4bf4e2742c03733eab | Bin .../f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 | Bin .../user2/repo1.wiki.git/refs/heads/master | 0 .../user2/repo15.git/HEAD | 0 .../user2/repo15.git/config | 0 .../user2/repo15.git/description | 0 .../user2/repo15.git/hooks/post-receive | 0 .../repo15.git/hooks/post-receive.d/gitea | 0 .../user2/repo15.git/hooks/pre-receive | 0 .../repo15.git/hooks/pre-receive.d/gitea | 0 .../user2/repo15.git/hooks/update | 0 .../user2/repo15.git/hooks/update.d/gitea | 0 .../user2/repo15.git/info/exclude | 0 .../user2/repo16.git/HEAD | 0 .../user2/repo16.git/config | 0 .../user2/repo16.git/description | 0 .../user2/repo16.git/info/exclude | 0 .../0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 | Bin .../24/f83a471f77579fea57bac7255d6e64e70fce1c | Bin .../27/566bd5738fc8b4e3fef3c5e72cce608537bd95 | Bin .../3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f | 0 .../45/8121ce9a6b855c9733bae62093caf3f39685de | Bin .../50/99b81332712fe655e34e8dd63574f503f61811 | 0 .../69/554a64c1e6030f051e5c3f94bfbd773cd6a324 | Bin .../a4/3476a501516e065c5a82f05fd58fd319598bc1 | Bin .../e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac | Bin .../f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 | Bin .../f9/0451c72ef61a7645293d17b47be7a8e983da57 | Bin .../user2/repo16.git/refs/heads/good-sign | 0 .../refs/heads/good-sign-not-yet-validated | 0 .../user2/repo16.git/refs/heads/master | 0 .../user2/repo16.git/refs/heads/not-signed | 0 .../user2/repo2.git/HEAD | 0 .../user2/repo2.git/config | 0 .../user2/repo2.git/description | 0 .../user2/repo2.git/info/exclude | 0 .../user2/repo2.git/info/refs | 0 .../0a/7d8b41ae9763e9a1743917396839d1791d49d0 | Bin .../0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 | 0 .../10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 | 0 .../1c/887eaa8d81fa86da7695d8f635cf17813eb422 | 0 .../26/f842bcad37fa40a1bb34cbb5ee219ee35d863d | Bin .../32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 | Bin .../36/fff01c8c9f722d49d53186abd27b5be8d85338 | Bin .../42/3313fbd38093bb10d0c8387db9105409c6f196 | Bin .../71/911bf48766c7181518c1070911019fbb00b1fc | 0 .../72/fc6251cc648e914c10009d31431fa2e38b9a20 | Bin .../74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e | Bin .../7c/d7c8fa852973c72c66eb120a6677c54a8697f7 | Bin .../ba/1aed4e2ea2443d76cec241b96be4ec990852ec | Bin .../c1/0d10b7e655b3dab1f53176db57c8219a5488d6 | 0 .../c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 | Bin .../f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 | Bin .../user2/repo2.git/objects/info/commit-graph | Bin .../user2/repo2.git/objects/info/packs | 0 ...d943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap | Bin ...f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx | Bin ...7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack | Bin .../user2/repo2.git/packed-refs | 0 .../user2/repo2.git/refs/heads/master | 0 .../user2/repo20.git/HEAD | 0 .../user2/repo20.git/config | 0 .../user2/repo20.git/description | 0 .../user2/repo20.git/hooks/post-receive | 0 .../repo20.git/hooks/post-receive.d/gitea | 0 .../user2/repo20.git/hooks/pre-receive | 0 .../repo20.git/hooks/pre-receive.d/gitea | 0 .../user2/repo20.git/hooks/update | 0 .../user2/repo20.git/hooks/update.d/gitea | 0 .../user2/repo20.git/info/exclude | 0 .../user2/repo20.git/info/refs | 0 .../02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 | Bin .../05/81d7edf45206787ff93956ea892e8a2ae77604 | Bin .../1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 | Bin .../29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 | Bin .../2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 | Bin .../41/4a282859758ba7b159bfbd9c2b193eb8f135ee | Bin .../80/8038d2f71b0ab020991439cffd24309c7bc530 | Bin .../83/70977f63979e140b6b58992b1fdb4098b24cd9 | Bin .../8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 | Bin .../ba/3aeafe10402c6b29535a58d91def7e43638d9d | Bin .../c5/0ac6b9e25abb8200bb377755367d7265c581cf | Bin .../ce/013625030ba8dba906f756967f9e9ca394464a | Bin .../db/89c972fc57862eae378f45b74aca228037d415 | Bin .../user2/repo20.git/objects/info/packs | 0 .../user2/repo20.git/refs/heads/master | 0 .../user2/utf8.git/HEAD | 0 .../user2/utf8.git/config | 0 .../user2/utf8.git/description | 0 .../user2/utf8.git/hooks/post-receive | 0 .../user2/utf8.git/hooks/post-receive.d/gitea | 0 .../user2/utf8.git/hooks/pre-receive | 0 .../user2/utf8.git/hooks/pre-receive.d/gitea | 0 .../user2/utf8.git/hooks/update | 0 .../user2/utf8.git/hooks/update.d/gitea | 0 .../user2/utf8.git/info/exclude | 0 .../user2/utf8.git/info/refs | 0 .../14/c42687126acae9d1ad41d7bdb528f811065a6a | Bin .../1d/5e00f305a7ca6a8a94e65456820a6d260adab8 | Bin .../28/d579e4920fbf4f66e71dab3e779d9fbf41422a | 0 .../3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b | Bin .../3a/a73c3499bff049a352b4e265575373e964b89a | Bin .../3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 | Bin .../4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a | Bin .../50/4d9fe743979d4e9785a25a363c7007293f0838 | Bin .../56/92bcf9f7c9eacb1ad68442161f2573877f96f4 | Bin .../59/e2c41e8f5140bb0182acebec17c8ad9831cc62 | Bin .../64/89894ad11093fdc49c0ed857d80682344a7264 | Bin .../6d/0c79ce3401c67d1ad522e61c47083a9fdee16c | Bin .../84/7c6d93c6860dd377651245711b7fbcd34a18d4 | Bin .../9b/9cc8f558d1c4f815592496fa24308ba2a9c824 | Bin .../a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad | Bin .../a9/a61830fbf4e84999d3b20cf178954366701fe5 | Bin .../c7/85b65bf16928b58567cb23669125c0ccd25a4f | Bin .../e9/63733b8a355cf860c465b4af7b236a6ef08783 | Bin .../eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 | 0 .../ee/9686cb562f492f64381bff7f298b2a1c67a141 | Bin .../f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 | Bin .../user2/utf8.git/objects/info/packs | 0 .../utf8.git/refs/heads/Gr\303\274\303\237en" | 0 .../utf8.git/refs/heads/Plus+Is+Not+Space | 0 .../user2/utf8.git/refs/heads/master | 0 ...7\320\222\320\265\321\202\320\272\320\260" | 0 .../refs/heads/\320\260/\320\261/\320\262" | 0 ...3\226\343\203\251\343\203\263\343\203\201" | 0 .../utf8.git/refs/tags/\320\201/\344\272\272" | 0 .../refs/tags/\320\242\321\215\320\263" | 0 .../refs/tags/\343\202\277\343\202\260" | 0 .../user27/repo49.git/HEAD | 0 .../user27/repo49.git/config | 0 .../user27/repo49.git/description | 0 .../user27/repo49.git/hooks/post-receive | 0 .../repo49.git/hooks/post-receive.d/gitea | 0 .../user27/repo49.git/hooks/pre-receive | 0 .../repo49.git/hooks/pre-receive.d/gitea | 0 .../user27/repo49.git/hooks/update | 0 .../user27/repo49.git/hooks/update.d/gitea | 0 .../user27/repo49.git/info/exclude | 0 .../user27/repo49.git/info/refs | 0 .../47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 | Bin .../4d/31f3a12656368a8d9180f431d40d0fc408be2d | Bin .../51/f84af231345367fd5d61ceb89efb3b6d757061 | Bin .../79/3aa682b06ae032641abf70c5dfeade28c07c52 | Bin .../aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 | Bin .../dd/392e939ea4936b2459219c9c9a1f25547ccaeb | Bin .../f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f | Bin .../user27/repo49.git/objects/info/packs | 0 .../user27/repo49.git/refs/heads/master | 0 .../user27/repo49.git/refs/heads/test/archive | 0 .../user27/template1.git/HEAD | 0 .../user27/template1.git/config | 0 .../user27/template1.git/description | 0 .../user27/template1.git/hooks/post-receive | 0 .../template1.git/hooks/post-receive.d/gitea | 0 .../user27/template1.git/hooks/pre-receive | 0 .../template1.git/hooks/pre-receive.d/gitea | 0 .../user27/template1.git/hooks/update | 0 .../user27/template1.git/hooks/update.d/gitea | 0 .../user27/template1.git/info/exclude | 0 .../user27/template1.git/info/refs | 0 .../47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 | Bin .../4d/31f3a12656368a8d9180f431d40d0fc408be2d | Bin .../51/f84af231345367fd5d61ceb89efb3b6d757061 | Bin .../79/3aa682b06ae032641abf70c5dfeade28c07c52 | Bin .../aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 | Bin .../dd/392e939ea4936b2459219c9c9a1f25547ccaeb | Bin .../f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f | Bin .../user27/template1.git/objects/info/packs | 0 .../user27/template1.git/refs/heads/master | 0 .../user3/repo3.git/HEAD | 0 .../user3/repo3.git/config | 0 .../user3/repo3.git/description | 0 .../user3/repo3.git/hooks/post-receive | 0 .../repo3.git/hooks/post-receive.d/gitea | 0 .../user3/repo3.git/hooks/pre-receive | 0 .../user3/repo3.git/hooks/pre-receive.d/gitea | 0 .../user3/repo3.git/hooks/update | 0 .../user3/repo3.git/hooks/update.d/gitea | 0 .../user3/repo3.git/info/exclude | 0 .../20/ade30d25e0ecaeec84e7f542a8456900858240 | Bin .../27/74debeea6dc742cc4971a92db0e08b95b60588 | Bin .../2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 | Bin .../2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f | Bin .../d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 | Bin .../d5/6a3073c1dbb7b15963110a049d50cdb5db99fc | Bin .../ec/f0db3c1ec806522de4b491fb9a3c7457398c61 | Bin .../ee/16d127df463aa491e08958120f2108b02468df | Bin .../user3/repo3.git/refs/heads/master | 0 .../user3/repo3.git/refs/heads/test_branch | 0 .../user30/empty.git/HEAD | 0 .../user30/empty.git/config | 0 .../user5/repo4.git/HEAD | 0 .../user5/repo4.git/config | 0 .../user5/repo4.git/description | 0 .../user5/repo4.git/info/exclude | 0 .../16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 | Bin .../c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f | Bin .../c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 | Bin .../user5/repo4.git/refs/heads/master | 0 .../integrations}/README.md | 0 .../integrations}/README_ZH.md | 0 .../integrations}/admin_user_test.go | 0 .../api_activitypub_person_test.go | 0 .../integrations}/api_admin_org_test.go | 0 .../integrations}/api_admin_test.go | 0 .../integrations}/api_branch_test.go | 0 .../integrations}/api_comment_test.go | 0 .../integrations}/api_fork_test.go | 0 .../integrations}/api_gpg_keys_test.go | 0 .../api_helper_for_declarative_test.go | 0 .../integrations}/api_httpsig_test.go | 0 .../integrations}/api_issue_label_test.go | 0 .../integrations}/api_issue_milestone_test.go | 0 .../integrations}/api_issue_reaction_test.go | 0 .../integrations}/api_issue_stopwatch_test.go | 0 .../api_issue_subscription_test.go | 0 .../integrations}/api_issue_test.go | 0 .../api_issue_tracked_time_test.go | 0 .../integrations}/api_keys_test.go | 0 .../integrations}/api_nodeinfo_test.go | 0 .../integrations}/api_notification_test.go | 0 .../integrations}/api_oauth2_apps_test.go | 0 .../integrations}/api_org_test.go | 0 .../api_packages_composer_test.go | 0 .../integrations}/api_packages_conan_test.go | 0 .../api_packages_container_test.go | 0 .../api_packages_generic_test.go | 0 .../integrations}/api_packages_helm_test.go | 0 .../integrations}/api_packages_maven_test.go | 0 .../integrations}/api_packages_npm_test.go | 0 .../integrations}/api_packages_nuget_test.go | 0 .../integrations}/api_packages_pypi_test.go | 0 .../api_packages_rubygems_test.go | 0 .../integrations}/api_packages_test.go | 0 .../integrations}/api_private_serv_test.go | 0 .../integrations}/api_pull_commits_test.go | 0 .../integrations}/api_pull_review_test.go | 0 .../integrations}/api_pull_test.go | 0 .../integrations}/api_releases_test.go | 0 .../integrations}/api_repo_archive_test.go | 0 .../api_repo_collaborator_test.go | 0 .../integrations}/api_repo_edit_test.go | 0 .../api_repo_file_create_test.go | 0 .../api_repo_file_delete_test.go | 0 .../integrations}/api_repo_file_get_test.go | 0 .../integrations}/api_repo_file_helpers.go | 0 .../api_repo_file_update_test.go | 0 .../api_repo_get_contents_list_test.go | 0 .../api_repo_get_contents_test.go | 0 .../integrations}/api_repo_git_blobs_test.go | 0 .../api_repo_git_commits_test.go | 0 .../integrations}/api_repo_git_hook_test.go | 0 .../integrations}/api_repo_git_notes_test.go | 0 .../integrations}/api_repo_git_ref_test.go | 0 .../integrations}/api_repo_git_tags_test.go | 0 .../integrations}/api_repo_git_trees_test.go | 0 .../integrations}/api_repo_languages_test.go | 0 .../integrations}/api_repo_lfs_locks_test.go | 0 .../api_repo_lfs_migrate_test.go | 0 .../integrations}/api_repo_lfs_test.go | 0 .../integrations}/api_repo_raw_test.go | 0 .../integrations}/api_repo_tags_test.go | 0 .../integrations}/api_repo_teams_test.go | 0 .../integrations}/api_repo_test.go | 0 .../integrations}/api_repo_topic_test.go | 0 .../integrations}/api_settings_test.go | 0 .../integrations}/api_team_test.go | 0 .../integrations}/api_team_user_test.go | 0 .../integrations}/api_token_test.go | 0 .../integrations}/api_user_email_test.go | 0 .../integrations}/api_user_heatmap_test.go | 0 .../integrations}/api_user_org_perm_test.go | 0 .../integrations}/api_user_orgs_test.go | 0 .../integrations}/api_user_search_test.go | 0 .../integrations}/api_wiki_test.go | 0 .../integrations}/attachment_test.go | 0 .../integrations}/auth_ldap_test.go | 0 .../integrations}/benchmarks_test.go | 0 .../integrations}/branches_test.go | 0 .../change_default_branch_test.go | 0 .../integrations}/cmd_keys_test.go | 0 .../integrations}/compare_test.go | 0 .../integrations}/cors_test.go | 0 .../integrations}/create_no_session_test.go | 0 .../integrations}/csrf_test.go | 0 .../integrations}/delete_user_test.go | 0 .../integrations}/download_test.go | 0 .../integrations}/dump_restore_test.go | 0 .../integrations}/editor_test.go | 0 .../integrations}/empty_repo_test.go | 0 .../integrations}/eventsource_test.go | 0 .../integrations}/explore_repos_test.go | 0 .../integrations}/git_clone_wiki_test.go | 0 .../git_helper_for_declarative_test.go | 0 .../integrations}/git_smart_http_test.go | 0 .../integrations}/git_test.go | 0 .../integrations}/goget_test.go | 0 .../integrations}/gpg_git_test.go | 4 +- .../integrations}/html_helper.go | 0 .../integrations}/integration_test.go | 4 +- .../integrations}/issue_test.go | 0 .../integrations}/lfs_getobject_test.go | 0 .../integrations}/lfs_local_endpoint_test.go | 0 .../integrations}/links_test.go | 0 .../integrations}/migrate_test.go | 0 .../migration-test/gitea-v1.6.4.mssql.sql.gz | Bin .../migration-test/gitea-v1.6.4.mysql.sql.gz | Bin .../gitea-v1.6.4.postgres.sql.gz | Bin .../gitea-v1.6.4.sqlite3.sql.gz | Bin .../migration-test/gitea-v1.7.0.mssql.sql.gz | Bin .../migration-test/gitea-v1.7.0.mysql.sql.gz | Bin .../gitea-v1.7.0.postgres.sql.gz | Bin .../gitea-v1.7.0.sqlite3.sql.gz | Bin .../migration-test/migration_test.go | 8 +- .../integrations}/mirror_pull_test.go | 0 .../integrations}/mirror_push_test.go | 0 .../integrations}/nonascii_branches_test.go | 0 .../integrations}/oauth_test.go | 0 .../integrations}/org_count_test.go | 0 .../integrations}/org_test.go | 0 .../integrations}/private-testing.key | 0 .../integrations}/privateactivity_test.go | 0 .../integrations}/pull_compare_test.go | 0 .../integrations}/pull_create_test.go | 0 .../integrations}/pull_merge_test.go | 0 .../integrations}/pull_review_test.go | 0 .../integrations}/pull_status_test.go | 0 .../integrations}/pull_update_test.go | 0 .../integrations}/release_test.go | 0 .../integrations}/rename_branch_test.go | 0 .../integrations}/repo_activity_test.go | 0 .../integrations}/repo_branch_test.go | 0 .../integrations}/repo_commits_search_test.go | 0 .../integrations}/repo_commits_test.go | 0 .../integrations}/repo_fork_test.go | 0 .../integrations}/repo_generate_test.go | 0 .../integrations}/repo_migrate_test.go | 0 .../integrations}/repo_search_test.go | 0 .../integrations}/repo_tag_test.go | 0 .../integrations}/repo_test.go | 0 .../integrations}/repo_topic_test.go | 0 .../integrations}/repo_watch_test.go | 0 .../integrations}/repofiles_delete_test.go | 0 .../integrations}/repofiles_update_test.go | 0 .../integrations}/setting_test.go | 0 .../integrations}/signin_test.go | 0 .../integrations}/signout_test.go | 0 .../integrations}/signup_test.go | 0 .../integrations}/ssh_key_test.go | 0 .../integrations}/testlogger.go | 2 +- .../integrations}/timetracking_test.go | 0 .../integrations}/user_avatar_test.go | 0 .../integrations}/user_test.go | 0 .../integrations}/version_test.go | 0 .../integrations}/view_test.go | 0 .../integrations}/webfinger_test.go | 0 .../integrations}/xss_test.go | 0 {integrations => tests}/mssql.ini.tmpl | 26 ++-- {integrations => tests}/mysql.ini.tmpl | 16 +-- {integrations => tests}/mysql8.ini.tmpl | 24 ++-- {integrations => tests}/pgsql.ini.tmpl | 26 ++-- {integrations => tests}/sqlite.ini.tmpl | 28 ++-- 630 files changed, 160 insertions(+), 155 deletions(-) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/74/8bf557dfc9c6457998b5118a6c8b2129f56c30 (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/a5/46f86c7dd182592b96639045e176dde8df76ef (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/21/2f14c8b713de38bd0b3fb23bd288369b01668a (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/90/e402c3937a4639725fcc59ca1f529e7dc8506f (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/ed/d9c1000cd1444efd63e153e3554c8d5656bf65 (100%) rename {integrations => tests}/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/hooks/post-checkout (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/hooks/post-commit (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/hooks/post-merge (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/hooks/pre-push (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/index (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/d6/f1/d6f175817f886ec6fbbc1515326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/fb/8f/fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab041 (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/objects/54/6244003622c64b2fc3c2cd544d7a29882c8383 (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/objects/6a/6ccf5d874fec134ee712572cc03a0f2dd7afec (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/objects/a6/7134b8484c2abe9fa954e1fd83b39b271383ed (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/objects/b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/objects/f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 (100%) rename {integrations => tests}/gitea-repositories-meta/migration/lfs-test.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/COMMITMESSAGE (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/COMMIT_EDITMSG (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/config.backup (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/index (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/logs/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMITMESSAGE (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMIT_EDITMSG (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config.backup (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/index (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMITMESSAGE (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMIT_EDITMSG (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config.backup (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/index (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/branch1 (100%) rename {integrations => tests}/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/04/f99c528b643b9175a4b156cdfc13aba6b43853 (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/86/de16d8658f5c0a17ec6aa313871295d7072f78 (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/bf/19fd4707acb403c4aca44f126ab69142ac59ce (100%) rename {integrations => tests}/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/refs/heads/DefaultBranch (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/refs/heads/develop (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/refs/heads/feature/1 (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user12/repo10.git/refs/tags/v1.1 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/ed/447543e0c85d628b91f7f466f4921908f4c5ea (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/heads/DefaultBranch (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/heads/branch2 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/heads/develop (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/heads/feature/1 (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user13/repo11.git/refs/tags/v1.1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/config (53%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/0a/8499a22ad32a80beda9d75efe15f9f94582468 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/3e/a192a6466793d4b7cd8641801ca0c6bec3979c (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/3f/6594f108842b7c50772510e53ce113d3583c4a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/58/e97d1a24fb9e1599d8a467ec409430f3d3569e (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/67/68c1fc1d9448422f05cc84267d94ee62085fe8 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/6e/8eabd9a7f8d6acd2a1219facfd37415564b144 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/85/f46d747a68adf79cc01e2c25ba6a56932d298d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/95/fd0c4138480e4b3913e7cf71a90623fb926fe8 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/98/00fe78cabf4fe774fcf376f97fa2a0ed06987b (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/c5/2ba74685f5c8c593efbbb38f62fe024110adef (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/objects/d6/ae8023a10ff446b6a4e7f441554834008e99c3 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/packed-refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/commits_search_test.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/DefaultBranch (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/develop (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/feature/1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/git_hooks_test.git/refs/tags/v1.1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/48/06cb9df135782b818c968c2fadbd2c150d23d6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/8e/592e636d27ac144f92f7fe8c33631cbdea594d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/95/aff026f99a9ab76fbd01decb63dd3dbc03e498 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/ae/d1ffed24cc3cf9b80490795e893cae4bddd684 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/bf/d6a6583f9a9ac59bd726c1df26c64a89427ede (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/objects/ef/6b814b610d8e7717aa0f71fbe5842bcf814697 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/glob.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/4a/357436d925b5c974181ff12a994538ddc5a269 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/62/fb502a7172d4453f0322a2cc85bddffa57f07a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/7c/4df115542e05c700f297519e906fd63c9c9804 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/94/922e1295c678267de1193b7b84ad8a086c27f9 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/98/5f0301dba5e7b34be866819cd15ad3d8f508ee (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/b2/60587271671842af0b036e4fe643c9d45b7ddd (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/dc/7a8ba127fee870dd683310ce660dfe59333a1b (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/dd/59742c0f6672911f2b64cba5711ac00593ed32 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/DefaultBranch (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/branch2 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/develop (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/feature/1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/heads/pr-to-update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/notes/commits (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/pull/2/head (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/pull/3/head (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/pull/5/head (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.git/refs/tags/v1.1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo15.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/24/f83a471f77579fea57bac7255d6e64e70fce1c (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/27/566bd5738fc8b4e3fef3c5e72cce608537bd95 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/45/8121ce9a6b855c9733bae62093caf3f39685de (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/50/99b81332712fe655e34e8dd63574f503f61811 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/69/554a64c1e6030f051e5c3f94bfbd773cd6a324 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/a4/3476a501516e065c5a82f05fd58fd319598bc1 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/objects/f9/0451c72ef61a7645293d17b47be7a8e983da57 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign-not-yet-validated (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo16.git/refs/heads/not-signed (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/0a/7d8b41ae9763e9a1743917396839d1791d49d0 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/1c/887eaa8d81fa86da7695d8f635cf17813eb422 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/26/f842bcad37fa40a1bb34cbb5ee219ee35d863d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/36/fff01c8c9f722d49d53186abd27b5be8d85338 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/ba/1aed4e2ea2443d76cec241b96be4ec990852ec (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/info/commit-graph (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/packed-refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo2.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/repo20.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/14/c42687126acae9d1ad41d7bdb528f811065a6a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/1d/5e00f305a7ca6a8a94e65456820a6d260adab8 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/28/d579e4920fbf4f66e71dab3e779d9fbf41422a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/3a/a73c3499bff049a352b4e265575373e964b89a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/50/4d9fe743979d4e9785a25a363c7007293f0838 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/56/92bcf9f7c9eacb1ad68442161f2573877f96f4 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/59/e2c41e8f5140bb0182acebec17c8ad9831cc62 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/64/89894ad11093fdc49c0ed857d80682344a7264 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/6d/0c79ce3401c67d1ad522e61c47083a9fdee16c (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/84/7c6d93c6860dd377651245711b7fbcd34a18d4 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/9b/9cc8f558d1c4f815592496fa24308ba2a9c824 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/a9/a61830fbf4e84999d3b20cf178954366701fe5 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/c7/85b65bf16928b58567cb23669125c0ccd25a4f (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/e9/63733b8a355cf860c465b4af7b236a6ef08783 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/ee/9686cb562f492f64381bff7f298b2a1c67a141 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/objects/info/packs (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" => "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/refs/heads/Plus+Is+Not+Space (100%) rename {integrations => tests}/gitea-repositories-meta/user2/utf8.git/refs/heads/master (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" => "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" => "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" => "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" => "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" => "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" (100%) rename "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" => "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user27/repo49.git/refs/heads/test/archive (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/info/refs (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/objects/info/packs (100%) rename {integrations => tests}/gitea-repositories-meta/user27/template1.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/post-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/post-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/update (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/hooks/update.d/gitea (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240 (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588 (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61 (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/objects/ee/16d127df463aa491e08958120f2108b02468df (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/refs/heads/master (100%) rename {integrations => tests}/gitea-repositories-meta/user3/repo3.git/refs/heads/test_branch (100%) rename {integrations => tests}/gitea-repositories-meta/user30/empty.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user30/empty.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/HEAD (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/config (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/description (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/info/exclude (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/objects/16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/objects/c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/objects/c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 (100%) rename {integrations => tests}/gitea-repositories-meta/user5/repo4.git/refs/heads/master (100%) rename {integrations => tests/integrations}/README.md (100%) rename {integrations => tests/integrations}/README_ZH.md (100%) rename {integrations => tests/integrations}/admin_user_test.go (100%) rename {integrations => tests/integrations}/api_activitypub_person_test.go (100%) rename {integrations => tests/integrations}/api_admin_org_test.go (100%) rename {integrations => tests/integrations}/api_admin_test.go (100%) rename {integrations => tests/integrations}/api_branch_test.go (100%) rename {integrations => tests/integrations}/api_comment_test.go (100%) rename {integrations => tests/integrations}/api_fork_test.go (100%) rename {integrations => tests/integrations}/api_gpg_keys_test.go (100%) rename {integrations => tests/integrations}/api_helper_for_declarative_test.go (100%) rename {integrations => tests/integrations}/api_httpsig_test.go (100%) rename {integrations => tests/integrations}/api_issue_label_test.go (100%) rename {integrations => tests/integrations}/api_issue_milestone_test.go (100%) rename {integrations => tests/integrations}/api_issue_reaction_test.go (100%) rename {integrations => tests/integrations}/api_issue_stopwatch_test.go (100%) rename {integrations => tests/integrations}/api_issue_subscription_test.go (100%) rename {integrations => tests/integrations}/api_issue_test.go (100%) rename {integrations => tests/integrations}/api_issue_tracked_time_test.go (100%) rename {integrations => tests/integrations}/api_keys_test.go (100%) rename {integrations => tests/integrations}/api_nodeinfo_test.go (100%) rename {integrations => tests/integrations}/api_notification_test.go (100%) rename {integrations => tests/integrations}/api_oauth2_apps_test.go (100%) rename {integrations => tests/integrations}/api_org_test.go (100%) rename {integrations => tests/integrations}/api_packages_composer_test.go (100%) rename {integrations => tests/integrations}/api_packages_conan_test.go (100%) rename {integrations => tests/integrations}/api_packages_container_test.go (100%) rename {integrations => tests/integrations}/api_packages_generic_test.go (100%) rename {integrations => tests/integrations}/api_packages_helm_test.go (100%) rename {integrations => tests/integrations}/api_packages_maven_test.go (100%) rename {integrations => tests/integrations}/api_packages_npm_test.go (100%) rename {integrations => tests/integrations}/api_packages_nuget_test.go (100%) rename {integrations => tests/integrations}/api_packages_pypi_test.go (100%) rename {integrations => tests/integrations}/api_packages_rubygems_test.go (100%) rename {integrations => tests/integrations}/api_packages_test.go (100%) rename {integrations => tests/integrations}/api_private_serv_test.go (100%) rename {integrations => tests/integrations}/api_pull_commits_test.go (100%) rename {integrations => tests/integrations}/api_pull_review_test.go (100%) rename {integrations => tests/integrations}/api_pull_test.go (100%) rename {integrations => tests/integrations}/api_releases_test.go (100%) rename {integrations => tests/integrations}/api_repo_archive_test.go (100%) rename {integrations => tests/integrations}/api_repo_collaborator_test.go (100%) rename {integrations => tests/integrations}/api_repo_edit_test.go (100%) rename {integrations => tests/integrations}/api_repo_file_create_test.go (100%) rename {integrations => tests/integrations}/api_repo_file_delete_test.go (100%) rename {integrations => tests/integrations}/api_repo_file_get_test.go (100%) rename {integrations => tests/integrations}/api_repo_file_helpers.go (100%) rename {integrations => tests/integrations}/api_repo_file_update_test.go (100%) rename {integrations => tests/integrations}/api_repo_get_contents_list_test.go (100%) rename {integrations => tests/integrations}/api_repo_get_contents_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_blobs_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_commits_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_hook_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_notes_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_ref_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_tags_test.go (100%) rename {integrations => tests/integrations}/api_repo_git_trees_test.go (100%) rename {integrations => tests/integrations}/api_repo_languages_test.go (100%) rename {integrations => tests/integrations}/api_repo_lfs_locks_test.go (100%) rename {integrations => tests/integrations}/api_repo_lfs_migrate_test.go (100%) rename {integrations => tests/integrations}/api_repo_lfs_test.go (100%) rename {integrations => tests/integrations}/api_repo_raw_test.go (100%) rename {integrations => tests/integrations}/api_repo_tags_test.go (100%) rename {integrations => tests/integrations}/api_repo_teams_test.go (100%) rename {integrations => tests/integrations}/api_repo_test.go (100%) rename {integrations => tests/integrations}/api_repo_topic_test.go (100%) rename {integrations => tests/integrations}/api_settings_test.go (100%) rename {integrations => tests/integrations}/api_team_test.go (100%) rename {integrations => tests/integrations}/api_team_user_test.go (100%) rename {integrations => tests/integrations}/api_token_test.go (100%) rename {integrations => tests/integrations}/api_user_email_test.go (100%) rename {integrations => tests/integrations}/api_user_heatmap_test.go (100%) rename {integrations => tests/integrations}/api_user_org_perm_test.go (100%) rename {integrations => tests/integrations}/api_user_orgs_test.go (100%) rename {integrations => tests/integrations}/api_user_search_test.go (100%) rename {integrations => tests/integrations}/api_wiki_test.go (100%) rename {integrations => tests/integrations}/attachment_test.go (100%) rename {integrations => tests/integrations}/auth_ldap_test.go (100%) rename {integrations => tests/integrations}/benchmarks_test.go (100%) rename {integrations => tests/integrations}/branches_test.go (100%) rename {integrations => tests/integrations}/change_default_branch_test.go (100%) rename {integrations => tests/integrations}/cmd_keys_test.go (100%) rename {integrations => tests/integrations}/compare_test.go (100%) rename {integrations => tests/integrations}/cors_test.go (100%) rename {integrations => tests/integrations}/create_no_session_test.go (100%) rename {integrations => tests/integrations}/csrf_test.go (100%) rename {integrations => tests/integrations}/delete_user_test.go (100%) rename {integrations => tests/integrations}/download_test.go (100%) rename {integrations => tests/integrations}/dump_restore_test.go (100%) rename {integrations => tests/integrations}/editor_test.go (100%) rename {integrations => tests/integrations}/empty_repo_test.go (100%) rename {integrations => tests/integrations}/eventsource_test.go (100%) rename {integrations => tests/integrations}/explore_repos_test.go (100%) rename {integrations => tests/integrations}/git_clone_wiki_test.go (100%) rename {integrations => tests/integrations}/git_helper_for_declarative_test.go (100%) rename {integrations => tests/integrations}/git_smart_http_test.go (100%) rename {integrations => tests/integrations}/git_test.go (100%) rename {integrations => tests/integrations}/goget_test.go (100%) rename {integrations => tests/integrations}/gpg_git_test.go (98%) rename {integrations => tests/integrations}/html_helper.go (100%) rename {integrations => tests/integrations}/integration_test.go (99%) rename {integrations => tests/integrations}/issue_test.go (100%) rename {integrations => tests/integrations}/lfs_getobject_test.go (100%) rename {integrations => tests/integrations}/lfs_local_endpoint_test.go (100%) rename {integrations => tests/integrations}/links_test.go (100%) rename {integrations => tests/integrations}/migrate_test.go (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.6.4.mssql.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.6.4.mysql.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.6.4.postgres.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.6.4.sqlite3.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.7.0.mssql.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.7.0.mysql.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.7.0.postgres.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/gitea-v1.7.0.sqlite3.sql.gz (100%) rename {integrations => tests/integrations}/migration-test/migration_test.go (97%) rename {integrations => tests/integrations}/mirror_pull_test.go (100%) rename {integrations => tests/integrations}/mirror_push_test.go (100%) rename {integrations => tests/integrations}/nonascii_branches_test.go (100%) rename {integrations => tests/integrations}/oauth_test.go (100%) rename {integrations => tests/integrations}/org_count_test.go (100%) rename {integrations => tests/integrations}/org_test.go (100%) rename {integrations => tests/integrations}/private-testing.key (100%) rename {integrations => tests/integrations}/privateactivity_test.go (100%) rename {integrations => tests/integrations}/pull_compare_test.go (100%) rename {integrations => tests/integrations}/pull_create_test.go (100%) rename {integrations => tests/integrations}/pull_merge_test.go (100%) rename {integrations => tests/integrations}/pull_review_test.go (100%) rename {integrations => tests/integrations}/pull_status_test.go (100%) rename {integrations => tests/integrations}/pull_update_test.go (100%) rename {integrations => tests/integrations}/release_test.go (100%) rename {integrations => tests/integrations}/rename_branch_test.go (100%) rename {integrations => tests/integrations}/repo_activity_test.go (100%) rename {integrations => tests/integrations}/repo_branch_test.go (100%) rename {integrations => tests/integrations}/repo_commits_search_test.go (100%) rename {integrations => tests/integrations}/repo_commits_test.go (100%) rename {integrations => tests/integrations}/repo_fork_test.go (100%) rename {integrations => tests/integrations}/repo_generate_test.go (100%) rename {integrations => tests/integrations}/repo_migrate_test.go (100%) rename {integrations => tests/integrations}/repo_search_test.go (100%) rename {integrations => tests/integrations}/repo_tag_test.go (100%) rename {integrations => tests/integrations}/repo_test.go (100%) rename {integrations => tests/integrations}/repo_topic_test.go (100%) rename {integrations => tests/integrations}/repo_watch_test.go (100%) rename {integrations => tests/integrations}/repofiles_delete_test.go (100%) rename {integrations => tests/integrations}/repofiles_update_test.go (100%) rename {integrations => tests/integrations}/setting_test.go (100%) rename {integrations => tests/integrations}/signin_test.go (100%) rename {integrations => tests/integrations}/signout_test.go (100%) rename {integrations => tests/integrations}/signup_test.go (100%) rename {integrations => tests/integrations}/ssh_key_test.go (100%) rename {integrations => tests/integrations}/testlogger.go (98%) rename {integrations => tests/integrations}/timetracking_test.go (100%) rename {integrations => tests/integrations}/user_avatar_test.go (100%) rename {integrations => tests/integrations}/user_test.go (100%) rename {integrations => tests/integrations}/version_test.go (100%) rename {integrations => tests/integrations}/view_test.go (100%) rename {integrations => tests/integrations}/webfinger_test.go (100%) rename {integrations => tests/integrations}/xss_test.go (100%) rename {integrations => tests}/mssql.ini.tmpl (71%) rename {integrations => tests}/mysql.ini.tmpl (83%) rename {integrations => tests}/mysql8.ini.tmpl (71%) rename {integrations => tests}/pgsql.ini.tmpl (72%) rename {integrations => tests}/sqlite.ini.tmpl (69%) diff --git a/.gitignore b/.gitignore index cbd8643f3e4bf..b90006be77626 100644 --- a/.gitignore +++ b/.gitignore @@ -63,21 +63,21 @@ cpu.out /indexers /log /public/img/avatar -/integrations/gitea-integration-mysql -/integrations/gitea-integration-mysql8 -/integrations/gitea-integration-pgsql -/integrations/gitea-integration-sqlite -/integrations/gitea-integration-mssql -/integrations/indexers-mysql -/integrations/indexers-mysql8 -/integrations/indexers-pgsql -/integrations/indexers-sqlite -/integrations/indexers-mssql -/integrations/sqlite.ini -/integrations/mysql.ini -/integrations/mysql8.ini -/integrations/pgsql.ini -/integrations/mssql.ini +/tests/integrations/gitea-integration-mysql +/tests/integrations/gitea-integration-mysql8 +/tests/integrations/gitea-integration-pgsql +/tests/integrations/gitea-integration-sqlite +/tests/integrations/gitea-integration-mssql +/tests/integrations/indexers-mysql +/tests/integrations/indexers-mysql8 +/tests/integrations/indexers-pgsql +/tests/integrations/indexers-sqlite +/tests/integrations/indexers-mssql +/tests/sqlite.ini +/tests/mysql.ini +/tests/mysql8.ini +/tests/pgsql.ini +/tests/mssql.ini /node_modules /yarn.lock /yarn-error.log diff --git a/Makefile b/Makefile index 9a1ac486ae04a..223c895891d25 100644 --- a/Makefile +++ b/Makefile @@ -99,7 +99,7 @@ LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(G LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64 -GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/integrations/migration-test code.gitea.io/gitea/integrations,$(shell $(GO) list ./... | grep -v /vendor/)) +GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/tests/integrations/migration-test code.gitea.io/gitea/tests/integrations code.gitea.io/gitea/tests,$(shell $(GO) list ./... | grep -v /vendor/)) FOMANTIC_WORK_DIR := web_src/fomantic @@ -123,7 +123,7 @@ TEST_TAGS ?= sqlite sqlite_unlock_notify TAR_EXCLUDES := .git data indexers queues log node_modules $(EXECUTABLE) $(FOMANTIC_WORK_DIR)/node_modules $(DIST) $(MAKE_EVIDENCE_DIR) $(AIR_TMP_DIR) -GO_DIRS := cmd integrations models modules routers build services tools +GO_DIRS := cmd tests models modules routers build services tools GO_SOURCES := $(wildcard *.go) GO_SOURCES += $(shell find $(GO_DIRS) -type f -name "*.go" -not -path modules/options/bindata.go -not -path modules/public/bindata.go -not -path modules/templates/bindata.go) @@ -242,9 +242,9 @@ clean: $(GO) clean -i ./... rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \ integrations*.test \ - integrations/gitea-integration-pgsql/ integrations/gitea-integration-mysql/ integrations/gitea-integration-mysql8/ integrations/gitea-integration-sqlite/ \ - integrations/gitea-integration-mssql/ integrations/indexers-mysql/ integrations/indexers-mysql8/ integrations/indexers-pgsql integrations/indexers-sqlite \ - integrations/indexers-mssql integrations/mysql.ini integrations/mysql8.ini integrations/pgsql.ini integrations/mssql.ini man/ + tests/integrations/gitea-integration-pgsql/ tests/integrations/gitea-integration-mysql/ tests/integrations/gitea-integration-mysql8/ tests/integrations/gitea-integration-sqlite/ \ + tests/integrations/gitea-integration-mssql/ tests/integrations/indexers-mysql/ tests/integrations/indexers-mysql8/ tests/integrations/indexers-pgsql tests/integrations/indexers-sqlite \ + tests/integrations/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ .PHONY: fmt fmt: @@ -396,24 +396,25 @@ gomod-check: tidy generate-ini-sqlite: sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ - integrations/sqlite.ini.tmpl > integrations/sqlite.ini + -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \ + tests/sqlite.ini.tmpl > tests/sqlite.ini .PHONY: test-sqlite test-sqlite: integrations.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test .PHONY: test-sqlite\#% test-sqlite\#%: integrations.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.run $(subst .,/,$*) .PHONY: test-sqlite-migration test-sqlite-migration: migrations.sqlite.test migrations.individual.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./migrations.sqlite.test - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./migrations.individual.sqlite.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./migrations.sqlite.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./migrations.individual.sqlite.test .PHONY: test-sqlite-migration\#% test-sqlite-migration\#%: migrations.sqlite.test migrations.individual.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./migrations.individual.sqlite.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./migrations.individual.sqlite.test -test.run $(subst .,/,$*) generate-ini-mysql: @@ -423,20 +424,21 @@ generate-ini-mysql: -e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ - integrations/mysql.ini.tmpl > integrations/mysql.ini + -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \ + tests/mysql.ini.tmpl > tests/mysql.ini .PHONY: test-mysql test-mysql: integrations.mysql.test generate-ini-mysql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./integrations.mysql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test .PHONY: test-mysql\#% test-mysql\#%: integrations.mysql.test generate-ini-mysql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./integrations.mysql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.run $(subst .,/,$*) .PHONY: test-mysql-migration test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test generate-ini-mysql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./migrations.mysql.test - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./migrations.individual.mysql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./migrations.mysql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./migrations.individual.mysql.test generate-ini-mysql8: sed -e 's|{{TEST_MYSQL8_HOST}}|${TEST_MYSQL8_HOST}|g' \ @@ -445,20 +447,21 @@ generate-ini-mysql8: -e 's|{{TEST_MYSQL8_PASSWORD}}|${TEST_MYSQL8_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ - integrations/mysql8.ini.tmpl > integrations/mysql8.ini + -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \ + tests/mysql8.ini.tmpl > tests/mysql8.ini .PHONY: test-mysql8 test-mysql8: integrations.mysql8.test generate-ini-mysql8 - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./integrations.mysql8.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./integrations.mysql8.test .PHONY: test-mysql8\#% test-mysql8\#%: integrations.mysql8.test generate-ini-mysql8 - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./integrations.mysql8.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./integrations.mysql8.test -test.run $(subst .,/,$*) .PHONY: test-mysql8-migration test-mysql8-migration: migrations.mysql8.test migrations.individual.mysql8.test generate-ini-mysql8 - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./migrations.mysql8.test - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql8.ini ./migrations.individual.mysql8.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./migrations.mysql8.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./migrations.individual.mysql8.test generate-ini-pgsql: sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \ @@ -468,20 +471,21 @@ generate-ini-pgsql: -e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ - integrations/pgsql.ini.tmpl > integrations/pgsql.ini + -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \ + tests/pgsql.ini.tmpl > tests/pgsql.ini .PHONY: test-pgsql test-pgsql: integrations.pgsql.test generate-ini-pgsql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./integrations.pgsql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test .PHONY: test-pgsql\#% test-pgsql\#%: integrations.pgsql.test generate-ini-pgsql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./integrations.pgsql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.run $(subst .,/,$*) .PHONY: test-pgsql-migration test-pgsql-migration: migrations.pgsql.test migrations.individual.pgsql.test generate-ini-pgsql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./migrations.pgsql.test - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./migrations.individual.pgsql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./migrations.pgsql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./migrations.individual.pgsql.test generate-ini-mssql: sed -e 's|{{TEST_MSSQL_HOST}}|${TEST_MSSQL_HOST}|g' \ @@ -490,24 +494,25 @@ generate-ini-mssql: -e 's|{{TEST_MSSQL_PASSWORD}}|${TEST_MSSQL_PASSWORD}|g' \ -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \ -e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \ - integrations/mssql.ini.tmpl > integrations/mssql.ini + -e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \ + tests/mssql.ini.tmpl > tests/mssql.ini .PHONY: test-mssql test-mssql: integrations.mssql.test generate-ini-mssql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./integrations.mssql.test + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test .PHONY: test-mssql\#% test-mssql\#%: integrations.mssql.test generate-ini-mssql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./integrations.mssql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.run $(subst .,/,$*) .PHONY: test-mssql-migration test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test generate-ini-mssql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.mssql.test -test.failfast - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./migrations.individual.mssql.test -test.failfast + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.mssql.test -test.failfast + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.individual.mssql.test -test.failfast .PHONY: test-e2e% # Use only file logging for end-to-end tests -test-e2e%: TEST_LOGGER ?= file +test-e2e%: TEST_LOGGER ?= file TEST_TYPE ?= e2e .PHONY: test-e2e test-e2e: test-e2e-sqlite @@ -521,108 +526,108 @@ test-e2e\#%: test-e2e-sqlite\#% test-e2e-sqlite: TAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=integrations/sqlite.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=tests/sqlite.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-sqlite\#% test-e2e-sqlite\#%: TAGS+=sqlite sqlite_unlock_notify test-e2e-sqlite\#%: build generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8 test-e2e-mysql8: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mysql8.ini ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mysql8.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: build generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql test-e2e-pgsql: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/pgsql.ini ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/pgsql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: build generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql test-e2e-mssql: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mssql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mssql.ini ./tools/e2e/run_e2e.sh .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: build generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/integrations/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.sqlite.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . .PHONY: bench-mysql bench-mysql: integrations.mysql.test generate-ini-mysql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./integrations.mysql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.mysql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . .PHONY: bench-mssql bench-mssql: integrations.mssql.test generate-ini-mssql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mssql.ini ./integrations.mssql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./integrations.mssql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . .PHONY: bench-pgsql bench-pgsql: integrations.pgsql.test generate-ini-pgsql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/pgsql.ini ./integrations.pgsql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./integrations.pgsql.test -test.cpuprofile=cpu.out -test.run DontRunTests -test.bench . .PHONY: integration-test-coverage integration-test-coverage: integrations.cover.test generate-ini-mysql - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./integrations.cover.test -test.coverprofile=integration.coverage.out .PHONY: integration-test-coverage-sqlite integration-test-coverage-sqlite: integrations.cover.sqlite.test generate-ini-sqlite - GITEA_ROOT="$(CURDIR)" GITEA_CONF=integrations/sqlite.ini ./integrations.cover.sqlite.test -test.coverprofile=integration.coverage.out + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.cover.sqlite.test -test.coverprofile=integration.coverage.out integrations.mysql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -o integrations.mysql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mysql.test integrations.mysql8.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -o integrations.mysql8.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mysql8.test integrations.pgsql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -o integrations.pgsql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.pgsql.test integrations.mssql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -o integrations.mssql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mssql.test integrations.sqlite.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -o integrations.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.sqlite.test -tags '$(TEST_TAGS)' integrations.cover.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.test integrations.cover.sqlite.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.sqlite.test -tags '$(TEST_TAGS)' .PHONY: migrations.mysql.test migrations.mysql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations/migration-test -o migrations.mysql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mysql.test .PHONY: migrations.mysql8.test migrations.mysql8.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations/migration-test -o migrations.mysql8.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mysql8.test .PHONY: migrations.pgsql.test migrations.pgsql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations/migration-test -o migrations.pgsql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.pgsql.test .PHONY: migrations.mssql.test migrations.mssql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations/migration-test -o migrations.mssql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mssql.test .PHONY: migrations.sqlite.test migrations.sqlite.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/integrations/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)' .PHONY: migrations.individual.mysql.test migrations.individual.mysql.test: $(GO_SOURCES) diff --git a/build/code-batch-process.go b/build/code-batch-process.go index 0f8dbd40febdc..5b136cf139829 100644 --- a/build/code-batch-process.go +++ b/build/code-batch-process.go @@ -61,7 +61,7 @@ func newFileCollector(fileFilter string, batchSize int) (*fileCollector, error) "build", "cmd", "contrib", - "integrations", + "tests", "models", "modules", "routers", @@ -71,8 +71,8 @@ func newFileCollector(fileFilter string, batchSize int) (*fileCollector, error) co.includePatterns = append(co.includePatterns, regexp.MustCompile(`.*\.go$`)) co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`.*\bbindata\.go$`)) - co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`integrations/gitea-repositories-meta`)) - co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`integrations/migration-test`)) + co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`tests/gitea-repositories-meta`)) + co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`tests/integrations/migration-test`)) co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`modules/git/tests`)) co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`models/fixtures`)) co.excludePatterns = append(co.excludePatterns, regexp.MustCompile(`models/migrations/fixtures`)) diff --git a/contrib/pr/checkout.go b/contrib/pr/checkout.go index f6d29f3c5b574..9fa947b28e5ed 100644 --- a/contrib/pr/checkout.go +++ b/contrib/pr/checkout.go @@ -112,7 +112,7 @@ func runPR() { unittest.LoadFixtures() util.RemoveAll(setting.RepoRootPath) util.RemoveAll(repo_module.LocalCopyPath()) - unittest.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath) + unittest.CopyDir(path.Join(curDir, "tests/gitea-repositories-meta"), setting.RepoRootPath) log.Printf("[PR] Setting up router\n") // routers.GlobalInit() diff --git a/docs/content/doc/developers/hacking-on-gitea.en-us.md b/docs/content/doc/developers/hacking-on-gitea.en-us.md index 9d15f66dace10..3c9e1e1d619fe 100644 --- a/docs/content/doc/developers/hacking-on-gitea.en-us.md +++ b/docs/content/doc/developers/hacking-on-gitea.en-us.md @@ -309,7 +309,7 @@ will run the integration tests in an SQLite environment. Integration tests require `git lfs` to be installed. Other database tests are available but may need adjustment to the local environment. -Take a look at [`integrations/README.md`](https://github.com/go-gitea/gitea/blob/main/integrations/README.md) +Take a look at [`tests/integrations/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integrations/README.md) for more information and how to run a single test. diff --git a/models/migrations/migrations_test.go b/models/migrations/migrations_test.go index 46782f24a1003..9badb3c81dbad 100644 --- a/models/migrations/migrations_test.go +++ b/models/migrations/migrations_test.go @@ -46,7 +46,7 @@ func TestMain(m *testing.M) { giteaConf := os.Getenv("GITEA_CONF") if giteaConf == "" { - giteaConf = path.Join(filepath.Dir(setting.AppPath), "integrations/sqlite.ini") + giteaConf = path.Join(filepath.Dir(setting.AppPath), "tests/sqlite.ini") fmt.Printf("Environment variable $GITEA_CONF not set - defaulting to %s\n", giteaConf) } @@ -206,7 +206,7 @@ func prepareTestEnv(t *testing.T, skip int, syncModels ...interface{}) (*xorm.En ourSkip += skip deferFn := PrintCurrentTest(t, ourSkip) assert.NoError(t, os.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again ownerDirs, err := os.ReadDir(setting.RepoRootPath) if err != nil { diff --git a/models/migrations/testlogger_test.go b/models/migrations/testlogger_test.go index adbf19c0dbed6..0455d9c9a6c5b 100644 --- a/models/migrations/testlogger_test.go +++ b/models/migrations/testlogger_test.go @@ -188,5 +188,5 @@ func (log *TestLogger) GetName() string { func init() { log.Register("test", NewTestLogger) _, filename, _, _ := runtime.Caller(0) - prefix = strings.TrimSuffix(filename, "integrations/testlogger.go") + prefix = strings.TrimSuffix(filename, "tests/testlogger.go") } diff --git a/models/unittest/testdb.go b/models/unittest/testdb.go index baea46dbce68f..02ed407f9a874 100644 --- a/models/unittest/testdb.go +++ b/models/unittest/testdb.go @@ -114,7 +114,7 @@ func MainTest(m *testing.M, testOpts *TestOptions) { if err = util.RemoveAll(repoRootPath); err != nil { fatalTestError("util.RemoveAll: %v\n", err) } - if err = CopyDir(filepath.Join(testOpts.GiteaRootPath, "integrations", "gitea-repositories-meta"), setting.RepoRootPath); err != nil { + if err = CopyDir(filepath.Join(testOpts.GiteaRootPath, "tests", "gitea-repositories-meta"), setting.RepoRootPath); err != nil { fatalTestError("util.CopyDir: %v\n", err) } @@ -202,7 +202,7 @@ func PrepareTestDatabase() error { func PrepareTestEnv(t testing.TB) { assert.NoError(t, PrepareTestDatabase()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - metaPath := filepath.Join(giteaRoot, "integrations", "gitea-repositories-meta") + metaPath := filepath.Join(giteaRoot, "tests", "gitea-repositories-meta") assert.NoError(t, CopyDir(metaPath, setting.RepoRootPath)) assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again diff --git a/modules/markup/html_test.go b/modules/markup/html_test.go index a7cf81250bf0e..370bc218225a5 100644 --- a/modules/markup/html_test.go +++ b/modules/markup/html_test.go @@ -24,7 +24,7 @@ import ( var localMetas = map[string]string{ "user": "gogits", "repo": "gogs", - "repoPath": "../../integrations/gitea-repositories-meta/user13/repo11.git/", + "repoPath": "../../tests/gitea-repositories-meta/user13/repo11.git/", } func TestMain(m *testing.M) { diff --git a/modules/markup/markdown/markdown_test.go b/modules/markup/markdown/markdown_test.go index 732fe1a6beff9..fdbc291c947d2 100644 --- a/modules/markup/markdown/markdown_test.go +++ b/modules/markup/markdown/markdown_test.go @@ -29,7 +29,7 @@ const ( var localMetas = map[string]string{ "user": "gogits", "repo": "gogs", - "repoPath": "../../../integrations/gitea-repositories-meta/user13/repo11.git/", + "repoPath": "../../../tests/gitea-repositories-meta/user13/repo11.git/", } func TestMain(m *testing.M) { diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/HEAD b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/HEAD rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/HEAD diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/config b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/config similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/config rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/config diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/description b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/description similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/description rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/description diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/info/exclude b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/info/exclude rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/info/exclude diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/74/8bf557dfc9c6457998b5118a6c8b2129f56c30 b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/74/8bf557dfc9c6457998b5118a6c8b2129f56c30 similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/74/8bf557dfc9c6457998b5118a6c8b2129f56c30 rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/74/8bf557dfc9c6457998b5118a6c8b2129f56c30 diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/a5/46f86c7dd182592b96639045e176dde8df76ef b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/a5/46f86c7dd182592b96639045e176dde8df76ef similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/a5/46f86c7dd182592b96639045e176dde8df76ef rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/a5/46f86c7dd182592b96639045e176dde8df76ef diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/objects/b8/95782bd271fdd266dd06e5880ea4abdc3a0dc7 diff --git a/integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/refs/heads/master b/tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/refs/heads/master rename to tests/gitea-repositories-meta/limited_org/private_repo_on_limited_org.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/HEAD b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/HEAD rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/HEAD diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/config b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/config similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/config rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/config diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/description b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/description similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/description rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/description diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/info/exclude b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/info/exclude rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/info/exclude diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/21/2f14c8b713de38bd0b3fb23bd288369b01668a b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/21/2f14c8b713de38bd0b3fb23bd288369b01668a similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/21/2f14c8b713de38bd0b3fb23bd288369b01668a rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/21/2f14c8b713de38bd0b3fb23bd288369b01668a diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/90/e402c3937a4639725fcc59ca1f529e7dc8506f b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/90/e402c3937a4639725fcc59ca1f529e7dc8506f similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/90/e402c3937a4639725fcc59ca1f529e7dc8506f rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/90/e402c3937a4639725fcc59ca1f529e7dc8506f diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/ed/d9c1000cd1444efd63e153e3554c8d5656bf65 b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/ed/d9c1000cd1444efd63e153e3554c8d5656bf65 similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/ed/d9c1000cd1444efd63e153e3554c8d5656bf65 rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/objects/ed/d9c1000cd1444efd63e153e3554c8d5656bf65 diff --git a/integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/refs/heads/master b/tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/refs/heads/master rename to tests/gitea-repositories-meta/limited_org/public_repo_on_limited_org.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/HEAD b/tests/gitea-repositories-meta/migration/lfs-test.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/HEAD rename to tests/gitea-repositories-meta/migration/lfs-test.git/HEAD diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/config b/tests/gitea-repositories-meta/migration/lfs-test.git/config similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/config rename to tests/gitea-repositories-meta/migration/lfs-test.git/config diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/description b/tests/gitea-repositories-meta/migration/lfs-test.git/description similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/description rename to tests/gitea-repositories-meta/migration/lfs-test.git/description diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-checkout b/tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-checkout similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-checkout rename to tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-checkout diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-commit b/tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-commit similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-commit rename to tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-commit diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-merge b/tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-merge similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/post-merge rename to tests/gitea-repositories-meta/migration/lfs-test.git/hooks/post-merge diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/pre-push b/tests/gitea-repositories-meta/migration/lfs-test.git/hooks/pre-push similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/hooks/pre-push rename to tests/gitea-repositories-meta/migration/lfs-test.git/hooks/pre-push diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/index b/tests/gitea-repositories-meta/migration/lfs-test.git/index similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/index rename to tests/gitea-repositories-meta/migration/lfs-test.git/index diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/d6/f1/d6f175817f886ec6fbbc1515326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 b/tests/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/d6/f1/d6f175817f886ec6fbbc1515326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/d6/f1/d6f175817f886ec6fbbc1515326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 rename to tests/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/d6/f1/d6f175817f886ec6fbbc1515326465fa96c3bfd54a4ea06cfd6dbbd8340e0152 diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/fb/8f/fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab041 b/tests/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/fb/8f/fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab041 similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/fb/8f/fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab041 rename to tests/gitea-repositories-meta/migration/lfs-test.git/lfs/objects/fb/8f/fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab041 diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/objects/54/6244003622c64b2fc3c2cd544d7a29882c8383 b/tests/gitea-repositories-meta/migration/lfs-test.git/objects/54/6244003622c64b2fc3c2cd544d7a29882c8383 similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/objects/54/6244003622c64b2fc3c2cd544d7a29882c8383 rename to tests/gitea-repositories-meta/migration/lfs-test.git/objects/54/6244003622c64b2fc3c2cd544d7a29882c8383 diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/objects/6a/6ccf5d874fec134ee712572cc03a0f2dd7afec b/tests/gitea-repositories-meta/migration/lfs-test.git/objects/6a/6ccf5d874fec134ee712572cc03a0f2dd7afec similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/objects/6a/6ccf5d874fec134ee712572cc03a0f2dd7afec rename to tests/gitea-repositories-meta/migration/lfs-test.git/objects/6a/6ccf5d874fec134ee712572cc03a0f2dd7afec diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/objects/a6/7134b8484c2abe9fa954e1fd83b39b271383ed b/tests/gitea-repositories-meta/migration/lfs-test.git/objects/a6/7134b8484c2abe9fa954e1fd83b39b271383ed similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/objects/a6/7134b8484c2abe9fa954e1fd83b39b271383ed rename to tests/gitea-repositories-meta/migration/lfs-test.git/objects/a6/7134b8484c2abe9fa954e1fd83b39b271383ed diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/objects/b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 b/tests/gitea-repositories-meta/migration/lfs-test.git/objects/b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/objects/b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 rename to tests/gitea-repositories-meta/migration/lfs-test.git/objects/b7/01ed6ffe410f0c3ac204b929ea47cfec6cef54 diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/objects/f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 b/tests/gitea-repositories-meta/migration/lfs-test.git/objects/f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/objects/f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 rename to tests/gitea-repositories-meta/migration/lfs-test.git/objects/f2/07b74f55cd7f9e800b7550d587cbc488f6eaf1 diff --git a/integrations/gitea-repositories-meta/migration/lfs-test.git/refs/heads/master b/tests/gitea-repositories-meta/migration/lfs-test.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/migration/lfs-test.git/refs/heads/master rename to tests/gitea-repositories-meta/migration/lfs-test.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/COMMITMESSAGE b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/COMMITMESSAGE similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/COMMITMESSAGE rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/COMMITMESSAGE diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/COMMIT_EDITMSG b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/COMMIT_EDITMSG similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/COMMIT_EDITMSG rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/COMMIT_EDITMSG diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/config b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/config similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/config rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/config diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/config.backup b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/config.backup similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/config.backup rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/config.backup diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/description b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/description similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/description rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/description diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/index b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/index similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/index rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/index diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/info/exclude b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/info/exclude rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/info/exclude diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/logs/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMITMESSAGE b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMITMESSAGE similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMITMESSAGE rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMITMESSAGE diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMIT_EDITMSG b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMIT_EDITMSG similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMIT_EDITMSG rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/COMMIT_EDITMSG diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config.backup b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config.backup similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config.backup rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/config.backup diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/description b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/description similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/description rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/description diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/index b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/index similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/index rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/index diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/info/exclude b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/info/exclude rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/info/exclude diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/logs/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker_alpha.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMITMESSAGE b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMITMESSAGE similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMITMESSAGE rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMITMESSAGE diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMIT_EDITMSG b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMIT_EDITMSG similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMIT_EDITMSG rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/COMMIT_EDITMSG diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config.backup b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config.backup similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config.backup rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/config.backup diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/description b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/description similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/description rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/description diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/index b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/index similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/index rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/index diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/info/exclude b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/info/exclude rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/info/exclude diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/HEAD b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/HEAD rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/HEAD diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/logs/refs/heads/master diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/ba/ea7d6e6b7773a80bcede323cfb21dfe9d4b855 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/c2/a1ad4c931cebe27c7e39176fe7119b5557c9eb diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/objects/cd/aca8cf1d36e1e4e508a940f6e157e239beccfa diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/branch1 b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/branch1 similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/branch1 rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/branch1 diff --git a/integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/master b/tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/master rename to tests/gitea-repositories-meta/org26/repo_external_tracker_numeric.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/HEAD b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/HEAD rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/HEAD diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/config b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/config similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/config rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/config diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/description b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/description similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/description rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/description diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/info/exclude b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/info/exclude rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/info/exclude diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/6e/75c9f89da9a9b93f4f36e61ed092f7a1625ba0 diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/7f/eb6f9dd600e17a04f48a76cfa0a56a3f30e2c1 diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/objects/b7/91b41c0ae8cb3c4b12f3fd8c3709c2481d9e37 diff --git a/integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/refs/heads/master b/tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/refs/heads/master rename to tests/gitea-repositories-meta/privated_org/private_repo_on_private_org.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/HEAD b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/HEAD rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/HEAD diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/config b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/config similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/config rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/config diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/description b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/description similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/description rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/description diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/info/exclude b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/info/exclude rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/info/exclude diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/04/f99c528b643b9175a4b156cdfc13aba6b43853 b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/04/f99c528b643b9175a4b156cdfc13aba6b43853 similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/04/f99c528b643b9175a4b156cdfc13aba6b43853 rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/04/f99c528b643b9175a4b156cdfc13aba6b43853 diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/86/de16d8658f5c0a17ec6aa313871295d7072f78 b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/86/de16d8658f5c0a17ec6aa313871295d7072f78 similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/86/de16d8658f5c0a17ec6aa313871295d7072f78 rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/86/de16d8658f5c0a17ec6aa313871295d7072f78 diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/bf/19fd4707acb403c4aca44f126ab69142ac59ce b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/bf/19fd4707acb403c4aca44f126ab69142ac59ce similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/bf/19fd4707acb403c4aca44f126ab69142ac59ce rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/objects/bf/19fd4707acb403c4aca44f126ab69142ac59ce diff --git a/integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/refs/heads/master b/tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/refs/heads/master rename to tests/gitea-repositories-meta/privated_org/public_repo_on_private_org.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/HEAD b/tests/gitea-repositories-meta/user12/repo10.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/HEAD rename to tests/gitea-repositories-meta/user12/repo10.git/HEAD diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/config b/tests/gitea-repositories-meta/user12/repo10.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/config rename to tests/gitea-repositories-meta/user12/repo10.git/config diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/description b/tests/gitea-repositories-meta/user12/repo10.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/description rename to tests/gitea-repositories-meta/user12/repo10.git/description diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/post-receive b/tests/gitea-repositories-meta/user12/repo10.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/post-receive rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user12/repo10.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive b/tests/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/update b/tests/gitea-repositories-meta/user12/repo10.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/update rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user12/repo10.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user12/repo10.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/info/exclude b/tests/gitea-repositories-meta/user12/repo10.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/info/exclude rename to tests/gitea-repositories-meta/user12/repo10.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/info/refs b/tests/gitea-repositories-meta/user12/repo10.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/info/refs rename to tests/gitea-repositories-meta/user12/repo10.git/info/refs diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 b/tests/gitea-repositories-meta/user12/repo10.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 rename to tests/gitea-repositories-meta/user12/repo10.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f b/tests/gitea-repositories-meta/user12/repo10.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f rename to tests/gitea-repositories-meta/user12/repo10.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d b/tests/gitea-repositories-meta/user12/repo10.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d rename to tests/gitea-repositories-meta/user12/repo10.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/objects/info/packs b/tests/gitea-repositories-meta/user12/repo10.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/objects/info/packs rename to tests/gitea-repositories-meta/user12/repo10.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/DefaultBranch b/tests/gitea-repositories-meta/user12/repo10.git/refs/heads/DefaultBranch similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/DefaultBranch rename to tests/gitea-repositories-meta/user12/repo10.git/refs/heads/DefaultBranch diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/develop b/tests/gitea-repositories-meta/user12/repo10.git/refs/heads/develop similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/develop rename to tests/gitea-repositories-meta/user12/repo10.git/refs/heads/develop diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/feature/1 b/tests/gitea-repositories-meta/user12/repo10.git/refs/heads/feature/1 similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/feature/1 rename to tests/gitea-repositories-meta/user12/repo10.git/refs/heads/feature/1 diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/master b/tests/gitea-repositories-meta/user12/repo10.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/refs/heads/master rename to tests/gitea-repositories-meta/user12/repo10.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user12/repo10.git/refs/tags/v1.1 b/tests/gitea-repositories-meta/user12/repo10.git/refs/tags/v1.1 similarity index 100% rename from integrations/gitea-repositories-meta/user12/repo10.git/refs/tags/v1.1 rename to tests/gitea-repositories-meta/user12/repo10.git/refs/tags/v1.1 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/HEAD b/tests/gitea-repositories-meta/user13/repo11.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/HEAD rename to tests/gitea-repositories-meta/user13/repo11.git/HEAD diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/config b/tests/gitea-repositories-meta/user13/repo11.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/config rename to tests/gitea-repositories-meta/user13/repo11.git/config diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/description b/tests/gitea-repositories-meta/user13/repo11.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/description rename to tests/gitea-repositories-meta/user13/repo11.git/description diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/post-receive b/tests/gitea-repositories-meta/user13/repo11.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/post-receive rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user13/repo11.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive b/tests/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/update b/tests/gitea-repositories-meta/user13/repo11.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/update rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user13/repo11.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user13/repo11.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/info/exclude b/tests/gitea-repositories-meta/user13/repo11.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/info/exclude rename to tests/gitea-repositories-meta/user13/repo11.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/info/refs b/tests/gitea-repositories-meta/user13/repo11.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/info/refs rename to tests/gitea-repositories-meta/user13/repo11.git/info/refs diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 b/tests/gitea-repositories-meta/user13/repo11.git/objects/0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 rename to tests/gitea-repositories-meta/user13/repo11.git/objects/0a/bcb056019adb8336cf9db3ad9d9cf80cd4b141 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 b/tests/gitea-repositories-meta/user13/repo11.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 rename to tests/gitea-repositories-meta/user13/repo11.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f b/tests/gitea-repositories-meta/user13/repo11.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f rename to tests/gitea-repositories-meta/user13/repo11.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d b/tests/gitea-repositories-meta/user13/repo11.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d rename to tests/gitea-repositories-meta/user13/repo11.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 b/tests/gitea-repositories-meta/user13/repo11.git/objects/75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 rename to tests/gitea-repositories-meta/user13/repo11.git/objects/75/d1afd00e111c8dbd9e3d96a27b431ac5ae6d74 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/ed/447543e0c85d628b91f7f466f4921908f4c5ea b/tests/gitea-repositories-meta/user13/repo11.git/objects/ed/447543e0c85d628b91f7f466f4921908f4c5ea similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/ed/447543e0c85d628b91f7f466f4921908f4c5ea rename to tests/gitea-repositories-meta/user13/repo11.git/objects/ed/447543e0c85d628b91f7f466f4921908f4c5ea diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/objects/info/packs b/tests/gitea-repositories-meta/user13/repo11.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/objects/info/packs rename to tests/gitea-repositories-meta/user13/repo11.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/DefaultBranch b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/DefaultBranch similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/DefaultBranch rename to tests/gitea-repositories-meta/user13/repo11.git/refs/heads/DefaultBranch diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/branch2 b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/branch2 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/branch2 rename to tests/gitea-repositories-meta/user13/repo11.git/refs/heads/branch2 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/develop b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/develop similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/develop rename to tests/gitea-repositories-meta/user13/repo11.git/refs/heads/develop diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/feature/1 b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/feature/1 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/feature/1 rename to tests/gitea-repositories-meta/user13/repo11.git/refs/heads/feature/1 diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/master b/tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/heads/master rename to tests/gitea-repositories-meta/user13/repo11.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user13/repo11.git/refs/tags/v1.1 b/tests/gitea-repositories-meta/user13/repo11.git/refs/tags/v1.1 similarity index 100% rename from integrations/gitea-repositories-meta/user13/repo11.git/refs/tags/v1.1 rename to tests/gitea-repositories-meta/user13/repo11.git/refs/tags/v1.1 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/HEAD b/tests/gitea-repositories-meta/user2/commits_search_test.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/HEAD rename to tests/gitea-repositories-meta/user2/commits_search_test.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/config b/tests/gitea-repositories-meta/user2/commits_search_test.git/config similarity index 53% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/config rename to tests/gitea-repositories-meta/user2/commits_search_test.git/config index 9ec7812f91133..bfbada5989c8b 100644 --- a/integrations/gitea-repositories-meta/user2/commits_search_test.git/config +++ b/tests/gitea-repositories-meta/user2/commits_search_test.git/config @@ -3,6 +3,6 @@ filemode = true bare = true [remote "origin"] - url = /home/mura/go/src/code.gitea.io/gitea/integrations/gitea-repositories-meta/user2/commits_search_test/ + url = /home/mura/go/src/code.gitea.io/gitea/tests/gitea-repositories-meta/user2/commits_search_test/ fetch = +refs/*:refs/* mirror = true diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/description b/tests/gitea-repositories-meta/user2/commits_search_test.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/description rename to tests/gitea-repositories-meta/user2/commits_search_test.git/description diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/info/exclude b/tests/gitea-repositories-meta/user2/commits_search_test.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/info/exclude rename to tests/gitea-repositories-meta/user2/commits_search_test.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/0a/8499a22ad32a80beda9d75efe15f9f94582468 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/0a/8499a22ad32a80beda9d75efe15f9f94582468 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/0a/8499a22ad32a80beda9d75efe15f9f94582468 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/0a/8499a22ad32a80beda9d75efe15f9f94582468 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/0c/cf1fcd4d1717c22de0707619a5577ea0acebf0 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/3e/a192a6466793d4b7cd8641801ca0c6bec3979c b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/3e/a192a6466793d4b7cd8641801ca0c6bec3979c similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/3e/a192a6466793d4b7cd8641801ca0c6bec3979c rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/3e/a192a6466793d4b7cd8641801ca0c6bec3979c diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/3f/6594f108842b7c50772510e53ce113d3583c4a b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/3f/6594f108842b7c50772510e53ce113d3583c4a similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/3f/6594f108842b7c50772510e53ce113d3583c4a rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/3f/6594f108842b7c50772510e53ce113d3583c4a diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/58/e97d1a24fb9e1599d8a467ec409430f3d3569e b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/58/e97d1a24fb9e1599d8a467ec409430f3d3569e similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/58/e97d1a24fb9e1599d8a467ec409430f3d3569e rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/58/e97d1a24fb9e1599d8a467ec409430f3d3569e diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/67/68c1fc1d9448422f05cc84267d94ee62085fe8 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/67/68c1fc1d9448422f05cc84267d94ee62085fe8 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/67/68c1fc1d9448422f05cc84267d94ee62085fe8 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/67/68c1fc1d9448422f05cc84267d94ee62085fe8 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/6e/8eabd9a7f8d6acd2a1219facfd37415564b144 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/6e/8eabd9a7f8d6acd2a1219facfd37415564b144 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/6e/8eabd9a7f8d6acd2a1219facfd37415564b144 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/6e/8eabd9a7f8d6acd2a1219facfd37415564b144 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/85/f46d747a68adf79cc01e2c25ba6a56932d298d b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/85/f46d747a68adf79cc01e2c25ba6a56932d298d similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/85/f46d747a68adf79cc01e2c25ba6a56932d298d rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/85/f46d747a68adf79cc01e2c25ba6a56932d298d diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/8d/dd8d1ad1fdc21ab629e906711fa9bc27aa1c52 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/95/fd0c4138480e4b3913e7cf71a90623fb926fe8 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/95/fd0c4138480e4b3913e7cf71a90623fb926fe8 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/95/fd0c4138480e4b3913e7cf71a90623fb926fe8 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/95/fd0c4138480e4b3913e7cf71a90623fb926fe8 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/98/00fe78cabf4fe774fcf376f97fa2a0ed06987b b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/98/00fe78cabf4fe774fcf376f97fa2a0ed06987b similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/98/00fe78cabf4fe774fcf376f97fa2a0ed06987b rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/98/00fe78cabf4fe774fcf376f97fa2a0ed06987b diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/9f/cdb7d53bdef786d2e5577948a0c0d4b321fe5a diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/c2/0caf78b5f9dd2d0d183876c5cd0e761c13f7f8 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/c5/2ba74685f5c8c593efbbb38f62fe024110adef b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/c5/2ba74685f5c8c593efbbb38f62fe024110adef similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/c5/2ba74685f5c8c593efbbb38f62fe024110adef rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/c5/2ba74685f5c8c593efbbb38f62fe024110adef diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/d6/ae8023a10ff446b6a4e7f441554834008e99c3 b/tests/gitea-repositories-meta/user2/commits_search_test.git/objects/d6/ae8023a10ff446b6a4e7f441554834008e99c3 similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/objects/d6/ae8023a10ff446b6a4e7f441554834008e99c3 rename to tests/gitea-repositories-meta/user2/commits_search_test.git/objects/d6/ae8023a10ff446b6a4e7f441554834008e99c3 diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/packed-refs b/tests/gitea-repositories-meta/user2/commits_search_test.git/packed-refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/packed-refs rename to tests/gitea-repositories-meta/user2/commits_search_test.git/packed-refs diff --git a/integrations/gitea-repositories-meta/user2/commits_search_test.git/refs/heads/master b/tests/gitea-repositories-meta/user2/commits_search_test.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/commits_search_test.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/commits_search_test.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/HEAD b/tests/gitea-repositories-meta/user2/git_hooks_test.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/HEAD rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/config b/tests/gitea-repositories-meta/user2/git_hooks_test.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/config rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/config diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/description b/tests/gitea-repositories-meta/user2/git_hooks_test.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/description rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/description diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/pre-receive b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/pre-receive rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/pre-receive.d/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/info/exclude b/tests/gitea-repositories-meta/user2/git_hooks_test.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/info/exclude rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/info/refs b/tests/gitea-repositories-meta/user2/git_hooks_test.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/info/refs rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/info/refs diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 b/tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f b/tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d b/tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/info/packs b/tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/objects/info/packs rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/DefaultBranch b/tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/DefaultBranch similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/DefaultBranch rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/DefaultBranch diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/develop b/tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/develop similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/develop rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/develop diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/feature/1 b/tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/feature/1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/feature/1 rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/feature/1 diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/master b/tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/tags/v1.1 b/tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/tags/v1.1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/git_hooks_test.git/refs/tags/v1.1 rename to tests/gitea-repositories-meta/user2/git_hooks_test.git/refs/tags/v1.1 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/HEAD b/tests/gitea-repositories-meta/user2/glob.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/HEAD rename to tests/gitea-repositories-meta/user2/glob.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/glob.git/config b/tests/gitea-repositories-meta/user2/glob.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/config rename to tests/gitea-repositories-meta/user2/glob.git/config diff --git a/integrations/gitea-repositories-meta/user2/glob.git/description b/tests/gitea-repositories-meta/user2/glob.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/description rename to tests/gitea-repositories-meta/user2/glob.git/description diff --git a/integrations/gitea-repositories-meta/user2/glob.git/info/exclude b/tests/gitea-repositories-meta/user2/glob.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/info/exclude rename to tests/gitea-repositories-meta/user2/glob.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/48/06cb9df135782b818c968c2fadbd2c150d23d6 b/tests/gitea-repositories-meta/user2/glob.git/objects/48/06cb9df135782b818c968c2fadbd2c150d23d6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/48/06cb9df135782b818c968c2fadbd2c150d23d6 rename to tests/gitea-repositories-meta/user2/glob.git/objects/48/06cb9df135782b818c968c2fadbd2c150d23d6 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 b/tests/gitea-repositories-meta/user2/glob.git/objects/59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 rename to tests/gitea-repositories-meta/user2/glob.git/objects/59/fee614e09d1f1cd1e15e4b2a7e9c8873a81498 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 b/tests/gitea-repositories-meta/user2/glob.git/objects/7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 rename to tests/gitea-repositories-meta/user2/glob.git/objects/7c/8ac2f8d82a1eb5f6aaece6629ff11015f91eb4 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/8e/592e636d27ac144f92f7fe8c33631cbdea594d b/tests/gitea-repositories-meta/user2/glob.git/objects/8e/592e636d27ac144f92f7fe8c33631cbdea594d similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/8e/592e636d27ac144f92f7fe8c33631cbdea594d rename to tests/gitea-repositories-meta/user2/glob.git/objects/8e/592e636d27ac144f92f7fe8c33631cbdea594d diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/95/aff026f99a9ab76fbd01decb63dd3dbc03e498 b/tests/gitea-repositories-meta/user2/glob.git/objects/95/aff026f99a9ab76fbd01decb63dd3dbc03e498 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/95/aff026f99a9ab76fbd01decb63dd3dbc03e498 rename to tests/gitea-repositories-meta/user2/glob.git/objects/95/aff026f99a9ab76fbd01decb63dd3dbc03e498 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/ae/d1ffed24cc3cf9b80490795e893cae4bddd684 b/tests/gitea-repositories-meta/user2/glob.git/objects/ae/d1ffed24cc3cf9b80490795e893cae4bddd684 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/ae/d1ffed24cc3cf9b80490795e893cae4bddd684 rename to tests/gitea-repositories-meta/user2/glob.git/objects/ae/d1ffed24cc3cf9b80490795e893cae4bddd684 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/bf/d6a6583f9a9ac59bd726c1df26c64a89427ede b/tests/gitea-repositories-meta/user2/glob.git/objects/bf/d6a6583f9a9ac59bd726c1df26c64a89427ede similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/bf/d6a6583f9a9ac59bd726c1df26c64a89427ede rename to tests/gitea-repositories-meta/user2/glob.git/objects/bf/d6a6583f9a9ac59bd726c1df26c64a89427ede diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a b/tests/gitea-repositories-meta/user2/glob.git/objects/c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a rename to tests/gitea-repositories-meta/user2/glob.git/objects/c8/eb3b6c767ccb68411d0a1f6c769be69fb4d95a diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 b/tests/gitea-repositories-meta/user2/glob.git/objects/de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 rename to tests/gitea-repositories-meta/user2/glob.git/objects/de/6be43fe8eb19ca3f4e934cb8b9a9a0b20fe865 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/objects/ef/6b814b610d8e7717aa0f71fbe5842bcf814697 b/tests/gitea-repositories-meta/user2/glob.git/objects/ef/6b814b610d8e7717aa0f71fbe5842bcf814697 similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/objects/ef/6b814b610d8e7717aa0f71fbe5842bcf814697 rename to tests/gitea-repositories-meta/user2/glob.git/objects/ef/6b814b610d8e7717aa0f71fbe5842bcf814697 diff --git a/integrations/gitea-repositories-meta/user2/glob.git/refs/heads/master b/tests/gitea-repositories-meta/user2/glob.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/glob.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/glob.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/HEAD b/tests/gitea-repositories-meta/user2/repo1.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/HEAD rename to tests/gitea-repositories-meta/user2/repo1.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/config b/tests/gitea-repositories-meta/user2/repo1.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/config rename to tests/gitea-repositories-meta/user2/repo1.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/description b/tests/gitea-repositories-meta/user2/repo1.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/description rename to tests/gitea-repositories-meta/user2/repo1.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/post-receive b/tests/gitea-repositories-meta/user2/repo1.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/post-receive rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo1.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive b/tests/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/update b/tests/gitea-repositories-meta/user2/repo1.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/update rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user2/repo1.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user2/repo1.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/info/exclude b/tests/gitea-repositories-meta/user2/repo1.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo1.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/info/refs b/tests/gitea-repositories-meta/user2/repo1.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/info/refs rename to tests/gitea-repositories-meta/user2/repo1.git/info/refs diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba b/tests/gitea-repositories-meta/user2/repo1.git/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba rename to tests/gitea-repositories-meta/user2/repo1.git/objects/00/750edc07d6415dcc07ae0351e9397b0222b7ba diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 b/tests/gitea-repositories-meta/user2/repo1.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/2a/2f1d4670728a2e10049e345bd7a276468beab6 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 b/tests/gitea-repositories-meta/user2/repo1.git/objects/3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/3f/a2f829675543ecfc16b2891aebe8bf0608a8f4 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/4a/357436d925b5c974181ff12a994538ddc5a269 b/tests/gitea-repositories-meta/user2/repo1.git/objects/4a/357436d925b5c974181ff12a994538ddc5a269 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/4a/357436d925b5c974181ff12a994538ddc5a269 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/4a/357436d925b5c974181ff12a994538ddc5a269 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f b/tests/gitea-repositories-meta/user2/repo1.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f rename to tests/gitea-repositories-meta/user2/repo1.git/objects/4b/4851ad51df6a7d9f25c979345979eaeb5b349f diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 b/tests/gitea-repositories-meta/user2/repo1.git/objects/5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/5c/050d3b6d2db231ab1f64e324f1b6b9a0b181c2 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd b/tests/gitea-repositories-meta/user2/repo1.git/objects/5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd rename to tests/gitea-repositories-meta/user2/repo1.git/objects/5f/22f7d0d95d614d25a5b68592adb345a4b5c7fd diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/62/fb502a7172d4453f0322a2cc85bddffa57f07a b/tests/gitea-repositories-meta/user2/repo1.git/objects/62/fb502a7172d4453f0322a2cc85bddffa57f07a similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/62/fb502a7172d4453f0322a2cc85bddffa57f07a rename to tests/gitea-repositories-meta/user2/repo1.git/objects/62/fb502a7172d4453f0322a2cc85bddffa57f07a diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d b/tests/gitea-repositories-meta/user2/repo1.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d rename to tests/gitea-repositories-meta/user2/repo1.git/objects/65/f1bf27bc3bf70f64657658635e66094edbcb4d diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb b/tests/gitea-repositories-meta/user2/repo1.git/objects/6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb rename to tests/gitea-repositories-meta/user2/repo1.git/objects/6a/a3a5385611c5eb8986c9961a9c34a93cbaadfb diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/7c/4df115542e05c700f297519e906fd63c9c9804 b/tests/gitea-repositories-meta/user2/repo1.git/objects/7c/4df115542e05c700f297519e906fd63c9c9804 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/7c/4df115542e05c700f297519e906fd63c9c9804 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/7c/4df115542e05c700f297519e906fd63c9c9804 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 b/tests/gitea-repositories-meta/user2/repo1.git/objects/90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/90/dcd07da077d1e7cd6032b52d1f79ae2b5f19b2 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/94/922e1295c678267de1193b7b84ad8a086c27f9 b/tests/gitea-repositories-meta/user2/repo1.git/objects/94/922e1295c678267de1193b7b84ad8a086c27f9 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/94/922e1295c678267de1193b7b84ad8a086c27f9 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/94/922e1295c678267de1193b7b84ad8a086c27f9 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/98/5f0301dba5e7b34be866819cd15ad3d8f508ee b/tests/gitea-repositories-meta/user2/repo1.git/objects/98/5f0301dba5e7b34be866819cd15ad3d8f508ee similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/98/5f0301dba5e7b34be866819cd15ad3d8f508ee rename to tests/gitea-repositories-meta/user2/repo1.git/objects/98/5f0301dba5e7b34be866819cd15ad3d8f508ee diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a b/tests/gitea-repositories-meta/user2/repo1.git/objects/a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a rename to tests/gitea-repositories-meta/user2/repo1.git/objects/a6/9277c81e90b98a7c0ab25b042a6e296da8eb9a diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d b/tests/gitea-repositories-meta/user2/repo1.git/objects/a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d rename to tests/gitea-repositories-meta/user2/repo1.git/objects/a7/57c0ea621e63d0fd6fc353a175fdc7199e5d1d diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/b2/60587271671842af0b036e4fe643c9d45b7ddd b/tests/gitea-repositories-meta/user2/repo1.git/objects/b2/60587271671842af0b036e4fe643c9d45b7ddd similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/b2/60587271671842af0b036e4fe643c9d45b7ddd rename to tests/gitea-repositories-meta/user2/repo1.git/objects/b2/60587271671842af0b036e4fe643c9d45b7ddd diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 b/tests/gitea-repositories-meta/user2/repo1.git/objects/d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/d4/a1a6dcf7bd42891f264d484e80dac7e66b5410 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 b/tests/gitea-repositories-meta/user2/repo1.git/objects/d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/d7/bd5b8cfb680f460e37b6fd7cf74c284e059118 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/dc/7a8ba127fee870dd683310ce660dfe59333a1b b/tests/gitea-repositories-meta/user2/repo1.git/objects/dc/7a8ba127fee870dd683310ce660dfe59333a1b similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/dc/7a8ba127fee870dd683310ce660dfe59333a1b rename to tests/gitea-repositories-meta/user2/repo1.git/objects/dc/7a8ba127fee870dd683310ce660dfe59333a1b diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/dd/59742c0f6672911f2b64cba5711ac00593ed32 b/tests/gitea-repositories-meta/user2/repo1.git/objects/dd/59742c0f6672911f2b64cba5711ac00593ed32 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/dd/59742c0f6672911f2b64cba5711ac00593ed32 rename to tests/gitea-repositories-meta/user2/repo1.git/objects/dd/59742c0f6672911f2b64cba5711ac00593ed32 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/objects/info/packs b/tests/gitea-repositories-meta/user2/repo1.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/objects/info/packs rename to tests/gitea-repositories-meta/user2/repo1.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/DefaultBranch b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/DefaultBranch similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/DefaultBranch rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/DefaultBranch diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/branch2 b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/branch2 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/branch2 rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/branch2 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/develop b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/develop similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/develop rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/develop diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/feature/1 b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/feature/1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/feature/1 rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/feature/1 diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/pr-to-update b/tests/gitea-repositories-meta/user2/repo1.git/refs/heads/pr-to-update similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/heads/pr-to-update rename to tests/gitea-repositories-meta/user2/repo1.git/refs/heads/pr-to-update diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/notes/commits b/tests/gitea-repositories-meta/user2/repo1.git/refs/notes/commits similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/notes/commits rename to tests/gitea-repositories-meta/user2/repo1.git/refs/notes/commits diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/2/head b/tests/gitea-repositories-meta/user2/repo1.git/refs/pull/2/head similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/2/head rename to tests/gitea-repositories-meta/user2/repo1.git/refs/pull/2/head diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/3/head b/tests/gitea-repositories-meta/user2/repo1.git/refs/pull/3/head similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/3/head rename to tests/gitea-repositories-meta/user2/repo1.git/refs/pull/3/head diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/5/head b/tests/gitea-repositories-meta/user2/repo1.git/refs/pull/5/head similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/pull/5/head rename to tests/gitea-repositories-meta/user2/repo1.git/refs/pull/5/head diff --git a/integrations/gitea-repositories-meta/user2/repo1.git/refs/tags/v1.1 b/tests/gitea-repositories-meta/user2/repo1.git/refs/tags/v1.1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.git/refs/tags/v1.1 rename to tests/gitea-repositories-meta/user2/repo1.git/refs/tags/v1.1 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/HEAD b/tests/gitea-repositories-meta/user2/repo1.wiki.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/HEAD rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/config b/tests/gitea-repositories-meta/user2/repo1.wiki.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/config rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/description b/tests/gitea-repositories-meta/user2/repo1.wiki.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/description rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/info/exclude b/tests/gitea-repositories-meta/user2/repo1.wiki.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/0d/ca5bd9b5d7ef937710e056f575e86c0184ba85 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/2c/54faec6c45d31c1abfaecdab471eac6633738a diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/89/43a1d5f93c00439d5ffc0f8e36f5d60abae46c diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/e5/3d079e581fbfdea1075a54d5b621eab0090e52 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/ea/82fc8777a24b07c26b3a4bf4e2742c03733eab diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 b/tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 diff --git a/integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/repo1.wiki.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/HEAD b/tests/gitea-repositories-meta/user2/repo15.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/HEAD rename to tests/gitea-repositories-meta/user2/repo15.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/config b/tests/gitea-repositories-meta/user2/repo15.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/config rename to tests/gitea-repositories-meta/user2/repo15.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/description b/tests/gitea-repositories-meta/user2/repo15.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/description rename to tests/gitea-repositories-meta/user2/repo15.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/post-receive b/tests/gitea-repositories-meta/user2/repo15.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/post-receive rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo15.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive b/tests/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/update b/tests/gitea-repositories-meta/user2/repo15.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/update rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user2/repo15.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user2/repo15.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo15.git/info/exclude b/tests/gitea-repositories-meta/user2/repo15.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo15.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo15.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/HEAD b/tests/gitea-repositories-meta/user2/repo16.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/HEAD rename to tests/gitea-repositories-meta/user2/repo16.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/config b/tests/gitea-repositories-meta/user2/repo16.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/config rename to tests/gitea-repositories-meta/user2/repo16.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/description b/tests/gitea-repositories-meta/user2/repo16.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/description rename to tests/gitea-repositories-meta/user2/repo16.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/info/exclude b/tests/gitea-repositories-meta/user2/repo16.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo16.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 b/tests/gitea-repositories-meta/user2/repo16.git/objects/0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/0c/3d59dea27b97aa3cb66072745d7a2c51a7a8b1 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/24/f83a471f77579fea57bac7255d6e64e70fce1c b/tests/gitea-repositories-meta/user2/repo16.git/objects/24/f83a471f77579fea57bac7255d6e64e70fce1c similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/24/f83a471f77579fea57bac7255d6e64e70fce1c rename to tests/gitea-repositories-meta/user2/repo16.git/objects/24/f83a471f77579fea57bac7255d6e64e70fce1c diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/27/566bd5738fc8b4e3fef3c5e72cce608537bd95 b/tests/gitea-repositories-meta/user2/repo16.git/objects/27/566bd5738fc8b4e3fef3c5e72cce608537bd95 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/27/566bd5738fc8b4e3fef3c5e72cce608537bd95 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/27/566bd5738fc8b4e3fef3c5e72cce608537bd95 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f b/tests/gitea-repositories-meta/user2/repo16.git/objects/3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f rename to tests/gitea-repositories-meta/user2/repo16.git/objects/3b/2b54fe3d9a8279d5b926124dccdf279b8eff2f diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/45/8121ce9a6b855c9733bae62093caf3f39685de b/tests/gitea-repositories-meta/user2/repo16.git/objects/45/8121ce9a6b855c9733bae62093caf3f39685de similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/45/8121ce9a6b855c9733bae62093caf3f39685de rename to tests/gitea-repositories-meta/user2/repo16.git/objects/45/8121ce9a6b855c9733bae62093caf3f39685de diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/50/99b81332712fe655e34e8dd63574f503f61811 b/tests/gitea-repositories-meta/user2/repo16.git/objects/50/99b81332712fe655e34e8dd63574f503f61811 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/50/99b81332712fe655e34e8dd63574f503f61811 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/50/99b81332712fe655e34e8dd63574f503f61811 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/69/554a64c1e6030f051e5c3f94bfbd773cd6a324 b/tests/gitea-repositories-meta/user2/repo16.git/objects/69/554a64c1e6030f051e5c3f94bfbd773cd6a324 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/69/554a64c1e6030f051e5c3f94bfbd773cd6a324 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/69/554a64c1e6030f051e5c3f94bfbd773cd6a324 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/a4/3476a501516e065c5a82f05fd58fd319598bc1 b/tests/gitea-repositories-meta/user2/repo16.git/objects/a4/3476a501516e065c5a82f05fd58fd319598bc1 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/a4/3476a501516e065c5a82f05fd58fd319598bc1 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/a4/3476a501516e065c5a82f05fd58fd319598bc1 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac b/tests/gitea-repositories-meta/user2/repo16.git/objects/e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac rename to tests/gitea-repositories-meta/user2/repo16.git/objects/e9/4083fcdf1f10c545e9253a23c5e44a2ff68aac diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 b/tests/gitea-repositories-meta/user2/repo16.git/objects/f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/f2/7c2b2b03dcab38beaf89b0ab4ff61f6de63441 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/objects/f9/0451c72ef61a7645293d17b47be7a8e983da57 b/tests/gitea-repositories-meta/user2/repo16.git/objects/f9/0451c72ef61a7645293d17b47be7a8e983da57 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/objects/f9/0451c72ef61a7645293d17b47be7a8e983da57 rename to tests/gitea-repositories-meta/user2/repo16.git/objects/f9/0451c72ef61a7645293d17b47be7a8e983da57 diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign b/tests/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign rename to tests/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign-not-yet-validated b/tests/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign-not-yet-validated similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign-not-yet-validated rename to tests/gitea-repositories-meta/user2/repo16.git/refs/heads/good-sign-not-yet-validated diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo16.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/repo16.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/not-signed b/tests/gitea-repositories-meta/user2/repo16.git/refs/heads/not-signed similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo16.git/refs/heads/not-signed rename to tests/gitea-repositories-meta/user2/repo16.git/refs/heads/not-signed diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/HEAD b/tests/gitea-repositories-meta/user2/repo2.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/HEAD rename to tests/gitea-repositories-meta/user2/repo2.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/config b/tests/gitea-repositories-meta/user2/repo2.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/config rename to tests/gitea-repositories-meta/user2/repo2.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/description b/tests/gitea-repositories-meta/user2/repo2.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/description rename to tests/gitea-repositories-meta/user2/repo2.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/info/exclude b/tests/gitea-repositories-meta/user2/repo2.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo2.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/info/refs b/tests/gitea-repositories-meta/user2/repo2.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/info/refs rename to tests/gitea-repositories-meta/user2/repo2.git/info/refs diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/0a/7d8b41ae9763e9a1743917396839d1791d49d0 b/tests/gitea-repositories-meta/user2/repo2.git/objects/0a/7d8b41ae9763e9a1743917396839d1791d49d0 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/0a/7d8b41ae9763e9a1743917396839d1791d49d0 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/0a/7d8b41ae9763e9a1743917396839d1791d49d0 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 b/tests/gitea-repositories-meta/user2/repo2.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/0c/f15c3f66ec8384480ed9c3cf87c9e97fbb0ec3 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 b/tests/gitea-repositories-meta/user2/repo2.git/objects/10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/10/32bbf17fbc0d9c95bb5418dabe8f8c99278700 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/1c/887eaa8d81fa86da7695d8f635cf17813eb422 b/tests/gitea-repositories-meta/user2/repo2.git/objects/1c/887eaa8d81fa86da7695d8f635cf17813eb422 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/1c/887eaa8d81fa86da7695d8f635cf17813eb422 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/1c/887eaa8d81fa86da7695d8f635cf17813eb422 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/26/f842bcad37fa40a1bb34cbb5ee219ee35d863d b/tests/gitea-repositories-meta/user2/repo2.git/objects/26/f842bcad37fa40a1bb34cbb5ee219ee35d863d similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/26/f842bcad37fa40a1bb34cbb5ee219ee35d863d rename to tests/gitea-repositories-meta/user2/repo2.git/objects/26/f842bcad37fa40a1bb34cbb5ee219ee35d863d diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 b/tests/gitea-repositories-meta/user2/repo2.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/32/5dc4f8e9344e6668f21536a69d5f1d4ed53ca3 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/36/fff01c8c9f722d49d53186abd27b5be8d85338 b/tests/gitea-repositories-meta/user2/repo2.git/objects/36/fff01c8c9f722d49d53186abd27b5be8d85338 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/36/fff01c8c9f722d49d53186abd27b5be8d85338 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/36/fff01c8c9f722d49d53186abd27b5be8d85338 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 b/tests/gitea-repositories-meta/user2/repo2.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/42/3313fbd38093bb10d0c8387db9105409c6f196 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc b/tests/gitea-repositories-meta/user2/repo2.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc rename to tests/gitea-repositories-meta/user2/repo2.git/objects/71/911bf48766c7181518c1070911019fbb00b1fc diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 b/tests/gitea-repositories-meta/user2/repo2.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/72/fc6251cc648e914c10009d31431fa2e38b9a20 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e b/tests/gitea-repositories-meta/user2/repo2.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e rename to tests/gitea-repositories-meta/user2/repo2.git/objects/74/d5a0d73db9b9ef7aa9978eb7a099b08f54d45e diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 b/tests/gitea-repositories-meta/user2/repo2.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/7c/d7c8fa852973c72c66eb120a6677c54a8697f7 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/ba/1aed4e2ea2443d76cec241b96be4ec990852ec b/tests/gitea-repositories-meta/user2/repo2.git/objects/ba/1aed4e2ea2443d76cec241b96be4ec990852ec similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/ba/1aed4e2ea2443d76cec241b96be4ec990852ec rename to tests/gitea-repositories-meta/user2/repo2.git/objects/ba/1aed4e2ea2443d76cec241b96be4ec990852ec diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 b/tests/gitea-repositories-meta/user2/repo2.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/c1/0d10b7e655b3dab1f53176db57c8219a5488d6 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 b/tests/gitea-repositories-meta/user2/repo2.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/c4/b38c3e1395393f75bbbc2ed10c7eeb577d3b64 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 b/tests/gitea-repositories-meta/user2/repo2.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 rename to tests/gitea-repositories-meta/user2/repo2.git/objects/f5/05ec9b5c7a45a10259c1dda7f18434e5d55940 diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/info/commit-graph b/tests/gitea-repositories-meta/user2/repo2.git/objects/info/commit-graph similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/info/commit-graph rename to tests/gitea-repositories-meta/user2/repo2.git/objects/info/commit-graph diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/info/packs b/tests/gitea-repositories-meta/user2/repo2.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/info/packs rename to tests/gitea-repositories-meta/user2/repo2.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap b/tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap rename to tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.bitmap diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx b/tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx rename to tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.idx diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack b/tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack rename to tests/gitea-repositories-meta/user2/repo2.git/objects/pack/pack-a2f7ad943b3d857eb3ebdb4b35eeef38f63cf5d2.pack diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/packed-refs b/tests/gitea-repositories-meta/user2/repo2.git/packed-refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/packed-refs rename to tests/gitea-repositories-meta/user2/repo2.git/packed-refs diff --git a/integrations/gitea-repositories-meta/user2/repo2.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo2.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo2.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/repo2.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/HEAD b/tests/gitea-repositories-meta/user2/repo20.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/HEAD rename to tests/gitea-repositories-meta/user2/repo20.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/config b/tests/gitea-repositories-meta/user2/repo20.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/config rename to tests/gitea-repositories-meta/user2/repo20.git/config diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/description b/tests/gitea-repositories-meta/user2/repo20.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/description rename to tests/gitea-repositories-meta/user2/repo20.git/description diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive b/tests/gitea-repositories-meta/user2/repo20.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive b/tests/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/update b/tests/gitea-repositories-meta/user2/repo20.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/update rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user2/repo20.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/info/exclude b/tests/gitea-repositories-meta/user2/repo20.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/info/exclude rename to tests/gitea-repositories-meta/user2/repo20.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/info/refs b/tests/gitea-repositories-meta/user2/repo20.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/info/refs rename to tests/gitea-repositories-meta/user2/repo20.git/info/refs diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 b/tests/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/02/15cbe13d2695a2c3464ab5e59f47f37c3ff5d5 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 b/tests/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/05/81d7edf45206787ff93956ea892e8a2ae77604 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 b/tests/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/1b/271d83842d348b1ee71d8e6ead400aaeb4d1b5 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 b/tests/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/29/5ba6ac57fdd46f62a51272f40e60b6dea697b2 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 b/tests/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/2c/ec0f7069ed09d934e904c49f414d8bdf818ce4 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee b/tests/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee rename to tests/gitea-repositories-meta/user2/repo20.git/objects/41/4a282859758ba7b159bfbd9c2b193eb8f135ee diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 b/tests/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/80/8038d2f71b0ab020991439cffd24309c7bc530 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 b/tests/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/83/70977f63979e140b6b58992b1fdb4098b24cd9 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 b/tests/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/8c/e1dee41e1a3700819a9a309f275f8dc7b7e0b6 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d b/tests/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d rename to tests/gitea-repositories-meta/user2/repo20.git/objects/ba/3aeafe10402c6b29535a58d91def7e43638d9d diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf b/tests/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf rename to tests/gitea-repositories-meta/user2/repo20.git/objects/c5/0ac6b9e25abb8200bb377755367d7265c581cf diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a b/tests/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a rename to tests/gitea-repositories-meta/user2/repo20.git/objects/ce/013625030ba8dba906f756967f9e9ca394464a diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 b/tests/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 rename to tests/gitea-repositories-meta/user2/repo20.git/objects/db/89c972fc57862eae378f45b74aca228037d415 diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/objects/info/packs b/tests/gitea-repositories-meta/user2/repo20.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/objects/info/packs rename to tests/gitea-repositories-meta/user2/repo20.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user2/repo20.git/refs/heads/master b/tests/gitea-repositories-meta/user2/repo20.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/repo20.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/repo20.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/HEAD b/tests/gitea-repositories-meta/user2/utf8.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/HEAD rename to tests/gitea-repositories-meta/user2/utf8.git/HEAD diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/config b/tests/gitea-repositories-meta/user2/utf8.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/config rename to tests/gitea-repositories-meta/user2/utf8.git/config diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/description b/tests/gitea-repositories-meta/user2/utf8.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/description rename to tests/gitea-repositories-meta/user2/utf8.git/description diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/post-receive b/tests/gitea-repositories-meta/user2/utf8.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/post-receive rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user2/utf8.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive b/tests/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/update b/tests/gitea-repositories-meta/user2/utf8.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/update rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user2/utf8.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user2/utf8.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/info/exclude b/tests/gitea-repositories-meta/user2/utf8.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/info/exclude rename to tests/gitea-repositories-meta/user2/utf8.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/info/refs b/tests/gitea-repositories-meta/user2/utf8.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/info/refs rename to tests/gitea-repositories-meta/user2/utf8.git/info/refs diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/14/c42687126acae9d1ad41d7bdb528f811065a6a b/tests/gitea-repositories-meta/user2/utf8.git/objects/14/c42687126acae9d1ad41d7bdb528f811065a6a similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/14/c42687126acae9d1ad41d7bdb528f811065a6a rename to tests/gitea-repositories-meta/user2/utf8.git/objects/14/c42687126acae9d1ad41d7bdb528f811065a6a diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/1d/5e00f305a7ca6a8a94e65456820a6d260adab8 b/tests/gitea-repositories-meta/user2/utf8.git/objects/1d/5e00f305a7ca6a8a94e65456820a6d260adab8 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/1d/5e00f305a7ca6a8a94e65456820a6d260adab8 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/1d/5e00f305a7ca6a8a94e65456820a6d260adab8 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/28/d579e4920fbf4f66e71dab3e779d9fbf41422a b/tests/gitea-repositories-meta/user2/utf8.git/objects/28/d579e4920fbf4f66e71dab3e779d9fbf41422a similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/28/d579e4920fbf4f66e71dab3e779d9fbf41422a rename to tests/gitea-repositories-meta/user2/utf8.git/objects/28/d579e4920fbf4f66e71dab3e779d9fbf41422a diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b b/tests/gitea-repositories-meta/user2/utf8.git/objects/3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b rename to tests/gitea-repositories-meta/user2/utf8.git/objects/3a/810dbf6b96afaa8c5f69a8b6ec1dabfca7368b diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/a73c3499bff049a352b4e265575373e964b89a b/tests/gitea-repositories-meta/user2/utf8.git/objects/3a/a73c3499bff049a352b4e265575373e964b89a similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/a73c3499bff049a352b4e265575373e964b89a rename to tests/gitea-repositories-meta/user2/utf8.git/objects/3a/a73c3499bff049a352b4e265575373e964b89a diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 b/tests/gitea-repositories-meta/user2/utf8.git/objects/3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/3a/c6084110205f98174c4f1ec7e78cb21a15dfc2 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a b/tests/gitea-repositories-meta/user2/utf8.git/objects/4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a rename to tests/gitea-repositories-meta/user2/utf8.git/objects/4c/61dd0a799e0830e77edfe6c74f7c349bc8e62a diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/50/4d9fe743979d4e9785a25a363c7007293f0838 b/tests/gitea-repositories-meta/user2/utf8.git/objects/50/4d9fe743979d4e9785a25a363c7007293f0838 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/50/4d9fe743979d4e9785a25a363c7007293f0838 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/50/4d9fe743979d4e9785a25a363c7007293f0838 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/56/92bcf9f7c9eacb1ad68442161f2573877f96f4 b/tests/gitea-repositories-meta/user2/utf8.git/objects/56/92bcf9f7c9eacb1ad68442161f2573877f96f4 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/56/92bcf9f7c9eacb1ad68442161f2573877f96f4 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/56/92bcf9f7c9eacb1ad68442161f2573877f96f4 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/59/e2c41e8f5140bb0182acebec17c8ad9831cc62 b/tests/gitea-repositories-meta/user2/utf8.git/objects/59/e2c41e8f5140bb0182acebec17c8ad9831cc62 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/59/e2c41e8f5140bb0182acebec17c8ad9831cc62 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/59/e2c41e8f5140bb0182acebec17c8ad9831cc62 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/64/89894ad11093fdc49c0ed857d80682344a7264 b/tests/gitea-repositories-meta/user2/utf8.git/objects/64/89894ad11093fdc49c0ed857d80682344a7264 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/64/89894ad11093fdc49c0ed857d80682344a7264 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/64/89894ad11093fdc49c0ed857d80682344a7264 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/6d/0c79ce3401c67d1ad522e61c47083a9fdee16c b/tests/gitea-repositories-meta/user2/utf8.git/objects/6d/0c79ce3401c67d1ad522e61c47083a9fdee16c similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/6d/0c79ce3401c67d1ad522e61c47083a9fdee16c rename to tests/gitea-repositories-meta/user2/utf8.git/objects/6d/0c79ce3401c67d1ad522e61c47083a9fdee16c diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/84/7c6d93c6860dd377651245711b7fbcd34a18d4 b/tests/gitea-repositories-meta/user2/utf8.git/objects/84/7c6d93c6860dd377651245711b7fbcd34a18d4 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/84/7c6d93c6860dd377651245711b7fbcd34a18d4 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/84/7c6d93c6860dd377651245711b7fbcd34a18d4 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/9b/9cc8f558d1c4f815592496fa24308ba2a9c824 b/tests/gitea-repositories-meta/user2/utf8.git/objects/9b/9cc8f558d1c4f815592496fa24308ba2a9c824 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/9b/9cc8f558d1c4f815592496fa24308ba2a9c824 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/9b/9cc8f558d1c4f815592496fa24308ba2a9c824 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad b/tests/gitea-repositories-meta/user2/utf8.git/objects/a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad rename to tests/gitea-repositories-meta/user2/utf8.git/objects/a4/f1bb3f2f8c6a0e840e935812ef4903ce515dad diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/a9/a61830fbf4e84999d3b20cf178954366701fe5 b/tests/gitea-repositories-meta/user2/utf8.git/objects/a9/a61830fbf4e84999d3b20cf178954366701fe5 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/a9/a61830fbf4e84999d3b20cf178954366701fe5 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/a9/a61830fbf4e84999d3b20cf178954366701fe5 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/c7/85b65bf16928b58567cb23669125c0ccd25a4f b/tests/gitea-repositories-meta/user2/utf8.git/objects/c7/85b65bf16928b58567cb23669125c0ccd25a4f similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/c7/85b65bf16928b58567cb23669125c0ccd25a4f rename to tests/gitea-repositories-meta/user2/utf8.git/objects/c7/85b65bf16928b58567cb23669125c0ccd25a4f diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/e9/63733b8a355cf860c465b4af7b236a6ef08783 b/tests/gitea-repositories-meta/user2/utf8.git/objects/e9/63733b8a355cf860c465b4af7b236a6ef08783 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/e9/63733b8a355cf860c465b4af7b236a6ef08783 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/e9/63733b8a355cf860c465b4af7b236a6ef08783 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 b/tests/gitea-repositories-meta/user2/utf8.git/objects/eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/eb/f146f803fccbc1471ef01d8fa0fe12c14e61a5 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/ee/9686cb562f492f64381bff7f298b2a1c67a141 b/tests/gitea-repositories-meta/user2/utf8.git/objects/ee/9686cb562f492f64381bff7f298b2a1c67a141 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/ee/9686cb562f492f64381bff7f298b2a1c67a141 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/ee/9686cb562f492f64381bff7f298b2a1c67a141 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 b/tests/gitea-repositories-meta/user2/utf8.git/objects/f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 rename to tests/gitea-repositories-meta/user2/utf8.git/objects/f4/02ff67c0b3161c3988dbf6188e6e0df257fd75 diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/objects/info/packs b/tests/gitea-repositories-meta/user2/utf8.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/objects/info/packs rename to tests/gitea-repositories-meta/user2/utf8.git/objects/info/packs diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/Gr\303\274\303\237en" diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/Plus+Is+Not+Space b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/Plus+Is+Not+Space similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/Plus+Is+Not+Space rename to tests/gitea-repositories-meta/user2/utf8.git/refs/heads/Plus+Is+Not+Space diff --git a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/master b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/master rename to tests/gitea-repositories-meta/user2/utf8.git/refs/heads/master diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\223\320\273\320\260\320\262\320\275\320\260\321\217\320\222\320\265\321\202\320\272\320\260" diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\320\260/\320\261/\320\262" diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/heads/\343\203\226\343\203\251\343\203\263\343\203\201" diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\201/\344\272\272" diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\320\242\321\215\320\263" diff --git "a/integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" "b/tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" similarity index 100% rename from "integrations/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" rename to "tests/gitea-repositories-meta/user2/utf8.git/refs/tags/\343\202\277\343\202\260" diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/HEAD b/tests/gitea-repositories-meta/user27/repo49.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/HEAD rename to tests/gitea-repositories-meta/user27/repo49.git/HEAD diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/config b/tests/gitea-repositories-meta/user27/repo49.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/config rename to tests/gitea-repositories-meta/user27/repo49.git/config diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/description b/tests/gitea-repositories-meta/user27/repo49.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/description rename to tests/gitea-repositories-meta/user27/repo49.git/description diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/post-receive b/tests/gitea-repositories-meta/user27/repo49.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/post-receive rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user27/repo49.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive b/tests/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/update b/tests/gitea-repositories-meta/user27/repo49.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/update rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user27/repo49.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user27/repo49.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/info/exclude b/tests/gitea-repositories-meta/user27/repo49.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/info/exclude rename to tests/gitea-repositories-meta/user27/repo49.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/info/refs b/tests/gitea-repositories-meta/user27/repo49.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/info/refs rename to tests/gitea-repositories-meta/user27/repo49.git/info/refs diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 b/tests/gitea-repositories-meta/user27/repo49.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 rename to tests/gitea-repositories-meta/user27/repo49.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d b/tests/gitea-repositories-meta/user27/repo49.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d rename to tests/gitea-repositories-meta/user27/repo49.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 b/tests/gitea-repositories-meta/user27/repo49.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 rename to tests/gitea-repositories-meta/user27/repo49.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 b/tests/gitea-repositories-meta/user27/repo49.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 rename to tests/gitea-repositories-meta/user27/repo49.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 b/tests/gitea-repositories-meta/user27/repo49.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 rename to tests/gitea-repositories-meta/user27/repo49.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb b/tests/gitea-repositories-meta/user27/repo49.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb rename to tests/gitea-repositories-meta/user27/repo49.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f b/tests/gitea-repositories-meta/user27/repo49.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f rename to tests/gitea-repositories-meta/user27/repo49.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/objects/info/packs b/tests/gitea-repositories-meta/user27/repo49.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/objects/info/packs rename to tests/gitea-repositories-meta/user27/repo49.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/refs/heads/master b/tests/gitea-repositories-meta/user27/repo49.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/refs/heads/master rename to tests/gitea-repositories-meta/user27/repo49.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user27/repo49.git/refs/heads/test/archive b/tests/gitea-repositories-meta/user27/repo49.git/refs/heads/test/archive similarity index 100% rename from integrations/gitea-repositories-meta/user27/repo49.git/refs/heads/test/archive rename to tests/gitea-repositories-meta/user27/repo49.git/refs/heads/test/archive diff --git a/integrations/gitea-repositories-meta/user27/template1.git/HEAD b/tests/gitea-repositories-meta/user27/template1.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/HEAD rename to tests/gitea-repositories-meta/user27/template1.git/HEAD diff --git a/integrations/gitea-repositories-meta/user27/template1.git/config b/tests/gitea-repositories-meta/user27/template1.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/config rename to tests/gitea-repositories-meta/user27/template1.git/config diff --git a/integrations/gitea-repositories-meta/user27/template1.git/description b/tests/gitea-repositories-meta/user27/template1.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/description rename to tests/gitea-repositories-meta/user27/template1.git/description diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/post-receive b/tests/gitea-repositories-meta/user27/template1.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/post-receive rename to tests/gitea-repositories-meta/user27/template1.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user27/template1.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user27/template1.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/pre-receive b/tests/gitea-repositories-meta/user27/template1.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user27/template1.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user27/template1.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user27/template1.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/update b/tests/gitea-repositories-meta/user27/template1.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/update rename to tests/gitea-repositories-meta/user27/template1.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user27/template1.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user27/template1.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user27/template1.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user27/template1.git/info/exclude b/tests/gitea-repositories-meta/user27/template1.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/info/exclude rename to tests/gitea-repositories-meta/user27/template1.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user27/template1.git/info/refs b/tests/gitea-repositories-meta/user27/template1.git/info/refs similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/info/refs rename to tests/gitea-repositories-meta/user27/template1.git/info/refs diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 b/tests/gitea-repositories-meta/user27/template1.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 rename to tests/gitea-repositories-meta/user27/template1.git/objects/47/34b1f84a367fa1b81c31aa4234a5bad11cafa3 diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d b/tests/gitea-repositories-meta/user27/template1.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d rename to tests/gitea-repositories-meta/user27/template1.git/objects/4d/31f3a12656368a8d9180f431d40d0fc408be2d diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 b/tests/gitea-repositories-meta/user27/template1.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 rename to tests/gitea-repositories-meta/user27/template1.git/objects/51/f84af231345367fd5d61ceb89efb3b6d757061 diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 b/tests/gitea-repositories-meta/user27/template1.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 rename to tests/gitea-repositories-meta/user27/template1.git/objects/79/3aa682b06ae032641abf70c5dfeade28c07c52 diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 b/tests/gitea-repositories-meta/user27/template1.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 rename to tests/gitea-repositories-meta/user27/template1.git/objects/aa/cbdfe9e1c4b47f60abe81849045fa4e96f1d75 diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb b/tests/gitea-repositories-meta/user27/template1.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb rename to tests/gitea-repositories-meta/user27/template1.git/objects/dd/392e939ea4936b2459219c9c9a1f25547ccaeb diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f b/tests/gitea-repositories-meta/user27/template1.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f rename to tests/gitea-repositories-meta/user27/template1.git/objects/f2/8eeca3df7614fd4f10c1030f13feb418ef3c6f diff --git a/integrations/gitea-repositories-meta/user27/template1.git/objects/info/packs b/tests/gitea-repositories-meta/user27/template1.git/objects/info/packs similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/objects/info/packs rename to tests/gitea-repositories-meta/user27/template1.git/objects/info/packs diff --git a/integrations/gitea-repositories-meta/user27/template1.git/refs/heads/master b/tests/gitea-repositories-meta/user27/template1.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user27/template1.git/refs/heads/master rename to tests/gitea-repositories-meta/user27/template1.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/HEAD b/tests/gitea-repositories-meta/user3/repo3.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/HEAD rename to tests/gitea-repositories-meta/user3/repo3.git/HEAD diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/config b/tests/gitea-repositories-meta/user3/repo3.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/config rename to tests/gitea-repositories-meta/user3/repo3.git/config diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/description b/tests/gitea-repositories-meta/user3/repo3.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/description rename to tests/gitea-repositories-meta/user3/repo3.git/description diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/post-receive b/tests/gitea-repositories-meta/user3/repo3.git/hooks/post-receive similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/post-receive rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/post-receive diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/post-receive.d/gitea b/tests/gitea-repositories-meta/user3/repo3.git/hooks/post-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/post-receive.d/gitea rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/post-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive b/tests/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive.d/gitea b/tests/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive.d/gitea rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/pre-receive.d/gitea diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/update b/tests/gitea-repositories-meta/user3/repo3.git/hooks/update similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/update rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/update diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/hooks/update.d/gitea b/tests/gitea-repositories-meta/user3/repo3.git/hooks/update.d/gitea similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/hooks/update.d/gitea rename to tests/gitea-repositories-meta/user3/repo3.git/hooks/update.d/gitea diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/info/exclude b/tests/gitea-repositories-meta/user3/repo3.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/info/exclude rename to tests/gitea-repositories-meta/user3/repo3.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240 b/tests/gitea-repositories-meta/user3/repo3.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240 similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240 rename to tests/gitea-repositories-meta/user3/repo3.git/objects/20/ade30d25e0ecaeec84e7f542a8456900858240 diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588 b/tests/gitea-repositories-meta/user3/repo3.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588 similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588 rename to tests/gitea-repositories-meta/user3/repo3.git/objects/27/74debeea6dc742cc4971a92db0e08b95b60588 diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 b/tests/gitea-repositories-meta/user3/repo3.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 rename to tests/gitea-repositories-meta/user3/repo3.git/objects/2a/47ca4b614a9f5a43abbd5ad851a54a616ffee6 diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f b/tests/gitea-repositories-meta/user3/repo3.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f rename to tests/gitea-repositories-meta/user3/repo3.git/objects/2f/9b22fd3159a43b7b4e5dd806fcd544edf8716f diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 b/tests/gitea-repositories-meta/user3/repo3.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 rename to tests/gitea-repositories-meta/user3/repo3.git/objects/d2/2b4d4daa5be07329fcef6ed458f00cf3392da0 diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc b/tests/gitea-repositories-meta/user3/repo3.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc rename to tests/gitea-repositories-meta/user3/repo3.git/objects/d5/6a3073c1dbb7b15963110a049d50cdb5db99fc diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61 b/tests/gitea-repositories-meta/user3/repo3.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61 similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61 rename to tests/gitea-repositories-meta/user3/repo3.git/objects/ec/f0db3c1ec806522de4b491fb9a3c7457398c61 diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/objects/ee/16d127df463aa491e08958120f2108b02468df b/tests/gitea-repositories-meta/user3/repo3.git/objects/ee/16d127df463aa491e08958120f2108b02468df similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/objects/ee/16d127df463aa491e08958120f2108b02468df rename to tests/gitea-repositories-meta/user3/repo3.git/objects/ee/16d127df463aa491e08958120f2108b02468df diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/refs/heads/master b/tests/gitea-repositories-meta/user3/repo3.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/refs/heads/master rename to tests/gitea-repositories-meta/user3/repo3.git/refs/heads/master diff --git a/integrations/gitea-repositories-meta/user3/repo3.git/refs/heads/test_branch b/tests/gitea-repositories-meta/user3/repo3.git/refs/heads/test_branch similarity index 100% rename from integrations/gitea-repositories-meta/user3/repo3.git/refs/heads/test_branch rename to tests/gitea-repositories-meta/user3/repo3.git/refs/heads/test_branch diff --git a/integrations/gitea-repositories-meta/user30/empty.git/HEAD b/tests/gitea-repositories-meta/user30/empty.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user30/empty.git/HEAD rename to tests/gitea-repositories-meta/user30/empty.git/HEAD diff --git a/integrations/gitea-repositories-meta/user30/empty.git/config b/tests/gitea-repositories-meta/user30/empty.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user30/empty.git/config rename to tests/gitea-repositories-meta/user30/empty.git/config diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/HEAD b/tests/gitea-repositories-meta/user5/repo4.git/HEAD similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/HEAD rename to tests/gitea-repositories-meta/user5/repo4.git/HEAD diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/config b/tests/gitea-repositories-meta/user5/repo4.git/config similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/config rename to tests/gitea-repositories-meta/user5/repo4.git/config diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/description b/tests/gitea-repositories-meta/user5/repo4.git/description similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/description rename to tests/gitea-repositories-meta/user5/repo4.git/description diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/info/exclude b/tests/gitea-repositories-meta/user5/repo4.git/info/exclude similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/info/exclude rename to tests/gitea-repositories-meta/user5/repo4.git/info/exclude diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/objects/16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 b/tests/gitea-repositories-meta/user5/repo4.git/objects/16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/objects/16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 rename to tests/gitea-repositories-meta/user5/repo4.git/objects/16/dfebd1ed3905d78d7e061e945fc9c34afe4e81 diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/objects/c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f b/tests/gitea-repositories-meta/user5/repo4.git/objects/c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/objects/c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f rename to tests/gitea-repositories-meta/user5/repo4.git/objects/c1/202ad022ae7d3a6d2474dc76d5a0c8e87cdc0f diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/objects/c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 b/tests/gitea-repositories-meta/user5/repo4.git/objects/c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/objects/c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 rename to tests/gitea-repositories-meta/user5/repo4.git/objects/c7/cd3cd144e6d23c9d6f3d07e52b2c1a956e0338 diff --git a/integrations/gitea-repositories-meta/user5/repo4.git/refs/heads/master b/tests/gitea-repositories-meta/user5/repo4.git/refs/heads/master similarity index 100% rename from integrations/gitea-repositories-meta/user5/repo4.git/refs/heads/master rename to tests/gitea-repositories-meta/user5/repo4.git/refs/heads/master diff --git a/integrations/README.md b/tests/integrations/README.md similarity index 100% rename from integrations/README.md rename to tests/integrations/README.md diff --git a/integrations/README_ZH.md b/tests/integrations/README_ZH.md similarity index 100% rename from integrations/README_ZH.md rename to tests/integrations/README_ZH.md diff --git a/integrations/admin_user_test.go b/tests/integrations/admin_user_test.go similarity index 100% rename from integrations/admin_user_test.go rename to tests/integrations/admin_user_test.go diff --git a/integrations/api_activitypub_person_test.go b/tests/integrations/api_activitypub_person_test.go similarity index 100% rename from integrations/api_activitypub_person_test.go rename to tests/integrations/api_activitypub_person_test.go diff --git a/integrations/api_admin_org_test.go b/tests/integrations/api_admin_org_test.go similarity index 100% rename from integrations/api_admin_org_test.go rename to tests/integrations/api_admin_org_test.go diff --git a/integrations/api_admin_test.go b/tests/integrations/api_admin_test.go similarity index 100% rename from integrations/api_admin_test.go rename to tests/integrations/api_admin_test.go diff --git a/integrations/api_branch_test.go b/tests/integrations/api_branch_test.go similarity index 100% rename from integrations/api_branch_test.go rename to tests/integrations/api_branch_test.go diff --git a/integrations/api_comment_test.go b/tests/integrations/api_comment_test.go similarity index 100% rename from integrations/api_comment_test.go rename to tests/integrations/api_comment_test.go diff --git a/integrations/api_fork_test.go b/tests/integrations/api_fork_test.go similarity index 100% rename from integrations/api_fork_test.go rename to tests/integrations/api_fork_test.go diff --git a/integrations/api_gpg_keys_test.go b/tests/integrations/api_gpg_keys_test.go similarity index 100% rename from integrations/api_gpg_keys_test.go rename to tests/integrations/api_gpg_keys_test.go diff --git a/integrations/api_helper_for_declarative_test.go b/tests/integrations/api_helper_for_declarative_test.go similarity index 100% rename from integrations/api_helper_for_declarative_test.go rename to tests/integrations/api_helper_for_declarative_test.go diff --git a/integrations/api_httpsig_test.go b/tests/integrations/api_httpsig_test.go similarity index 100% rename from integrations/api_httpsig_test.go rename to tests/integrations/api_httpsig_test.go diff --git a/integrations/api_issue_label_test.go b/tests/integrations/api_issue_label_test.go similarity index 100% rename from integrations/api_issue_label_test.go rename to tests/integrations/api_issue_label_test.go diff --git a/integrations/api_issue_milestone_test.go b/tests/integrations/api_issue_milestone_test.go similarity index 100% rename from integrations/api_issue_milestone_test.go rename to tests/integrations/api_issue_milestone_test.go diff --git a/integrations/api_issue_reaction_test.go b/tests/integrations/api_issue_reaction_test.go similarity index 100% rename from integrations/api_issue_reaction_test.go rename to tests/integrations/api_issue_reaction_test.go diff --git a/integrations/api_issue_stopwatch_test.go b/tests/integrations/api_issue_stopwatch_test.go similarity index 100% rename from integrations/api_issue_stopwatch_test.go rename to tests/integrations/api_issue_stopwatch_test.go diff --git a/integrations/api_issue_subscription_test.go b/tests/integrations/api_issue_subscription_test.go similarity index 100% rename from integrations/api_issue_subscription_test.go rename to tests/integrations/api_issue_subscription_test.go diff --git a/integrations/api_issue_test.go b/tests/integrations/api_issue_test.go similarity index 100% rename from integrations/api_issue_test.go rename to tests/integrations/api_issue_test.go diff --git a/integrations/api_issue_tracked_time_test.go b/tests/integrations/api_issue_tracked_time_test.go similarity index 100% rename from integrations/api_issue_tracked_time_test.go rename to tests/integrations/api_issue_tracked_time_test.go diff --git a/integrations/api_keys_test.go b/tests/integrations/api_keys_test.go similarity index 100% rename from integrations/api_keys_test.go rename to tests/integrations/api_keys_test.go diff --git a/integrations/api_nodeinfo_test.go b/tests/integrations/api_nodeinfo_test.go similarity index 100% rename from integrations/api_nodeinfo_test.go rename to tests/integrations/api_nodeinfo_test.go diff --git a/integrations/api_notification_test.go b/tests/integrations/api_notification_test.go similarity index 100% rename from integrations/api_notification_test.go rename to tests/integrations/api_notification_test.go diff --git a/integrations/api_oauth2_apps_test.go b/tests/integrations/api_oauth2_apps_test.go similarity index 100% rename from integrations/api_oauth2_apps_test.go rename to tests/integrations/api_oauth2_apps_test.go diff --git a/integrations/api_org_test.go b/tests/integrations/api_org_test.go similarity index 100% rename from integrations/api_org_test.go rename to tests/integrations/api_org_test.go diff --git a/integrations/api_packages_composer_test.go b/tests/integrations/api_packages_composer_test.go similarity index 100% rename from integrations/api_packages_composer_test.go rename to tests/integrations/api_packages_composer_test.go diff --git a/integrations/api_packages_conan_test.go b/tests/integrations/api_packages_conan_test.go similarity index 100% rename from integrations/api_packages_conan_test.go rename to tests/integrations/api_packages_conan_test.go diff --git a/integrations/api_packages_container_test.go b/tests/integrations/api_packages_container_test.go similarity index 100% rename from integrations/api_packages_container_test.go rename to tests/integrations/api_packages_container_test.go diff --git a/integrations/api_packages_generic_test.go b/tests/integrations/api_packages_generic_test.go similarity index 100% rename from integrations/api_packages_generic_test.go rename to tests/integrations/api_packages_generic_test.go diff --git a/integrations/api_packages_helm_test.go b/tests/integrations/api_packages_helm_test.go similarity index 100% rename from integrations/api_packages_helm_test.go rename to tests/integrations/api_packages_helm_test.go diff --git a/integrations/api_packages_maven_test.go b/tests/integrations/api_packages_maven_test.go similarity index 100% rename from integrations/api_packages_maven_test.go rename to tests/integrations/api_packages_maven_test.go diff --git a/integrations/api_packages_npm_test.go b/tests/integrations/api_packages_npm_test.go similarity index 100% rename from integrations/api_packages_npm_test.go rename to tests/integrations/api_packages_npm_test.go diff --git a/integrations/api_packages_nuget_test.go b/tests/integrations/api_packages_nuget_test.go similarity index 100% rename from integrations/api_packages_nuget_test.go rename to tests/integrations/api_packages_nuget_test.go diff --git a/integrations/api_packages_pypi_test.go b/tests/integrations/api_packages_pypi_test.go similarity index 100% rename from integrations/api_packages_pypi_test.go rename to tests/integrations/api_packages_pypi_test.go diff --git a/integrations/api_packages_rubygems_test.go b/tests/integrations/api_packages_rubygems_test.go similarity index 100% rename from integrations/api_packages_rubygems_test.go rename to tests/integrations/api_packages_rubygems_test.go diff --git a/integrations/api_packages_test.go b/tests/integrations/api_packages_test.go similarity index 100% rename from integrations/api_packages_test.go rename to tests/integrations/api_packages_test.go diff --git a/integrations/api_private_serv_test.go b/tests/integrations/api_private_serv_test.go similarity index 100% rename from integrations/api_private_serv_test.go rename to tests/integrations/api_private_serv_test.go diff --git a/integrations/api_pull_commits_test.go b/tests/integrations/api_pull_commits_test.go similarity index 100% rename from integrations/api_pull_commits_test.go rename to tests/integrations/api_pull_commits_test.go diff --git a/integrations/api_pull_review_test.go b/tests/integrations/api_pull_review_test.go similarity index 100% rename from integrations/api_pull_review_test.go rename to tests/integrations/api_pull_review_test.go diff --git a/integrations/api_pull_test.go b/tests/integrations/api_pull_test.go similarity index 100% rename from integrations/api_pull_test.go rename to tests/integrations/api_pull_test.go diff --git a/integrations/api_releases_test.go b/tests/integrations/api_releases_test.go similarity index 100% rename from integrations/api_releases_test.go rename to tests/integrations/api_releases_test.go diff --git a/integrations/api_repo_archive_test.go b/tests/integrations/api_repo_archive_test.go similarity index 100% rename from integrations/api_repo_archive_test.go rename to tests/integrations/api_repo_archive_test.go diff --git a/integrations/api_repo_collaborator_test.go b/tests/integrations/api_repo_collaborator_test.go similarity index 100% rename from integrations/api_repo_collaborator_test.go rename to tests/integrations/api_repo_collaborator_test.go diff --git a/integrations/api_repo_edit_test.go b/tests/integrations/api_repo_edit_test.go similarity index 100% rename from integrations/api_repo_edit_test.go rename to tests/integrations/api_repo_edit_test.go diff --git a/integrations/api_repo_file_create_test.go b/tests/integrations/api_repo_file_create_test.go similarity index 100% rename from integrations/api_repo_file_create_test.go rename to tests/integrations/api_repo_file_create_test.go diff --git a/integrations/api_repo_file_delete_test.go b/tests/integrations/api_repo_file_delete_test.go similarity index 100% rename from integrations/api_repo_file_delete_test.go rename to tests/integrations/api_repo_file_delete_test.go diff --git a/integrations/api_repo_file_get_test.go b/tests/integrations/api_repo_file_get_test.go similarity index 100% rename from integrations/api_repo_file_get_test.go rename to tests/integrations/api_repo_file_get_test.go diff --git a/integrations/api_repo_file_helpers.go b/tests/integrations/api_repo_file_helpers.go similarity index 100% rename from integrations/api_repo_file_helpers.go rename to tests/integrations/api_repo_file_helpers.go diff --git a/integrations/api_repo_file_update_test.go b/tests/integrations/api_repo_file_update_test.go similarity index 100% rename from integrations/api_repo_file_update_test.go rename to tests/integrations/api_repo_file_update_test.go diff --git a/integrations/api_repo_get_contents_list_test.go b/tests/integrations/api_repo_get_contents_list_test.go similarity index 100% rename from integrations/api_repo_get_contents_list_test.go rename to tests/integrations/api_repo_get_contents_list_test.go diff --git a/integrations/api_repo_get_contents_test.go b/tests/integrations/api_repo_get_contents_test.go similarity index 100% rename from integrations/api_repo_get_contents_test.go rename to tests/integrations/api_repo_get_contents_test.go diff --git a/integrations/api_repo_git_blobs_test.go b/tests/integrations/api_repo_git_blobs_test.go similarity index 100% rename from integrations/api_repo_git_blobs_test.go rename to tests/integrations/api_repo_git_blobs_test.go diff --git a/integrations/api_repo_git_commits_test.go b/tests/integrations/api_repo_git_commits_test.go similarity index 100% rename from integrations/api_repo_git_commits_test.go rename to tests/integrations/api_repo_git_commits_test.go diff --git a/integrations/api_repo_git_hook_test.go b/tests/integrations/api_repo_git_hook_test.go similarity index 100% rename from integrations/api_repo_git_hook_test.go rename to tests/integrations/api_repo_git_hook_test.go diff --git a/integrations/api_repo_git_notes_test.go b/tests/integrations/api_repo_git_notes_test.go similarity index 100% rename from integrations/api_repo_git_notes_test.go rename to tests/integrations/api_repo_git_notes_test.go diff --git a/integrations/api_repo_git_ref_test.go b/tests/integrations/api_repo_git_ref_test.go similarity index 100% rename from integrations/api_repo_git_ref_test.go rename to tests/integrations/api_repo_git_ref_test.go diff --git a/integrations/api_repo_git_tags_test.go b/tests/integrations/api_repo_git_tags_test.go similarity index 100% rename from integrations/api_repo_git_tags_test.go rename to tests/integrations/api_repo_git_tags_test.go diff --git a/integrations/api_repo_git_trees_test.go b/tests/integrations/api_repo_git_trees_test.go similarity index 100% rename from integrations/api_repo_git_trees_test.go rename to tests/integrations/api_repo_git_trees_test.go diff --git a/integrations/api_repo_languages_test.go b/tests/integrations/api_repo_languages_test.go similarity index 100% rename from integrations/api_repo_languages_test.go rename to tests/integrations/api_repo_languages_test.go diff --git a/integrations/api_repo_lfs_locks_test.go b/tests/integrations/api_repo_lfs_locks_test.go similarity index 100% rename from integrations/api_repo_lfs_locks_test.go rename to tests/integrations/api_repo_lfs_locks_test.go diff --git a/integrations/api_repo_lfs_migrate_test.go b/tests/integrations/api_repo_lfs_migrate_test.go similarity index 100% rename from integrations/api_repo_lfs_migrate_test.go rename to tests/integrations/api_repo_lfs_migrate_test.go diff --git a/integrations/api_repo_lfs_test.go b/tests/integrations/api_repo_lfs_test.go similarity index 100% rename from integrations/api_repo_lfs_test.go rename to tests/integrations/api_repo_lfs_test.go diff --git a/integrations/api_repo_raw_test.go b/tests/integrations/api_repo_raw_test.go similarity index 100% rename from integrations/api_repo_raw_test.go rename to tests/integrations/api_repo_raw_test.go diff --git a/integrations/api_repo_tags_test.go b/tests/integrations/api_repo_tags_test.go similarity index 100% rename from integrations/api_repo_tags_test.go rename to tests/integrations/api_repo_tags_test.go diff --git a/integrations/api_repo_teams_test.go b/tests/integrations/api_repo_teams_test.go similarity index 100% rename from integrations/api_repo_teams_test.go rename to tests/integrations/api_repo_teams_test.go diff --git a/integrations/api_repo_test.go b/tests/integrations/api_repo_test.go similarity index 100% rename from integrations/api_repo_test.go rename to tests/integrations/api_repo_test.go diff --git a/integrations/api_repo_topic_test.go b/tests/integrations/api_repo_topic_test.go similarity index 100% rename from integrations/api_repo_topic_test.go rename to tests/integrations/api_repo_topic_test.go diff --git a/integrations/api_settings_test.go b/tests/integrations/api_settings_test.go similarity index 100% rename from integrations/api_settings_test.go rename to tests/integrations/api_settings_test.go diff --git a/integrations/api_team_test.go b/tests/integrations/api_team_test.go similarity index 100% rename from integrations/api_team_test.go rename to tests/integrations/api_team_test.go diff --git a/integrations/api_team_user_test.go b/tests/integrations/api_team_user_test.go similarity index 100% rename from integrations/api_team_user_test.go rename to tests/integrations/api_team_user_test.go diff --git a/integrations/api_token_test.go b/tests/integrations/api_token_test.go similarity index 100% rename from integrations/api_token_test.go rename to tests/integrations/api_token_test.go diff --git a/integrations/api_user_email_test.go b/tests/integrations/api_user_email_test.go similarity index 100% rename from integrations/api_user_email_test.go rename to tests/integrations/api_user_email_test.go diff --git a/integrations/api_user_heatmap_test.go b/tests/integrations/api_user_heatmap_test.go similarity index 100% rename from integrations/api_user_heatmap_test.go rename to tests/integrations/api_user_heatmap_test.go diff --git a/integrations/api_user_org_perm_test.go b/tests/integrations/api_user_org_perm_test.go similarity index 100% rename from integrations/api_user_org_perm_test.go rename to tests/integrations/api_user_org_perm_test.go diff --git a/integrations/api_user_orgs_test.go b/tests/integrations/api_user_orgs_test.go similarity index 100% rename from integrations/api_user_orgs_test.go rename to tests/integrations/api_user_orgs_test.go diff --git a/integrations/api_user_search_test.go b/tests/integrations/api_user_search_test.go similarity index 100% rename from integrations/api_user_search_test.go rename to tests/integrations/api_user_search_test.go diff --git a/integrations/api_wiki_test.go b/tests/integrations/api_wiki_test.go similarity index 100% rename from integrations/api_wiki_test.go rename to tests/integrations/api_wiki_test.go diff --git a/integrations/attachment_test.go b/tests/integrations/attachment_test.go similarity index 100% rename from integrations/attachment_test.go rename to tests/integrations/attachment_test.go diff --git a/integrations/auth_ldap_test.go b/tests/integrations/auth_ldap_test.go similarity index 100% rename from integrations/auth_ldap_test.go rename to tests/integrations/auth_ldap_test.go diff --git a/integrations/benchmarks_test.go b/tests/integrations/benchmarks_test.go similarity index 100% rename from integrations/benchmarks_test.go rename to tests/integrations/benchmarks_test.go diff --git a/integrations/branches_test.go b/tests/integrations/branches_test.go similarity index 100% rename from integrations/branches_test.go rename to tests/integrations/branches_test.go diff --git a/integrations/change_default_branch_test.go b/tests/integrations/change_default_branch_test.go similarity index 100% rename from integrations/change_default_branch_test.go rename to tests/integrations/change_default_branch_test.go diff --git a/integrations/cmd_keys_test.go b/tests/integrations/cmd_keys_test.go similarity index 100% rename from integrations/cmd_keys_test.go rename to tests/integrations/cmd_keys_test.go diff --git a/integrations/compare_test.go b/tests/integrations/compare_test.go similarity index 100% rename from integrations/compare_test.go rename to tests/integrations/compare_test.go diff --git a/integrations/cors_test.go b/tests/integrations/cors_test.go similarity index 100% rename from integrations/cors_test.go rename to tests/integrations/cors_test.go diff --git a/integrations/create_no_session_test.go b/tests/integrations/create_no_session_test.go similarity index 100% rename from integrations/create_no_session_test.go rename to tests/integrations/create_no_session_test.go diff --git a/integrations/csrf_test.go b/tests/integrations/csrf_test.go similarity index 100% rename from integrations/csrf_test.go rename to tests/integrations/csrf_test.go diff --git a/integrations/delete_user_test.go b/tests/integrations/delete_user_test.go similarity index 100% rename from integrations/delete_user_test.go rename to tests/integrations/delete_user_test.go diff --git a/integrations/download_test.go b/tests/integrations/download_test.go similarity index 100% rename from integrations/download_test.go rename to tests/integrations/download_test.go diff --git a/integrations/dump_restore_test.go b/tests/integrations/dump_restore_test.go similarity index 100% rename from integrations/dump_restore_test.go rename to tests/integrations/dump_restore_test.go diff --git a/integrations/editor_test.go b/tests/integrations/editor_test.go similarity index 100% rename from integrations/editor_test.go rename to tests/integrations/editor_test.go diff --git a/integrations/empty_repo_test.go b/tests/integrations/empty_repo_test.go similarity index 100% rename from integrations/empty_repo_test.go rename to tests/integrations/empty_repo_test.go diff --git a/integrations/eventsource_test.go b/tests/integrations/eventsource_test.go similarity index 100% rename from integrations/eventsource_test.go rename to tests/integrations/eventsource_test.go diff --git a/integrations/explore_repos_test.go b/tests/integrations/explore_repos_test.go similarity index 100% rename from integrations/explore_repos_test.go rename to tests/integrations/explore_repos_test.go diff --git a/integrations/git_clone_wiki_test.go b/tests/integrations/git_clone_wiki_test.go similarity index 100% rename from integrations/git_clone_wiki_test.go rename to tests/integrations/git_clone_wiki_test.go diff --git a/integrations/git_helper_for_declarative_test.go b/tests/integrations/git_helper_for_declarative_test.go similarity index 100% rename from integrations/git_helper_for_declarative_test.go rename to tests/integrations/git_helper_for_declarative_test.go diff --git a/integrations/git_smart_http_test.go b/tests/integrations/git_smart_http_test.go similarity index 100% rename from integrations/git_smart_http_test.go rename to tests/integrations/git_smart_http_test.go diff --git a/integrations/git_test.go b/tests/integrations/git_test.go similarity index 100% rename from integrations/git_test.go rename to tests/integrations/git_test.go diff --git a/integrations/goget_test.go b/tests/integrations/goget_test.go similarity index 100% rename from integrations/goget_test.go rename to tests/integrations/goget_test.go diff --git a/integrations/gpg_git_test.go b/tests/integrations/gpg_git_test.go similarity index 98% rename from integrations/gpg_git_test.go rename to tests/integrations/gpg_git_test.go index 461f3c503d551..8ca8492f1e305 100644 --- a/integrations/gpg_git_test.go +++ b/tests/integrations/gpg_git_test.go @@ -344,10 +344,10 @@ func crudActionCreateFile(t *testing.T, ctx APITestContext, user *user_model.Use } func importTestingKey(tmpDir, name, email string) (*openpgp.Entity, error) { - if _, _, err := process.GetManager().Exec("gpg --import integrations/private-testing.key", "gpg", "--import", "integrations/private-testing.key"); err != nil { + if _, _, err := process.GetManager().Exec("gpg --import tests/integrations/private-testing.key", "gpg", "--import", "tests/integrations/private-testing.key"); err != nil { return nil, err } - keyringFile, err := os.Open("integrations/private-testing.key") + keyringFile, err := os.Open("tests/integrations/private-testing.key") if err != nil { return nil, err } diff --git a/integrations/html_helper.go b/tests/integrations/html_helper.go similarity index 100% rename from integrations/html_helper.go rename to tests/integrations/html_helper.go diff --git a/integrations/integration_test.go b/tests/integrations/integration_test.go similarity index 99% rename from integrations/integration_test.go rename to tests/integrations/integration_test.go index 8a43de7c45fa9..4865ff3c56612 100644 --- a/integrations/integration_test.go +++ b/tests/integrations/integration_test.go @@ -279,7 +279,7 @@ func prepareTestEnv(t testing.TB, skip ...int) func() { deferFn := PrintCurrentTest(t, ourSkip) assert.NoError(t, unittest.LoadFixtures()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again ownerDirs, err := os.ReadDir(setting.RepoRootPath) if err != nil { @@ -580,7 +580,7 @@ func resetFixtures(t *testing.T) { assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1)) assert.NoError(t, unittest.LoadFixtures()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again ownerDirs, err := os.ReadDir(setting.RepoRootPath) if err != nil { diff --git a/integrations/issue_test.go b/tests/integrations/issue_test.go similarity index 100% rename from integrations/issue_test.go rename to tests/integrations/issue_test.go diff --git a/integrations/lfs_getobject_test.go b/tests/integrations/lfs_getobject_test.go similarity index 100% rename from integrations/lfs_getobject_test.go rename to tests/integrations/lfs_getobject_test.go diff --git a/integrations/lfs_local_endpoint_test.go b/tests/integrations/lfs_local_endpoint_test.go similarity index 100% rename from integrations/lfs_local_endpoint_test.go rename to tests/integrations/lfs_local_endpoint_test.go diff --git a/integrations/links_test.go b/tests/integrations/links_test.go similarity index 100% rename from integrations/links_test.go rename to tests/integrations/links_test.go diff --git a/integrations/migrate_test.go b/tests/integrations/migrate_test.go similarity index 100% rename from integrations/migrate_test.go rename to tests/integrations/migrate_test.go diff --git a/integrations/migration-test/gitea-v1.6.4.mssql.sql.gz b/tests/integrations/migration-test/gitea-v1.6.4.mssql.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.6.4.mssql.sql.gz rename to tests/integrations/migration-test/gitea-v1.6.4.mssql.sql.gz diff --git a/integrations/migration-test/gitea-v1.6.4.mysql.sql.gz b/tests/integrations/migration-test/gitea-v1.6.4.mysql.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.6.4.mysql.sql.gz rename to tests/integrations/migration-test/gitea-v1.6.4.mysql.sql.gz diff --git a/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz b/tests/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.6.4.postgres.sql.gz rename to tests/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz diff --git a/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz b/tests/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz rename to tests/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz diff --git a/integrations/migration-test/gitea-v1.7.0.mssql.sql.gz b/tests/integrations/migration-test/gitea-v1.7.0.mssql.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.7.0.mssql.sql.gz rename to tests/integrations/migration-test/gitea-v1.7.0.mssql.sql.gz diff --git a/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz b/tests/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.7.0.mysql.sql.gz rename to tests/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz diff --git a/integrations/migration-test/gitea-v1.7.0.postgres.sql.gz b/tests/integrations/migration-test/gitea-v1.7.0.postgres.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.7.0.postgres.sql.gz rename to tests/integrations/migration-test/gitea-v1.7.0.postgres.sql.gz diff --git a/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz b/tests/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz similarity index 100% rename from integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz rename to tests/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz diff --git a/integrations/migration-test/migration_test.go b/tests/integrations/migration-test/migration_test.go similarity index 97% rename from integrations/migration-test/migration_test.go rename to tests/integrations/migration-test/migration_test.go index 20a5c903a92cc..461f42ea8673c 100644 --- a/integrations/migration-test/migration_test.go +++ b/tests/integrations/migration-test/migration_test.go @@ -18,7 +18,6 @@ import ( "strings" "testing" - "code.gitea.io/gitea/integrations" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/migrations" "code.gitea.io/gitea/models/unittest" @@ -27,6 +26,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests/integrations" "github.com/stretchr/testify/assert" "xorm.io/xorm" @@ -61,7 +61,7 @@ func initMigrationTest(t *testing.T) func() { assert.True(t, len(setting.RepoRootPath) != 0) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) ownerDirs, err := os.ReadDir(setting.RepoRootPath) if err != nil { assert.NoError(t, err, "unable to read the new repo root: %v\n", err) @@ -90,7 +90,7 @@ func initMigrationTest(t *testing.T) func() { } func availableVersions() ([]string, error) { - migrationsDir, err := os.Open("integrations/migration-test") + migrationsDir, err := os.Open("tests/integrations/migration-test") if err != nil { return nil, err } @@ -116,7 +116,7 @@ func availableVersions() ([]string, error) { } func readSQLFromFile(version string) (string, error) { - filename := fmt.Sprintf("integrations/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type) + filename := fmt.Sprintf("tests/integrations/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type) if _, err := os.Stat(filename); os.IsNotExist(err) { return "", nil diff --git a/integrations/mirror_pull_test.go b/tests/integrations/mirror_pull_test.go similarity index 100% rename from integrations/mirror_pull_test.go rename to tests/integrations/mirror_pull_test.go diff --git a/integrations/mirror_push_test.go b/tests/integrations/mirror_push_test.go similarity index 100% rename from integrations/mirror_push_test.go rename to tests/integrations/mirror_push_test.go diff --git a/integrations/nonascii_branches_test.go b/tests/integrations/nonascii_branches_test.go similarity index 100% rename from integrations/nonascii_branches_test.go rename to tests/integrations/nonascii_branches_test.go diff --git a/integrations/oauth_test.go b/tests/integrations/oauth_test.go similarity index 100% rename from integrations/oauth_test.go rename to tests/integrations/oauth_test.go diff --git a/integrations/org_count_test.go b/tests/integrations/org_count_test.go similarity index 100% rename from integrations/org_count_test.go rename to tests/integrations/org_count_test.go diff --git a/integrations/org_test.go b/tests/integrations/org_test.go similarity index 100% rename from integrations/org_test.go rename to tests/integrations/org_test.go diff --git a/integrations/private-testing.key b/tests/integrations/private-testing.key similarity index 100% rename from integrations/private-testing.key rename to tests/integrations/private-testing.key diff --git a/integrations/privateactivity_test.go b/tests/integrations/privateactivity_test.go similarity index 100% rename from integrations/privateactivity_test.go rename to tests/integrations/privateactivity_test.go diff --git a/integrations/pull_compare_test.go b/tests/integrations/pull_compare_test.go similarity index 100% rename from integrations/pull_compare_test.go rename to tests/integrations/pull_compare_test.go diff --git a/integrations/pull_create_test.go b/tests/integrations/pull_create_test.go similarity index 100% rename from integrations/pull_create_test.go rename to tests/integrations/pull_create_test.go diff --git a/integrations/pull_merge_test.go b/tests/integrations/pull_merge_test.go similarity index 100% rename from integrations/pull_merge_test.go rename to tests/integrations/pull_merge_test.go diff --git a/integrations/pull_review_test.go b/tests/integrations/pull_review_test.go similarity index 100% rename from integrations/pull_review_test.go rename to tests/integrations/pull_review_test.go diff --git a/integrations/pull_status_test.go b/tests/integrations/pull_status_test.go similarity index 100% rename from integrations/pull_status_test.go rename to tests/integrations/pull_status_test.go diff --git a/integrations/pull_update_test.go b/tests/integrations/pull_update_test.go similarity index 100% rename from integrations/pull_update_test.go rename to tests/integrations/pull_update_test.go diff --git a/integrations/release_test.go b/tests/integrations/release_test.go similarity index 100% rename from integrations/release_test.go rename to tests/integrations/release_test.go diff --git a/integrations/rename_branch_test.go b/tests/integrations/rename_branch_test.go similarity index 100% rename from integrations/rename_branch_test.go rename to tests/integrations/rename_branch_test.go diff --git a/integrations/repo_activity_test.go b/tests/integrations/repo_activity_test.go similarity index 100% rename from integrations/repo_activity_test.go rename to tests/integrations/repo_activity_test.go diff --git a/integrations/repo_branch_test.go b/tests/integrations/repo_branch_test.go similarity index 100% rename from integrations/repo_branch_test.go rename to tests/integrations/repo_branch_test.go diff --git a/integrations/repo_commits_search_test.go b/tests/integrations/repo_commits_search_test.go similarity index 100% rename from integrations/repo_commits_search_test.go rename to tests/integrations/repo_commits_search_test.go diff --git a/integrations/repo_commits_test.go b/tests/integrations/repo_commits_test.go similarity index 100% rename from integrations/repo_commits_test.go rename to tests/integrations/repo_commits_test.go diff --git a/integrations/repo_fork_test.go b/tests/integrations/repo_fork_test.go similarity index 100% rename from integrations/repo_fork_test.go rename to tests/integrations/repo_fork_test.go diff --git a/integrations/repo_generate_test.go b/tests/integrations/repo_generate_test.go similarity index 100% rename from integrations/repo_generate_test.go rename to tests/integrations/repo_generate_test.go diff --git a/integrations/repo_migrate_test.go b/tests/integrations/repo_migrate_test.go similarity index 100% rename from integrations/repo_migrate_test.go rename to tests/integrations/repo_migrate_test.go diff --git a/integrations/repo_search_test.go b/tests/integrations/repo_search_test.go similarity index 100% rename from integrations/repo_search_test.go rename to tests/integrations/repo_search_test.go diff --git a/integrations/repo_tag_test.go b/tests/integrations/repo_tag_test.go similarity index 100% rename from integrations/repo_tag_test.go rename to tests/integrations/repo_tag_test.go diff --git a/integrations/repo_test.go b/tests/integrations/repo_test.go similarity index 100% rename from integrations/repo_test.go rename to tests/integrations/repo_test.go diff --git a/integrations/repo_topic_test.go b/tests/integrations/repo_topic_test.go similarity index 100% rename from integrations/repo_topic_test.go rename to tests/integrations/repo_topic_test.go diff --git a/integrations/repo_watch_test.go b/tests/integrations/repo_watch_test.go similarity index 100% rename from integrations/repo_watch_test.go rename to tests/integrations/repo_watch_test.go diff --git a/integrations/repofiles_delete_test.go b/tests/integrations/repofiles_delete_test.go similarity index 100% rename from integrations/repofiles_delete_test.go rename to tests/integrations/repofiles_delete_test.go diff --git a/integrations/repofiles_update_test.go b/tests/integrations/repofiles_update_test.go similarity index 100% rename from integrations/repofiles_update_test.go rename to tests/integrations/repofiles_update_test.go diff --git a/integrations/setting_test.go b/tests/integrations/setting_test.go similarity index 100% rename from integrations/setting_test.go rename to tests/integrations/setting_test.go diff --git a/integrations/signin_test.go b/tests/integrations/signin_test.go similarity index 100% rename from integrations/signin_test.go rename to tests/integrations/signin_test.go diff --git a/integrations/signout_test.go b/tests/integrations/signout_test.go similarity index 100% rename from integrations/signout_test.go rename to tests/integrations/signout_test.go diff --git a/integrations/signup_test.go b/tests/integrations/signup_test.go similarity index 100% rename from integrations/signup_test.go rename to tests/integrations/signup_test.go diff --git a/integrations/ssh_key_test.go b/tests/integrations/ssh_key_test.go similarity index 100% rename from integrations/ssh_key_test.go rename to tests/integrations/ssh_key_test.go diff --git a/integrations/testlogger.go b/tests/integrations/testlogger.go similarity index 98% rename from integrations/testlogger.go rename to tests/integrations/testlogger.go index 373ad80752d33..76d827c0047a4 100644 --- a/integrations/testlogger.go +++ b/tests/integrations/testlogger.go @@ -203,5 +203,5 @@ func (log *TestLogger) GetName() string { func init() { log.Register("test", NewTestLogger) _, filename, _, _ := runtime.Caller(0) - prefix = strings.TrimSuffix(filename, "integrations/testlogger.go") + prefix = strings.TrimSuffix(filename, "tests/integrations/testlogger.go") } diff --git a/integrations/timetracking_test.go b/tests/integrations/timetracking_test.go similarity index 100% rename from integrations/timetracking_test.go rename to tests/integrations/timetracking_test.go diff --git a/integrations/user_avatar_test.go b/tests/integrations/user_avatar_test.go similarity index 100% rename from integrations/user_avatar_test.go rename to tests/integrations/user_avatar_test.go diff --git a/integrations/user_test.go b/tests/integrations/user_test.go similarity index 100% rename from integrations/user_test.go rename to tests/integrations/user_test.go diff --git a/integrations/version_test.go b/tests/integrations/version_test.go similarity index 100% rename from integrations/version_test.go rename to tests/integrations/version_test.go diff --git a/integrations/view_test.go b/tests/integrations/view_test.go similarity index 100% rename from integrations/view_test.go rename to tests/integrations/view_test.go diff --git a/integrations/webfinger_test.go b/tests/integrations/webfinger_test.go similarity index 100% rename from integrations/webfinger_test.go rename to tests/integrations/webfinger_test.go diff --git a/integrations/xss_test.go b/tests/integrations/xss_test.go similarity index 100% rename from integrations/xss_test.go rename to tests/integrations/xss_test.go diff --git a/integrations/mssql.ini.tmpl b/tests/mssql.ini.tmpl similarity index 71% rename from integrations/mssql.ini.tmpl rename to tests/mssql.ini.tmpl index cef03e589ae81..89a713eff3e60 100644 --- a/integrations/mssql.ini.tmpl +++ b/tests/mssql.ini.tmpl @@ -10,10 +10,10 @@ PASSWD = {{TEST_MSSQL_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = integrations/gitea-integration-mssql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = integrations/gitea-integration-mssql/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = integrations/gitea-integration-mssql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/repos.bleve [queue] TYPE = immediate @@ -25,13 +25,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}integrations/gitea-integration-mssql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mssql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = integrations/gitea-integration-mssql/tmp/local-repo +LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/tmp/local-repo [repository.upload] -TEMP_PATH = integrations/gitea-integration-mssql/tmp/uploads +TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -47,17 +47,17 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = integrations/gitea-integration-mssql/data +APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = integrations/gitea-integration-mssql/data/attachments +PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/attachments [mailer] ENABLED = true MAILER_TYPE = dummy -FROM = mssql-integration-test@gitea.io +FROM = mssql-{{TEST_TYPE}}-test@gitea.io [service] REGISTER_EMAIL_CONFIRM = false @@ -74,12 +74,12 @@ ENABLE_NOTIFY_MAIL = true [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = integrations/gitea-integration-mssql/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = integrations/gitea-integration-mssql/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = integrations/gitea-integration-mssql/data/sessions +PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -102,7 +102,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = integrations/gitea-integration-mssql/data/lfs +PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/lfs [packages] ENABLED = true diff --git a/integrations/mysql.ini.tmpl b/tests/mysql.ini.tmpl similarity index 83% rename from integrations/mysql.ini.tmpl rename to tests/mysql.ini.tmpl index 090b7c3c1421f..c9c2660e62cdb 100644 --- a/integrations/mysql.ini.tmpl +++ b/tests/mysql.ini.tmpl @@ -12,9 +12,9 @@ SSL_MODE = disable [indexer] ISSUE_INDEXER_TYPE = elasticsearch ISSUE_INDEXER_CONN_STR = http://elastic:changeme@elasticsearch:9200 -ISSUE_INDEXER_QUEUE_DIR = integrations/gitea-integration-mysql/indexers/issues.queue +ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = integrations/gitea-integration-mysql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve [queue] TYPE = immediate @@ -26,13 +26,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}integrations/gitea-integration-mysql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mysql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = integrations/gitea-integration-mysql/tmp/local-repo +LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/tmp/local-repo [repository.upload] -TEMP_PATH = integrations/gitea-integration-mysql/tmp/uploads +TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -44,7 +44,7 @@ ROOT_URL = http://localhost:3001/ DISABLE_SSH = false SSH_LISTEN_HOST = localhost SSH_PORT = 2201 -APP_DATA_PATH = integrations/gitea-integration-mysql/data +APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/data BUILTIN_SSH_SERVER_USER = git START_SSH_SERVER = true OFFLINE_MODE = false @@ -78,7 +78,7 @@ MINIO_USE_SSL = false [mailer] ENABLED = true MAILER_TYPE = dummy -FROM = mysql-integration-test@gitea.io +FROM = mysql-{{TEST_TYPE}}-test@gitea.io [service] REGISTER_EMAIL_CONFIRM = false @@ -98,7 +98,7 @@ ENABLE_FEDERATED_AVATAR = false [session] PROVIDER = file -PROVIDER_CONFIG = integrations/gitea-integration-mysql/data/sessions +PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mysql/data/sessions [log] MODE = {{TEST_LOGGER}} diff --git a/integrations/mysql8.ini.tmpl b/tests/mysql8.ini.tmpl similarity index 71% rename from integrations/mysql8.ini.tmpl rename to tests/mysql8.ini.tmpl index c043474bfe3a3..d37ad02bbe024 100644 --- a/integrations/mysql8.ini.tmpl +++ b/tests/mysql8.ini.tmpl @@ -10,10 +10,10 @@ PASSWD = {{TEST_MYSQL8_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = integrations/gitea-integration-mysql8/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = integrations/gitea-integration-mysql8/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = integrations/gitea-integration-mysql8/indexers/repos.bleve +REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/repos.bleve [queue] TYPE = immediate @@ -25,13 +25,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}integrations/gitea-integration-mysql8/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mysql8/gitea-repositories [repository.local] -LOCAL_COPY_PATH = integrations/gitea-integration-mysql8/tmp/local-repo +LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/tmp/local-repo [repository.upload] -TEMP_PATH = integrations/gitea-integration-mysql8/tmp/uploads +TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -47,12 +47,12 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = integrations/gitea-integration-mysql8/data +APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = integrations/gitea-integration-mysql8/data/attachments +PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/attachments [mailer] ENABLED = false @@ -71,12 +71,12 @@ NO_REPLY_ADDRESS = noreply.example.org [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = integrations/gitea-integration-mysql8/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = integrations/gitea-integration-mysql8/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = integrations/gitea-integration-mysql8/data/sessions +PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -99,7 +99,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = integrations/gitea-integration-mysql8/data/lfs +PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/lfs [packages] ENABLED = true diff --git a/integrations/pgsql.ini.tmpl b/tests/pgsql.ini.tmpl similarity index 72% rename from integrations/pgsql.ini.tmpl rename to tests/pgsql.ini.tmpl index 510d70a709ed6..767f5892f9e4b 100644 --- a/integrations/pgsql.ini.tmpl +++ b/tests/pgsql.ini.tmpl @@ -11,10 +11,10 @@ SCHEMA = {{TEST_PGSQL_SCHEMA}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = integrations/gitea-integration-pgsql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = integrations/gitea-integration-pgsql/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = integrations/gitea-integration-pgsql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve [queue] TYPE = immediate @@ -26,13 +26,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}integrations/gitea-integration-pgsql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-pgsql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = integrations/gitea-integration-pgsql/tmp/local-repo +LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/tmp/local-repo [repository.upload] -TEMP_PATH = integrations/gitea-integration-pgsql/tmp/uploads +TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -48,17 +48,17 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = integrations/gitea-integration-pgsql/data +APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = integrations/gitea-integration-pgsql/data/attachments +PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/attachments [mailer] ENABLED = true MAILER_TYPE = dummy -FROM = pgsql-integration-test@gitea.io +FROM = pgsql-{{TEST_TYPE}}-test@gitea.io [service] REGISTER_EMAIL_CONFIRM = false @@ -75,12 +75,12 @@ ENABLE_NOTIFY_MAIL = true [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = integrations/gitea-integration-pgsql/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = integrations/gitea-integration-pgsql/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = integrations/gitea-integration-pgsql/data/sessions +PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -103,7 +103,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = integrations/gitea-integration-pgsql/data/lfs +PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/lfs [packages] ENABLED = true diff --git a/integrations/sqlite.ini.tmpl b/tests/sqlite.ini.tmpl similarity index 69% rename from integrations/sqlite.ini.tmpl rename to tests/sqlite.ini.tmpl index b251c15a2e162..f8b2feb8bcfce 100644 --- a/integrations/sqlite.ini.tmpl +++ b/tests/sqlite.ini.tmpl @@ -3,13 +3,13 @@ RUN_MODE = prod [database] DB_TYPE = sqlite3 -PATH = integrations/gitea-integration-sqlite/gitea.db +PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/gitea.db [indexer] -ISSUE_INDEXER_PATH = integrations/gitea-integration-sqlite/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = integrations/gitea-integration-sqlite/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = integrations/gitea-integration-sqlite/indexers/repos.bleve +REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve [queue] TYPE = immediate @@ -21,13 +21,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}integrations/gitea-integration-sqlite/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-sqlite/gitea-repositories [repository.local] -LOCAL_COPY_PATH = integrations/gitea-integration-sqlite/tmp/local-repo +LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/tmp/local-repo [repository.upload] -TEMP_PATH = integrations/gitea-integration-sqlite/tmp/uploads +TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -43,18 +43,18 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = integrations/gitea-integration-sqlite/data +APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data ENABLE_GZIP = true BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = integrations/gitea-integration-sqlite/data/attachments +PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/attachments [mailer] ENABLED = true MAILER_TYPE = dummy -FROM = sqlite-integration-test@gitea.io +FROM = sqlite-{{TEST_TYPE}}-test@gitea.io [service] REGISTER_EMAIL_CONFIRM = false @@ -70,12 +70,12 @@ NO_REPLY_ADDRESS = noreply.example.org [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = integrations/gitea-integration-sqlite/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = integrations/gitea-integration-sqlite/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = integrations/gitea-integration-sqlite/data/sessions +PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -101,7 +101,7 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.O JWT_SECRET = KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko [lfs] -PATH = integrations/gitea-integration-sqlite/data/lfs +PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/lfs [packages] ENABLED = true From 13e63f8e666a464a186dac966ba3d2b48914109c Mon Sep 17 00:00:00 2001 From: Kyle D Date: Thu, 23 Jun 2022 13:17:38 -0400 Subject: [PATCH 17/46] tests integrations to tests integraton --- .gitignore | 20 +++++------ CONTRIBUTING.md | 6 ++-- Makefile | 32 +++++++++--------- .../doc/developers/guidelines-backend.md | 3 +- .../doc/developers/hacking-on-gitea.en-us.md | 2 +- tests/{integrations => integration}/README.md | 10 +++--- .../README_ZH.md | 2 +- .../admin_user_test.go | 2 +- .../api_activitypub_person_test.go | 2 +- .../api_admin_org_test.go | 2 +- .../api_admin_test.go | 2 +- .../api_branch_test.go | 2 +- .../api_comment_test.go | 2 +- .../api_fork_test.go | 2 +- .../api_gpg_keys_test.go | 2 +- .../api_helper_for_declarative_test.go | 2 +- .../api_httpsig_test.go | 2 +- .../api_issue_label_test.go | 2 +- .../api_issue_milestone_test.go | 2 +- .../api_issue_reaction_test.go | 2 +- .../api_issue_stopwatch_test.go | 2 +- .../api_issue_subscription_test.go | 2 +- .../api_issue_test.go | 2 +- .../api_issue_tracked_time_test.go | 2 +- .../api_keys_test.go | 2 +- .../api_nodeinfo_test.go | 2 +- .../api_notification_test.go | 2 +- .../api_oauth2_apps_test.go | 2 +- .../api_org_test.go | 2 +- .../api_packages_composer_test.go | 2 +- .../api_packages_conan_test.go | 2 +- .../api_packages_container_test.go | 2 +- .../api_packages_generic_test.go | 2 +- .../api_packages_helm_test.go | 2 +- .../api_packages_maven_test.go | 2 +- .../api_packages_npm_test.go | 2 +- .../api_packages_nuget_test.go | 2 +- .../api_packages_pypi_test.go | 2 +- .../api_packages_rubygems_test.go | 2 +- .../api_packages_test.go | 2 +- .../api_private_serv_test.go | 2 +- .../api_pull_commits_test.go | 2 +- .../api_pull_review_test.go | 2 +- .../api_pull_test.go | 2 +- .../api_releases_test.go | 2 +- .../api_repo_archive_test.go | 2 +- .../api_repo_collaborator_test.go | 2 +- .../api_repo_edit_test.go | 2 +- .../api_repo_file_create_test.go | 2 +- .../api_repo_file_delete_test.go | 2 +- .../api_repo_file_get_test.go | 2 +- .../api_repo_file_helpers.go | 2 +- .../api_repo_file_update_test.go | 2 +- .../api_repo_get_contents_list_test.go | 2 +- .../api_repo_get_contents_test.go | 2 +- .../api_repo_git_blobs_test.go | 2 +- .../api_repo_git_commits_test.go | 2 +- .../api_repo_git_hook_test.go | 2 +- .../api_repo_git_notes_test.go | 2 +- .../api_repo_git_ref_test.go | 2 +- .../api_repo_git_tags_test.go | 2 +- .../api_repo_git_trees_test.go | 2 +- .../api_repo_languages_test.go | 2 +- .../api_repo_lfs_locks_test.go | 2 +- .../api_repo_lfs_migrate_test.go | 2 +- .../api_repo_lfs_test.go | 2 +- .../api_repo_raw_test.go | 2 +- .../api_repo_tags_test.go | 2 +- .../api_repo_teams_test.go | 2 +- .../api_repo_test.go | 2 +- .../api_repo_topic_test.go | 2 +- .../api_settings_test.go | 2 +- .../api_team_test.go | 2 +- .../api_team_user_test.go | 2 +- .../api_token_test.go | 2 +- .../api_user_email_test.go | 2 +- .../api_user_heatmap_test.go | 2 +- .../api_user_org_perm_test.go | 2 +- .../api_user_orgs_test.go | 2 +- .../api_user_search_test.go | 2 +- .../api_wiki_test.go | 2 +- .../attachment_test.go | 2 +- .../auth_ldap_test.go | 2 +- .../benchmarks_test.go | 2 +- .../branches_test.go | 2 +- .../change_default_branch_test.go | 2 +- .../cmd_keys_test.go | 2 +- .../compare_test.go | 2 +- .../cors_test.go | 2 +- .../create_no_session_test.go | 2 +- .../csrf_test.go | 2 +- .../delete_user_test.go | 2 +- .../download_test.go | 2 +- .../dump_restore_test.go | 2 +- .../editor_test.go | 2 +- .../empty_repo_test.go | 2 +- .../eventsource_test.go | 2 +- .../explore_repos_test.go | 2 +- .../git_clone_wiki_test.go | 2 +- .../git_helper_for_declarative_test.go | 2 +- .../git_smart_http_test.go | 2 +- .../{integrations => integration}/git_test.go | 2 +- .../goget_test.go | 2 +- .../gpg_git_test.go | 6 ++-- .../html_helper.go | 2 +- .../integration_test.go | 2 +- .../issue_test.go | 2 +- .../lfs_getobject_test.go | 2 +- .../lfs_local_endpoint_test.go | 2 +- .../links_test.go | 2 +- .../migrate_test.go | 2 +- .../migration-test/gitea-v1.6.4.mssql.sql.gz | Bin .../migration-test/gitea-v1.6.4.mysql.sql.gz | Bin .../gitea-v1.6.4.postgres.sql.gz | Bin .../gitea-v1.6.4.sqlite3.sql.gz | Bin .../migration-test/gitea-v1.7.0.mssql.sql.gz | Bin .../migration-test/gitea-v1.7.0.mysql.sql.gz | Bin .../gitea-v1.7.0.postgres.sql.gz | Bin .../gitea-v1.7.0.sqlite3.sql.gz | Bin .../migration-test/migration_test.go | 24 ++++++------- .../mirror_pull_test.go | 2 +- .../mirror_push_test.go | 2 +- .../nonascii_branches_test.go | 2 +- .../oauth_test.go | 2 +- .../org_count_test.go | 2 +- .../{integrations => integration}/org_test.go | 2 +- .../private-testing.key | 0 .../privateactivity_test.go | 2 +- .../pull_compare_test.go | 2 +- .../pull_create_test.go | 2 +- .../pull_merge_test.go | 2 +- .../pull_review_test.go | 2 +- .../pull_status_test.go | 2 +- .../pull_update_test.go | 2 +- .../release_test.go | 2 +- .../rename_branch_test.go | 2 +- .../repo_activity_test.go | 2 +- .../repo_branch_test.go | 2 +- .../repo_commits_search_test.go | 2 +- .../repo_commits_test.go | 2 +- .../repo_fork_test.go | 2 +- .../repo_generate_test.go | 2 +- .../repo_migrate_test.go | 2 +- .../repo_search_test.go | 2 +- .../repo_tag_test.go | 2 +- .../repo_test.go | 2 +- .../repo_topic_test.go | 2 +- .../repo_watch_test.go | 2 +- .../repofiles_delete_test.go | 2 +- .../repofiles_update_test.go | 2 +- .../setting_test.go | 2 +- .../signin_test.go | 2 +- .../signout_test.go | 2 +- .../signup_test.go | 2 +- .../ssh_key_test.go | 2 +- .../testlogger.go | 4 +-- .../timetracking_test.go | 2 +- .../user_avatar_test.go | 2 +- .../user_test.go | 2 +- .../version_test.go | 2 +- .../view_test.go | 2 +- .../webfinger_test.go | 2 +- .../{integrations => integration}/xss_test.go | 2 +- tests/mssql.ini.tmpl | 24 ++++++------- tests/mysql.ini.tmpl | 14 ++++---- tests/mysql8.ini.tmpl | 24 ++++++------- tests/pgsql.ini.tmpl | 24 ++++++------- tests/sqlite.ini.tmpl | 26 +++++++------- 168 files changed, 255 insertions(+), 254 deletions(-) rename tests/{integrations => integration}/README.md (94%) rename tests/{integrations => integration}/README_ZH.md (98%) rename tests/{integrations => integration}/admin_user_test.go (99%) rename tests/{integrations => integration}/api_activitypub_person_test.go (99%) rename tests/{integrations => integration}/api_admin_org_test.go (99%) rename tests/{integrations => integration}/api_admin_test.go (99%) rename tests/{integrations => integration}/api_branch_test.go (99%) rename tests/{integrations => integration}/api_comment_test.go (99%) rename tests/{integrations => integration}/api_fork_test.go (95%) rename tests/{integrations => integration}/api_gpg_keys_test.go (99%) rename tests/{integrations => integration}/api_helper_for_declarative_test.go (99%) rename tests/{integrations => integration}/api_httpsig_test.go (99%) rename tests/{integrations => integration}/api_issue_label_test.go (99%) rename tests/{integrations => integration}/api_issue_milestone_test.go (99%) rename tests/{integrations => integration}/api_issue_reaction_test.go (99%) rename tests/{integrations => integration}/api_issue_stopwatch_test.go (99%) rename tests/{integrations => integration}/api_issue_subscription_test.go (99%) rename tests/{integrations => integration}/api_issue_test.go (99%) rename tests/{integrations => integration}/api_issue_tracked_time_test.go (99%) rename tests/{integrations => integration}/api_keys_test.go (99%) rename tests/{integrations => integration}/api_nodeinfo_test.go (97%) rename tests/{integrations => integration}/api_notification_test.go (99%) rename tests/{integrations => integration}/api_oauth2_apps_test.go (99%) rename tests/{integrations => integration}/api_org_test.go (99%) rename tests/{integrations => integration}/api_packages_composer_test.go (99%) rename tests/{integrations => integration}/api_packages_conan_test.go (99%) rename tests/{integrations => integration}/api_packages_container_test.go (99%) rename tests/{integrations => integration}/api_packages_generic_test.go (99%) rename tests/{integrations => integration}/api_packages_helm_test.go (99%) rename tests/{integrations => integration}/api_packages_maven_test.go (99%) rename tests/{integrations => integration}/api_packages_npm_test.go (99%) rename tests/{integrations => integration}/api_packages_nuget_test.go (99%) rename tests/{integrations => integration}/api_packages_pypi_test.go (99%) rename tests/{integrations => integration}/api_packages_rubygems_test.go (99%) rename tests/{integrations => integration}/api_packages_test.go (99%) rename tests/{integrations => integration}/api_private_serv_test.go (99%) rename tests/{integrations => integration}/api_pull_commits_test.go (98%) rename tests/{integrations => integration}/api_pull_review_test.go (99%) rename tests/{integrations => integration}/api_pull_test.go (99%) rename tests/{integrations => integration}/api_releases_test.go (99%) rename tests/{integrations => integration}/api_repo_archive_test.go (98%) rename tests/{integrations => integration}/api_repo_collaborator_test.go (99%) rename tests/{integrations => integration}/api_repo_edit_test.go (99%) rename tests/{integrations => integration}/api_repo_file_create_test.go (99%) rename tests/{integrations => integration}/api_repo_file_delete_test.go (99%) rename tests/{integrations => integration}/api_repo_file_get_test.go (98%) rename tests/{integrations => integration}/api_repo_file_helpers.go (97%) rename tests/{integrations => integration}/api_repo_file_update_test.go (99%) rename tests/{integrations => integration}/api_repo_get_contents_list_test.go (99%) rename tests/{integrations => integration}/api_repo_get_contents_test.go (99%) rename tests/{integrations => integration}/api_repo_git_blobs_test.go (99%) rename tests/{integrations => integration}/api_repo_git_commits_test.go (99%) rename tests/{integrations => integration}/api_repo_git_hook_test.go (99%) rename tests/{integrations => integration}/api_repo_git_notes_test.go (98%) rename tests/{integrations => integration}/api_repo_git_ref_test.go (98%) rename tests/{integrations => integration}/api_repo_git_tags_test.go (99%) rename tests/{integrations => integration}/api_repo_git_trees_test.go (99%) rename tests/{integrations => integration}/api_repo_languages_test.go (98%) rename tests/{integrations => integration}/api_repo_lfs_locks_test.go (99%) rename tests/{integrations => integration}/api_repo_lfs_migrate_test.go (98%) rename tests/{integrations => integration}/api_repo_lfs_test.go (99%) rename tests/{integrations => integration}/api_repo_raw_test.go (97%) rename tests/{integrations => integration}/api_repo_tags_test.go (99%) rename tests/{integrations => integration}/api_repo_teams_test.go (99%) rename tests/{integrations => integration}/api_repo_test.go (99%) rename tests/{integrations => integration}/api_repo_topic_test.go (99%) rename tests/{integrations => integration}/api_settings_test.go (98%) rename tests/{integrations => integration}/api_team_test.go (99%) rename tests/{integrations => integration}/api_team_user_test.go (98%) rename tests/{integrations => integration}/api_token_test.go (99%) rename tests/{integrations => integration}/api_user_email_test.go (99%) rename tests/{integrations => integration}/api_user_heatmap_test.go (98%) rename tests/{integrations => integration}/api_user_org_perm_test.go (99%) rename tests/{integrations => integration}/api_user_orgs_test.go (99%) rename tests/{integrations => integration}/api_user_search_test.go (99%) rename tests/{integrations => integration}/api_wiki_test.go (99%) rename tests/{integrations => integration}/attachment_test.go (99%) rename tests/{integrations => integration}/auth_ldap_test.go (99%) rename tests/{integrations => integration}/benchmarks_test.go (99%) rename tests/{integrations => integration}/branches_test.go (98%) rename tests/{integrations => integration}/change_default_branch_test.go (98%) rename tests/{integrations => integration}/cmd_keys_test.go (99%) rename tests/{integrations => integration}/compare_test.go (98%) rename tests/{integrations => integration}/cors_test.go (96%) rename tests/{integrations => integration}/create_no_session_test.go (99%) rename tests/{integrations => integration}/csrf_test.go (98%) rename tests/{integrations => integration}/delete_user_test.go (99%) rename tests/{integrations => integration}/download_test.go (99%) rename tests/{integrations => integration}/dump_restore_test.go (99%) rename tests/{integrations => integration}/editor_test.go (99%) rename tests/{integrations => integration}/empty_repo_test.go (97%) rename tests/{integrations => integration}/eventsource_test.go (99%) rename tests/{integrations => integration}/explore_repos_test.go (94%) rename tests/{integrations => integration}/git_clone_wiki_test.go (98%) rename tests/{integrations => integration}/git_helper_for_declarative_test.go (99%) rename tests/{integrations => integration}/git_smart_http_test.go (98%) rename tests/{integrations => integration}/git_test.go (99%) rename tests/{integrations => integration}/goget_test.go (97%) rename tests/{integrations => integration}/gpg_git_test.go (98%) rename tests/{integrations => integration}/html_helper.go (98%) rename tests/{integrations => integration}/integration_test.go (99%) rename tests/{integrations => integration}/issue_test.go (99%) rename tests/{integrations => integration}/lfs_getobject_test.go (99%) rename tests/{integrations => integration}/lfs_local_endpoint_test.go (99%) rename tests/{integrations => integration}/links_test.go (99%) rename tests/{integrations => integration}/migrate_test.go (98%) rename tests/{integrations => integration}/migration-test/gitea-v1.6.4.mssql.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.6.4.mysql.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.6.4.postgres.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.6.4.sqlite3.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.7.0.mssql.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.7.0.mysql.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.7.0.postgres.sql.gz (100%) rename tests/{integrations => integration}/migration-test/gitea-v1.7.0.sqlite3.sql.gz (100%) rename tests/{integrations => integration}/migration-test/migration_test.go (91%) rename tests/{integrations => integration}/mirror_pull_test.go (99%) rename tests/{integrations => integration}/mirror_push_test.go (99%) rename tests/{integrations => integration}/nonascii_branches_test.go (99%) rename tests/{integrations => integration}/oauth_test.go (99%) rename tests/{integrations => integration}/org_count_test.go (99%) rename tests/{integrations => integration}/org_test.go (99%) rename tests/{integrations => integration}/private-testing.key (100%) rename tests/{integrations => integration}/privateactivity_test.go (99%) rename tests/{integrations => integration}/pull_compare_test.go (97%) rename tests/{integrations => integration}/pull_create_test.go (99%) rename tests/{integrations => integration}/pull_merge_test.go (99%) rename tests/{integrations => integration}/pull_review_test.go (95%) rename tests/{integrations => integration}/pull_status_test.go (99%) rename tests/{integrations => integration}/pull_update_test.go (99%) rename tests/{integrations => integration}/release_test.go (99%) rename tests/{integrations => integration}/rename_branch_test.go (98%) rename tests/{integrations => integration}/repo_activity_test.go (99%) rename tests/{integrations => integration}/repo_branch_test.go (99%) rename tests/{integrations => integration}/repo_commits_search_test.go (98%) rename tests/{integrations => integration}/repo_commits_test.go (99%) rename tests/{integrations => integration}/repo_fork_test.go (99%) rename tests/{integrations => integration}/repo_generate_test.go (99%) rename tests/{integrations => integration}/repo_migrate_test.go (98%) rename tests/{integrations => integration}/repo_search_test.go (98%) rename tests/{integrations => integration}/repo_tag_test.go (99%) rename tests/{integrations => integration}/repo_test.go (99%) rename tests/{integrations => integration}/repo_topic_test.go (98%) rename tests/{integrations => integration}/repo_watch_test.go (97%) rename tests/{integrations => integration}/repofiles_delete_test.go (99%) rename tests/{integrations => integration}/repofiles_update_test.go (99%) rename tests/{integrations => integration}/setting_test.go (99%) rename tests/{integrations => integration}/signin_test.go (98%) rename tests/{integrations => integration}/signout_test.go (96%) rename tests/{integrations => integration}/signup_test.go (99%) rename tests/{integrations => integration}/ssh_key_test.go (99%) rename tests/{integrations => integration}/testlogger.go (98%) rename tests/{integrations => integration}/timetracking_test.go (99%) rename tests/{integrations => integration}/user_avatar_test.go (98%) rename tests/{integrations => integration}/user_test.go (99%) rename tests/{integrations => integration}/version_test.go (96%) rename tests/{integrations => integration}/view_test.go (97%) rename tests/{integrations => integration}/webfinger_test.go (99%) rename tests/{integrations => integration}/xss_test.go (98%) diff --git a/.gitignore b/.gitignore index b90006be77626..c1951c8ddc58b 100644 --- a/.gitignore +++ b/.gitignore @@ -63,16 +63,16 @@ cpu.out /indexers /log /public/img/avatar -/tests/integrations/gitea-integration-mysql -/tests/integrations/gitea-integration-mysql8 -/tests/integrations/gitea-integration-pgsql -/tests/integrations/gitea-integration-sqlite -/tests/integrations/gitea-integration-mssql -/tests/integrations/indexers-mysql -/tests/integrations/indexers-mysql8 -/tests/integrations/indexers-pgsql -/tests/integrations/indexers-sqlite -/tests/integrations/indexers-mssql +/tests/integration/gitea-integration-mysql +/tests/integration/gitea-integration-mysql8 +/tests/integration/gitea-integration-pgsql +/tests/integration/gitea-integration-sqlite +/tests/integration/gitea-integration-mssql +/tests/integration/indexers-mysql +/tests/integration/indexers-mysql8 +/tests/integration/indexers-pgsql +/tests/integration/indexers-sqlite +/tests/integration/indexers-mssql /tests/sqlite.ini /tests/mysql.ini /tests/mysql8.ini diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 45344a4d7bbb5..0a1a941884a55 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -86,8 +86,8 @@ Here's how to run the test suite: | | | | :------------------------------------- | :----------------------------------------------- | |``make test[\#TestSpecificName]`` | run unit test | -|``make test-sqlite[\#TestSpecificName]``| run [integration](integrations) test for SQLite | -|[More details about integrations](integrations/README.md) | +|``make test-sqlite[\#TestSpecificName]``| run [integration](tests/integration) test for SQLite | +|[More details about integrations](tests/integration/README.md) | ## Vendoring @@ -167,7 +167,7 @@ import ( To maintain understandable code and avoid circular dependencies it is important to have a good structure of the code. The Gitea code is divided into the following parts: -- **integration:** Integrations tests +- **integration:** Integration tests - **models:** Contains the data structures used by xorm to construct database tables. It also contains supporting functions to query and update the database. Dependencies to other code in Gitea should be avoided although some modules might be needed (for example for logging). - **models/fixtures:** Sample model data used in integration tests. - **models/migrations:** Handling of database migrations between versions. PRs that changes a database structure shall also have a migration step. diff --git a/Makefile b/Makefile index 223c895891d25..5961bc78136ee 100644 --- a/Makefile +++ b/Makefile @@ -99,7 +99,7 @@ LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(G LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64 -GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/tests/integrations/migration-test code.gitea.io/gitea/tests/integrations code.gitea.io/gitea/tests,$(shell $(GO) list ./... | grep -v /vendor/)) +GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests,$(shell $(GO) list ./... | grep -v /vendor/)) FOMANTIC_WORK_DIR := web_src/fomantic @@ -242,9 +242,9 @@ clean: $(GO) clean -i ./... rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \ integrations*.test \ - tests/integrations/gitea-integration-pgsql/ tests/integrations/gitea-integration-mysql/ tests/integrations/gitea-integration-mysql8/ tests/integrations/gitea-integration-sqlite/ \ - tests/integrations/gitea-integration-mssql/ tests/integrations/indexers-mysql/ tests/integrations/indexers-mysql8/ tests/integrations/indexers-pgsql tests/integrations/indexers-sqlite \ - tests/integrations/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ + tests/integration/gitea-integration-pgsql/ tests/integration/gitea-integration-mysql/ tests/integration/gitea-integration-mysql8/ tests/integration/gitea-integration-sqlite/ \ + tests/integration/gitea-integration-mssql/ tests/integration/indexers-mysql/ tests/integration/indexers-mysql8/ tests/integration/indexers-pgsql tests/integration/indexers-sqlite \ + tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ .PHONY: fmt fmt: @@ -589,45 +589,45 @@ integration-test-coverage-sqlite: integrations.cover.sqlite.test generate-ini-sq GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./integrations.cover.sqlite.test -test.coverprofile=integration.coverage.out integrations.mysql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mysql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mysql.test integrations.mysql8.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mysql8.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mysql8.test integrations.pgsql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.pgsql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.pgsql.test integrations.mssql.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.mssql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.mssql.test integrations.sqlite.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -o integrations.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -o integrations.sqlite.test -tags '$(TEST_TAGS)' integrations.cover.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.test integrations.cover.sqlite.test: git-check $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration -coverpkg $(shell echo $(GO_PACKAGES) | tr ' ' ',') -o integrations.cover.sqlite.test -tags '$(TEST_TAGS)' .PHONY: migrations.mysql.test migrations.mysql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mysql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mysql.test .PHONY: migrations.mysql8.test migrations.mysql8.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mysql8.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mysql8.test .PHONY: migrations.pgsql.test migrations.pgsql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.pgsql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.pgsql.test .PHONY: migrations.mssql.test migrations.mssql.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.mssql.test + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.mssql.test .PHONY: migrations.sqlite.test migrations.sqlite.test: $(GO_SOURCES) - $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integrations/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)' + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/integration/migration-test -o migrations.sqlite.test -tags '$(TEST_TAGS)' .PHONY: migrations.individual.mysql.test migrations.individual.mysql.test: $(GO_SOURCES) diff --git a/docs/content/doc/developers/guidelines-backend.md b/docs/content/doc/developers/guidelines-backend.md index 1248d4143233f..a0d3d75952df1 100644 --- a/docs/content/doc/developers/guidelines-backend.md +++ b/docs/content/doc/developers/guidelines-backend.md @@ -33,7 +33,8 @@ To maintain understandable code and avoid circular dependencies it is important - `build`: Scripts to help build Gitea. - `cmd`: All Gitea actual sub commands includes web, doctor, serv, hooks, admin and etc. `web` will start the web service. `serv` and `hooks` will be invoked by Git or OpenSSH. Other sub commands could help to maintain Gitea. -- `integrations`: Integration tests +- `tests`: Tests + - `tests/integration`: Integration tests - `models`: Contains the data structures used by xorm to construct database tables. It also contains functions to query and update the database. Dependencies to other Gitea code should be avoided. You can make exceptions in cases such as logging. - `models/db`: Basic database operations. All other `models/xxx` packages should depend on this package. The `GetEngine` function should only be invoked from `models/`. - `models/fixtures`: Sample data used in unit tests and integration tests. One `yml` file means one table which will be loaded into database when beginning the tests. diff --git a/docs/content/doc/developers/hacking-on-gitea.en-us.md b/docs/content/doc/developers/hacking-on-gitea.en-us.md index 3c9e1e1d619fe..a5e501ac32e0c 100644 --- a/docs/content/doc/developers/hacking-on-gitea.en-us.md +++ b/docs/content/doc/developers/hacking-on-gitea.en-us.md @@ -309,7 +309,7 @@ will run the integration tests in an SQLite environment. Integration tests require `git lfs` to be installed. Other database tests are available but may need adjustment to the local environment. -Take a look at [`tests/integrations/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integrations/README.md) +Take a look at [`tests/integration/README.md`](https://github.com/go-gitea/gitea/blob/main/tests/integration/README.md) for more information and how to run a single test. diff --git a/tests/integrations/README.md b/tests/integration/README.md similarity index 94% rename from tests/integrations/README.md rename to tests/integration/README.md index 40cdcde474303..2f5b5ae68510c 100644 --- a/tests/integrations/README.md +++ b/tests/integration/README.md @@ -1,4 +1,4 @@ -# Integrations tests +# Integration tests Integration tests can be run with make commands for the appropriate backends, namely: @@ -18,13 +18,13 @@ make clean build drone exec --local --build-event "pull_request" ``` -## Run sqlite integrations tests +## Run sqlite integration tests Start tests ``` make test-sqlite ``` -## Run MySQL integrations tests +## Run MySQL integration tests Setup a MySQL database inside docker ``` docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" -p 3306:3306 --rm --name mysql mysql:latest #(just ctrl-c to stop db and clean the container) @@ -35,7 +35,7 @@ Start tests based on the database container TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-mysql ``` -## Run pgsql integrations tests +## Run pgsql integration tests Setup a pgsql database inside docker ``` docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:latest #(just ctrl-c to stop db and clean the container) @@ -45,7 +45,7 @@ Start tests based on the database container TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql ``` -## Run mssql integrations tests +## Run mssql integration tests Setup a mssql database inside docker ``` docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSecurePassword1" -p 1433:1433 --rm --name mssql microsoft/mssql-server-linux:latest #(just ctrl-c to stop db and clean the container) diff --git a/tests/integrations/README_ZH.md b/tests/integration/README_ZH.md similarity index 98% rename from tests/integrations/README_ZH.md rename to tests/integration/README_ZH.md index eebb14de737df..38402324720bb 100644 --- a/tests/integrations/README_ZH.md +++ b/tests/integration/README_ZH.md @@ -43,7 +43,7 @@ docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:14 #(ju TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql ``` -## Run mssql integrations tests +## Run mssql integration tests 同上,首先在 docker 容器里部署一个 mssql 数据库 ``` docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSecurePassword1" -p 1433:1433 --rm --name mssql microsoft/mssql-server-linux:latest #(just ctrl-c to stop db and clean the container) diff --git a/tests/integrations/admin_user_test.go b/tests/integration/admin_user_test.go similarity index 99% rename from tests/integrations/admin_user_test.go rename to tests/integration/admin_user_test.go index 59adac7ecc65b..7aa0b2dead83e 100644 --- a/tests/integrations/admin_user_test.go +++ b/tests/integration/admin_user_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_activitypub_person_test.go b/tests/integration/api_activitypub_person_test.go similarity index 99% rename from tests/integrations/api_activitypub_person_test.go rename to tests/integration/api_activitypub_person_test.go index e19da40864e92..8e0202167631b 100644 --- a/tests/integrations/api_activitypub_person_test.go +++ b/tests/integration/api_activitypub_person_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/api_admin_org_test.go b/tests/integration/api_admin_org_test.go similarity index 99% rename from tests/integrations/api_admin_org_test.go rename to tests/integration/api_admin_org_test.go index 8f36850a1a144..1784c4a47345e 100644 --- a/tests/integrations/api_admin_org_test.go +++ b/tests/integration/api_admin_org_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_admin_test.go b/tests/integration/api_admin_test.go similarity index 99% rename from tests/integrations/api_admin_test.go rename to tests/integration/api_admin_test.go index 62c7d7eaf7d32..dfadb1f3414fd 100644 --- a/tests/integrations/api_admin_test.go +++ b/tests/integration/api_admin_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_branch_test.go b/tests/integration/api_branch_test.go similarity index 99% rename from tests/integrations/api_branch_test.go rename to tests/integration/api_branch_test.go index e137331343f34..d9c929ad78aa1 100644 --- a/tests/integrations/api_branch_test.go +++ b/tests/integration/api_branch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_comment_test.go b/tests/integration/api_comment_test.go similarity index 99% rename from tests/integrations/api_comment_test.go rename to tests/integration/api_comment_test.go index 7dcc0279fc2f9..ef8889d223b86 100644 --- a/tests/integrations/api_comment_test.go +++ b/tests/integration/api_comment_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_fork_test.go b/tests/integration/api_fork_test.go similarity index 95% rename from tests/integrations/api_fork_test.go rename to tests/integration/api_fork_test.go index 4f3b023312cce..dc689e37f5a1d 100644 --- a/tests/integrations/api_fork_test.go +++ b/tests/integration/api_fork_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_gpg_keys_test.go b/tests/integration/api_gpg_keys_test.go similarity index 99% rename from tests/integrations/api_gpg_keys_test.go rename to tests/integration/api_gpg_keys_test.go index 38341aecff7f4..85f9a1b549faf 100644 --- a/tests/integrations/api_gpg_keys_test.go +++ b/tests/integration/api_gpg_keys_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_helper_for_declarative_test.go b/tests/integration/api_helper_for_declarative_test.go similarity index 99% rename from tests/integrations/api_helper_for_declarative_test.go rename to tests/integration/api_helper_for_declarative_test.go index 181a6469467cd..5a798f79f0fc5 100644 --- a/tests/integrations/api_helper_for_declarative_test.go +++ b/tests/integration/api_helper_for_declarative_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/api_httpsig_test.go b/tests/integration/api_httpsig_test.go similarity index 99% rename from tests/integrations/api_httpsig_test.go rename to tests/integration/api_httpsig_test.go index 7197e9afb9921..88aa9fc451221 100644 --- a/tests/integrations/api_httpsig_test.go +++ b/tests/integration/api_httpsig_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "encoding/base64" diff --git a/tests/integrations/api_issue_label_test.go b/tests/integration/api_issue_label_test.go similarity index 99% rename from tests/integrations/api_issue_label_test.go rename to tests/integration/api_issue_label_test.go index 9b6333b2a268a..c254c5de5bd11 100644 --- a/tests/integrations/api_issue_label_test.go +++ b/tests/integration/api_issue_label_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_issue_milestone_test.go b/tests/integration/api_issue_milestone_test.go similarity index 99% rename from tests/integrations/api_issue_milestone_test.go rename to tests/integration/api_issue_milestone_test.go index a7f89721a5e8f..776dacf3b243d 100644 --- a/tests/integrations/api_issue_milestone_test.go +++ b/tests/integration/api_issue_milestone_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_issue_reaction_test.go b/tests/integration/api_issue_reaction_test.go similarity index 99% rename from tests/integrations/api_issue_reaction_test.go rename to tests/integration/api_issue_reaction_test.go index 3834af2130976..7b8c84c0734f5 100644 --- a/tests/integrations/api_issue_reaction_test.go +++ b/tests/integration/api_issue_reaction_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_issue_stopwatch_test.go b/tests/integration/api_issue_stopwatch_test.go similarity index 99% rename from tests/integrations/api_issue_stopwatch_test.go rename to tests/integration/api_issue_stopwatch_test.go index b4e5f90543a3c..c971877b79701 100644 --- a/tests/integrations/api_issue_stopwatch_test.go +++ b/tests/integration/api_issue_stopwatch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_issue_subscription_test.go b/tests/integration/api_issue_subscription_test.go similarity index 99% rename from tests/integrations/api_issue_subscription_test.go rename to tests/integration/api_issue_subscription_test.go index 2c6cddcab9e7f..21e29d336353c 100644 --- a/tests/integrations/api_issue_subscription_test.go +++ b/tests/integration/api_issue_subscription_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_issue_test.go b/tests/integration/api_issue_test.go similarity index 99% rename from tests/integrations/api_issue_test.go rename to tests/integration/api_issue_test.go index 5c802e8d20df7..851e4d7be2262 100644 --- a/tests/integrations/api_issue_test.go +++ b/tests/integration/api_issue_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_issue_tracked_time_test.go b/tests/integration/api_issue_tracked_time_test.go similarity index 99% rename from tests/integrations/api_issue_tracked_time_test.go rename to tests/integration/api_issue_tracked_time_test.go index a6846cb786516..c828ff3ecbc80 100644 --- a/tests/integrations/api_issue_tracked_time_test.go +++ b/tests/integration/api_issue_tracked_time_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_keys_test.go b/tests/integration/api_keys_test.go similarity index 99% rename from tests/integrations/api_keys_test.go rename to tests/integration/api_keys_test.go index 198da29b8a10c..dffb78a5be524 100644 --- a/tests/integrations/api_keys_test.go +++ b/tests/integration/api_keys_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_nodeinfo_test.go b/tests/integration/api_nodeinfo_test.go similarity index 97% rename from tests/integrations/api_nodeinfo_test.go rename to tests/integration/api_nodeinfo_test.go index cf9ff4da1b532..5f2437f5b5c8d 100644 --- a/tests/integrations/api_nodeinfo_test.go +++ b/tests/integration/api_nodeinfo_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_notification_test.go b/tests/integration/api_notification_test.go similarity index 99% rename from tests/integrations/api_notification_test.go rename to tests/integration/api_notification_test.go index 4bf18632ca07f..e177cbc63e019 100644 --- a/tests/integrations/api_notification_test.go +++ b/tests/integration/api_notification_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_oauth2_apps_test.go b/tests/integration/api_oauth2_apps_test.go similarity index 99% rename from tests/integrations/api_oauth2_apps_test.go rename to tests/integration/api_oauth2_apps_test.go index 2c08338b25b92..3a0279dce3f6e 100644 --- a/tests/integrations/api_oauth2_apps_test.go +++ b/tests/integration/api_oauth2_apps_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file.package models -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_org_test.go b/tests/integration/api_org_test.go similarity index 99% rename from tests/integrations/api_org_test.go rename to tests/integration/api_org_test.go index a3c1827e70463..9cd2ba5332305 100644 --- a/tests/integrations/api_org_test.go +++ b/tests/integration/api_org_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_packages_composer_test.go b/tests/integration/api_packages_composer_test.go similarity index 99% rename from tests/integrations/api_packages_composer_test.go rename to tests/integration/api_packages_composer_test.go index 59b975408dfb1..deebd6427a0bc 100644 --- a/tests/integrations/api_packages_composer_test.go +++ b/tests/integration/api_packages_composer_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "archive/zip" diff --git a/tests/integrations/api_packages_conan_test.go b/tests/integration/api_packages_conan_test.go similarity index 99% rename from tests/integrations/api_packages_conan_test.go rename to tests/integration/api_packages_conan_test.go index 65d16801fc596..c5419f9033842 100644 --- a/tests/integrations/api_packages_conan_test.go +++ b/tests/integration/api_packages_conan_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_packages_container_test.go b/tests/integration/api_packages_container_test.go similarity index 99% rename from tests/integrations/api_packages_container_test.go rename to tests/integration/api_packages_container_test.go index 1ed80dfd02277..8e7676ed12faa 100644 --- a/tests/integrations/api_packages_container_test.go +++ b/tests/integration/api_packages_container_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_packages_generic_test.go b/tests/integration/api_packages_generic_test.go similarity index 99% rename from tests/integrations/api_packages_generic_test.go rename to tests/integration/api_packages_generic_test.go index c507702eaafd1..17106d6ee76ab 100644 --- a/tests/integrations/api_packages_generic_test.go +++ b/tests/integration/api_packages_generic_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_packages_helm_test.go b/tests/integration/api_packages_helm_test.go similarity index 99% rename from tests/integrations/api_packages_helm_test.go rename to tests/integration/api_packages_helm_test.go index fcf5d2f7622c7..ce007b8d01628 100644 --- a/tests/integrations/api_packages_helm_test.go +++ b/tests/integration/api_packages_helm_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "archive/tar" diff --git a/tests/integrations/api_packages_maven_test.go b/tests/integration/api_packages_maven_test.go similarity index 99% rename from tests/integrations/api_packages_maven_test.go rename to tests/integration/api_packages_maven_test.go index c7c45426859e7..2aa8d49919b89 100644 --- a/tests/integrations/api_packages_maven_test.go +++ b/tests/integration/api_packages_maven_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_packages_npm_test.go b/tests/integration/api_packages_npm_test.go similarity index 99% rename from tests/integrations/api_packages_npm_test.go rename to tests/integration/api_packages_npm_test.go index 28a3711939828..b33c2fc090f51 100644 --- a/tests/integrations/api_packages_npm_test.go +++ b/tests/integration/api_packages_npm_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "encoding/base64" diff --git a/tests/integrations/api_packages_nuget_test.go b/tests/integration/api_packages_nuget_test.go similarity index 99% rename from tests/integrations/api_packages_nuget_test.go rename to tests/integration/api_packages_nuget_test.go index e69dd0ff9b669..c3f38ef6311cc 100644 --- a/tests/integrations/api_packages_nuget_test.go +++ b/tests/integration/api_packages_nuget_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "archive/zip" diff --git a/tests/integrations/api_packages_pypi_test.go b/tests/integration/api_packages_pypi_test.go similarity index 99% rename from tests/integrations/api_packages_pypi_test.go rename to tests/integration/api_packages_pypi_test.go index 5d610df39da92..c0545fdc22d3f 100644 --- a/tests/integrations/api_packages_pypi_test.go +++ b/tests/integration/api_packages_pypi_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_packages_rubygems_test.go b/tests/integration/api_packages_rubygems_test.go similarity index 99% rename from tests/integrations/api_packages_rubygems_test.go rename to tests/integration/api_packages_rubygems_test.go index 269bc953b4181..9d8f24b96a933 100644 --- a/tests/integrations/api_packages_rubygems_test.go +++ b/tests/integration/api_packages_rubygems_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_packages_test.go b/tests/integration/api_packages_test.go similarity index 99% rename from tests/integrations/api_packages_test.go rename to tests/integration/api_packages_test.go index 1f24807060df7..bad896b9309dc 100644 --- a/tests/integrations/api_packages_test.go +++ b/tests/integration/api_packages_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_private_serv_test.go b/tests/integration/api_private_serv_test.go similarity index 99% rename from tests/integrations/api_private_serv_test.go rename to tests/integration/api_private_serv_test.go index fd3cb25ef2de9..6fd6d616db8a1 100644 --- a/tests/integrations/api_private_serv_test.go +++ b/tests/integration/api_private_serv_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/api_pull_commits_test.go b/tests/integration/api_pull_commits_test.go similarity index 98% rename from tests/integrations/api_pull_commits_test.go rename to tests/integration/api_pull_commits_test.go index 3b75fbcb4a286..bd681d2ad1658 100644 --- a/tests/integrations/api_pull_commits_test.go +++ b/tests/integration/api_pull_commits_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_pull_review_test.go b/tests/integration/api_pull_review_test.go similarity index 99% rename from tests/integrations/api_pull_review_test.go rename to tests/integration/api_pull_review_test.go index b601ca1d41fed..f8973d6c94fc2 100644 --- a/tests/integrations/api_pull_review_test.go +++ b/tests/integration/api_pull_review_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_pull_test.go b/tests/integration/api_pull_test.go similarity index 99% rename from tests/integrations/api_pull_test.go rename to tests/integration/api_pull_test.go index 0c63ec2c0065d..13839c893e7ea 100644 --- a/tests/integrations/api_pull_test.go +++ b/tests/integration/api_pull_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_releases_test.go b/tests/integration/api_releases_test.go similarity index 99% rename from tests/integrations/api_releases_test.go rename to tests/integration/api_releases_test.go index 74639e900739d..95827111fb900 100644 --- a/tests/integrations/api_releases_test.go +++ b/tests/integration/api_releases_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_archive_test.go b/tests/integration/api_repo_archive_test.go similarity index 98% rename from tests/integrations/api_repo_archive_test.go rename to tests/integration/api_repo_archive_test.go index 7778b7ff697a9..3e9f774bebb49 100644 --- a/tests/integrations/api_repo_archive_test.go +++ b/tests/integration/api_repo_archive_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_collaborator_test.go b/tests/integration/api_repo_collaborator_test.go similarity index 99% rename from tests/integrations/api_repo_collaborator_test.go rename to tests/integration/api_repo_collaborator_test.go index fdca1d9150247..3a112b0e23cfb 100644 --- a/tests/integrations/api_repo_collaborator_test.go +++ b/tests/integration/api_repo_collaborator_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_edit_test.go b/tests/integration/api_repo_edit_test.go similarity index 99% rename from tests/integrations/api_repo_edit_test.go rename to tests/integration/api_repo_edit_test.go index f3f0139d95383..5f5421770d563 100644 --- a/tests/integrations/api_repo_edit_test.go +++ b/tests/integration/api_repo_edit_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_file_create_test.go b/tests/integration/api_repo_file_create_test.go similarity index 99% rename from tests/integrations/api_repo_file_create_test.go rename to tests/integration/api_repo_file_create_test.go index eb550f1d28d74..72f377cd29961 100644 --- a/tests/integrations/api_repo_file_create_test.go +++ b/tests/integration/api_repo_file_create_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( stdCtx "context" diff --git a/tests/integrations/api_repo_file_delete_test.go b/tests/integration/api_repo_file_delete_test.go similarity index 99% rename from tests/integrations/api_repo_file_delete_test.go rename to tests/integration/api_repo_file_delete_test.go index 42df869d692c5..81b615e29b814 100644 --- a/tests/integrations/api_repo_file_delete_test.go +++ b/tests/integration/api_repo_file_delete_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_file_get_test.go b/tests/integration/api_repo_file_get_test.go similarity index 98% rename from tests/integrations/api_repo_file_get_test.go rename to tests/integration/api_repo_file_get_test.go index 8d1c4c4bcf0fa..764ae79ffea84 100644 --- a/tests/integrations/api_repo_file_get_test.go +++ b/tests/integration/api_repo_file_get_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_file_helpers.go b/tests/integration/api_repo_file_helpers.go similarity index 97% rename from tests/integrations/api_repo_file_helpers.go rename to tests/integration/api_repo_file_helpers.go index 465e03d53cceb..298bae95c0d00 100644 --- a/tests/integrations/api_repo_file_helpers.go +++ b/tests/integration/api_repo_file_helpers.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( repo_model "code.gitea.io/gitea/models/repo" diff --git a/tests/integrations/api_repo_file_update_test.go b/tests/integration/api_repo_file_update_test.go similarity index 99% rename from tests/integrations/api_repo_file_update_test.go rename to tests/integration/api_repo_file_update_test.go index 0c9c0763f4671..c86b1a6186296 100644 --- a/tests/integrations/api_repo_file_update_test.go +++ b/tests/integration/api_repo_file_update_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( stdCtx "context" diff --git a/tests/integrations/api_repo_get_contents_list_test.go b/tests/integration/api_repo_get_contents_list_test.go similarity index 99% rename from tests/integrations/api_repo_get_contents_list_test.go rename to tests/integration/api_repo_get_contents_list_test.go index 42227a9c4b723..9a2a552b4a1cf 100644 --- a/tests/integrations/api_repo_get_contents_list_test.go +++ b/tests/integration/api_repo_get_contents_list_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_get_contents_test.go b/tests/integration/api_repo_get_contents_test.go similarity index 99% rename from tests/integrations/api_repo_get_contents_test.go rename to tests/integration/api_repo_get_contents_test.go index 67f2cb83625a0..b517306c4bedc 100644 --- a/tests/integrations/api_repo_get_contents_test.go +++ b/tests/integration/api_repo_get_contents_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_git_blobs_test.go b/tests/integration/api_repo_git_blobs_test.go similarity index 99% rename from tests/integrations/api_repo_git_blobs_test.go rename to tests/integration/api_repo_git_blobs_test.go index 0a3cf632cccdc..7e36e50ec65b3 100644 --- a/tests/integrations/api_repo_git_blobs_test.go +++ b/tests/integration/api_repo_git_blobs_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_git_commits_test.go b/tests/integration/api_repo_git_commits_test.go similarity index 99% rename from tests/integrations/api_repo_git_commits_test.go rename to tests/integration/api_repo_git_commits_test.go index f5a64490b9ed2..451a716a923f7 100644 --- a/tests/integrations/api_repo_git_commits_test.go +++ b/tests/integration/api_repo_git_commits_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_git_hook_test.go b/tests/integration/api_repo_git_hook_test.go similarity index 99% rename from tests/integrations/api_repo_git_hook_test.go rename to tests/integration/api_repo_git_hook_test.go index a31b27c456490..60da9242af519 100644 --- a/tests/integrations/api_repo_git_hook_test.go +++ b/tests/integration/api_repo_git_hook_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_git_notes_test.go b/tests/integration/api_repo_git_notes_test.go similarity index 98% rename from tests/integrations/api_repo_git_notes_test.go rename to tests/integration/api_repo_git_notes_test.go index 08b885bd2fc9e..dc9791bceb20e 100644 --- a/tests/integrations/api_repo_git_notes_test.go +++ b/tests/integration/api_repo_git_notes_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_git_ref_test.go b/tests/integration/api_repo_git_ref_test.go similarity index 98% rename from tests/integrations/api_repo_git_ref_test.go rename to tests/integration/api_repo_git_ref_test.go index f0fc3c81fa2a9..ca51239b1d848 100644 --- a/tests/integrations/api_repo_git_ref_test.go +++ b/tests/integration/api_repo_git_ref_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_git_tags_test.go b/tests/integration/api_repo_git_tags_test.go similarity index 99% rename from tests/integrations/api_repo_git_tags_test.go rename to tests/integration/api_repo_git_tags_test.go index 9e870d2489135..1567b97fa2796 100644 --- a/tests/integrations/api_repo_git_tags_test.go +++ b/tests/integration/api_repo_git_tags_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_git_trees_test.go b/tests/integration/api_repo_git_trees_test.go similarity index 99% rename from tests/integrations/api_repo_git_trees_test.go rename to tests/integration/api_repo_git_trees_test.go index 03e065645bb1d..96958afea8d63 100644 --- a/tests/integrations/api_repo_git_trees_test.go +++ b/tests/integration/api_repo_git_trees_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_languages_test.go b/tests/integration/api_repo_languages_test.go similarity index 98% rename from tests/integrations/api_repo_languages_test.go rename to tests/integration/api_repo_languages_test.go index 8775d2502998c..98373fb6b16a3 100644 --- a/tests/integrations/api_repo_languages_test.go +++ b/tests/integration/api_repo_languages_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_lfs_locks_test.go b/tests/integration/api_repo_lfs_locks_test.go similarity index 99% rename from tests/integrations/api_repo_lfs_locks_test.go rename to tests/integration/api_repo_lfs_locks_test.go index ca7bd35001e55..8f60ec19336ea 100644 --- a/tests/integrations/api_repo_lfs_locks_test.go +++ b/tests/integration/api_repo_lfs_locks_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_lfs_migrate_test.go b/tests/integration/api_repo_lfs_migrate_test.go similarity index 98% rename from tests/integrations/api_repo_lfs_migrate_test.go rename to tests/integration/api_repo_lfs_migrate_test.go index 6d41a48529ce6..9f4ec31a8918c 100644 --- a/tests/integrations/api_repo_lfs_migrate_test.go +++ b/tests/integration/api_repo_lfs_migrate_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_lfs_test.go b/tests/integration/api_repo_lfs_test.go similarity index 99% rename from tests/integrations/api_repo_lfs_test.go rename to tests/integration/api_repo_lfs_test.go index 6a2fccebb5084..ac3b9ba0ae63c 100644 --- a/tests/integrations/api_repo_lfs_test.go +++ b/tests/integration/api_repo_lfs_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/api_repo_raw_test.go b/tests/integration/api_repo_raw_test.go similarity index 97% rename from tests/integrations/api_repo_raw_test.go rename to tests/integration/api_repo_raw_test.go index 2a77d1ba630dc..b8402e2b77a08 100644 --- a/tests/integrations/api_repo_raw_test.go +++ b/tests/integration/api_repo_raw_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_repo_tags_test.go b/tests/integration/api_repo_tags_test.go similarity index 99% rename from tests/integrations/api_repo_tags_test.go rename to tests/integration/api_repo_tags_test.go index 14a24cf5eb75f..359644e475d53 100644 --- a/tests/integrations/api_repo_tags_test.go +++ b/tests/integration/api_repo_tags_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_teams_test.go b/tests/integration/api_repo_teams_test.go similarity index 99% rename from tests/integrations/api_repo_teams_test.go rename to tests/integration/api_repo_teams_test.go index efd6ddb457fa0..91d175a2f6487 100644 --- a/tests/integrations/api_repo_teams_test.go +++ b/tests/integration/api_repo_teams_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_test.go b/tests/integration/api_repo_test.go similarity index 99% rename from tests/integrations/api_repo_test.go rename to tests/integration/api_repo_test.go index 57fe65f4bf90b..97757f0c9ef4a 100644 --- a/tests/integrations/api_repo_test.go +++ b/tests/integration/api_repo_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_repo_topic_test.go b/tests/integration/api_repo_topic_test.go similarity index 99% rename from tests/integrations/api_repo_topic_test.go rename to tests/integration/api_repo_topic_test.go index 04295724a75bf..432eebdd54a6b 100644 --- a/tests/integrations/api_repo_topic_test.go +++ b/tests/integration/api_repo_topic_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_settings_test.go b/tests/integration/api_settings_test.go similarity index 98% rename from tests/integrations/api_settings_test.go rename to tests/integration/api_settings_test.go index 10318cec7ff9a..0304d5c5e82a9 100644 --- a/tests/integrations/api_settings_test.go +++ b/tests/integration/api_settings_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_team_test.go b/tests/integration/api_team_test.go similarity index 99% rename from tests/integrations/api_team_test.go rename to tests/integration/api_team_test.go index d571342c3d618..85ceb43d23d7e 100644 --- a/tests/integrations/api_team_test.go +++ b/tests/integration/api_team_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_team_user_test.go b/tests/integration/api_team_user_test.go similarity index 98% rename from tests/integrations/api_team_user_test.go rename to tests/integration/api_team_user_test.go index 7263408bee56f..53b120904ff29 100644 --- a/tests/integrations/api_team_user_test.go +++ b/tests/integration/api_team_user_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_token_test.go b/tests/integration/api_token_test.go similarity index 99% rename from tests/integrations/api_token_test.go rename to tests/integration/api_token_test.go index aca4768503c9c..4d75ab25beb72 100644 --- a/tests/integrations/api_token_test.go +++ b/tests/integration/api_token_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_user_email_test.go b/tests/integration/api_user_email_test.go similarity index 99% rename from tests/integrations/api_user_email_test.go rename to tests/integration/api_user_email_test.go index 08d236df30e52..1c34f039bac2f 100644 --- a/tests/integrations/api_user_email_test.go +++ b/tests/integration/api_user_email_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/api_user_heatmap_test.go b/tests/integration/api_user_heatmap_test.go similarity index 98% rename from tests/integrations/api_user_heatmap_test.go rename to tests/integration/api_user_heatmap_test.go index 62e70d4c3def4..8eaa9f147564e 100644 --- a/tests/integrations/api_user_heatmap_test.go +++ b/tests/integration/api_user_heatmap_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file.package models -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_user_org_perm_test.go b/tests/integration/api_user_org_perm_test.go similarity index 99% rename from tests/integrations/api_user_org_perm_test.go rename to tests/integration/api_user_org_perm_test.go index f4047e72bee76..75ad36279d2e4 100644 --- a/tests/integrations/api_user_org_perm_test.go +++ b/tests/integration/api_user_org_perm_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_user_orgs_test.go b/tests/integration/api_user_orgs_test.go similarity index 99% rename from tests/integrations/api_user_orgs_test.go rename to tests/integration/api_user_orgs_test.go index 219bd273c99c9..e8b6e6dd9b0eb 100644 --- a/tests/integrations/api_user_orgs_test.go +++ b/tests/integration/api_user_orgs_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file.package models -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_user_search_test.go b/tests/integration/api_user_search_test.go similarity index 99% rename from tests/integrations/api_user_search_test.go rename to tests/integration/api_user_search_test.go index 41f14cf944f33..857e15504ad06 100644 --- a/tests/integrations/api_user_search_test.go +++ b/tests/integration/api_user_search_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file.package models -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/api_wiki_test.go b/tests/integration/api_wiki_test.go similarity index 99% rename from tests/integrations/api_wiki_test.go rename to tests/integration/api_wiki_test.go index 3b768b94d80ed..319bf1c7ec10e 100644 --- a/tests/integrations/api_wiki_test.go +++ b/tests/integration/api_wiki_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "encoding/base64" diff --git a/tests/integrations/attachment_test.go b/tests/integration/attachment_test.go similarity index 99% rename from tests/integrations/attachment_test.go rename to tests/integration/attachment_test.go index 00e5b9de543aa..341011f75b07e 100644 --- a/tests/integrations/attachment_test.go +++ b/tests/integration/attachment_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/auth_ldap_test.go b/tests/integration/auth_ldap_test.go similarity index 99% rename from tests/integrations/auth_ldap_test.go rename to tests/integration/auth_ldap_test.go index 296b647e6d79e..259e9142fdb71 100644 --- a/tests/integrations/auth_ldap_test.go +++ b/tests/integration/auth_ldap_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/benchmarks_test.go b/tests/integration/benchmarks_test.go similarity index 99% rename from tests/integrations/benchmarks_test.go rename to tests/integration/benchmarks_test.go index ffae471307d21..1e3cb44c56827 100644 --- a/tests/integrations/benchmarks_test.go +++ b/tests/integration/benchmarks_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "math/rand" diff --git a/tests/integrations/branches_test.go b/tests/integration/branches_test.go similarity index 98% rename from tests/integrations/branches_test.go rename to tests/integration/branches_test.go index 551c5f8af8b5d..1de833b5bcdf6 100644 --- a/tests/integrations/branches_test.go +++ b/tests/integration/branches_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/change_default_branch_test.go b/tests/integration/change_default_branch_test.go similarity index 98% rename from tests/integrations/change_default_branch_test.go rename to tests/integration/change_default_branch_test.go index 096afa28f46f5..f733c2ec5f5d2 100644 --- a/tests/integrations/change_default_branch_test.go +++ b/tests/integration/change_default_branch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/cmd_keys_test.go b/tests/integration/cmd_keys_test.go similarity index 99% rename from tests/integrations/cmd_keys_test.go rename to tests/integration/cmd_keys_test.go index 3d4194c33142e..0c72956c29367 100644 --- a/tests/integrations/cmd_keys_test.go +++ b/tests/integration/cmd_keys_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/compare_test.go b/tests/integration/compare_test.go similarity index 98% rename from tests/integrations/compare_test.go rename to tests/integration/compare_test.go index 0fb2ae6c91f0d..b29fe180ab25b 100644 --- a/tests/integrations/compare_test.go +++ b/tests/integration/compare_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/cors_test.go b/tests/integration/cors_test.go similarity index 96% rename from tests/integrations/cors_test.go rename to tests/integration/cors_test.go index 466984c79a756..3e1041ea136c5 100644 --- a/tests/integrations/cors_test.go +++ b/tests/integration/cors_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/create_no_session_test.go b/tests/integration/create_no_session_test.go similarity index 99% rename from tests/integrations/create_no_session_test.go rename to tests/integration/create_no_session_test.go index 49234c1e9599c..aa7ee93d20ce8 100644 --- a/tests/integrations/create_no_session_test.go +++ b/tests/integration/create_no_session_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/csrf_test.go b/tests/integration/csrf_test.go similarity index 98% rename from tests/integrations/csrf_test.go rename to tests/integration/csrf_test.go index 5bfc97bbd136f..721f73b47aa73 100644 --- a/tests/integrations/csrf_test.go +++ b/tests/integration/csrf_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/delete_user_test.go b/tests/integration/delete_user_test.go similarity index 99% rename from tests/integrations/delete_user_test.go rename to tests/integration/delete_user_test.go index 8b86780224335..e760401a3dabb 100644 --- a/tests/integrations/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/download_test.go b/tests/integration/download_test.go similarity index 99% rename from tests/integrations/download_test.go rename to tests/integration/download_test.go index f46122d951080..e872d880be8cb 100644 --- a/tests/integrations/download_test.go +++ b/tests/integration/download_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/dump_restore_test.go b/tests/integration/dump_restore_test.go similarity index 99% rename from tests/integrations/dump_restore_test.go rename to tests/integration/dump_restore_test.go index 3723334ea155d..9cf8902403db4 100644 --- a/tests/integrations/dump_restore_test.go +++ b/tests/integration/dump_restore_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/editor_test.go b/tests/integration/editor_test.go similarity index 99% rename from tests/integrations/editor_test.go rename to tests/integration/editor_test.go index c6c5ab2f61857..19e80dc7bfd91 100644 --- a/tests/integrations/editor_test.go +++ b/tests/integration/editor_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/empty_repo_test.go b/tests/integration/empty_repo_test.go similarity index 97% rename from tests/integrations/empty_repo_test.go rename to tests/integration/empty_repo_test.go index abc28b74c8af7..c51075528c4be 100644 --- a/tests/integrations/empty_repo_test.go +++ b/tests/integration/empty_repo_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/eventsource_test.go b/tests/integration/eventsource_test.go similarity index 99% rename from tests/integrations/eventsource_test.go rename to tests/integration/eventsource_test.go index ff3298863485f..368edf2abad1b 100644 --- a/tests/integrations/eventsource_test.go +++ b/tests/integration/eventsource_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/explore_repos_test.go b/tests/integration/explore_repos_test.go similarity index 94% rename from tests/integrations/explore_repos_test.go rename to tests/integration/explore_repos_test.go index c6f695612a826..4870636c659aa 100644 --- a/tests/integrations/explore_repos_test.go +++ b/tests/integration/explore_repos_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/git_clone_wiki_test.go b/tests/integration/git_clone_wiki_test.go similarity index 98% rename from tests/integrations/git_clone_wiki_test.go rename to tests/integration/git_clone_wiki_test.go index a73174f6aaaec..86167b5b91503 100644 --- a/tests/integrations/git_clone_wiki_test.go +++ b/tests/integration/git_clone_wiki_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/git_helper_for_declarative_test.go b/tests/integration/git_helper_for_declarative_test.go similarity index 99% rename from tests/integrations/git_helper_for_declarative_test.go rename to tests/integration/git_helper_for_declarative_test.go index 1ea594b739c8b..4de9a7072d306 100644 --- a/tests/integrations/git_helper_for_declarative_test.go +++ b/tests/integration/git_helper_for_declarative_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/git_smart_http_test.go b/tests/integration/git_smart_http_test.go similarity index 98% rename from tests/integrations/git_smart_http_test.go rename to tests/integration/git_smart_http_test.go index a6baafe374ed0..02b0e938704f7 100644 --- a/tests/integrations/git_smart_http_test.go +++ b/tests/integration/git_smart_http_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "io" diff --git a/tests/integrations/git_test.go b/tests/integration/git_test.go similarity index 99% rename from tests/integrations/git_test.go rename to tests/integration/git_test.go index d6bd673822ba9..1f42bef9ca01f 100644 --- a/tests/integrations/git_test.go +++ b/tests/integration/git_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "encoding/hex" diff --git a/tests/integrations/goget_test.go b/tests/integration/goget_test.go similarity index 97% rename from tests/integrations/goget_test.go rename to tests/integration/goget_test.go index 504d869990fbe..c0c7276b80544 100644 --- a/tests/integrations/goget_test.go +++ b/tests/integration/goget_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/gpg_git_test.go b/tests/integration/gpg_git_test.go similarity index 98% rename from tests/integrations/gpg_git_test.go rename to tests/integration/gpg_git_test.go index 8ca8492f1e305..b40b2001b3472 100644 --- a/tests/integrations/gpg_git_test.go +++ b/tests/integration/gpg_git_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "encoding/base64" @@ -344,10 +344,10 @@ func crudActionCreateFile(t *testing.T, ctx APITestContext, user *user_model.Use } func importTestingKey(tmpDir, name, email string) (*openpgp.Entity, error) { - if _, _, err := process.GetManager().Exec("gpg --import tests/integrations/private-testing.key", "gpg", "--import", "tests/integrations/private-testing.key"); err != nil { + if _, _, err := process.GetManager().Exec("gpg --import tests/integration/private-testing.key", "gpg", "--import", "tests/integration/private-testing.key"); err != nil { return nil, err } - keyringFile, err := os.Open("tests/integrations/private-testing.key") + keyringFile, err := os.Open("tests/integration/private-testing.key") if err != nil { return nil, err } diff --git a/tests/integrations/html_helper.go b/tests/integration/html_helper.go similarity index 98% rename from tests/integrations/html_helper.go rename to tests/integration/html_helper.go index 001fc9a05b26a..35d61f7b3e286 100644 --- a/tests/integrations/html_helper.go +++ b/tests/integration/html_helper.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/integration_test.go b/tests/integration/integration_test.go similarity index 99% rename from tests/integrations/integration_test.go rename to tests/integration/integration_test.go index 4865ff3c56612..7f0437b8f1a9a 100644 --- a/tests/integrations/integration_test.go +++ b/tests/integration/integration_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/issue_test.go b/tests/integration/issue_test.go similarity index 99% rename from tests/integrations/issue_test.go rename to tests/integration/issue_test.go index 7d30d657f5589..37a45fd00ca30 100644 --- a/tests/integrations/issue_test.go +++ b/tests/integration/issue_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/lfs_getobject_test.go b/tests/integration/lfs_getobject_test.go similarity index 99% rename from tests/integrations/lfs_getobject_test.go rename to tests/integration/lfs_getobject_test.go index 4b6bb140d3adc..98050990abd0b 100644 --- a/tests/integrations/lfs_getobject_test.go +++ b/tests/integration/lfs_getobject_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "archive/zip" diff --git a/tests/integrations/lfs_local_endpoint_test.go b/tests/integration/lfs_local_endpoint_test.go similarity index 99% rename from tests/integrations/lfs_local_endpoint_test.go rename to tests/integration/lfs_local_endpoint_test.go index 9de0ec18c90da..4c0d75521d549 100644 --- a/tests/integrations/lfs_local_endpoint_test.go +++ b/tests/integration/lfs_local_endpoint_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/links_test.go b/tests/integration/links_test.go similarity index 99% rename from tests/integrations/links_test.go rename to tests/integration/links_test.go index d0cf978f65456..9e6295c4298ff 100644 --- a/tests/integrations/links_test.go +++ b/tests/integration/links_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/migrate_test.go b/tests/integration/migrate_test.go similarity index 98% rename from tests/integrations/migrate_test.go rename to tests/integration/migrate_test.go index 9b59c85a4eb7e..041348faf5c44 100644 --- a/tests/integrations/migrate_test.go +++ b/tests/integration/migrate_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "os" diff --git a/tests/integrations/migration-test/gitea-v1.6.4.mssql.sql.gz b/tests/integration/migration-test/gitea-v1.6.4.mssql.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.6.4.mssql.sql.gz rename to tests/integration/migration-test/gitea-v1.6.4.mssql.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.6.4.mysql.sql.gz b/tests/integration/migration-test/gitea-v1.6.4.mysql.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.6.4.mysql.sql.gz rename to tests/integration/migration-test/gitea-v1.6.4.mysql.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz b/tests/integration/migration-test/gitea-v1.6.4.postgres.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.6.4.postgres.sql.gz rename to tests/integration/migration-test/gitea-v1.6.4.postgres.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz b/tests/integration/migration-test/gitea-v1.6.4.sqlite3.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.6.4.sqlite3.sql.gz rename to tests/integration/migration-test/gitea-v1.6.4.sqlite3.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.7.0.mssql.sql.gz b/tests/integration/migration-test/gitea-v1.7.0.mssql.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.7.0.mssql.sql.gz rename to tests/integration/migration-test/gitea-v1.7.0.mssql.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz b/tests/integration/migration-test/gitea-v1.7.0.mysql.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.7.0.mysql.sql.gz rename to tests/integration/migration-test/gitea-v1.7.0.mysql.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.7.0.postgres.sql.gz b/tests/integration/migration-test/gitea-v1.7.0.postgres.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.7.0.postgres.sql.gz rename to tests/integration/migration-test/gitea-v1.7.0.postgres.sql.gz diff --git a/tests/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz b/tests/integration/migration-test/gitea-v1.7.0.sqlite3.sql.gz similarity index 100% rename from tests/integrations/migration-test/gitea-v1.7.0.sqlite3.sql.gz rename to tests/integration/migration-test/gitea-v1.7.0.sqlite3.sql.gz diff --git a/tests/integrations/migration-test/migration_test.go b/tests/integration/migration-test/migration_test.go similarity index 91% rename from tests/integrations/migration-test/migration_test.go rename to tests/integration/migration-test/migration_test.go index 461f42ea8673c..2e55324f43fbd 100644 --- a/tests/integrations/migration-test/migration_test.go +++ b/tests/integration/migration-test/migration_test.go @@ -26,7 +26,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/tests/integrations" + "code.gitea.io/gitea/tests/integration" "github.com/stretchr/testify/assert" "xorm.io/xorm" @@ -35,21 +35,21 @@ import ( var currentEngine *xorm.Engine func initMigrationTest(t *testing.T) func() { - deferFn := integrations.PrintCurrentTest(t, 2) + deferFn := integration.PrintCurrentTest(t, 2) giteaRoot := base.SetupGiteaRoot() if giteaRoot == "" { - integrations.Printf("Environment variable $GITEA_ROOT not set\n") + integration.Printf("Environment variable $GITEA_ROOT not set\n") os.Exit(1) } setting.AppPath = path.Join(giteaRoot, "gitea") if _, err := os.Stat(setting.AppPath); err != nil { - integrations.Printf("Could not find gitea binary at %s\n", setting.AppPath) + integration.Printf("Could not find gitea binary at %s\n", setting.AppPath) os.Exit(1) } giteaConf := os.Getenv("GITEA_CONF") if giteaConf == "" { - integrations.Printf("Environment variable $GITEA_CONF not set\n") + integration.Printf("Environment variable $GITEA_CONF not set\n") os.Exit(1) } else if !path.IsAbs(giteaConf) { setting.CustomConf = path.Join(giteaRoot, giteaConf) @@ -90,7 +90,7 @@ func initMigrationTest(t *testing.T) func() { } func availableVersions() ([]string, error) { - migrationsDir, err := os.Open("tests/integrations/migration-test") + migrationsDir, err := os.Open("tests/integration/migration-test") if err != nil { return nil, err } @@ -116,7 +116,7 @@ func availableVersions() ([]string, error) { } func readSQLFromFile(version string) (string, error) { - filename := fmt.Sprintf("tests/integrations/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type) + filename := fmt.Sprintf("tests/integration/migration-test/gitea-v%s.%s.sql.gz", version, setting.Database.Type) if _, err := os.Stat(filename); os.IsNotExist(err) { return "", nil @@ -145,7 +145,7 @@ func restoreOldDB(t *testing.T, version string) bool { data, err := readSQLFromFile(version) assert.NoError(t, err) if len(data) == 0 { - integrations.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version) + integration.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version) return false } @@ -287,8 +287,8 @@ func wrappedMigrate(x *xorm.Engine) error { } func doMigrationTest(t *testing.T, version string) { - defer integrations.PrintCurrentTest(t)() - integrations.Printf("Performing migration test for %s version: %s\n", setting.Database.Type, version) + defer integration.PrintCurrentTest(t)() + integration.Printf("Performing migration test for %s version: %s\n", setting.Database.Type, version) if !restoreOldDB(t, version) { return } @@ -326,11 +326,11 @@ func TestMigrations(t *testing.T) { assert.NoError(t, err) if len(versions) == 0 { - integrations.Printf("No old database versions available to migration test for %s\n", dialect) + integration.Printf("No old database versions available to migration test for %s\n", dialect) return } - integrations.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) + integration.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) for _, version := range versions { t.Run(fmt.Sprintf("Migrate-%s-%s", dialect, version), func(t *testing.T) { doMigrationTest(t, version) diff --git a/tests/integrations/mirror_pull_test.go b/tests/integration/mirror_pull_test.go similarity index 99% rename from tests/integrations/mirror_pull_test.go rename to tests/integration/mirror_pull_test.go index 8f74d5fe16d65..b1b1a27511e61 100644 --- a/tests/integrations/mirror_pull_test.go +++ b/tests/integration/mirror_pull_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/mirror_push_test.go b/tests/integration/mirror_push_test.go similarity index 99% rename from tests/integrations/mirror_push_test.go rename to tests/integration/mirror_push_test.go index a73b69e7869dd..f1e66be2bd249 100644 --- a/tests/integrations/mirror_push_test.go +++ b/tests/integration/mirror_push_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" diff --git a/tests/integrations/nonascii_branches_test.go b/tests/integration/nonascii_branches_test.go similarity index 99% rename from tests/integrations/nonascii_branches_test.go rename to tests/integration/nonascii_branches_test.go index 038ada8ca2ded..30f0b3fed15cd 100644 --- a/tests/integrations/nonascii_branches_test.go +++ b/tests/integration/nonascii_branches_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/oauth_test.go b/tests/integration/oauth_test.go similarity index 99% rename from tests/integrations/oauth_test.go rename to tests/integration/oauth_test.go index c16bb4e24cdaa..dab63e87d5cf2 100644 --- a/tests/integrations/oauth_test.go +++ b/tests/integration/oauth_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/org_count_test.go b/tests/integration/org_count_test.go similarity index 99% rename from tests/integrations/org_count_test.go rename to tests/integration/org_count_test.go index eca51eb0f622c..2181fee4a8407 100644 --- a/tests/integrations/org_count_test.go +++ b/tests/integration/org_count_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/url" diff --git a/tests/integrations/org_test.go b/tests/integration/org_test.go similarity index 99% rename from tests/integrations/org_test.go rename to tests/integration/org_test.go index d755385726a55..d1f9ed1d85756 100644 --- a/tests/integrations/org_test.go +++ b/tests/integration/org_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/private-testing.key b/tests/integration/private-testing.key similarity index 100% rename from tests/integrations/private-testing.key rename to tests/integration/private-testing.key diff --git a/tests/integrations/privateactivity_test.go b/tests/integration/privateactivity_test.go similarity index 99% rename from tests/integrations/privateactivity_test.go rename to tests/integration/privateactivity_test.go index c5cdc27d6e078..a02951ea28f7c 100644 --- a/tests/integrations/privateactivity_test.go +++ b/tests/integration/privateactivity_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/pull_compare_test.go b/tests/integration/pull_compare_test.go similarity index 97% rename from tests/integrations/pull_compare_test.go rename to tests/integration/pull_compare_test.go index 1dec39a28f593..9be81f52ea5fb 100644 --- a/tests/integrations/pull_compare_test.go +++ b/tests/integration/pull_compare_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/pull_create_test.go b/tests/integration/pull_create_test.go similarity index 99% rename from tests/integrations/pull_create_test.go rename to tests/integration/pull_create_test.go index 671b5e7551b50..953be2350d0c6 100644 --- a/tests/integrations/pull_create_test.go +++ b/tests/integration/pull_create_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/pull_merge_test.go b/tests/integration/pull_merge_test.go similarity index 99% rename from tests/integrations/pull_merge_test.go rename to tests/integration/pull_merge_test.go index de519094d4877..5223d1e39b903 100644 --- a/tests/integrations/pull_merge_test.go +++ b/tests/integration/pull_merge_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/pull_review_test.go b/tests/integration/pull_review_test.go similarity index 95% rename from tests/integrations/pull_review_test.go rename to tests/integration/pull_review_test.go index d8f7b52d5499d..67d3bf78329b2 100644 --- a/tests/integrations/pull_review_test.go +++ b/tests/integration/pull_review_test.go @@ -1,7 +1,7 @@ // Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/pull_status_test.go b/tests/integration/pull_status_test.go similarity index 99% rename from tests/integrations/pull_status_test.go rename to tests/integration/pull_status_test.go index a5247f56ec5f3..8289d6b6733c8 100644 --- a/tests/integrations/pull_status_test.go +++ b/tests/integration/pull_status_test.go @@ -1,7 +1,7 @@ // Copyright 2019 The Gitea Authors. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/pull_update_test.go b/tests/integration/pull_update_test.go similarity index 99% rename from tests/integrations/pull_update_test.go rename to tests/integration/pull_update_test.go index 47ada91e1a086..2180ca2692cef 100644 --- a/tests/integrations/pull_update_test.go +++ b/tests/integration/pull_update_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/release_test.go b/tests/integration/release_test.go similarity index 99% rename from tests/integrations/release_test.go rename to tests/integration/release_test.go index d75d74956e5e9..cf89cc8fc00cb 100644 --- a/tests/integrations/release_test.go +++ b/tests/integration/release_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/rename_branch_test.go b/tests/integration/rename_branch_test.go similarity index 98% rename from tests/integrations/rename_branch_test.go rename to tests/integration/rename_branch_test.go index 7760a2d946c41..905a1f682a842 100644 --- a/tests/integrations/rename_branch_test.go +++ b/tests/integration/rename_branch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_activity_test.go b/tests/integration/repo_activity_test.go similarity index 99% rename from tests/integrations/repo_activity_test.go rename to tests/integration/repo_activity_test.go index a10ec7f2d3d82..ea8845ac39413 100644 --- a/tests/integrations/repo_activity_test.go +++ b/tests/integration/repo_activity_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_branch_test.go b/tests/integration/repo_branch_test.go similarity index 99% rename from tests/integrations/repo_branch_test.go rename to tests/integration/repo_branch_test.go index 30a446ccec1e7..c600c77a905f3 100644 --- a/tests/integrations/repo_branch_test.go +++ b/tests/integration/repo_branch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_commits_search_test.go b/tests/integration/repo_commits_search_test.go similarity index 98% rename from tests/integrations/repo_commits_search_test.go rename to tests/integration/repo_commits_search_test.go index 0dc0588297f10..3439543034b31 100644 --- a/tests/integrations/repo_commits_search_test.go +++ b/tests/integration/repo_commits_search_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_commits_test.go b/tests/integration/repo_commits_test.go similarity index 99% rename from tests/integrations/repo_commits_test.go rename to tests/integration/repo_commits_test.go index 7107f43b0fed3..ff3e30664771e 100644 --- a/tests/integrations/repo_commits_test.go +++ b/tests/integration/repo_commits_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_fork_test.go b/tests/integration/repo_fork_test.go similarity index 99% rename from tests/integrations/repo_fork_test.go rename to tests/integration/repo_fork_test.go index 5f28e66ac8ba8..4fd54611e811a 100644 --- a/tests/integrations/repo_fork_test.go +++ b/tests/integration/repo_fork_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/repo_generate_test.go b/tests/integration/repo_generate_test.go similarity index 99% rename from tests/integrations/repo_generate_test.go rename to tests/integration/repo_generate_test.go index 0123932a749b5..90c253c8c1070 100644 --- a/tests/integrations/repo_generate_test.go +++ b/tests/integration/repo_generate_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/repo_migrate_test.go b/tests/integration/repo_migrate_test.go similarity index 98% rename from tests/integrations/repo_migrate_test.go rename to tests/integration/repo_migrate_test.go index 4e6923dd6f57e..933b64951413b 100644 --- a/tests/integrations/repo_migrate_test.go +++ b/tests/integration/repo_migrate_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/repo_search_test.go b/tests/integration/repo_search_test.go similarity index 98% rename from tests/integrations/repo_search_test.go rename to tests/integration/repo_search_test.go index a1cc5811b9f43..432cf1ee09458 100644 --- a/tests/integrations/repo_search_test.go +++ b/tests/integration/repo_search_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_tag_test.go b/tests/integration/repo_tag_test.go similarity index 99% rename from tests/integrations/repo_tag_test.go rename to tests/integration/repo_tag_test.go index 793cf724ebff1..cf3bf23c324e9 100644 --- a/tests/integrations/repo_tag_test.go +++ b/tests/integration/repo_tag_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/url" diff --git a/tests/integrations/repo_test.go b/tests/integration/repo_test.go similarity index 99% rename from tests/integrations/repo_test.go rename to tests/integration/repo_test.go index 872d3f24d1f72..11b48d38c6c7c 100644 --- a/tests/integrations/repo_test.go +++ b/tests/integration/repo_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/repo_topic_test.go b/tests/integration/repo_topic_test.go similarity index 98% rename from tests/integrations/repo_topic_test.go rename to tests/integration/repo_topic_test.go index e049afdd7c19d..c82c3b40260a7 100644 --- a/tests/integrations/repo_topic_test.go +++ b/tests/integration/repo_topic_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/repo_watch_test.go b/tests/integration/repo_watch_test.go similarity index 97% rename from tests/integrations/repo_watch_test.go rename to tests/integration/repo_watch_test.go index 2ff3b26361bc2..152600bf29959 100644 --- a/tests/integrations/repo_watch_test.go +++ b/tests/integration/repo_watch_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/url" diff --git a/tests/integrations/repofiles_delete_test.go b/tests/integration/repofiles_delete_test.go similarity index 99% rename from tests/integrations/repofiles_delete_test.go rename to tests/integration/repofiles_delete_test.go index a6c2484a5691a..f594efdeeb58f 100644 --- a/tests/integrations/repofiles_delete_test.go +++ b/tests/integration/repofiles_delete_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/url" diff --git a/tests/integrations/repofiles_update_test.go b/tests/integration/repofiles_update_test.go similarity index 99% rename from tests/integrations/repofiles_update_test.go rename to tests/integration/repofiles_update_test.go index 2add99cc86ff9..5e4fbb3525d35 100644 --- a/tests/integrations/repofiles_update_test.go +++ b/tests/integration/repofiles_update_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/url" diff --git a/tests/integrations/setting_test.go b/tests/integration/setting_test.go similarity index 99% rename from tests/integrations/setting_test.go rename to tests/integration/setting_test.go index 3852eb4955aad..bf86e3e38522b 100644 --- a/tests/integrations/setting_test.go +++ b/tests/integration/setting_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/signin_test.go b/tests/integration/signin_test.go similarity index 98% rename from tests/integrations/signin_test.go rename to tests/integration/signin_test.go index 811f9326ecd7f..b01ee9c877a14 100644 --- a/tests/integrations/signin_test.go +++ b/tests/integration/signin_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/signout_test.go b/tests/integration/signout_test.go similarity index 96% rename from tests/integrations/signout_test.go rename to tests/integration/signout_test.go index 8ef97e89c5283..dceeb9cfe935a 100644 --- a/tests/integrations/signout_test.go +++ b/tests/integration/signout_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/signup_test.go b/tests/integration/signup_test.go similarity index 99% rename from tests/integrations/signup_test.go rename to tests/integration/signup_test.go index 7b456743766c7..e425c475ee282 100644 --- a/tests/integrations/signup_test.go +++ b/tests/integration/signup_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/ssh_key_test.go b/tests/integration/ssh_key_test.go similarity index 99% rename from tests/integrations/ssh_key_test.go rename to tests/integration/ssh_key_test.go index e0ff13543e535..65d9b84404be5 100644 --- a/tests/integrations/ssh_key_test.go +++ b/tests/integration/ssh_key_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/testlogger.go b/tests/integration/testlogger.go similarity index 98% rename from tests/integrations/testlogger.go rename to tests/integration/testlogger.go index 76d827c0047a4..83a220d57c9a6 100644 --- a/tests/integrations/testlogger.go +++ b/tests/integration/testlogger.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "context" @@ -203,5 +203,5 @@ func (log *TestLogger) GetName() string { func init() { log.Register("test", NewTestLogger) _, filename, _, _ := runtime.Caller(0) - prefix = strings.TrimSuffix(filename, "tests/integrations/testlogger.go") + prefix = strings.TrimSuffix(filename, "tests/integration/testlogger.go") } diff --git a/tests/integrations/timetracking_test.go b/tests/integration/timetracking_test.go similarity index 99% rename from tests/integrations/timetracking_test.go rename to tests/integration/timetracking_test.go index 17e9174e5d91e..0f34dbe9b2522 100644 --- a/tests/integrations/timetracking_test.go +++ b/tests/integration/timetracking_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/user_avatar_test.go b/tests/integration/user_avatar_test.go similarity index 98% rename from tests/integrations/user_avatar_test.go rename to tests/integration/user_avatar_test.go index 2bf6fde5ff1d1..05f0c113cdcfb 100644 --- a/tests/integrations/user_avatar_test.go +++ b/tests/integration/user_avatar_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "bytes" diff --git a/tests/integrations/user_test.go b/tests/integration/user_test.go similarity index 99% rename from tests/integrations/user_test.go rename to tests/integration/user_test.go index 41127a4e40949..f651034948675 100644 --- a/tests/integrations/user_test.go +++ b/tests/integration/user_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/version_test.go b/tests/integration/version_test.go similarity index 96% rename from tests/integrations/version_test.go rename to tests/integration/version_test.go index a1d2f6c882c30..e713c9c22610b 100644 --- a/tests/integrations/version_test.go +++ b/tests/integration/version_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/view_test.go b/tests/integration/view_test.go similarity index 97% rename from tests/integrations/view_test.go rename to tests/integration/view_test.go index 180cf2e50a463..4c0b32995c1c1 100644 --- a/tests/integrations/view_test.go +++ b/tests/integration/view_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/integrations/webfinger_test.go b/tests/integration/webfinger_test.go similarity index 99% rename from tests/integrations/webfinger_test.go rename to tests/integration/webfinger_test.go index 07bf58b509fe7..71e4cfdb270e3 100644 --- a/tests/integrations/webfinger_test.go +++ b/tests/integration/webfinger_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "fmt" diff --git a/tests/integrations/xss_test.go b/tests/integration/xss_test.go similarity index 98% rename from tests/integrations/xss_test.go rename to tests/integration/xss_test.go index 1ce25e1bf5c3a..6ac68933c3852 100644 --- a/tests/integrations/xss_test.go +++ b/tests/integration/xss_test.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package integrations +package integration import ( "net/http" diff --git a/tests/mssql.ini.tmpl b/tests/mssql.ini.tmpl index 89a713eff3e60..eae64a8400900 100644 --- a/tests/mssql.ini.tmpl +++ b/tests/mssql.ini.tmpl @@ -10,10 +10,10 @@ PASSWD = {{TEST_MSSQL_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/repos.bleve [queue] TYPE = immediate @@ -25,13 +25,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mssql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/tmp/local-repo +LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/tmp/local-repo [repository.upload] -TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/tmp/uploads +TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -47,12 +47,12 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data +APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/attachments +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data/attachments [mailer] ENABLED = true @@ -74,12 +74,12 @@ ENABLE_NOTIFY_MAIL = true [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/sessions +PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -102,7 +102,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-mssql/data/lfs +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/data/lfs [packages] ENABLED = true diff --git a/tests/mysql.ini.tmpl b/tests/mysql.ini.tmpl index c9c2660e62cdb..586734eabc1a0 100644 --- a/tests/mysql.ini.tmpl +++ b/tests/mysql.ini.tmpl @@ -12,9 +12,9 @@ SSL_MODE = disable [indexer] ISSUE_INDEXER_TYPE = elasticsearch ISSUE_INDEXER_CONN_STR = http://elastic:changeme@elasticsearch:9200 -ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve [queue] TYPE = immediate @@ -26,13 +26,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mysql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/tmp/local-repo +LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/local-repo [repository.upload] -TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/tmp/uploads +TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -44,7 +44,7 @@ ROOT_URL = http://localhost:3001/ DISABLE_SSH = false SSH_LISTEN_HOST = localhost SSH_PORT = 2201 -APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql/data +APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data BUILTIN_SSH_SERVER_USER = git START_SSH_SERVER = true OFFLINE_MODE = false @@ -98,7 +98,7 @@ ENABLE_FEDERATED_AVATAR = false [session] PROVIDER = file -PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mysql/data/sessions +PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data/sessions [log] MODE = {{TEST_LOGGER}} diff --git a/tests/mysql8.ini.tmpl b/tests/mysql8.ini.tmpl index d37ad02bbe024..3feb55fd5b78b 100644 --- a/tests/mysql8.ini.tmpl +++ b/tests/mysql8.ini.tmpl @@ -10,10 +10,10 @@ PASSWD = {{TEST_MYSQL8_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/indexers/repos.bleve +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/repos.bleve [queue] TYPE = immediate @@ -25,13 +25,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-mysql8/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/gitea-repositories [repository.local] -LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/tmp/local-repo +LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/tmp/local-repo [repository.upload] -TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/tmp/uploads +TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -47,12 +47,12 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data +APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/attachments +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data/attachments [mailer] ENABLED = false @@ -71,12 +71,12 @@ NO_REPLY_ADDRESS = noreply.example.org [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/sessions +PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -99,7 +99,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-mysql8/data/lfs +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/data/lfs [packages] ENABLED = true diff --git a/tests/pgsql.ini.tmpl b/tests/pgsql.ini.tmpl index 767f5892f9e4b..b47d91ecf596c 100644 --- a/tests/pgsql.ini.tmpl +++ b/tests/pgsql.ini.tmpl @@ -11,10 +11,10 @@ SCHEMA = {{TEST_PGSQL_SCHEMA}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve [queue] TYPE = immediate @@ -26,13 +26,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-pgsql/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/gitea-repositories [repository.local] -LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/tmp/local-repo +LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/local-repo [repository.upload] -TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/tmp/uploads +TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -48,12 +48,12 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data +APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/attachments +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/attachments [mailer] ENABLED = true @@ -75,12 +75,12 @@ ENABLE_NOTIFY_MAIL = true [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/sessions +PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -103,7 +103,7 @@ SECRET_KEY = 9pCviYTWSb INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.hhSVGOANkaKk3vfCd2jDOIww4pUk0xtg9JRde5UogyQ [lfs] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-pgsql/data/lfs +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/lfs [packages] ENABLED = true diff --git a/tests/sqlite.ini.tmpl b/tests/sqlite.ini.tmpl index f8b2feb8bcfce..0fae21608a571 100644 --- a/tests/sqlite.ini.tmpl +++ b/tests/sqlite.ini.tmpl @@ -3,13 +3,13 @@ RUN_MODE = prod [database] DB_TYPE = sqlite3 -PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/gitea.db +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea.db [indexer] -ISSUE_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve [queue] TYPE = immediate @@ -21,13 +21,13 @@ TYPE = immediate TYPE = immediate [repository] -ROOT = {{REPO_TEST_DIR}}tests/integrations/gitea-{{TEST_TYPE}}-sqlite/gitea-repositories +ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea-repositories [repository.local] -LOCAL_COPY_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/tmp/local-repo +LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/local-repo [repository.upload] -TEMP_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/tmp/uploads +TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/uploads [repository.signing] SIGNING_KEY = none @@ -43,13 +43,13 @@ START_SSH_SERVER = true LFS_START_SERVER = true OFFLINE_MODE = false LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w -APP_DATA_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data +APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data ENABLE_GZIP = true BUILTIN_SSH_SERVER_USER = git SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE= [attachment] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/attachments +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/attachments [mailer] ENABLED = true @@ -70,12 +70,12 @@ NO_REPLY_ADDRESS = noreply.example.org [picture] DISABLE_GRAVATAR = false ENABLE_FEDERATED_AVATAR = false -AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/avatars -REPOSITORY_AVATAR_UPLOAD_PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/repo-avatars +AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/repo-avatars [session] PROVIDER = file -PROVIDER_CONFIG = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/sessions +PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/sessions [log] MODE = {{TEST_LOGGER}} @@ -101,7 +101,7 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTI3OTU5ODN9.O JWT_SECRET = KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko [lfs] -PATH = tests/integrations/gitea-{{TEST_TYPE}}-sqlite/data/lfs +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/lfs [packages] ENABLED = true From 923f6de8320e54704a42074e6990c995b064bb51 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Fri, 24 Jun 2022 10:44:34 -0400 Subject: [PATCH 18/46] Run e2e tests with go test --- .gitignore | 10 + Makefile | 71 +++-- playwright.config.js | 4 +- tests/e2e/e2e_test.go | 261 ++++++++++++++++++ .../tests => tests/e2e}/example.test.e2e.js | 0 tests/e2e/testlogger.go | 207 ++++++++++++++ tests/mssql.ini.tmpl | 6 +- tests/mysql.ini.tmpl | 6 +- tests/mysql8.ini.tmpl | 6 +- tests/pgsql.ini.tmpl | 6 +- tests/sqlite.ini.tmpl | 6 +- tools/e2e/run_e2e.sh | 18 -- 12 files changed, 547 insertions(+), 54 deletions(-) create mode 100644 tests/e2e/e2e_test.go rename {tools/e2e/tests => tests/e2e}/example.test.e2e.js (100%) create mode 100644 tests/e2e/testlogger.go delete mode 100755 tools/e2e/run_e2e.sh diff --git a/.gitignore b/.gitignore index c1951c8ddc58b..923566c89b9bb 100644 --- a/.gitignore +++ b/.gitignore @@ -73,6 +73,16 @@ cpu.out /tests/integration/indexers-pgsql /tests/integration/indexers-sqlite /tests/integration/indexers-mssql +/tests/e2e/gitea-e2e-mysql +/tests/e2e/gitea-e2e-mysql8 +/tests/e2e/gitea-e2e-pgsql +/tests/e2e/gitea-e2e-sqlite +/tests/e2e/gitea-e2e-mssql +/tests/e2e/indexers-mysql +/tests/e2e/indexers-mysql8 +/tests/e2e/indexers-pgsql +/tests/e2e/indexers-sqlite +/tests/e2e/indexers-mssql /tests/sqlite.ini /tests/mysql.ini /tests/mysql8.ini diff --git a/Makefile b/Makefile index 5961bc78136ee..9d11eb05905fc 100644 --- a/Makefile +++ b/Makefile @@ -242,9 +242,13 @@ clean: $(GO) clean -i ./... rm -rf $(EXECUTABLE) $(DIST) $(BINDATA_DEST) $(BINDATA_HASH) \ integrations*.test \ + e2e*.test \ tests/integration/gitea-integration-pgsql/ tests/integration/gitea-integration-mysql/ tests/integration/gitea-integration-mysql8/ tests/integration/gitea-integration-sqlite/ \ tests/integration/gitea-integration-mssql/ tests/integration/indexers-mysql/ tests/integration/indexers-mysql8/ tests/integration/indexers-pgsql tests/integration/indexers-sqlite \ tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ + tests/e2e/gitea-integration-pgsql/ tests/e2e/gitea-integration-mysql/ tests/e2e/gitea-integration-mysql8/ tests/e2e/gitea-integration-sqlite/ \ + tests/e2e/gitea-integration-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql tests/e2e/indexers-sqlite \ + tests/e2e/indexers-mssql .PHONY: fmt fmt: @@ -512,57 +516,61 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen .PHONY: test-e2e% # Use only file logging for end-to-end tests -test-e2e%: TEST_LOGGER ?= file TEST_TYPE ?= e2e +test-e2e%: TEST_LOGGER ?= file +test-e2e%: TEST_TYPE ?= e2e .PHONY: test-e2e test-e2e: test-e2e-sqlite -.PHONY: test-e2e\#% -test-e2e\#%: test-e2e-sqlite\#% -# Kind of a hack to get makefile to accept passing arguement - true - .PHONY: test-e2e-sqlite -test-e2e-sqlite: TAGS+=sqlite sqlite_unlock_notify -test-e2e-sqlite: build generate-ini-sqlite +test-e2e-sqlite: e2e.sqlite.test generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=tests/sqlite.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test .PHONY: test-e2e-sqlite\#% -test-e2e-sqlite\#%: TAGS+=sqlite sqlite_unlock_notify -test-e2e-sqlite\#%: build generate-ini-sqlite +test-e2e-sqlite\#%: e2e.sqlite.test generate-ini-sqlite + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run $(subst .,/,$*) + +.PHONY: test-e2e-mysql +test-e2e-mysql: e2e.mysql.test generate-ini-mysql + npx playwright install $(PLAYWRIGHT_FLAGS) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test + +.PHONY: test-e2e-mysql\#% +test-e2e-mysql\#%: e2e.mysql.test generate-ini-mysql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/sqlite.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run $(subst .,/,$*) .PHONY: test-e2e-mysql8 -test-e2e-mysql8: build generate-ini-mysql8 +test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mysql8.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test .PHONY: test-e2e-mysql8\#% -test-e2e-mysql8\#%: build generate-ini-mysql8 +test-e2e-mysql8\#%: e2e.mysql8.test generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3004" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mysql8.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run $(subst .,/,$*) .PHONY: test-e2e-pgsql -test-e2e-pgsql: build generate-ini-pgsql +test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/pgsql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test .PHONY: test-e2e-pgsql\#% -test-e2e-pgsql\#%: build generate-ini-pgsql +test-e2e-pgsql\#%: e2e.pgsql.test generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_URL="http://localhost:3002" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/pgsql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run $(subst .,/,$*) .PHONY: test-e2e-mssql -test-e2e-mssql: build generate-ini-mssql +test-e2e-mssql: e2e.mssql.test generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mssql.ini ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test .PHONY: test-e2e-mssql\#% -test-e2e-mssql\#%: build generate-ini-mssql +test-e2e-mssql\#%: e2e.mssql.test generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT=$(CURDIR) GITEA_URL="http://localhost:3003" GITEA_EXECUTABLE=$(EXECUTABLE) GITEA_CONF=$(CURDIR)/tests/mssql.ini E2E_TESTS=$* ./tools/e2e/run_e2e.sh + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run $(subst .,/,$*) .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite @@ -649,6 +657,21 @@ migrations.individual.mssql.test: $(GO_SOURCES) migrations.individual.sqlite.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/models/migrations -o migrations.individual.sqlite.test -tags '$(TEST_TAGS)' +e2e.mysql.test: git-check $(GO_SOURCES) + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql.test + +e2e.mysql8.test: git-check $(GO_SOURCES) + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql8.test + +e2e.pgsql.test: git-check $(GO_SOURCES) + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.pgsql.test + +e2e.mssql.test: git-check $(GO_SOURCES) + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mssql.test + +e2e.sqlite.test: git-check $(GO_SOURCES) + $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.sqlite.test -tags '$(TEST_TAGS)' + .PHONY: check check: test diff --git a/playwright.config.js b/playwright.config.js index 8190b5bfe9f9c..8d2d2874a435b 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -1,14 +1,14 @@ // @ts-check import {devices} from '@playwright/test'; -const BASE_URL = process.env.GITEA_URL ? process.env.GITEA_URL : 'http://localhost:3000'; +const BASE_URL = process.env.GITEA_URL ? process.env.GITEA_URL.replace(/\/$/g, '') : 'http://localhost:3000'; /** * @see https://playwright.dev/docs/test-configuration * @type {import('@playwright/test').PlaywrightTestConfig} */ const config = { - testDir: './tools/e2e/tests', // TODO: Change this to the ./web_src/ dir? + testDir: './tests/e2e/', testMatch: /.*\.test\.e2e\.js/, // Match any .test.e2e.js files /* Maximum time one test can run for. */ diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go new file mode 100644 index 0000000000000..ef3b433832ed5 --- /dev/null +++ b/tests/e2e/e2e_test.go @@ -0,0 +1,261 @@ +// Copyright 2022 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +// This is primarily coped from /tests/integration/integration_test.go +// TODO: Move common functions to shared file + +package e2e + +import ( + "bytes" + "context" + "database/sql" + "fmt" + "os" + "os/exec" + "path" + "path/filepath" + "runtime" + "testing" + "time" + + "code.gitea.io/gitea/cmd" + "code.gitea.io/gitea/models/unittest" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/log" + repo_module "code.gitea.io/gitea/modules/repository" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/storage" + "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/modules/web" + + "github.com/stretchr/testify/assert" + "github.com/urfave/cli" + + _ "net/http/pprof" // Used for debugging if enabled and a web server is running +) + +var c *web.Route + +func TestMain(m *testing.M) { + defer log.Close() + + initE2eTest() + + app := cli.NewApp() + app.Action = cmd.CmdWeb.Action + args := []string{"-c", setting.CustomConf} + go app.Run(args) + + time.Sleep(10 * time.Second) + + os.Unsetenv("GIT_AUTHOR_NAME") + os.Unsetenv("GIT_AUTHOR_EMAIL") + os.Unsetenv("GIT_AUTHOR_DATE") + os.Unsetenv("GIT_COMMITTER_NAME") + os.Unsetenv("GIT_COMMITTER_EMAIL") + os.Unsetenv("GIT_COMMITTER_DATE") + + err := unittest.InitFixtures( + unittest.FixturesOptions{ + Dir: filepath.Join(filepath.Dir(setting.AppPath), "models/fixtures/"), + }, + ) + if err != nil { + fmt.Printf("Error initializing test database: %v\n", err) + os.Exit(1) + } + + exitVal := m.Run() + + writerCloser.Reset() + + if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil { + fmt.Printf("util.RemoveAll: %v\n", err) + os.Exit(1) + } + if err = util.RemoveAll(setting.Indexer.RepoPath); err != nil { + fmt.Printf("Unable to remove repo indexer: %v\n", err) + os.Exit(1) + } + + os.Exit(exitVal) +} + +func initE2eTest() { + giteaRoot := base.SetupGiteaRoot() + if giteaRoot == "" { + fmt.Println("Environment variable $GITEA_ROOT not set") + os.Exit(1) + } + giteaBinary := "gitea" + if runtime.GOOS == "windows" { + giteaBinary += ".exe" + } + setting.AppPath = path.Join(giteaRoot, giteaBinary) + if _, err := os.Stat(setting.AppPath); err != nil { + fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) + os.Exit(1) + } + + giteaConf := os.Getenv("GITEA_CONF") + if giteaConf == "" { + fmt.Println("Environment variable $GITEA_CONF not set") + os.Exit(1) + } else if !path.IsAbs(giteaConf) { + setting.CustomConf = path.Join(giteaRoot, giteaConf) + } else { + setting.CustomConf = giteaConf + } + + setting.SetCustomPathAndConf("", "", "") + setting.LoadForTest() + setting.Repository.DefaultBranch = "master" // many test code still assume that default branch is called "master" + _ = util.RemoveAll(repo_module.LocalCopyPath()) + + if err := git.InitOnceWithSync(context.Background()); err != nil { + log.Fatal("git.InitOnceWithSync: %v", err) + } + git.CheckLFSVersion() + + setting.InitDBConfig() + if err := storage.Init(); err != nil { + fmt.Printf("Init storage failed: %v", err) + os.Exit(1) + } + + switch { + case setting.Database.UseMySQL: + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", + setting.Database.User, setting.Database.Passwd, setting.Database.Host)) + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", setting.Database.Name)); err != nil { + log.Fatal("db.Exec: %v", err) + } + case setting.Database.UsePostgreSQL: + var db *sql.DB + var err error + if setting.Database.Host[0] == '/' { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) + } else { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) + } + + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + dbrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", setting.Database.Name)) + if err != nil { + log.Fatal("db.Query: %v", err) + } + defer dbrows.Close() + + if !dbrows.Next() { + if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", setting.Database.Name)); err != nil { + log.Fatal("db.Exec: CREATE DATABASE: %v", err) + } + } + // Check if we need to setup a specific schema + if len(setting.Database.Schema) == 0 { + break + } + db.Close() + + if setting.Database.Host[0] == '/' { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) + } else { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) + } + // This is a different db object; requires a different Close() + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + schrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM information_schema.schemata WHERE schema_name = '%s'", setting.Database.Schema)) + if err != nil { + log.Fatal("db.Query: %v", err) + } + defer schrows.Close() + + if !schrows.Next() { + // Create and setup a DB schema + if _, err = db.Exec(fmt.Sprintf("CREATE SCHEMA %s", setting.Database.Schema)); err != nil { + log.Fatal("db.Exec: CREATE SCHEMA: %v", err) + } + } + + case setting.Database.UseMSSQL: + host, port := setting.ParseMSSQLHostPort(setting.Database.Host) + db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", + host, port, "master", setting.Database.User, setting.Database.Passwd)) + if err != nil { + log.Fatal("sql.Open: %v", err) + } + if _, err := db.Exec(fmt.Sprintf("If(db_id(N'%s') IS NULL) BEGIN CREATE DATABASE %s; END;", setting.Database.Name, setting.Database.Name)); err != nil { + log.Fatal("db.Exec: %v", err) + } + defer db.Close() + } + + //routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) +} + +func prepareTestEnv(t testing.TB, skip ...int) func() { + t.Helper() + ourSkip := 2 + if len(skip) > 0 { + ourSkip += skip[0] + } + deferFn := PrintCurrentTest(t, ourSkip) + assert.NoError(t, unittest.LoadFixtures()) + assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again + ownerDirs, err := os.ReadDir(setting.RepoRootPath) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, ownerDir := range ownerDirs { + if !ownerDir.Type().IsDir() { + continue + } + repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, repoDir := range repoDirs { + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) + } + } + + return deferFn +} + +func TestE2e(t *testing.T) { + defer prepareTestEnv(t)() + cmd := exec.Command("npx", "playwright", "test") + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + log.Error("%v", out.String()) + log.Fatal("Playwright Failed: %s", err) + } else { + log.Info("%v", out.String()) + } +} diff --git a/tools/e2e/tests/example.test.e2e.js b/tests/e2e/example.test.e2e.js similarity index 100% rename from tools/e2e/tests/example.test.e2e.js rename to tests/e2e/example.test.e2e.js diff --git a/tests/e2e/testlogger.go b/tests/e2e/testlogger.go new file mode 100644 index 0000000000000..924d583e081ca --- /dev/null +++ b/tests/e2e/testlogger.go @@ -0,0 +1,207 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package e2e + +import ( + "context" + "fmt" + "os" + "runtime" + "strings" + "sync" + "testing" + "time" + + "code.gitea.io/gitea/modules/json" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/queue" +) + +var ( + prefix string + slowTest = 10 * time.Second + slowFlush = 5 * time.Second +) + +// TestLogger is a logger which will write to the testing log +type TestLogger struct { + log.WriterLogger +} + +var writerCloser = &testLoggerWriterCloser{} + +type testLoggerWriterCloser struct { + sync.RWMutex + t []*testing.TB +} + +func (w *testLoggerWriterCloser) setT(t *testing.TB) { + w.Lock() + w.t = append(w.t, t) + w.Unlock() +} + +func (w *testLoggerWriterCloser) Write(p []byte) (int, error) { + w.RLock() + var t *testing.TB + if len(w.t) > 0 { + t = w.t[len(w.t)-1] + } + w.RUnlock() + if t != nil && *t != nil { + if len(p) > 0 && p[len(p)-1] == '\n' { + p = p[:len(p)-1] + } + + defer func() { + err := recover() + if err == nil { + return + } + var errString string + errErr, ok := err.(error) + if ok { + errString = errErr.Error() + } else { + errString, ok = err.(string) + } + if !ok { + panic(err) + } + if !strings.HasPrefix(errString, "Log in goroutine after ") { + panic(err) + } + }() + + (*t).Log(string(p)) + return len(p), nil + } + return len(p), nil +} + +func (w *testLoggerWriterCloser) Close() error { + w.Lock() + if len(w.t) > 0 { + w.t = w.t[:len(w.t)-1] + } + w.Unlock() + return nil +} + +func (w *testLoggerWriterCloser) Reset() { + w.Lock() + if len(w.t) > 0 { + for _, t := range w.t { + if t == nil { + continue + } + fmt.Fprintf(os.Stdout, "Unclosed logger writer in test: %s", (*t).Name()) + (*t).Errorf("Unclosed logger writer in test: %s", (*t).Name()) + } + w.t = nil + } + w.Unlock() +} + +// PrintCurrentTest prints the current test to os.Stdout +func PrintCurrentTest(t testing.TB, skip ...int) func() { + start := time.Now() + actualSkip := 1 + if len(skip) > 0 { + actualSkip = skip[0] + } + _, filename, line, _ := runtime.Caller(actualSkip) + + if log.CanColorStdout { + fmt.Fprintf(os.Stdout, "=== %s (%s:%d)\n", fmt.Formatter(log.NewColoredValue(t.Name())), strings.TrimPrefix(filename, prefix), line) + } else { + fmt.Fprintf(os.Stdout, "=== %s (%s:%d)\n", t.Name(), strings.TrimPrefix(filename, prefix), line) + } + writerCloser.setT(&t) + return func() { + took := time.Since(start) + if took > slowTest { + if log.CanColorStdout { + fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow))) + } else { + fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", t.Name(), took) + } + } + timer := time.AfterFunc(slowFlush, func() { + if log.CanColorStdout { + fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), slowFlush) + } else { + fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", t.Name(), slowFlush) + } + }) + if err := queue.GetManager().FlushAll(context.Background(), 2*time.Minute); err != nil { + t.Errorf("Flushing queues failed with error %v", err) + } + timer.Stop() + flushTook := time.Since(start) - took + if flushTook > slowFlush { + if log.CanColorStdout { + fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), fmt.Formatter(log.NewColoredValue(flushTook, log.Bold, log.FgRed))) + } else { + fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", t.Name(), flushTook) + } + } + _ = writerCloser.Close() + } +} + +// Printf takes a format and args and prints the string to os.Stdout +func Printf(format string, args ...interface{}) { + if log.CanColorStdout { + for i := 0; i < len(args); i++ { + args[i] = log.NewColoredValue(args[i]) + } + } + fmt.Fprintf(os.Stdout, "\t"+format, args...) +} + +// NewTestLogger creates a TestLogger as a log.LoggerProvider +func NewTestLogger() log.LoggerProvider { + logger := &TestLogger{} + logger.Colorize = log.CanColorStdout + logger.Level = log.TRACE + return logger +} + +// Init inits connection writer with json config. +// json config only need key "level". +func (log *TestLogger) Init(config string) error { + err := json.Unmarshal([]byte(config), log) + if err != nil { + return err + } + log.NewWriterLogger(writerCloser) + return nil +} + +// Content returns the content accumulated in the content provider +func (log *TestLogger) Content() (string, error) { + return "", fmt.Errorf("not supported") +} + +// Flush when log should be flushed +func (log *TestLogger) Flush() { +} + +// ReleaseReopen does nothing +func (log *TestLogger) ReleaseReopen() error { + return nil +} + +// GetName returns the default name for this implementation +func (log *TestLogger) GetName() string { + return "test" +} + +func init() { + log.Register("test", NewTestLogger) + _, filename, _, _ := runtime.Caller(0) + prefix = strings.TrimSuffix(filename, "tests/integration/testlogger.go") +} diff --git a/tests/mssql.ini.tmpl b/tests/mssql.ini.tmpl index eae64a8400900..19987b02d01df 100644 --- a/tests/mssql.ini.tmpl +++ b/tests/mssql.ini.tmpl @@ -10,11 +10,13 @@ PASSWD = {{TEST_MSSQL_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.queue REPO_INDEXER_ENABLED = true REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/repos.bleve +[queue.issue_indexer] +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mssql/indexers/issues.queue + [queue] TYPE = immediate diff --git a/tests/mysql.ini.tmpl b/tests/mysql.ini.tmpl index 586734eabc1a0..23fdcfc7251ce 100644 --- a/tests/mysql.ini.tmpl +++ b/tests/mysql.ini.tmpl @@ -10,11 +10,13 @@ PASSWD = {{TEST_MYSQL_PASSWORD}} SSL_MODE = disable [indexer] +REPO_INDEXER_ENABLED = true +REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve + +[queue.issue_indexer] ISSUE_INDEXER_TYPE = elasticsearch ISSUE_INDEXER_CONN_STR = http://elastic:changeme@elasticsearch:9200 ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue -REPO_INDEXER_ENABLED = true -REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve [queue] TYPE = immediate diff --git a/tests/mysql8.ini.tmpl b/tests/mysql8.ini.tmpl index 3feb55fd5b78b..d3481ec4f157f 100644 --- a/tests/mysql8.ini.tmpl +++ b/tests/mysql8.ini.tmpl @@ -10,11 +10,13 @@ PASSWD = {{TEST_MYSQL8_PASSWORD}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.queue REPO_INDEXER_ENABLED = true REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/repos.bleve +[queue.issue_indexer] +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql8/indexers/issues.queue + [queue] TYPE = immediate diff --git a/tests/pgsql.ini.tmpl b/tests/pgsql.ini.tmpl index b47d91ecf596c..c39b6a79c3a8b 100644 --- a/tests/pgsql.ini.tmpl +++ b/tests/pgsql.ini.tmpl @@ -11,11 +11,13 @@ SCHEMA = {{TEST_PGSQL_SCHEMA}} SSL_MODE = disable [indexer] -ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue REPO_INDEXER_ENABLED = true REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve +[queue.issue_indexer] +PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.bleve +DATADIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue + [queue] TYPE = immediate diff --git a/tests/sqlite.ini.tmpl b/tests/sqlite.ini.tmpl index 0fae21608a571..18fc8602d562e 100644 --- a/tests/sqlite.ini.tmpl +++ b/tests/sqlite.ini.tmpl @@ -6,11 +6,13 @@ DB_TYPE = sqlite3 PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea.db [indexer] -ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.bleve -ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue REPO_INDEXER_ENABLED = true REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve +[queue.issue_indexer] +ISSUE_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.bleve +ISSUE_INDEXER_QUEUE_DIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue + [queue] TYPE = immediate diff --git a/tools/e2e/run_e2e.sh b/tools/e2e/run_e2e.sh deleted file mode 100755 index 1872880470a90..0000000000000 --- a/tools/e2e/run_e2e.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -set -euo pipefail - -# Kill any processes on exit -trap 'kill $(jobs -p)' EXIT - -GiteaFlags=() - -[[ -v GITEA_CUSTOM ]] && GiteaFlags+=(-C "${GITEA_CUSTOM}") -[[ -v GITEA_CONF ]] && GiteaFlags+=(-c "${GITEA_CONF}") - -./"${GITEA_EXECUTABLE:-gitea}" "${GiteaFlags[@]}" --quiet web & - -# Wait up to 30s for server to start -timeout 30 bash -c 'while [[ "$(curl -s -o /dev/null -w ''%{http_code}'' ${GITEA_URL:-http://localhost:3000})" != "200" ]]; do sleep 2; done' || \ - (echo -e "\033[0;31mTimed out testing server up: ${GITEA_URL:-http://localhost:3000}\033[0m"; false) - -npx playwright test ${E2E_TESTS:-""} From b7d5dbeea3f6f4b34d81fb7456b4405f7873824f Mon Sep 17 00:00:00 2001 From: Kyle D Date: Fri, 24 Jun 2022 14:07:23 -0400 Subject: [PATCH 19/46] Fix linting --- .drone.yml | 6 +++--- Makefile | 2 +- playwright.config.js | 2 +- tests/e2e/e2e_test.go | 5 +---- 4 files changed, 6 insertions(+), 9 deletions(-) diff --git a/.drone.yml b/.drone.yml index 1b6c4aaac57bd..038f24e727cfd 100644 --- a/.drone.yml +++ b/.drone.yml @@ -507,9 +507,8 @@ platform: os: linux arch: amd64 -#depends_on: -# - testing-amd64 -# - testing-arm64 +depends_on: + - compliance trigger: event: @@ -554,6 +553,7 @@ steps: - apt-get install build-essential --yes - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh + - make build - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: GOPROXY: https://goproxy.io diff --git a/Makefile b/Makefile index 9d11eb05905fc..4a1973a9f2f99 100644 --- a/Makefile +++ b/Makefile @@ -99,7 +99,7 @@ LDFLAGS := $(LDFLAGS) -X "main.MakeVersion=$(MAKE_VERSION)" -X "main.Version=$(G LINUX_ARCHS ?= linux/amd64,linux/386,linux/arm-5,linux/arm-6,linux/arm64 -GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests,$(shell $(GO) list ./... | grep -v /vendor/)) +GO_PACKAGES ?= $(filter-out code.gitea.io/gitea/models/migrations code.gitea.io/gitea/tests/integration/migration-test code.gitea.io/gitea/tests code.gitea.io/gitea/tests/integration code.gitea.io/gitea/tests/e2e,$(shell $(GO) list ./... | grep -v /vendor/)) FOMANTIC_WORK_DIR := web_src/fomantic diff --git a/playwright.config.js b/playwright.config.js index 8d2d2874a435b..094d59b6d8abe 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -8,7 +8,7 @@ const BASE_URL = process.env.GITEA_URL ? process.env.GITEA_URL.replace(/\/$/g, ' * @type {import('@playwright/test').PlaywrightTestConfig} */ const config = { - testDir: './tests/e2e/', + testDir: './tests/e2e/', testMatch: /.*\.test\.e2e\.js/, // Match any .test.e2e.js files /* Maximum time one test can run for. */ diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index ef3b433832ed5..d6625efaa4fd4 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -29,7 +29,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/modules/web" "github.com/stretchr/testify/assert" "github.com/urfave/cli" @@ -37,8 +36,6 @@ import ( _ "net/http/pprof" // Used for debugging if enabled and a web server is running ) -var c *web.Route - func TestMain(m *testing.M) { defer log.Close() @@ -207,7 +204,7 @@ func initE2eTest() { defer db.Close() } - //routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) + // routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) } func prepareTestEnv(t testing.TB, skip ...int) func() { From 0c4d0f9e3fc2370656e9115e62f7e49448804c65 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Fri, 24 Jun 2022 14:11:25 -0400 Subject: [PATCH 20/46] install CI deps --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 038f24e727cfd..1e7d758297131 100644 --- a/.drone.yml +++ b/.drone.yml @@ -551,14 +551,14 @@ steps: - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - apt-get update - apt-get install build-essential --yes + - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash \ + - apt-get install -y git-lfs \ - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - - make build - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" environment: GOPROXY: https://goproxy.io GOSUMDB: sum.golang.org - TAGS: bindata USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 TEST_LOGGER: console,file # Debug From 3ca488750f125f41befe82aa835ebc1ca88c40fb Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 11:16:12 -0400 Subject: [PATCH 21/46] Add files to ESlint --- .gitignore | 30 +++++------------------------- Makefile | 14 ++++++-------- tests/e2e/example.test.e2e.js | 8 ++++---- 3 files changed, 15 insertions(+), 37 deletions(-) diff --git a/.gitignore b/.gitignore index 923566c89b9bb..10102e6a5ff00 100644 --- a/.gitignore +++ b/.gitignore @@ -63,31 +63,11 @@ cpu.out /indexers /log /public/img/avatar -/tests/integration/gitea-integration-mysql -/tests/integration/gitea-integration-mysql8 -/tests/integration/gitea-integration-pgsql -/tests/integration/gitea-integration-sqlite -/tests/integration/gitea-integration-mssql -/tests/integration/indexers-mysql -/tests/integration/indexers-mysql8 -/tests/integration/indexers-pgsql -/tests/integration/indexers-sqlite -/tests/integration/indexers-mssql -/tests/e2e/gitea-e2e-mysql -/tests/e2e/gitea-e2e-mysql8 -/tests/e2e/gitea-e2e-pgsql -/tests/e2e/gitea-e2e-sqlite -/tests/e2e/gitea-e2e-mssql -/tests/e2e/indexers-mysql -/tests/e2e/indexers-mysql8 -/tests/e2e/indexers-pgsql -/tests/e2e/indexers-sqlite -/tests/e2e/indexers-mssql -/tests/sqlite.ini -/tests/mysql.ini -/tests/mysql8.ini -/tests/pgsql.ini -/tests/mssql.ini +/tests/integration/gitea-integration-* +/tests/integration/indexers-* +/tests/e2e/gitea-e2e-* +/tests/e2e/indexers-* +/tests/*.ini /node_modules /yarn.lock /yarn-error.log diff --git a/Makefile b/Makefile index 4a1973a9f2f99..94f6cd6994ba0 100644 --- a/Makefile +++ b/Makefile @@ -320,7 +320,7 @@ lint: lint-frontend lint-backend .PHONY: lint-frontend lint-frontend: node_modules - npx eslint --color --max-warnings=0 web_src/js build templates *.config.js docs/assets/js + npx eslint --color --max-warnings=0 web_src/js build templates *.config.js docs/assets/js tests/e2e/*.test.e2e.js npx stylelint --color --max-warnings=0 web_src/less .PHONY: lint-backend @@ -515,8 +515,6 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.individual.mssql.test -test.failfast .PHONY: test-e2e% -# Use only file logging for end-to-end tests -test-e2e%: TEST_LOGGER ?= file test-e2e%: TEST_TYPE ?= e2e .PHONY: test-e2e @@ -530,7 +528,7 @@ test-e2e-sqlite: e2e.sqlite.test generate-ini-sqlite .PHONY: test-e2e-sqlite\#% test-e2e-sqlite\#%: e2e.sqlite.test generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run .PHONY: test-e2e-mysql test-e2e-mysql: e2e.mysql.test generate-ini-mysql @@ -540,7 +538,7 @@ test-e2e-mysql: e2e.mysql.test generate-ini-mysql .PHONY: test-e2e-mysql\#% test-e2e-mysql\#%: e2e.mysql.test generate-ini-mysql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run .PHONY: test-e2e-mysql8 test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 @@ -550,7 +548,7 @@ test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: e2e.mysql8.test generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run .PHONY: test-e2e-pgsql test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql @@ -560,7 +558,7 @@ test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: e2e.pgsql.test generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run .PHONY: test-e2e-mssql test-e2e-mssql: e2e.mssql.test generate-ini-mssql @@ -570,7 +568,7 @@ test-e2e-mssql: e2e.mssql.test generate-ini-mssql .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: e2e.mssql.test generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run $(subst .,/,$*) + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index 4638f11022e41..239e31ac2f4b3 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -1,7 +1,7 @@ // @ts-check import {test, expect} from '@playwright/test'; -test('Load Homepage', async ({page}, workerInfo) => { +test('Load Homepage', async ({page}) => { const response = await page.goto('/'); await expect(response?.status()).toBe(200); // Status OK await expect(page).toHaveTitle(/^Gitea: Git with a cup of tea\s*$/); @@ -19,6 +19,6 @@ test('Test Register Form', async ({page}, workerInfo) => { // Make sure we routed to the home page. Else login failed. await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); // Uncomment to see visual testing - //await expect(page).toHaveScreenshot({ timeout: 20000, mask: [page.locator('footer div.ui.left')] }); - //await page.screenshot({ path: `tools/e2e/screenshots/${workerInfo.title}-${workerInfo.project.name}.png` }); -}); \ No newline at end of file + // await expect(page).toHaveScreenshot({ timeout: 20000, mask: [page.locator('footer div.ui.left')] }); + // await page.screenshot({ path: `tools/e2e/screenshots/${workerInfo.title}-${workerInfo.project.name}.png` }); +}); From f6e637bd9719a4468bbf3bb82d376f5df7111b55 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 11:50:09 -0400 Subject: [PATCH 22/46] Fix drone typo --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 1e7d758297131..f144188717e30 100644 --- a/.drone.yml +++ b/.drone.yml @@ -551,8 +551,8 @@ steps: - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - apt-get update - apt-get install build-essential --yes - - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash \ - - apt-get install -y git-lfs \ + - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash + - apt-get install -y git-lfs - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" From d395cc48e219d6c12ba4520b44258e64a149e6f5 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 13:27:26 -0400 Subject: [PATCH 23/46] Don't log to console in CI --- .drone.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index f144188717e30..a5440359e8c5e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -561,7 +561,6 @@ steps: GOSUMDB: sum.golang.org USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 - TEST_LOGGER: console,file # Debug TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' depends_on: [deps-backend, deps-frontend] From 1e716272db41467d83951cc96bdc28913c731b2d Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 13:43:26 -0400 Subject: [PATCH 24/46] Use go test http server --- tests/e2e/e2e_test.go | 49 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index d6625efaa4fd4..36a5cca8a7cdc 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -12,41 +12,36 @@ import ( "context" "database/sql" "fmt" + "net/url" "os" "os/exec" "path" "path/filepath" "runtime" "testing" - "time" - "code.gitea.io/gitea/cmd" "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/modules/web" + "code.gitea.io/gitea/routers" "github.com/stretchr/testify/assert" - "github.com/urfave/cli" - - _ "net/http/pprof" // Used for debugging if enabled and a web server is running ) +var c *web.Route + func TestMain(m *testing.M) { defer log.Close() initE2eTest() - - app := cli.NewApp() - app.Action = cmd.CmdWeb.Action - args := []string{"-c", setting.CustomConf} - go app.Run(args) - - time.Sleep(10 * time.Second) + c = routers.NormalRoutes() os.Unsetenv("GIT_AUTHOR_NAME") os.Unsetenv("GIT_AUTHOR_EMAIL") @@ -204,7 +199,7 @@ func initE2eTest() { defer db.Close() } - // routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) + routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) } func prepareTestEnv(t testing.TB, skip ...int) func() { @@ -243,16 +238,20 @@ func prepareTestEnv(t testing.TB, skip ...int) func() { func TestE2e(t *testing.T) { defer prepareTestEnv(t)() - cmd := exec.Command("npx", "playwright", "test") - cmd.Env = os.Environ() - cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) - var out bytes.Buffer - cmd.Stdout = &out - err := cmd.Run() - if err != nil { - log.Error("%v", out.String()) - log.Fatal("Playwright Failed: %s", err) - } else { - log.Info("%v", out.String()) - } + + // Default 2 minute timeout + onGiteaRun(t, func(*testing.T, *url.URL) { + cmd := exec.Command("npx", "playwright", "test") + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + log.Error("%v", out.String()) + log.Fatal("Playwright Failed: %s", err) + } else { + log.Info("%v", out.String()) + } + }) } From 1ef5ecae6e6a68f0812d8fe12de6cf98ef92b6d5 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 13:45:57 -0400 Subject: [PATCH 25/46] Add build step before tests --- .drone.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index a5440359e8c5e..35a0b8e89b9cc 100644 --- a/.drone.yml +++ b/.drone.yml @@ -543,6 +543,22 @@ steps: - name: deps path: /go +# Is this needed? + - name: build + image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env + user: gitea + commands: + - ./build/test-env-check.sh + - make backend + environment: + GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not + GOSUMDB: sum.golang.org + TAGS: bindata gogit sqlite sqlite_unlock_notify + depends_on: [deps-backend, prepare-test-env] + volumes: + - name: deps + path: /go + # TODO: We should probably build all dependencies into a test image - name: test-e2e image: mcr.microsoft.com/playwright:v1.22.2-focal @@ -563,7 +579,7 @@ steps: NO_DEPS_PLAYWRIGHT: 1 TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' - depends_on: [deps-backend, deps-frontend] + depends_on: [build] volumes: - name: deps path: /go From b51d2bd09324acfa128da9c76f169ba128a178e2 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 16:23:32 -0400 Subject: [PATCH 26/46] Move shared init function to common package --- Makefile | 6 +- tests/e2e/e2e_test.go | 180 +------------- tests/e2e/utils_e2e_test.go | 57 +++++ tests/integration/admin_user_test.go | 9 +- tests/integration/api_admin_org_test.go | 3 +- tests/integration/api_admin_test.go | 21 +- tests/integration/api_branch_test.go | 11 +- tests/integration/api_comment_test.go | 15 +- tests/integration/api_fork_test.go | 3 +- tests/integration/api_gpg_keys_test.go | 3 +- tests/integration/api_httpsig_test.go | 5 +- tests/integration/api_issue_milestone_test.go | 3 +- tests/integration/api_issue_reaction_test.go | 5 +- tests/integration/api_issue_stopwatch_test.go | 9 +- .../api_issue_subscription_test.go | 3 +- tests/integration/api_issue_test.go | 11 +- .../api_issue_tracked_time_test.go | 7 +- tests/integration/api_keys_test.go | 15 +- tests/integration/api_notification_test.go | 5 +- tests/integration/api_oauth2_apps_test.go | 3 +- tests/integration/api_org_test.go | 3 +- .../integration/api_packages_composer_test.go | 17 +- tests/integration/api_packages_conan_test.go | 45 ++-- .../api_packages_container_test.go | 37 +-- .../integration/api_packages_generic_test.go | 15 +- tests/integration/api_packages_helm_test.go | 9 +- tests/integration/api_packages_maven_test.go | 23 +- tests/integration/api_packages_npm_test.go | 19 +- tests/integration/api_packages_nuget_test.go | 27 +-- tests/integration/api_packages_pypi_test.go | 15 +- .../integration/api_packages_rubygems_test.go | 15 +- tests/integration/api_packages_test.go | 15 +- tests/integration/api_pull_commits_test.go | 3 +- tests/integration/api_pull_review_test.go | 5 +- tests/integration/api_pull_test.go | 13 +- tests/integration/api_releases_test.go | 13 +- tests/integration/api_repo_archive_test.go | 3 +- tests/integration/api_repo_file_get_test.go | 3 +- tests/integration/api_repo_git_blobs_test.go | 3 +- .../integration/api_repo_git_commits_test.go | 13 +- tests/integration/api_repo_git_hook_test.go | 19 +- tests/integration/api_repo_git_ref_test.go | 3 +- tests/integration/api_repo_git_tags_test.go | 5 +- tests/integration/api_repo_git_trees_test.go | 3 +- tests/integration/api_repo_lfs_locks_test.go | 7 +- .../integration/api_repo_lfs_migrate_test.go | 3 +- tests/integration/api_repo_lfs_test.go | 57 ++--- tests/integration/api_repo_raw_test.go | 3 +- tests/integration/api_repo_tags_test.go | 3 +- tests/integration/api_repo_teams_test.go | 3 +- tests/integration/api_repo_test.go | 29 +-- tests/integration/api_repo_topic_test.go | 5 +- tests/integration/api_settings_test.go | 3 +- tests/integration/api_team_test.go | 7 +- tests/integration/api_team_user_test.go | 3 +- tests/integration/api_token_test.go | 5 +- tests/integration/api_user_email_test.go | 7 +- tests/integration/api_user_heatmap_test.go | 3 +- tests/integration/api_user_org_perm_test.go | 9 +- tests/integration/api_user_orgs_test.go | 5 +- tests/integration/api_user_search_test.go | 9 +- tests/integration/api_wiki_test.go | 11 +- tests/integration/attachment_test.go | 7 +- tests/integration/auth_ldap_test.go | 17 +- tests/integration/branches_test.go | 5 +- .../integration/change_default_branch_test.go | 3 +- tests/integration/compare_test.go | 5 +- tests/integration/cors_test.go | 3 +- tests/integration/create_no_session_test.go | 7 +- tests/integration/csrf_test.go | 3 +- tests/integration/delete_user_test.go | 5 +- tests/integration/download_test.go | 13 +- tests/integration/empty_repo_test.go | 3 +- tests/integration/eventsource_test.go | 3 +- tests/integration/explore_repos_test.go | 4 +- tests/integration/git_clone_wiki_test.go | 3 +- .../git_helper_for_declarative_test.go | 3 +- tests/integration/git_test.go | 37 +-- tests/integration/goget_test.go | 3 +- tests/integration/gpg_git_test.go | 27 +-- tests/integration/integration_test.go | 211 +---------------- tests/integration/issue_test.go | 27 +-- tests/integration/lfs_getobject_test.go | 13 +- tests/integration/lfs_local_endpoint_test.go | 3 +- tests/integration/links_test.go | 9 +- .../migration-test/migration_test.go | 20 +- tests/integration/mirror_pull_test.go | 3 +- tests/integration/mirror_push_test.go | 3 +- tests/integration/nonascii_branches_test.go | 3 +- tests/integration/oauth_test.go | 21 +- tests/integration/org_test.go | 11 +- tests/integration/privateactivity_test.go | 53 ++--- tests/integration/pull_compare_test.go | 3 +- tests/integration/pull_create_test.go | 3 +- tests/integration/pull_review_test.go | 4 +- tests/integration/release_test.go | 19 +- tests/integration/repo_branch_test.go | 3 +- tests/integration/repo_commits_search_test.go | 3 +- tests/integration/repo_commits_test.go | 5 +- tests/integration/repo_fork_test.go | 5 +- tests/integration/repo_generate_test.go | 5 +- tests/integration/repo_migrate_test.go | 3 +- tests/integration/repo_search_test.go | 3 +- tests/integration/repo_tag_test.go | 5 +- tests/integration/repo_test.go | 15 +- tests/integration/repo_topic_test.go | 3 +- tests/integration/setting_test.go | 7 +- tests/integration/signin_test.go | 3 +- tests/integration/signout_test.go | 4 +- tests/integration/signup_test.go | 7 +- tests/integration/testlogger.go | 207 ---------------- tests/integration/timetracking_test.go | 7 +- tests/integration/user_test.go | 13 +- tests/integration/version_test.go | 3 +- tests/integration/view_test.go | 3 +- tests/integration/webfinger_test.go | 3 +- tests/integration/xss_test.go | 3 +- tests/test_utils.go | 220 ++++++++++++++++++ tests/{e2e => }/testlogger.go | 24 +- 119 files changed, 899 insertions(+), 1084 deletions(-) create mode 100644 tests/e2e/utils_e2e_test.go delete mode 100644 tests/integration/testlogger.go create mode 100644 tests/test_utils.go rename tests/{e2e => }/testlogger.go (93%) diff --git a/Makefile b/Makefile index 94f6cd6994ba0..02fec65805777 100644 --- a/Makefile +++ b/Makefile @@ -245,9 +245,9 @@ clean: e2e*.test \ tests/integration/gitea-integration-pgsql/ tests/integration/gitea-integration-mysql/ tests/integration/gitea-integration-mysql8/ tests/integration/gitea-integration-sqlite/ \ tests/integration/gitea-integration-mssql/ tests/integration/indexers-mysql/ tests/integration/indexers-mysql8/ tests/integration/indexers-pgsql tests/integration/indexers-sqlite \ - tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ - tests/e2e/gitea-integration-pgsql/ tests/e2e/gitea-integration-mysql/ tests/e2e/gitea-integration-mysql8/ tests/e2e/gitea-integration-sqlite/ \ - tests/e2e/gitea-integration-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql tests/e2e/indexers-sqlite \ + tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ \ + tests/e2e/gitea-e2e-pgsql/ tests/e2e/gitea-e2e-mysql/ tests/e2e/gitea-e2e-mysql8/ tests/e2e/gitea-e2e-sqlite/ \ + tests/e2e/gitea-e2e-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql tests/e2e/indexers-sqlite \ tests/e2e/indexers-mssql .PHONY: fmt diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 36a5cca8a7cdc..bde6f4a4bc439 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -9,30 +9,20 @@ package e2e import ( "bytes" - "context" - "database/sql" "fmt" "net/url" "os" "os/exec" - "path" "path/filepath" - "runtime" "testing" "code.gitea.io/gitea/models/unittest" - "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/git" - "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/log" - repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers" - - "github.com/stretchr/testify/assert" + "code.gitea.io/gitea/tests" ) var c *web.Route @@ -40,7 +30,7 @@ var c *web.Route func TestMain(m *testing.M) { defer log.Close() - initE2eTest() + tests.InitTest() c = routers.NormalRoutes() os.Unsetenv("GIT_AUTHOR_NAME") @@ -62,7 +52,7 @@ func TestMain(m *testing.M) { exitVal := m.Run() - writerCloser.Reset() + tests.WriterCloser.Reset() if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil { fmt.Printf("util.RemoveAll: %v\n", err) @@ -76,170 +66,8 @@ func TestMain(m *testing.M) { os.Exit(exitVal) } -func initE2eTest() { - giteaRoot := base.SetupGiteaRoot() - if giteaRoot == "" { - fmt.Println("Environment variable $GITEA_ROOT not set") - os.Exit(1) - } - giteaBinary := "gitea" - if runtime.GOOS == "windows" { - giteaBinary += ".exe" - } - setting.AppPath = path.Join(giteaRoot, giteaBinary) - if _, err := os.Stat(setting.AppPath); err != nil { - fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) - os.Exit(1) - } - - giteaConf := os.Getenv("GITEA_CONF") - if giteaConf == "" { - fmt.Println("Environment variable $GITEA_CONF not set") - os.Exit(1) - } else if !path.IsAbs(giteaConf) { - setting.CustomConf = path.Join(giteaRoot, giteaConf) - } else { - setting.CustomConf = giteaConf - } - - setting.SetCustomPathAndConf("", "", "") - setting.LoadForTest() - setting.Repository.DefaultBranch = "master" // many test code still assume that default branch is called "master" - _ = util.RemoveAll(repo_module.LocalCopyPath()) - - if err := git.InitOnceWithSync(context.Background()); err != nil { - log.Fatal("git.InitOnceWithSync: %v", err) - } - git.CheckLFSVersion() - - setting.InitDBConfig() - if err := storage.Init(); err != nil { - fmt.Printf("Init storage failed: %v", err) - os.Exit(1) - } - - switch { - case setting.Database.UseMySQL: - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", - setting.Database.User, setting.Database.Passwd, setting.Database.Host)) - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", setting.Database.Name)); err != nil { - log.Fatal("db.Exec: %v", err) - } - case setting.Database.UsePostgreSQL: - var db *sql.DB - var err error - if setting.Database.Host[0] == '/' { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) - } else { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) - } - - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - dbrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", setting.Database.Name)) - if err != nil { - log.Fatal("db.Query: %v", err) - } - defer dbrows.Close() - - if !dbrows.Next() { - if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", setting.Database.Name)); err != nil { - log.Fatal("db.Exec: CREATE DATABASE: %v", err) - } - } - // Check if we need to setup a specific schema - if len(setting.Database.Schema) == 0 { - break - } - db.Close() - - if setting.Database.Host[0] == '/' { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) - } else { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) - } - // This is a different db object; requires a different Close() - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - schrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM information_schema.schemata WHERE schema_name = '%s'", setting.Database.Schema)) - if err != nil { - log.Fatal("db.Query: %v", err) - } - defer schrows.Close() - - if !schrows.Next() { - // Create and setup a DB schema - if _, err = db.Exec(fmt.Sprintf("CREATE SCHEMA %s", setting.Database.Schema)); err != nil { - log.Fatal("db.Exec: CREATE SCHEMA: %v", err) - } - } - - case setting.Database.UseMSSQL: - host, port := setting.ParseMSSQLHostPort(setting.Database.Host) - db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", - host, port, "master", setting.Database.User, setting.Database.Passwd)) - if err != nil { - log.Fatal("sql.Open: %v", err) - } - if _, err := db.Exec(fmt.Sprintf("If(db_id(N'%s') IS NULL) BEGIN CREATE DATABASE %s; END;", setting.Database.Name, setting.Database.Name)); err != nil { - log.Fatal("db.Exec: %v", err) - } - defer db.Close() - } - - routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) -} - -func prepareTestEnv(t testing.TB, skip ...int) func() { - t.Helper() - ourSkip := 2 - if len(skip) > 0 { - ourSkip += skip[0] - } - deferFn := PrintCurrentTest(t, ourSkip) - assert.NoError(t, unittest.LoadFixtures()) - assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) - assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again - ownerDirs, err := os.ReadDir(setting.RepoRootPath) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, ownerDir := range ownerDirs { - if !ownerDir.Type().IsDir() { - continue - } - repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, repoDir := range repoDirs { - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) - } - } - - return deferFn -} - func TestE2e(t *testing.T) { - defer prepareTestEnv(t)() - - // Default 2 minute timeout + // Default 5 minute timeout onGiteaRun(t, func(*testing.T, *url.URL) { cmd := exec.Command("npx", "playwright", "test") cmd.Env = os.Environ() diff --git a/tests/e2e/utils_e2e_test.go b/tests/e2e/utils_e2e_test.go new file mode 100644 index 0000000000000..f8f3e94cda155 --- /dev/null +++ b/tests/e2e/utils_e2e_test.go @@ -0,0 +1,57 @@ +// Copyright 2019 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package e2e + +import ( + "context" + "net" + "net/http" + "net/url" + "testing" + "time" + + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" + + "github.com/stretchr/testify/assert" +) + +func onGiteaRunTB(t testing.TB, callback func(testing.TB, *url.URL), prepare ...bool) { + if len(prepare) == 0 || prepare[0] { + defer tests.PrepareTestEnv(t, 1)() + } + s := http.Server{ + Handler: c, + } + + u, err := url.Parse(setting.AppURL) + assert.NoError(t, err) + listener, err := net.Listen("tcp", u.Host) + i := 0 + for err != nil && i <= 10 { + time.Sleep(100 * time.Millisecond) + listener, err = net.Listen("tcp", u.Host) + i++ + } + assert.NoError(t, err) + u.Host = listener.Addr().String() + + defer func() { + ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute) + s.Shutdown(ctx) + cancel() + }() + + go s.Serve(listener) + // Started by config go ssh.Listen(setting.SSH.ListenHost, setting.SSH.ListenPort, setting.SSH.ServerCiphers, setting.SSH.ServerKeyExchanges, setting.SSH.ServerMACs) + + callback(t, u) +} + +func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL), prepare ...bool) { + onGiteaRunTB(t, func(t testing.TB, u *url.URL) { + callback(t.(*testing.T), u) + }, prepare...) +} diff --git a/tests/integration/admin_user_test.go b/tests/integration/admin_user_test.go index 7aa0b2dead83e..d8468e57a5609 100644 --- a/tests/integration/admin_user_test.go +++ b/tests/integration/admin_user_test.go @@ -11,12 +11,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAdminViewUsers(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") req := NewRequest(t, "GET", "/admin/users") @@ -28,7 +29,7 @@ func TestAdminViewUsers(t *testing.T) { } func TestAdminViewUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") req := NewRequest(t, "GET", "/admin/users/1") @@ -40,7 +41,7 @@ func TestAdminViewUser(t *testing.T) { } func TestAdminEditUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testSuccessfullEdit(t, user_model.User{ID: 2, Name: "newusername", LoginName: "otherlogin", Email: "new@e-mail.gitea"}) } @@ -68,7 +69,7 @@ func makeRequest(t *testing.T, formData user_model.User, headerCode int) { } func TestAdminDeleteUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") diff --git a/tests/integration/api_admin_org_test.go b/tests/integration/api_admin_org_test.go index 1784c4a47345e..720f6fc6b645b 100644 --- a/tests/integration/api_admin_org_test.go +++ b/tests/integration/api_admin_org_test.go @@ -13,6 +13,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -70,7 +71,7 @@ func TestAPIAdminOrgCreateBadVisibility(t *testing.T) { } func TestAPIAdminOrgCreateNotAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() nonAdminUsername := "user2" session := loginUser(t, nonAdminUsername) token := getTokenForLoggedInUser(t, session) diff --git a/tests/integration/api_admin_test.go b/tests/integration/api_admin_test.go index dfadb1f3414fd..0aa14de50e6ac 100644 --- a/tests/integration/api_admin_test.go +++ b/tests/integration/api_admin_test.go @@ -14,12 +14,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/json" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // user1 is an admin user session := loginUser(t, "user1") keyOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user2"}).(*user_model.User) @@ -48,7 +49,7 @@ func TestAPIAdminCreateAndDeleteSSHKey(t *testing.T) { } func TestAPIAdminDeleteMissingSSHKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // user1 is an admin user session := loginUser(t, "user1") @@ -58,7 +59,7 @@ func TestAPIAdminDeleteMissingSSHKey(t *testing.T) { } func TestAPIAdminDeleteUnauthorizedKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" normalUsername := "user2" session := loginUser(t, adminUsername) @@ -81,7 +82,7 @@ func TestAPIAdminDeleteUnauthorizedKey(t *testing.T) { } func TestAPISudoUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" normalUsername := "user2" session := loginUser(t, adminUsername) @@ -97,7 +98,7 @@ func TestAPISudoUser(t *testing.T) { } func TestAPISudoUserForbidden(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" normalUsername := "user2" @@ -110,7 +111,7 @@ func TestAPISudoUserForbidden(t *testing.T) { } func TestAPIListUsers(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" session := loginUser(t, adminUsername) token := getTokenForLoggedInUser(t, session) @@ -133,13 +134,13 @@ func TestAPIListUsers(t *testing.T) { } func TestAPIListUsersNotLoggedIn(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/api/v1/admin/users") MakeRequest(t, req, http.StatusUnauthorized) } func TestAPIListUsersNonAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() nonAdminUsername := "user2" session := loginUser(t, nonAdminUsername) token := getTokenForLoggedInUser(t, session) @@ -148,7 +149,7 @@ func TestAPIListUsersNonAdmin(t *testing.T) { } func TestAPICreateUserInvalidEmail(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" session := loginUser(t, adminUsername) token := getTokenForLoggedInUser(t, session) @@ -167,7 +168,7 @@ func TestAPICreateUserInvalidEmail(t *testing.T) { } func TestAPIEditUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" session := loginUser(t, adminUsername) token := getTokenForLoggedInUser(t, session) diff --git a/tests/integration/api_branch_test.go b/tests/integration/api_branch_test.go index d9c929ad78aa1..bdfdd3c7520be 100644 --- a/tests/integration/api_branch_test.go +++ b/tests/integration/api_branch_test.go @@ -10,6 +10,7 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -87,7 +88,7 @@ func testAPIDeleteBranch(t *testing.T, branchName string, expectedHTTPStatus int } func TestAPIGetBranch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() for _, test := range []struct { BranchName string Exists bool @@ -111,7 +112,7 @@ func testAPICreateBranches(t *testing.T, giteaURL *url.URL) { giteaURL.Path = ctx.GitPath() t.Run("CreateRepo", doAPICreateRepository(ctx, false)) - tests := []struct { + testCases := []struct { OldBranch string NewBranch string ExpectedHTTPStatus int @@ -147,8 +148,8 @@ func testAPICreateBranches(t *testing.T, giteaURL *url.URL) { ExpectedHTTPStatus: http.StatusNotFound, }, } - for _, test := range tests { - defer resetFixtures(t) + for _, test := range testCases { + defer tests.ResetFixtures(t) session := ctx.Session testAPICreateBranch(t, session, "user2", "my-noo-repo", test.OldBranch, test.NewBranch, test.ExpectedHTTPStatus) } @@ -173,7 +174,7 @@ func testAPICreateBranch(t testing.TB, session *TestSession, user, repo, oldBran } func TestAPIBranchProtection(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // Branch protection only on branch that exist testAPICreateBranchProtection(t, "master/doesnotexist", http.StatusNotFound) diff --git a/tests/integration/api_comment_test.go b/tests/integration/api_comment_test.go index ef8889d223b86..438589f4b3988 100644 --- a/tests/integration/api_comment_test.go +++ b/tests/integration/api_comment_test.go @@ -16,12 +16,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIListRepoComments(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{}, unittest.Cond("type = ?", issues_model.CommentTypeComment)).(*issues_model.Comment) @@ -67,7 +68,7 @@ func TestAPIListRepoComments(t *testing.T) { } func TestAPIListIssueComments(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{}, unittest.Cond("type = ?", issues_model.CommentTypeComment)).(*issues_model.Comment) @@ -88,7 +89,7 @@ func TestAPIListIssueComments(t *testing.T) { } func TestAPICreateComment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() const commentBody = "Comment body" issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{}).(*issues_model.Issue) @@ -111,7 +112,7 @@ func TestAPICreateComment(t *testing.T) { } func TestAPIGetComment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 2}).(*issues_model.Comment) assert.NoError(t, comment.LoadIssue()) @@ -138,7 +139,7 @@ func TestAPIGetComment(t *testing.T) { } func TestAPIEditComment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() const newCommentBody = "This is the new comment body" comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{}, @@ -164,7 +165,7 @@ func TestAPIEditComment(t *testing.T) { } func TestAPIDeleteComment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{}, unittest.Cond("type = ?", issues_model.CommentTypeComment)).(*issues_model.Comment) @@ -182,7 +183,7 @@ func TestAPIDeleteComment(t *testing.T) { } func TestAPIListIssueTimeline(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // load comment issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}).(*issues_model.Issue) diff --git a/tests/integration/api_fork_test.go b/tests/integration/api_fork_test.go index dc689e37f5a1d..131dcf70bb96e 100644 --- a/tests/integration/api_fork_test.go +++ b/tests/integration/api_fork_test.go @@ -9,10 +9,11 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" ) func TestCreateForkNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/forks", &api.CreateForkOption{}) MakeRequest(t, req, http.StatusUnauthorized) } diff --git a/tests/integration/api_gpg_keys_test.go b/tests/integration/api_gpg_keys_test.go index 85f9a1b549faf..0ad876c9b97ab 100644 --- a/tests/integration/api_gpg_keys_test.go +++ b/tests/integration/api_gpg_keys_test.go @@ -11,6 +11,7 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -18,7 +19,7 @@ import ( type makeRequestFunc func(testing.TB, *http.Request, int) *httptest.ResponseRecorder func TestGPGKeys(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") token := getTokenForLoggedInUser(t, session) diff --git a/tests/integration/api_httpsig_test.go b/tests/integration/api_httpsig_test.go index 88aa9fc451221..80b3c586b432c 100644 --- a/tests/integration/api_httpsig_test.go +++ b/tests/integration/api_httpsig_test.go @@ -12,6 +12,7 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/go-fed/httpsig" "golang.org/x/crypto/ssh" @@ -50,7 +51,7 @@ fhTNAzWwZoQ91aHdAAAAFHUwMDIyMTQ2QGljdHMtcC1ueC03AQIDBAUG func TestHTTPSigPubKey(t *testing.T) { // Add our public key to user1 - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") token := url.QueryEscape(getTokenForLoggedInUser(t, session)) keysURL := fmt.Sprintf("/api/v1/user/keys?token=%s", token) @@ -87,7 +88,7 @@ func TestHTTPSigPubKey(t *testing.T) { func TestHTTPSigCert(t *testing.T) { // Add our public key to user1 - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") csrf := GetCSRF(t, session, "/user/settings/keys") diff --git a/tests/integration/api_issue_milestone_test.go b/tests/integration/api_issue_milestone_test.go index 776dacf3b243d..c0507b9365838 100644 --- a/tests/integration/api_issue_milestone_test.go +++ b/tests/integration/api_issue_milestone_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIIssuesMilestone(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() milestone := unittest.AssertExistsAndLoadBean(t, &issues_model.Milestone{ID: 1}).(*issues_model.Milestone) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: milestone.RepoID}).(*repo_model.Repository) diff --git a/tests/integration/api_issue_reaction_test.go b/tests/integration/api_issue_reaction_test.go index 7b8c84c0734f5..d817c5763f3a9 100644 --- a/tests/integration/api_issue_reaction_test.go +++ b/tests/integration/api_issue_reaction_test.go @@ -16,12 +16,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIIssuesReactions(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}).(*issues_model.Issue) _ = issue.LoadRepo(db.DefaultContext) @@ -78,7 +79,7 @@ func TestAPIIssuesReactions(t *testing.T) { } func TestAPICommentReactions(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() comment := unittest.AssertExistsAndLoadBean(t, &issues_model.Comment{ID: 2}).(*issues_model.Comment) _ = comment.LoadIssue() diff --git a/tests/integration/api_issue_stopwatch_test.go b/tests/integration/api_issue_stopwatch_test.go index c971877b79701..f1ef3276e7309 100644 --- a/tests/integration/api_issue_stopwatch_test.go +++ b/tests/integration/api_issue_stopwatch_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIListStopWatches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -43,7 +44,7 @@ func TestAPIListStopWatches(t *testing.T) { } func TestAPIStopStopWatches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}).(*issues_model.Issue) _ = issue.LoadRepo(db.DefaultContext) @@ -59,7 +60,7 @@ func TestAPIStopStopWatches(t *testing.T) { } func TestAPICancelStopWatches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}).(*issues_model.Issue) _ = issue.LoadRepo(db.DefaultContext) @@ -75,7 +76,7 @@ func TestAPICancelStopWatches(t *testing.T) { } func TestAPIStartStopWatches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3}).(*issues_model.Issue) _ = issue.LoadRepo(db.DefaultContext) diff --git a/tests/integration/api_issue_subscription_test.go b/tests/integration/api_issue_subscription_test.go index 21e29d336353c..5d42a41039333 100644 --- a/tests/integration/api_issue_subscription_test.go +++ b/tests/integration/api_issue_subscription_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIIssueSubscriptions(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue1 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 1}).(*issues_model.Issue) issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}).(*issues_model.Issue) diff --git a/tests/integration/api_issue_test.go b/tests/integration/api_issue_test.go index 851e4d7be2262..cddded3c37b78 100644 --- a/tests/integration/api_issue_test.go +++ b/tests/integration/api_issue_test.go @@ -17,12 +17,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIListIssues(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -72,7 +73,7 @@ func TestAPIListIssues(t *testing.T) { } func TestAPICreateIssue(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() const body, title = "apiTestBody", "apiTestTitle" repoBefore := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -105,7 +106,7 @@ func TestAPICreateIssue(t *testing.T) { } func TestAPIEditIssue(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issueBefore := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 10}).(*issues_model.Issue) repoBefore := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID}).(*repo_model.Repository) @@ -167,7 +168,7 @@ func TestAPIEditIssue(t *testing.T) { } func TestAPISearchIssues(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() token := getUserToken(t, "user2") @@ -264,7 +265,7 @@ func TestAPISearchIssues(t *testing.T) { } func TestAPISearchIssuesWithLabels(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() token := getUserToken(t, "user1") diff --git a/tests/integration/api_issue_tracked_time_test.go b/tests/integration/api_issue_tracked_time_test.go index c828ff3ecbc80..ec33254641e0b 100644 --- a/tests/integration/api_issue_tracked_time_test.go +++ b/tests/integration/api_issue_tracked_time_test.go @@ -15,12 +15,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIGetTrackedTimes(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}).(*issues_model.Issue) @@ -62,7 +63,7 @@ func TestAPIGetTrackedTimes(t *testing.T) { } func TestAPIDeleteTrackedTime(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() time6 := unittest.AssertExistsAndLoadBean(t, &issues_model.TrackedTime{ID: 6}).(*issues_model.TrackedTime) issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}).(*issues_model.Issue) @@ -97,7 +98,7 @@ func TestAPIDeleteTrackedTime(t *testing.T) { } func TestAPIAddTrackedTimes(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue2 := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 2}).(*issues_model.Issue) assert.NoError(t, issue2.LoadRepo(db.DefaultContext)) diff --git a/tests/integration/api_keys_test.go b/tests/integration/api_keys_test.go index dffb78a5be524..79a09dcd8e689 100644 --- a/tests/integration/api_keys_test.go +++ b/tests/integration/api_keys_test.go @@ -16,18 +16,19 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestViewDeployKeysNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/keys") MakeRequest(t, req, http.StatusUnauthorized) } func TestCreateDeployKeyNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithJSON(t, "POST", "/api/v1/repos/user2/repo1/keys", api.CreateKeyOption{ Title: "title", Key: "key", @@ -36,19 +37,19 @@ func TestCreateDeployKeyNoLogin(t *testing.T) { } func TestGetDeployKeyNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/keys/1") MakeRequest(t, req, http.StatusUnauthorized) } func TestDeleteDeployKeyNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "DELETE", "/api/v1/repos/user2/repo1/keys/1") MakeRequest(t, req, http.StatusUnauthorized) } func TestCreateReadOnlyDeployKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: "repo1"}).(*repo_model.Repository) repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -74,7 +75,7 @@ func TestCreateReadOnlyDeployKey(t *testing.T) { } func TestCreateReadWriteDeployKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{Name: "repo1"}).(*repo_model.Repository) repoOwner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -99,7 +100,7 @@ func TestCreateReadWriteDeployKey(t *testing.T) { } func TestCreateUserKey(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user1"}).(*user_model.User) session := loginUser(t, "user1") diff --git a/tests/integration/api_notification_test.go b/tests/integration/api_notification_test.go index e177cbc63e019..b35f2413b2523 100644 --- a/tests/integration/api_notification_test.go +++ b/tests/integration/api_notification_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPINotification(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -138,7 +139,7 @@ func TestAPINotification(t *testing.T) { } func TestAPINotificationPUT(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) thread5 := unittest.AssertExistsAndLoadBean(t, &models.Notification{ID: 5}).(*models.Notification) diff --git a/tests/integration/api_oauth2_apps_test.go b/tests/integration/api_oauth2_apps_test.go index 3a0279dce3f6e..39b983ca284fb 100644 --- a/tests/integration/api_oauth2_apps_test.go +++ b/tests/integration/api_oauth2_apps_test.go @@ -13,12 +13,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestOAuth2Application(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testAPICreateOAuth2Application(t) testAPIListOAuth2Applications(t) testAPIGetOAuth2Application(t) diff --git a/tests/integration/api_org_test.go b/tests/integration/api_org_test.go index 9cd2ba5332305..70bb17bee2e10 100644 --- a/tests/integration/api_org_test.go +++ b/tests/integration/api_org_test.go @@ -14,6 +14,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -138,7 +139,7 @@ func TestAPIOrgDeny(t *testing.T) { } func TestAPIGetAll(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestf(t, "GET", "/api/v1/orgs") resp := MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/api_packages_composer_test.go b/tests/integration/api_packages_composer_test.go index deebd6427a0bc..bf484b463cb17 100644 --- a/tests/integration/api_packages_composer_test.go +++ b/tests/integration/api_packages_composer_test.go @@ -19,12 +19,13 @@ import ( composer_module "code.gitea.io/gitea/modules/packages/composer" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers/api/packages/composer" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageComposer(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) vendorName := "gitea" @@ -56,7 +57,7 @@ func TestPackageComposer(t *testing.T) { url := fmt.Sprintf("%sapi/packages/%s/composer", setting.AppURL, user.Name) t.Run("ServiceIndex", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/packages.json", url)) req = AddBasicAuthHeader(req, user.Name) @@ -72,7 +73,7 @@ func TestPackageComposer(t *testing.T) { t.Run("Upload", func(t *testing.T) { t.Run("MissingVersion", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content)) req = AddBasicAuthHeader(req, user.Name) @@ -80,7 +81,7 @@ func TestPackageComposer(t *testing.T) { }) t.Run("Valid", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadURL := url + "?version=" + packageVersion @@ -116,7 +117,7 @@ func TestPackageComposer(t *testing.T) { }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeComposer) assert.NoError(t, err) @@ -140,7 +141,7 @@ func TestPackageComposer(t *testing.T) { }) t.Run("SearchService", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Query string @@ -174,7 +175,7 @@ func TestPackageComposer(t *testing.T) { }) t.Run("EnumeratePackages", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", url+"/list.json") req = AddBasicAuthHeader(req, user.Name) @@ -190,7 +191,7 @@ func TestPackageComposer(t *testing.T) { }) t.Run("PackageMetadata", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/p2/%s/%s.json", url, vendorName, projectName)) req = AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_conan_test.go b/tests/integration/api_packages_conan_test.go index c5419f9033842..0471078facbdc 100644 --- a/tests/integration/api_packages_conan_test.go +++ b/tests/integration/api_packages_conan_test.go @@ -20,6 +20,7 @@ import ( conan_module "code.gitea.io/gitea/modules/packages/conan" "code.gitea.io/gitea/modules/setting" conan_router "code.gitea.io/gitea/routers/api/packages/conan" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -204,7 +205,7 @@ func uploadConanPackageV2(t *testing.T, baseURL, token, name, version, user, cha } func TestPackageConan(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) name := "ConanPackage" @@ -221,7 +222,7 @@ func TestPackageConan(t *testing.T) { t.Run("v1", func(t *testing.T) { t.Run("Ping", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v1/ping", url)) resp := MakeRequest(t, req, http.StatusOK) @@ -232,7 +233,7 @@ func TestPackageConan(t *testing.T) { token := "" t.Run("Authenticate", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v1/users/authenticate", url)) req = AddBasicAuthHeader(req, user.Name) @@ -245,7 +246,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("CheckCredentials", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v1/users/check_credentials", url)) req = addTokenAuthHeader(req, token) @@ -253,12 +254,12 @@ func TestPackageConan(t *testing.T) { }) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadConanPackageV1(t, url, token, name, version1, user1, channel1) t.Run("Validate", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeConan) assert.NoError(t, err) @@ -302,7 +303,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() recipeURL := fmt.Sprintf("%s/v1/conans/%s/%s/%s/%s", url, name, version1, user1, channel1) @@ -368,7 +369,7 @@ func TestPackageConan(t *testing.T) { uploadConanPackageV1(t, url, token, name, version1, user2, channel2) t.Run("Recipe", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Query string @@ -405,7 +406,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Package", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v1/conans/%s/%s/%s/%s/search", url, name, version1, user1, channel2)) resp := MakeRequest(t, req, http.StatusOK) @@ -421,7 +422,7 @@ func TestPackageConan(t *testing.T) { t.Run("Delete", func(t *testing.T) { t.Run("Package", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Channel string @@ -450,7 +451,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Recipe", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Channel string @@ -479,7 +480,7 @@ func TestPackageConan(t *testing.T) { t.Run("v2", func(t *testing.T) { t.Run("Ping", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v2/ping", url)) resp := MakeRequest(t, req, http.StatusOK) @@ -490,7 +491,7 @@ func TestPackageConan(t *testing.T) { token := "" t.Run("Authenticate", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v2/users/authenticate", url)) req = AddBasicAuthHeader(req, user.Name) @@ -503,7 +504,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("CheckCredentials", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v2/users/check_credentials", url)) req = addTokenAuthHeader(req, token) @@ -511,12 +512,12 @@ func TestPackageConan(t *testing.T) { }) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadConanPackageV2(t, url, token, name, version1, user1, channel1, revision1, revision1) t.Run("Validate", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeConan) assert.NoError(t, err) @@ -525,7 +526,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Latest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() recipeURL := fmt.Sprintf("%s/v2/conans/%s/%s/%s/%s", url, name, version1, user1, channel1) @@ -547,7 +548,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("ListRevisions", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadConanPackageV2(t, url, token, name, version1, user1, channel1, revision1, revision2) uploadConanPackageV2(t, url, token, name, version1, user1, channel1, revision2, revision1) @@ -590,7 +591,7 @@ func TestPackageConan(t *testing.T) { t.Run("Search", func(t *testing.T) { t.Run("Recipe", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Query string @@ -627,7 +628,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Package", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/v2/conans/%s/%s/%s/%s/search", url, name, version1, user1, channel1)) resp := MakeRequest(t, req, http.StatusOK) @@ -653,7 +654,7 @@ func TestPackageConan(t *testing.T) { t.Run("Delete", func(t *testing.T) { t.Run("Package", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() rref, _ := conan_module.NewRecipeReference(name, version1, user1, channel1, revision1) pref, _ := conan_module.NewPackageReference(rref, conanPackageReference, conan_module.DefaultRevision) @@ -695,7 +696,7 @@ func TestPackageConan(t *testing.T) { }) t.Run("Recipe", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() rref, _ := conan_module.NewRecipeReference(name, version1, user1, channel1, conan_module.DefaultRevision) diff --git a/tests/integration/api_packages_container_test.go b/tests/integration/api_packages_container_test.go index 8e7676ed12faa..8d671bb920cf9 100644 --- a/tests/integration/api_packages_container_test.go +++ b/tests/integration/api_packages_container_test.go @@ -20,12 +20,13 @@ import ( container_module "code.gitea.io/gitea/modules/packages/container" "code.gitea.io/gitea/modules/packages/container/oci" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageContainer(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) has := func(l packages_model.PackagePropertyList, name string) bool { @@ -69,7 +70,7 @@ func TestPackageContainer(t *testing.T) { authenticate := []string{`Bearer realm="` + setting.AppURL + `v2/token"`} t.Run("Anonymous", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%sv2", setting.AppURL)) resp := MakeRequest(t, req, http.StatusUnauthorized) @@ -92,7 +93,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("User", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%sv2", setting.AppURL)) resp := MakeRequest(t, req, http.StatusUnauthorized) @@ -117,7 +118,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("DetermineSupport", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%sv2", setting.AppURL)) addTokenAuthHeader(req, userToken) @@ -130,7 +131,7 @@ func TestPackageContainer(t *testing.T) { url := fmt.Sprintf("%sv2/%s/%s", setting.AppURL, user.Name, image) t.Run("UploadBlob/Monolithic", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "POST", fmt.Sprintf("%s/blobs/uploads", url)) addTokenAuthHeader(req, anonymousToken) @@ -160,7 +161,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("UploadBlob/Chunked", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "POST", fmt.Sprintf("%s/blobs/uploads", url)) addTokenAuthHeader(req, userToken) @@ -210,7 +211,7 @@ func TestPackageContainer(t *testing.T) { for _, tag := range tags { t.Run(fmt.Sprintf("[Tag:%s]", tag), func(t *testing.T) { t.Run("UploadManifest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "POST", fmt.Sprintf("%s/blobs/uploads?digest=%s", url, configDigest), strings.NewReader(configContent)) addTokenAuthHeader(req, userToken) @@ -272,7 +273,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("HeadManifest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "HEAD", fmt.Sprintf("%s/manifests/unknown-tag", url)) addTokenAuthHeader(req, userToken) @@ -287,7 +288,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("GetManifest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/manifests/unknown-tag", url)) addTokenAuthHeader(req, userToken) @@ -306,7 +307,7 @@ func TestPackageContainer(t *testing.T) { } t.Run("UploadUntaggedManifest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/manifests/%s", url, untaggedManifestDigest), strings.NewReader(untaggedManifestContent)) addTokenAuthHeader(req, userToken) @@ -345,7 +346,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("UploadIndexManifest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/manifests/%s", url, multiTag), strings.NewReader(indexManifestContent)) addTokenAuthHeader(req, userToken) @@ -390,7 +391,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("UploadBlob/Mount", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "POST", fmt.Sprintf("%s/blobs/uploads?mount=%s", url, unknownDigest)) addTokenAuthHeader(req, userToken) @@ -405,7 +406,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("HeadBlob", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "HEAD", fmt.Sprintf("%s/blobs/%s", url, unknownDigest)) addTokenAuthHeader(req, userToken) @@ -420,7 +421,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("GetBlob", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/blobs/%s", url, unknownDigest)) addTokenAuthHeader(req, userToken) @@ -436,7 +437,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("GetTagList", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { URL string @@ -491,7 +492,7 @@ func TestPackageContainer(t *testing.T) { t.Run("Delete", func(t *testing.T) { t.Run("Blob", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("%s/blobs/%s", url, blobDigest)) addTokenAuthHeader(req, userToken) @@ -503,7 +504,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("ManifestByDigest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("%s/manifests/%s", url, untaggedManifestDigest)) addTokenAuthHeader(req, userToken) @@ -515,7 +516,7 @@ func TestPackageContainer(t *testing.T) { }) t.Run("ManifestByTag", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("%s/manifests/%s", url, multiTag)) addTokenAuthHeader(req, userToken) diff --git a/tests/integration/api_packages_generic_test.go b/tests/integration/api_packages_generic_test.go index 17106d6ee76ab..2036e45a9f6f9 100644 --- a/tests/integration/api_packages_generic_test.go +++ b/tests/integration/api_packages_generic_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/packages" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageGeneric(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) packageName := "te-st_pac.kage" @@ -30,7 +31,7 @@ func TestPackageGeneric(t *testing.T) { url := fmt.Sprintf("/api/packages/%s/generic/%s/%s/%s", user.Name, packageName, packageVersion, filename) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content)) AddBasicAuthHeader(req, user.Name) @@ -59,7 +60,7 @@ func TestPackageGeneric(t *testing.T) { }) t.Run("UploadExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content)) AddBasicAuthHeader(req, user.Name) @@ -67,7 +68,7 @@ func TestPackageGeneric(t *testing.T) { }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", url) resp := MakeRequest(t, req, http.StatusOK) @@ -81,7 +82,7 @@ func TestPackageGeneric(t *testing.T) { }) t.Run("Delete", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", url) AddBasicAuthHeader(req, user.Name) @@ -93,14 +94,14 @@ func TestPackageGeneric(t *testing.T) { }) t.Run("DownloadNotExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", url) MakeRequest(t, req, http.StatusNotFound) }) t.Run("DeleteNotExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", url) AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_helm_test.go b/tests/integration/api_packages_helm_test.go index ce007b8d01628..ace51924ab8b6 100644 --- a/tests/integration/api_packages_helm_test.go +++ b/tests/integration/api_packages_helm_test.go @@ -19,13 +19,14 @@ import ( user_model "code.gitea.io/gitea/models/user" helm_module "code.gitea.io/gitea/modules/packages/helm" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" "gopkg.in/yaml.v2" ) func TestPackageHelm(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) packageName := "test-chart" @@ -63,7 +64,7 @@ dependencies: url := fmt.Sprintf("/api/packages/%s/helm", user.Name) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadURL := url + "/api/charts" @@ -98,7 +99,7 @@ dependencies: }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() checkDownloadCount := func(count int64) { pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeHelm) @@ -119,7 +120,7 @@ dependencies: }) t.Run("Index", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/index.yaml", url)) req = AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_maven_test.go b/tests/integration/api_packages_maven_test.go index 2aa8d49919b89..6929af6cf9630 100644 --- a/tests/integration/api_packages_maven_test.go +++ b/tests/integration/api_packages_maven_test.go @@ -15,12 +15,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/packages/maven" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageMaven(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) groupID := "com.gitea" @@ -39,7 +40,7 @@ func TestPackageMaven(t *testing.T) { } t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() putFile(t, fmt.Sprintf("/%s/%s", packageVersion, filename), "test", http.StatusCreated) putFile(t, "/maven-metadata.xml", "test", http.StatusOK) @@ -67,13 +68,13 @@ func TestPackageMaven(t *testing.T) { }) t.Run("UploadExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() putFile(t, fmt.Sprintf("/%s/%s", packageVersion, filename), "test", http.StatusBadRequest) }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/%s/%s", root, packageVersion, filename)) req = AddBasicAuthHeader(req, user.Name) @@ -88,15 +89,15 @@ func TestPackageMaven(t *testing.T) { }) t.Run("UploadVerifySHA1", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("Missmatch", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() putFile(t, fmt.Sprintf("/%s/%s.sha1", packageVersion, filename), "test", http.StatusBadRequest) }) t.Run("Valid", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() putFile(t, fmt.Sprintf("/%s/%s.sha1", packageVersion, filename), "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3", http.StatusOK) }) @@ -111,7 +112,7 @@ func TestPackageMaven(t *testing.T) { ` t.Run("UploadPOM", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeMaven) assert.NoError(t, err) @@ -144,7 +145,7 @@ func TestPackageMaven(t *testing.T) { }) t.Run("DownloadPOM", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/%s/%s.pom", root, packageVersion, filename)) req = AddBasicAuthHeader(req, user.Name) @@ -159,7 +160,7 @@ func TestPackageMaven(t *testing.T) { }) t.Run("DownloadChecksums", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/1.2.3/%s", root, filename)) req = AddBasicAuthHeader(req, user.Name) @@ -180,7 +181,7 @@ func TestPackageMaven(t *testing.T) { }) t.Run("DownloadMetadata", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", root+"/maven-metadata.xml") req = AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_npm_test.go b/tests/integration/api_packages_npm_test.go index b33c2fc090f51..db80ef49d0989 100644 --- a/tests/integration/api_packages_npm_test.go +++ b/tests/integration/api_packages_npm_test.go @@ -18,12 +18,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/packages/npm" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageNpm(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) token := fmt.Sprintf("Bearer %s", getTokenForLoggedInUser(t, loginUser(t, user.Name))) @@ -69,7 +70,7 @@ func TestPackageNpm(t *testing.T) { filename := fmt.Sprintf("%s-%s.tgz", strings.Split(packageName, "/")[1], packageVersion) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", root, strings.NewReader(upload)) req = addTokenAuthHeader(req, token) @@ -101,7 +102,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("UploadExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", root, strings.NewReader(upload)) req = addTokenAuthHeader(req, token) @@ -109,7 +110,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/-/%s/%s", root, packageVersion, filename)) req = addTokenAuthHeader(req, token) @@ -125,7 +126,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("PackageMetadata", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("/api/packages/%s/npm/%s", user.Name, "does-not-exist")) req = addTokenAuthHeader(req, token) @@ -156,7 +157,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("AddTag", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() test := func(t *testing.T, status int, tag, version string) { req := NewRequestWithBody(t, "PUT", fmt.Sprintf("%s/%s", tagsRoot, tag), strings.NewReader(`"`+version+`"`)) @@ -172,7 +173,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("ListTags", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", tagsRoot) req = addTokenAuthHeader(req, token) @@ -189,7 +190,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("PackageMetadataDistTags", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", root) req = addTokenAuthHeader(req, token) @@ -206,7 +207,7 @@ func TestPackageNpm(t *testing.T) { }) t.Run("DeleteTag", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() test := func(t *testing.T, status int, tag string) { req := NewRequest(t, "DELETE", fmt.Sprintf("%s/%s", tagsRoot, tag)) diff --git a/tests/integration/api_packages_nuget_test.go b/tests/integration/api_packages_nuget_test.go index c3f38ef6311cc..de444edd9b698 100644 --- a/tests/integration/api_packages_nuget_test.go +++ b/tests/integration/api_packages_nuget_test.go @@ -20,12 +20,13 @@ import ( nuget_module "code.gitea.io/gitea/modules/packages/nuget" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers/api/packages/nuget" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageNuGet(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) packageName := "test.package" @@ -56,7 +57,7 @@ func TestPackageNuGet(t *testing.T) { url := fmt.Sprintf("/api/packages/%s/nuget", user.Name) t.Run("ServiceIndex", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/index.json", url)) req = AddBasicAuthHeader(req, user.Name) @@ -93,7 +94,7 @@ func TestPackageNuGet(t *testing.T) { t.Run("Upload", func(t *testing.T) { t.Run("DependencyPackage", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequestWithBody(t, "PUT", url, bytes.NewReader(content)) req = AddBasicAuthHeader(req, user.Name) @@ -126,7 +127,7 @@ func TestPackageNuGet(t *testing.T) { }) t.Run("SymbolPackage", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() createPackage := func(id, packageType string) io.Reader { var buf bytes.Buffer @@ -213,7 +214,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() checkDownloadCount := func(count int64) { pvs, err := packages.GetVersionsByPackageType(db.DefaultContext, user.ID, packages.TypeNuGet) @@ -239,7 +240,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) checkDownloadCount(1) t.Run("Symbol", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/symbols/%s/%sFFFFFFFF/gitea.pdb", url, symbolFilename, symbolID)) MakeRequest(t, req, http.StatusBadRequest) @@ -257,7 +258,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("SearchService", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() cases := []struct { Query string @@ -292,7 +293,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) contentURL := fmt.Sprintf("%s%s/package/%s/%s/%s.%s.nupkg", setting.AppURL, url[1:], packageName, packageVersion, packageName, packageVersion) t.Run("RegistrationIndex", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/registration/%s/index.json", url, packageName)) req = AddBasicAuthHeader(req, user.Name) @@ -318,7 +319,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("RegistrationLeaf", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/registration/%s/%s.json", url, packageName, packageVersion)) req = AddBasicAuthHeader(req, user.Name) @@ -334,7 +335,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("PackageService", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/index.json", url, packageName)) req = AddBasicAuthHeader(req, user.Name) @@ -348,7 +349,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("Delete", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("%s/%s/%s", url, packageName, packageVersion)) req = AddBasicAuthHeader(req, user.Name) @@ -360,7 +361,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("DownloadNotExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/package/%s/%s/%s.%s.nupkg", url, packageName, packageVersion, packageName, packageVersion)) req = AddBasicAuthHeader(req, user.Name) @@ -372,7 +373,7 @@ AAAjQmxvYgAAAGm7ENm9SGxMtAFVvPUsPJTF6PbtAAAAAFcVogEJAAAAAQAAAA==`) }) t.Run("DeleteNotExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("%s/package/%s/%s", url, packageName, packageVersion)) req = AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_pypi_test.go b/tests/integration/api_packages_pypi_test.go index c0545fdc22d3f..e37d118948fc6 100644 --- a/tests/integration/api_packages_pypi_test.go +++ b/tests/integration/api_packages_pypi_test.go @@ -19,12 +19,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/packages/pypi" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackagePyPI(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) packageName := "test-package" @@ -60,7 +61,7 @@ func TestPackagePyPI(t *testing.T) { } t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() filename := "test.whl" uploadFile(t, filename, content, http.StatusCreated) @@ -88,7 +89,7 @@ func TestPackagePyPI(t *testing.T) { }) t.Run("UploadAddFile", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() filename := "test.tar.gz" uploadFile(t, filename, content, http.StatusCreated) @@ -119,21 +120,21 @@ func TestPackagePyPI(t *testing.T) { }) t.Run("UploadHashMismatch", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() filename := "test2.whl" uploadFile(t, filename, "dummy", http.StatusBadRequest) }) t.Run("UploadExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadFile(t, "test.whl", content, http.StatusBadRequest) uploadFile(t, "test.tar.gz", content, http.StatusBadRequest) }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() downloadFile := func(filename string) { req := NewRequest(t, "GET", fmt.Sprintf("%s/files/%s/%s/%s", root, packageName, packageVersion, filename)) @@ -153,7 +154,7 @@ func TestPackagePyPI(t *testing.T) { }) t.Run("PackageMetadata", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/simple/%s", root, packageName)) req = AddBasicAuthHeader(req, user.Name) diff --git a/tests/integration/api_packages_rubygems_test.go b/tests/integration/api_packages_rubygems_test.go index 9d8f24b96a933..c601cf0f3ade0 100644 --- a/tests/integration/api_packages_rubygems_test.go +++ b/tests/integration/api_packages_rubygems_test.go @@ -17,12 +17,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/packages/rubygems" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageRubyGems(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) packageName := "gitea" @@ -120,7 +121,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`) } t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadFile(t, http.StatusCreated) @@ -147,13 +148,13 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`) }) t.Run("UploadExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() uploadFile(t, http.StatusBadRequest) }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/gems/%s", root, packageFilename)) req = AddBasicAuthHeader(req, user.Name) @@ -168,7 +169,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA`) }) t.Run("DownloadGemspec", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("%s/quick/Marshal.4.8/%sspec.rz", root, packageFilename)) req = AddBasicAuthHeader(req, user.Name) @@ -187,7 +188,7 @@ gAAAAP//MS06Gw==`) }) t.Run("EnumeratePackages", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() enumeratePackages := func(t *testing.T, endpoint string, expectedContent []byte) { req := NewRequest(t, "GET", fmt.Sprintf("%s/%s", root, endpoint)) @@ -206,7 +207,7 @@ gAAAAP//MS06Gw==`) }) t.Run("Delete", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() body := bytes.Buffer{} writer := multipart.NewWriter(&body) diff --git a/tests/integration/api_packages_test.go b/tests/integration/api_packages_test.go index bad896b9309dc..6842288acafbd 100644 --- a/tests/integration/api_packages_test.go +++ b/tests/integration/api_packages_test.go @@ -18,12 +18,13 @@ import ( user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" packages_service "code.gitea.io/gitea/services/packages" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPackageAPI(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) session := loginUser(t, user.Name) token := getTokenForLoggedInUser(t, session) @@ -38,7 +39,7 @@ func TestPackageAPI(t *testing.T) { MakeRequest(t, req, http.StatusCreated) t.Run("ListPackages", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/packages/%s?token=%s", user.Name, token)) resp := MakeRequest(t, req, http.StatusOK) @@ -55,7 +56,7 @@ func TestPackageAPI(t *testing.T) { }) t.Run("GetPackage", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/packages/%s/dummy/%s/%s?token=%s", user.Name, packageName, packageVersion, token)) MakeRequest(t, req, http.StatusNotFound) @@ -73,7 +74,7 @@ func TestPackageAPI(t *testing.T) { assert.Equal(t, user.Name, p.Creator.UserName) t.Run("RepositoryLink", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() p, err := packages_model.GetPackageByName(db.DefaultContext, user.ID, packages_model.TypeGeneric, packageName) assert.NoError(t, err) @@ -112,7 +113,7 @@ func TestPackageAPI(t *testing.T) { }) t.Run("ListPackageFiles", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/packages/%s/dummy/%s/%s/files?token=%s", user.Name, packageName, packageVersion, token)) MakeRequest(t, req, http.StatusNotFound) @@ -133,7 +134,7 @@ func TestPackageAPI(t *testing.T) { }) t.Run("DeletePackage", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/packages/%s/dummy/%s/%s?token=%s", user.Name, packageName, packageVersion, token)) MakeRequest(t, req, http.StatusNotFound) @@ -144,7 +145,7 @@ func TestPackageAPI(t *testing.T) { } func TestPackageCleanup(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() time.Sleep(time.Second) diff --git a/tests/integration/api_pull_commits_test.go b/tests/integration/api_pull_commits_test.go index bd681d2ad1658..d1f7fdf541db9 100644 --- a/tests/integration/api_pull_commits_test.go +++ b/tests/integration/api_pull_commits_test.go @@ -12,12 +12,13 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIPullCommits(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() pullIssue := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{ID: 2}).(*issues_model.PullRequest) assert.NoError(t, pullIssue.LoadIssue()) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: pullIssue.HeadRepoID}).(*repo_model.Repository) diff --git a/tests/integration/api_pull_review_test.go b/tests/integration/api_pull_review_test.go index f8973d6c94fc2..e10df5aac899a 100644 --- a/tests/integration/api_pull_review_test.go +++ b/tests/integration/api_pull_review_test.go @@ -15,12 +15,13 @@ import ( "code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/modules/json" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIPullReview(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() pullIssue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3}).(*issues_model.Issue) assert.NoError(t, pullIssue.LoadAttributes(db.DefaultContext)) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: pullIssue.RepoID}).(*repo_model.Repository) @@ -223,7 +224,7 @@ func TestAPIPullReview(t *testing.T) { } func TestAPIPullReviewRequest(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() pullIssue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 3}).(*issues_model.Issue) assert.NoError(t, pullIssue.LoadAttributes(db.DefaultContext)) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: pullIssue.RepoID}).(*repo_model.Repository) diff --git a/tests/integration/api_pull_test.go b/tests/integration/api_pull_test.go index 13839c893e7ea..f3cdc32af8cb7 100644 --- a/tests/integration/api_pull_test.go +++ b/tests/integration/api_pull_test.go @@ -17,12 +17,13 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/services/forms" issue_service "code.gitea.io/gitea/services/issue" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIViewPulls(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -39,7 +40,7 @@ func TestAPIViewPulls(t *testing.T) { // TestAPIMergePullWIP ensures that we can't merge a WIP pull request func TestAPIMergePullWIP(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) pr := unittest.AssertExistsAndLoadBean(t, &issues_model.PullRequest{Status: issues_model.PullRequestStatusMergeable}, unittest.Cond("has_merged = ?", false)).(*issues_model.PullRequest) @@ -62,7 +63,7 @@ func TestAPIMergePullWIP(t *testing.T) { } func TestAPICreatePullSuccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo10 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}).(*repo_model.Repository) // repo10 have code, pulls units. repo11 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 11}).(*repo_model.Repository) @@ -82,7 +83,7 @@ func TestAPICreatePullSuccess(t *testing.T) { } func TestAPICreatePullWithFieldsSuccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // repo10 have code, pulls units. repo10 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}).(*repo_model.Repository) owner10 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo10.OwnerID}).(*user_model.User) @@ -119,7 +120,7 @@ func TestAPICreatePullWithFieldsSuccess(t *testing.T) { } func TestAPICreatePullWithFieldsFailure(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // repo10 have code, pulls units. repo10 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}).(*repo_model.Repository) owner10 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo10.OwnerID}).(*user_model.User) @@ -153,7 +154,7 @@ func TestAPICreatePullWithFieldsFailure(t *testing.T) { } func TestAPIEditPull(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo10 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}).(*repo_model.Repository) owner10 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo10.OwnerID}).(*user_model.User) diff --git a/tests/integration/api_releases_test.go b/tests/integration/api_releases_test.go index 95827111fb900..51c5229fe60eb 100644 --- a/tests/integration/api_releases_test.go +++ b/tests/integration/api_releases_test.go @@ -16,12 +16,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/git" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIListReleases(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) @@ -96,7 +97,7 @@ func createNewReleaseUsingAPI(t *testing.T, session *TestSession, token string, } func TestAPICreateAndUpdateRelease(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -148,7 +149,7 @@ func TestAPICreateAndUpdateRelease(t *testing.T) { } func TestAPICreateReleaseToDefaultBranch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -159,7 +160,7 @@ func TestAPICreateReleaseToDefaultBranch(t *testing.T) { } func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -177,7 +178,7 @@ func TestAPICreateReleaseToDefaultBranchOnExistingTag(t *testing.T) { } func TestAPIGetReleaseByTag(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -210,7 +211,7 @@ func TestAPIGetReleaseByTag(t *testing.T) { } func TestAPIDeleteReleaseByTagName(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) diff --git a/tests/integration/api_repo_archive_test.go b/tests/integration/api_repo_archive_test.go index 3e9f774bebb49..0df51befdcef2 100644 --- a/tests/integration/api_repo_archive_test.go +++ b/tests/integration/api_repo_archive_test.go @@ -14,12 +14,13 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIDownloadArchive(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) diff --git a/tests/integration/api_repo_file_get_test.go b/tests/integration/api_repo_file_get_test.go index 764ae79ffea84..2a7a5fa634533 100644 --- a/tests/integration/api_repo_file_get_test.go +++ b/tests/integration/api_repo_file_get_test.go @@ -12,12 +12,13 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIGetRawFileOrLFS(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // Test with raw file req := NewRequest(t, "GET", "/api/v1/repos/user2/repo1/media/README.md") diff --git a/tests/integration/api_repo_git_blobs_test.go b/tests/integration/api_repo_git_blobs_test.go index 7e36e50ec65b3..a981f485b1530 100644 --- a/tests/integration/api_repo_git_blobs_test.go +++ b/tests/integration/api_repo_git_blobs_test.go @@ -12,12 +12,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIReposGitBlobs(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // owner of the repo1 & repo16 user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User) // owner of the repo3 user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) // owner of neither repos diff --git a/tests/integration/api_repo_git_commits_test.go b/tests/integration/api_repo_git_commits_test.go index 451a716a923f7..88fb079e5ff21 100644 --- a/tests/integration/api_repo_git_commits_test.go +++ b/tests/integration/api_repo_git_commits_test.go @@ -11,6 +11,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -24,7 +25,7 @@ func compareCommitFiles(t *testing.T, expect []string, files []*api.CommitAffect } func TestAPIReposGitCommits(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) @@ -52,7 +53,7 @@ func TestAPIReposGitCommits(t *testing.T) { } func TestAPIReposGitCommitList(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) @@ -75,7 +76,7 @@ func TestAPIReposGitCommitList(t *testing.T) { } func TestAPIReposGitCommitListPage2Empty(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) @@ -92,7 +93,7 @@ func TestAPIReposGitCommitListPage2Empty(t *testing.T) { } func TestAPIReposGitCommitListDifferentBranch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) @@ -111,7 +112,7 @@ func TestAPIReposGitCommitListDifferentBranch(t *testing.T) { } func TestDownloadCommitDiffOrPatch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) @@ -133,7 +134,7 @@ func TestDownloadCommitDiffOrPatch(t *testing.T) { } func TestGetFileHistory(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) diff --git a/tests/integration/api_repo_git_hook_test.go b/tests/integration/api_repo_git_hook_test.go index 60da9242af519..e5cf9d3ab17af 100644 --- a/tests/integration/api_repo_git_hook_test.go +++ b/tests/integration/api_repo_git_hook_test.go @@ -13,6 +13,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -23,7 +24,7 @@ echo Hello, World! ` func TestAPIListGitHooks(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 37}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -49,7 +50,7 @@ func TestAPIListGitHooks(t *testing.T) { } func TestAPIListGitHooksNoHooks(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -70,7 +71,7 @@ func TestAPIListGitHooksNoHooks(t *testing.T) { } func TestAPIListGitHooksNoAccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -83,7 +84,7 @@ func TestAPIListGitHooksNoAccess(t *testing.T) { } func TestAPIGetGitHook(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 37}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -101,7 +102,7 @@ func TestAPIGetGitHook(t *testing.T) { } func TestAPIGetGitHookNoAccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -114,7 +115,7 @@ func TestAPIGetGitHookNoAccess(t *testing.T) { } func TestAPIEditGitHook(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -144,7 +145,7 @@ func TestAPIEditGitHook(t *testing.T) { } func TestAPIEditGitHookNoAccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -160,7 +161,7 @@ func TestAPIEditGitHookNoAccess(t *testing.T) { } func TestAPIDeleteGitHook(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 37}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) @@ -183,7 +184,7 @@ func TestAPIDeleteGitHook(t *testing.T) { } func TestAPIDeleteGitHookNoAccess(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) diff --git a/tests/integration/api_repo_git_ref_test.go b/tests/integration/api_repo_git_ref_test.go index ca51239b1d848..98012cc8111c4 100644 --- a/tests/integration/api_repo_git_ref_test.go +++ b/tests/integration/api_repo_git_ref_test.go @@ -10,10 +10,11 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func TestAPIReposGitRefs(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) diff --git a/tests/integration/api_repo_git_tags_test.go b/tests/integration/api_repo_git_tags_test.go index 1567b97fa2796..1228a019ed920 100644 --- a/tests/integration/api_repo_git_tags_test.go +++ b/tests/integration/api_repo_git_tags_test.go @@ -15,12 +15,13 @@ import ( "code.gitea.io/gitea/modules/git" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIGitTags(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) // Login as User2. @@ -64,7 +65,7 @@ func TestAPIGitTags(t *testing.T) { } func TestAPIDeleteTagByName(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) diff --git a/tests/integration/api_repo_git_trees_test.go b/tests/integration/api_repo_git_trees_test.go index 96958afea8d63..53be5a8ead4e1 100644 --- a/tests/integration/api_repo_git_trees_test.go +++ b/tests/integration/api_repo_git_trees_test.go @@ -11,10 +11,11 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func TestAPIReposGitTrees(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // owner of the repo1 & repo16 user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User) // owner of the repo3 user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) // owner of neither repos diff --git a/tests/integration/api_repo_lfs_locks_test.go b/tests/integration/api_repo_lfs_locks_test.go index 8f60ec19336ea..cd38f869ddd6f 100644 --- a/tests/integration/api_repo_lfs_locks_test.go +++ b/tests/integration/api_repo_lfs_locks_test.go @@ -16,12 +16,13 @@ import ( "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPILFSLocksNotStarted(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = false user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -37,7 +38,7 @@ func TestAPILFSLocksNotStarted(t *testing.T) { } func TestAPILFSLocksNotLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -51,7 +52,7 @@ func TestAPILFSLocksNotLogin(t *testing.T) { } func TestAPILFSLocksLogged(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // in org 3 user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) // in org 3 diff --git a/tests/integration/api_repo_lfs_migrate_test.go b/tests/integration/api_repo_lfs_migrate_test.go index 9f4ec31a8918c..770993eec0a8d 100644 --- a/tests/integration/api_repo_lfs_migrate_test.go +++ b/tests/integration/api_repo_lfs_migrate_test.go @@ -15,12 +15,13 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/services/migrations" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIRepoLFSMigrateLocal(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() oldImportLocalPaths := setting.ImportLocalPaths oldAllowLocalNetworks := setting.Migrations.AllowLocalNetworks diff --git a/tests/integration/api_repo_lfs_test.go b/tests/integration/api_repo_lfs_test.go index ac3b9ba0ae63c..d93e2b8cc4773 100644 --- a/tests/integration/api_repo_lfs_test.go +++ b/tests/integration/api_repo_lfs_test.go @@ -19,12 +19,13 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPILFSNotStarted(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = false @@ -44,7 +45,7 @@ func TestAPILFSNotStarted(t *testing.T) { } func TestAPILFSMediaType(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true @@ -68,7 +69,7 @@ func createLFSTestRepository(t *testing.T, name string) *repo_model.Repository { } func TestAPILFSBatch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true @@ -94,7 +95,7 @@ func TestAPILFSBatch(t *testing.T) { } t.Run("InvalidJsonRequest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, nil) @@ -102,7 +103,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("InvalidOperation", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "dummy", @@ -112,7 +113,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("InvalidPointer", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "download", @@ -138,7 +139,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("PointerSizeMismatch", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "download", @@ -156,10 +157,10 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("Download", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("PointerNotInStore", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "download", @@ -176,7 +177,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("MetaNotFound", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() p := lfs.Pointer{Oid: "05eeb4eb5be71f2dd291ca39157d6d9effd7d1ea19cbdc8a99411fe2a8f26a00", Size: 6} @@ -200,7 +201,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("Success", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "download", @@ -221,10 +222,10 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("Upload", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("FileTooBig", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() oldMaxFileSize := setting.LFS.MaxFileSize setting.LFS.MaxFileSize = 2 @@ -247,7 +248,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("AddMeta", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() p := lfs.Pointer{Oid: "05eeb4eb5be71f2dd291ca39157d6d9effd7d1ea19cbdc8a99411fe2a8f26a00", Size: 6} @@ -285,7 +286,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("AlreadyExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "upload", @@ -302,7 +303,7 @@ func TestAPILFSBatch(t *testing.T) { }) t.Run("NewFile", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.BatchRequest{ Operation: "upload", @@ -328,7 +329,7 @@ func TestAPILFSBatch(t *testing.T) { } func TestAPILFSUpload(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true @@ -346,7 +347,7 @@ func TestAPILFSUpload(t *testing.T) { } t.Run("InvalidPointer", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, lfs.Pointer{Oid: "dummy"}, "") @@ -354,7 +355,7 @@ func TestAPILFSUpload(t *testing.T) { }) t.Run("AlreadyExistsInStore", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() p := lfs.Pointer{Oid: "83de2e488b89a0aa1c97496b888120a28b0c1e15463a4adb8405578c540f36d4", Size: 6} @@ -389,7 +390,7 @@ func TestAPILFSUpload(t *testing.T) { }) t.Run("MetaAlreadyExists", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, lfs.Pointer{Oid: oid, Size: 6}, "") @@ -397,7 +398,7 @@ func TestAPILFSUpload(t *testing.T) { }) t.Run("HashMismatch", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, lfs.Pointer{Oid: "2581dd7bbc1fe44726de4b7dd806a087a978b9c5aec0a60481259e34be09b06a", Size: 1}, "a") @@ -405,7 +406,7 @@ func TestAPILFSUpload(t *testing.T) { }) t.Run("SizeMismatch", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, lfs.Pointer{Oid: "ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb", Size: 2}, "a") @@ -413,7 +414,7 @@ func TestAPILFSUpload(t *testing.T) { }) t.Run("Success", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() p := lfs.Pointer{Oid: "6ccce4863b70f258d691f59609d31b4502e1ba5199942d3bc5d35d17a4ce771d", Size: 5} @@ -433,7 +434,7 @@ func TestAPILFSUpload(t *testing.T) { } func TestAPILFSVerify(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.LFS.StartServer = true @@ -453,7 +454,7 @@ func TestAPILFSVerify(t *testing.T) { } t.Run("InvalidJsonRequest", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, nil) @@ -461,7 +462,7 @@ func TestAPILFSVerify(t *testing.T) { }) t.Run("InvalidPointer", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.Pointer{}) @@ -469,7 +470,7 @@ func TestAPILFSVerify(t *testing.T) { }) t.Run("PointerNotExisting", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.Pointer{Oid: "fb8f7d8435968c4f82a726a92395be4d16f2f63116caf36c8ad35c60831ab042", Size: 6}) @@ -477,7 +478,7 @@ func TestAPILFSVerify(t *testing.T) { }) t.Run("Success", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := newRequest(t, &lfs.Pointer{Oid: oid, Size: 6}) diff --git a/tests/integration/api_repo_raw_test.go b/tests/integration/api_repo_raw_test.go index b8402e2b77a08..e602ee23cdf73 100644 --- a/tests/integration/api_repo_raw_test.go +++ b/tests/integration/api_repo_raw_test.go @@ -10,10 +10,11 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func TestAPIReposRaw(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) diff --git a/tests/integration/api_repo_tags_test.go b/tests/integration/api_repo_tags_test.go index 359644e475d53..468b27ae0e381 100644 --- a/tests/integration/api_repo_tags_test.go +++ b/tests/integration/api_repo_tags_test.go @@ -13,12 +13,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIRepoTags(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // Login as User2. session := loginUser(t, user.Name) diff --git a/tests/integration/api_repo_teams_test.go b/tests/integration/api_repo_teams_test.go index 91d175a2f6487..c45905f927024 100644 --- a/tests/integration/api_repo_teams_test.go +++ b/tests/integration/api_repo_teams_test.go @@ -15,12 +15,13 @@ import ( user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIRepoTeams(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // publicOrgRepo = user3/repo21 publicOrgRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 32}).(*repo_model.Repository) diff --git a/tests/integration/api_repo_test.go b/tests/integration/api_repo_test.go index 97757f0c9ef4a..730f583e64b61 100644 --- a/tests/integration/api_repo_test.go +++ b/tests/integration/api_repo_test.go @@ -20,12 +20,13 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIUserReposNotLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) req := NewRequestf(t, "GET", "/api/v1/users/%s/repos", user.Name) @@ -43,7 +44,7 @@ func TestAPIUserReposNotLogin(t *testing.T) { } func TestAPISearchRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() const keyword = "test" req := NewRequestf(t, "GET", "/api/v1/repos/search?q=%s", keyword) @@ -247,7 +248,7 @@ func getRepo(t *testing.T, repoID int64) *repo_model.Repository { } func TestAPIViewRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() var repo api.Repository @@ -277,7 +278,7 @@ func TestAPIViewRepo(t *testing.T) { } func TestAPIOrgRepos(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User) @@ -323,7 +324,7 @@ func TestAPIOrgRepos(t *testing.T) { } func TestAPIGetRepoByIDUnauthorized(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) session := loginUser(t, user.Name) token := getTokenForLoggedInUser(t, session) @@ -346,7 +347,7 @@ func TestAPIRepoMigrate(t *testing.T) { {ctxUserID: 2, userID: 3, cloneURL: "https://10.0.0.1/user/test_repo.git", repoName: "private-ip", expectedStatus: http.StatusUnprocessableEntity}, } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() for _, testCase := range testCases { user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: testCase.ctxUserID}).(*user_model.User) session := loginUser(t, user.Name) @@ -415,7 +416,7 @@ func testAPIRepoMigrateConflict(t *testing.T, u *url.URL) { // mirror-sync must fail with "400 (Bad Request)" when an attempt is made to // sync a non-mirror repository. func TestAPIMirrorSyncNonMirrorRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") token := getTokenForLoggedInUser(t, session) @@ -446,7 +447,7 @@ func TestAPIOrgRepoCreate(t *testing.T) { {ctxUserID: 28, orgName: "user6", repoName: "repo-not-creator", expectedStatus: http.StatusForbidden}, } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() for _, testCase := range testCases { user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: testCase.ctxUserID}).(*user_model.User) session := loginUser(t, user.Name) @@ -512,7 +513,7 @@ func TestAPIRepoTransfer(t *testing.T) { {ctxUserID: 2, newOwner: "user6", teams: nil, expectedStatus: http.StatusCreated}, } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // create repo to move user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) @@ -576,7 +577,7 @@ func transfer(t *testing.T) *repo_model.Repository { } func TestAPIAcceptTransfer(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := transfer(t) @@ -602,7 +603,7 @@ func TestAPIAcceptTransfer(t *testing.T) { } func TestAPIRejectTransfer(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := transfer(t) @@ -628,7 +629,7 @@ func TestAPIRejectTransfer(t *testing.T) { } func TestAPIGenerateRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) session := loginUser(t, user.Name) @@ -665,7 +666,7 @@ func TestAPIGenerateRepo(t *testing.T) { } func TestAPIRepoGetReviewers(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) session := loginUser(t, user.Name) token := getTokenForLoggedInUser(t, session) @@ -679,7 +680,7 @@ func TestAPIRepoGetReviewers(t *testing.T) { } func TestAPIRepoGetAssignees(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) session := loginUser(t, user.Name) token := getTokenForLoggedInUser(t, session) diff --git a/tests/integration/api_repo_topic_test.go b/tests/integration/api_repo_topic_test.go index 432eebdd54a6b..66ebd783feb65 100644 --- a/tests/integration/api_repo_topic_test.go +++ b/tests/integration/api_repo_topic_test.go @@ -14,12 +14,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPITopicSearch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() searchURL, _ := url.Parse("/api/v1/topics/search") var topics struct { TopicNames []*api.TopicResponse `json:"topics"` @@ -51,7 +52,7 @@ func TestAPITopicSearch(t *testing.T) { } func TestAPIRepoTopic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) // owner of repo2 user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User) // owner of repo3 user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User) // write access to repo 3 diff --git a/tests/integration/api_settings_test.go b/tests/integration/api_settings_test.go index 0304d5c5e82a9..b8da17b963a0f 100644 --- a/tests/integration/api_settings_test.go +++ b/tests/integration/api_settings_test.go @@ -10,12 +10,13 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIExposedSettings(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() ui := new(api.GeneralUISettings) req := NewRequest(t, "GET", "/api/v1/settings/ui") diff --git a/tests/integration/api_team_test.go b/tests/integration/api_team_test.go index 85ceb43d23d7e..2da1cc8e34736 100644 --- a/tests/integration/api_team_test.go +++ b/tests/integration/api_team_test.go @@ -17,12 +17,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPITeam(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() teamUser := unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{}).(*organization.TeamUser) team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamUser.TeamID}).(*organization.Team) @@ -220,7 +221,7 @@ type TeamSearchResults struct { } func TestAPITeamSearch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User) @@ -244,7 +245,7 @@ func TestAPITeamSearch(t *testing.T) { } func TestAPIGetTeamRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 15}).(*user_model.User) teamRepo := unittest.AssertExistsAndLoadBean(t, &repo.Repository{ID: 24}).(*repo.Repository) diff --git a/tests/integration/api_team_user_test.go b/tests/integration/api_team_user_test.go index 53b120904ff29..6cceb737ac84f 100644 --- a/tests/integration/api_team_user_test.go +++ b/tests/integration/api_team_user_test.go @@ -13,12 +13,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPITeamUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() normalUsername := "user2" session := loginUser(t, normalUsername) diff --git a/tests/integration/api_token_test.go b/tests/integration/api_token_test.go index 4d75ab25beb72..7ca9d208ae45c 100644 --- a/tests/integration/api_token_test.go +++ b/tests/integration/api_token_test.go @@ -12,11 +12,12 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" ) // TestAPICreateAndDeleteToken tests that token that was just created can be deleted func TestAPICreateAndDeleteToken(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) req := NewRequestWithJSON(t, "POST", "/api/v1/users/user1/tokens", map[string]string{ @@ -56,7 +57,7 @@ func TestAPICreateAndDeleteToken(t *testing.T) { // TestAPIDeleteMissingToken ensures that error is thrown when token not found func TestAPIDeleteMissingToken(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) req := NewRequestf(t, "DELETE", "/api/v1/users/user1/tokens/%d", unittest.NonexistentID) diff --git a/tests/integration/api_user_email_test.go b/tests/integration/api_user_email_test.go index 1c34f039bac2f..7bd265187ca0f 100644 --- a/tests/integration/api_user_email_test.go +++ b/tests/integration/api_user_email_test.go @@ -9,12 +9,13 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIListEmails(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() normalUsername := "user2" session := loginUser(t, normalUsername) @@ -41,7 +42,7 @@ func TestAPIListEmails(t *testing.T) { } func TestAPIAddEmail(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() normalUsername := "user2" session := loginUser(t, normalUsername) @@ -78,7 +79,7 @@ func TestAPIAddEmail(t *testing.T) { } func TestAPIDeleteEmail(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() normalUsername := "user2" session := loginUser(t, normalUsername) diff --git a/tests/integration/api_user_heatmap_test.go b/tests/integration/api_user_heatmap_test.go index 8eaa9f147564e..c2f3db364b0ae 100644 --- a/tests/integration/api_user_heatmap_test.go +++ b/tests/integration/api_user_heatmap_test.go @@ -12,12 +12,13 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/timeutil" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestUserHeatmap(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" normalUsername := "user2" token := getUserToken(t, adminUsername) diff --git a/tests/integration/api_user_org_perm_test.go b/tests/integration/api_user_org_perm_test.go index 75ad36279d2e4..fef653545c5f6 100644 --- a/tests/integration/api_user_org_perm_test.go +++ b/tests/integration/api_user_org_perm_test.go @@ -10,6 +10,7 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -22,7 +23,7 @@ type apiUserOrgPermTestCase struct { } func TestTokenNeeded(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := emptyTestSession(t) req := NewRequest(t, "GET", "/api/v1/users/user1/orgs/user6/permissions") @@ -30,7 +31,7 @@ func TestTokenNeeded(t *testing.T) { } func sampleTest(t *testing.T, auoptc apiUserOrgPermTestCase) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, auoptc.LoginUser) token := getTokenForLoggedInUser(t, session) @@ -123,7 +124,7 @@ func TestCanReadUser(t *testing.T) { } func TestUnknowUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") token := getTokenForLoggedInUser(t, session) @@ -137,7 +138,7 @@ func TestUnknowUser(t *testing.T) { } func TestUnknowOrganization(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") token := getTokenForLoggedInUser(t, session) diff --git a/tests/integration/api_user_orgs_test.go b/tests/integration/api_user_orgs_test.go index e8b6e6dd9b0eb..0e2211728f546 100644 --- a/tests/integration/api_user_orgs_test.go +++ b/tests/integration/api_user_orgs_test.go @@ -12,12 +12,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestUserOrgs(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" normalUsername := "user2" privateMemberUsername := "user4" @@ -68,7 +69,7 @@ func getUserOrgs(t *testing.T, userDoer, userCheck string) (orgs []*api.Organiza } func TestMyOrgs(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := emptyTestSession(t) req := NewRequest(t, "GET", "/api/v1/user/orgs") diff --git a/tests/integration/api_user_search_test.go b/tests/integration/api_user_search_test.go index 857e15504ad06..a908741463b43 100644 --- a/tests/integration/api_user_search_test.go +++ b/tests/integration/api_user_search_test.go @@ -13,6 +13,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -23,7 +24,7 @@ type SearchResults struct { } func TestAPIUserSearchLoggedIn(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" session := loginUser(t, adminUsername) token := getTokenForLoggedInUser(t, session) @@ -41,7 +42,7 @@ func TestAPIUserSearchLoggedIn(t *testing.T) { } func TestAPIUserSearchNotLoggedIn(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() query := "user2" req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query) resp := MakeRequest(t, req, http.StatusOK) @@ -62,7 +63,7 @@ func TestAPIUserSearchNotLoggedIn(t *testing.T) { } func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminUsername := "user1" session := loginUser(t, adminUsername) token := getTokenForLoggedInUser(t, session) @@ -82,7 +83,7 @@ func TestAPIUserSearchAdminLoggedInUserHidden(t *testing.T) { } func TestAPIUserSearchNotLoggedInUserHidden(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() query := "user31" req := NewRequestf(t, "GET", "/api/v1/users/search?q=%s", query) resp := MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/api_wiki_test.go b/tests/integration/api_wiki_test.go index 319bf1c7ec10e..c6f4841d082ef 100644 --- a/tests/integration/api_wiki_test.go +++ b/tests/integration/api_wiki_test.go @@ -11,12 +11,13 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestAPIGetWikiPage(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" session := loginUser(t, username) @@ -62,7 +63,7 @@ func TestAPIGetWikiPage(t *testing.T) { } func TestAPIListWikiPages(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" session := loginUser(t, username) @@ -178,7 +179,7 @@ func TestAPINewWikiPage(t *testing.T) { "New page", "&&&&", } { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" session := loginUser(t, username) token := getTokenForLoggedInUser(t, session) @@ -195,7 +196,7 @@ func TestAPINewWikiPage(t *testing.T) { } func TestAPIEditWikiPage(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" session := loginUser(t, username) token := getTokenForLoggedInUser(t, session) @@ -211,7 +212,7 @@ func TestAPIEditWikiPage(t *testing.T) { } func TestAPIListPageRevisions(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" session := loginUser(t, username) diff --git a/tests/integration/attachment_test.go b/tests/integration/attachment_test.go index 341011f75b07e..2d2c979f7b0af 100644 --- a/tests/integration/attachment_test.go +++ b/tests/integration/attachment_test.go @@ -17,6 +17,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -57,13 +58,13 @@ func createAttachment(t *testing.T, session *TestSession, repoURL, filename stri } func TestCreateAnonymousAttachment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := emptyTestSession(t) createAttachment(t, session, "user2/repo1", "image.png", generateImg(), http.StatusSeeOther) } func TestCreateIssueAttachment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() const repoURL = "user2/repo1" session := loginUser(t, "user2") uuid := createAttachment(t, session, repoURL, "image.png", generateImg(), http.StatusOK) @@ -92,7 +93,7 @@ func TestCreateIssueAttachment(t *testing.T) { } func TestGetAttachment(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() adminSession := loginUser(t, "user1") user2Session := loginUser(t, "user2") user8Session := loginUser(t, "user8") diff --git a/tests/integration/auth_ldap_test.go b/tests/integration/auth_ldap_test.go index 8dd299512aec1..467c1680c0de4 100644 --- a/tests/integration/auth_ldap_test.go +++ b/tests/integration/auth_ldap_test.go @@ -18,6 +18,7 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/translation" "code.gitea.io/gitea/services/auth" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -145,7 +146,7 @@ func TestLDAPUserSignin(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "") u := gitLDAPUsers[0] @@ -162,7 +163,7 @@ func TestLDAPUserSignin(t *testing.T) { } func TestLDAPAuthChange(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "") session := loginUser(t, "user1") @@ -220,7 +221,7 @@ func TestLDAPUserSync(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "") auth.SyncExternalUsers(context.Background(), true) @@ -271,7 +272,7 @@ func TestLDAPUserSigninFailed(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "") u := otherLDAPUsers[0] @@ -283,7 +284,7 @@ func TestLDAPUserSSHKeySync(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "sshPublicKey") auth.SyncExternalUsers(context.Background(), true) @@ -316,7 +317,7 @@ func TestLDAPGroupTeamSyncAddMember(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "", "on", `{"cn=ship_crew,ou=people,dc=planetexpress,dc=com":{"org26": ["team11"]},"cn=admin_staff,ou=people,dc=planetexpress,dc=com": {"non-existent": ["non-existent"]}}`) org, err := organization.GetOrgByName("org26") assert.NoError(t, err) @@ -361,7 +362,7 @@ func TestLDAPGroupTeamSyncRemoveMember(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "", "on", `{"cn=dispatch,ou=people,dc=planetexpress,dc=com": {"org26": ["team11"]}}`) org, err := organization.GetOrgByName("org26") assert.NoError(t, err) @@ -397,7 +398,7 @@ func TestBrokenLDAPMapUserSignin(t *testing.T) { t.Skip() return } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() addAuthSourceLDAP(t, "", "on", `{"NOT_A_VALID_JSON"["MISSING_DOUBLE_POINT"]}`) u := gitLDAPUsers[0] diff --git a/tests/integration/branches_test.go b/tests/integration/branches_test.go index 8ec2f3b13e786..bd0bd63c50a17 100644 --- a/tests/integration/branches_test.go +++ b/tests/integration/branches_test.go @@ -10,12 +10,13 @@ import ( "testing" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestViewBranches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1/branches") resp := MakeRequest(t, req, http.StatusOK) @@ -26,7 +27,7 @@ func TestViewBranches(t *testing.T) { } func TestDeleteBranch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() deleteBranch(t) } diff --git a/tests/integration/change_default_branch_test.go b/tests/integration/change_default_branch_test.go index f733c2ec5f5d2..a26c58cb0975e 100644 --- a/tests/integration/change_default_branch_test.go +++ b/tests/integration/change_default_branch_test.go @@ -12,10 +12,11 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func TestChangeDefaultBranch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) diff --git a/tests/integration/compare_test.go b/tests/integration/compare_test.go index b29fe180ab25b..7642109dd9573 100644 --- a/tests/integration/compare_test.go +++ b/tests/integration/compare_test.go @@ -9,11 +9,12 @@ import ( "strings" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestCompareTag(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequest(t, "GET", "/user2/repo1/compare/v1.1...master") @@ -30,7 +31,7 @@ func TestCompareTag(t *testing.T) { // Compare with inferred default branch (master) func TestCompareDefault(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequest(t, "GET", "/user2/repo1/compare/v1.1") diff --git a/tests/integration/cors_test.go b/tests/integration/cors_test.go index 3e1041ea136c5..f5318016276f3 100644 --- a/tests/integration/cors_test.go +++ b/tests/integration/cors_test.go @@ -8,11 +8,12 @@ import ( "net/http" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestCORSNotSet(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestf(t, "GET", "/api/v1/version") session := loginUser(t, "user2") resp := session.MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/create_no_session_test.go b/tests/integration/create_no_session_test.go index aa7ee93d20ce8..f328549858e4e 100644 --- a/tests/integration/create_no_session_test.go +++ b/tests/integration/create_no_session_test.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers" + "code.gitea.io/gitea/tests" "gitea.com/go-chi/session" "github.com/stretchr/testify/assert" @@ -52,7 +53,7 @@ func sessionFileExist(t *testing.T, tmpDir, sessionID string) bool { } func TestSessionFileCreation(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() oldSessionConfig := setting.SessionConfig.ProviderConfig defer func() { @@ -85,7 +86,7 @@ func TestSessionFileCreation(t *testing.T) { c = routers.NormalRoutes() t.Run("NoSessionOnViewIssue", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", "/user2/repo1/issues/1") resp := MakeRequest(t, req, http.StatusOK) @@ -95,7 +96,7 @@ func TestSessionFileCreation(t *testing.T) { assert.False(t, sessionFileExist(t, tmpDir, sessionID)) }) t.Run("CreateSessionOnLogin", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() req := NewRequest(t, "GET", "/user/login") resp := MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/csrf_test.go b/tests/integration/csrf_test.go index 721f73b47aa73..b75e622d25bc0 100644 --- a/tests/integration/csrf_test.go +++ b/tests/integration/csrf_test.go @@ -12,12 +12,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestCsrfProtection(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // test web form csrf via form user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) diff --git a/tests/integration/delete_user_test.go b/tests/integration/delete_user_test.go index e760401a3dabb..1d9d257f123e3 100644 --- a/tests/integration/delete_user_test.go +++ b/tests/integration/delete_user_test.go @@ -15,6 +15,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func assertUserDeleted(t *testing.T, userID int64) { @@ -30,7 +31,7 @@ func assertUserDeleted(t *testing.T, userID int64) { } func TestUserDeleteAccount(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user8") csrf := GetCSRF(t, session, "/user/settings/account") @@ -45,7 +46,7 @@ func TestUserDeleteAccount(t *testing.T) { } func TestUserDeleteAccountStillOwnRepos(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") csrf := GetCSRF(t, session, "/user/settings/account") diff --git a/tests/integration/download_test.go b/tests/integration/download_test.go index e872d880be8cb..9d3b17d103636 100644 --- a/tests/integration/download_test.go +++ b/tests/integration/download_test.go @@ -9,12 +9,13 @@ import ( "testing" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestDownloadByID(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -26,7 +27,7 @@ func TestDownloadByID(t *testing.T) { } func TestDownloadByIDForSVGUsesSecureHeaders(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -40,7 +41,7 @@ func TestDownloadByIDForSVGUsesSecureHeaders(t *testing.T) { } func TestDownloadByIDMedia(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -52,7 +53,7 @@ func TestDownloadByIDMedia(t *testing.T) { } func TestDownloadByIDMediaForSVGUsesSecureHeaders(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -66,7 +67,7 @@ func TestDownloadByIDMediaForSVGUsesSecureHeaders(t *testing.T) { } func TestDownloadRawTextFileWithoutMimeTypeMapping(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -77,7 +78,7 @@ func TestDownloadRawTextFileWithoutMimeTypeMapping(t *testing.T) { } func TestDownloadRawTextFileWithMimeTypeMapping(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.MimeTypeMap.Map[".xml"] = "text/xml" setting.MimeTypeMap.Enabled = true diff --git a/tests/integration/empty_repo_test.go b/tests/integration/empty_repo_test.go index c51075528c4be..0d26410fcbab0 100644 --- a/tests/integration/empty_repo_test.go +++ b/tests/integration/empty_repo_test.go @@ -11,10 +11,11 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" ) func TestEmptyRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() subpaths := []string{ "commits/master", "raw/foo", diff --git a/tests/integration/eventsource_test.go b/tests/integration/eventsource_test.go index 368edf2abad1b..0290ff8767052 100644 --- a/tests/integration/eventsource_test.go +++ b/tests/integration/eventsource_test.go @@ -16,12 +16,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/eventsource" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestEventSourceManagerRun(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() manager := eventsource.GetManager() eventChan := manager.Register(2) diff --git a/tests/integration/explore_repos_test.go b/tests/integration/explore_repos_test.go index 4870636c659aa..dca32527539e4 100644 --- a/tests/integration/explore_repos_test.go +++ b/tests/integration/explore_repos_test.go @@ -7,10 +7,12 @@ package integration import ( "net/http" "testing" + + "code.gitea.io/gitea/tests" ) func TestExploreRepos(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/explore/repos") MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/git_clone_wiki_test.go b/tests/integration/git_clone_wiki_test.go index 86167b5b91503..4bdbc9b7c344d 100644 --- a/tests/integration/git_clone_wiki_test.go +++ b/tests/integration/git_clone_wiki_test.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -32,7 +33,7 @@ func assertFileEqual(t *testing.T, p string, content []byte) { func TestRepoCloneWiki(t *testing.T) { onGiteaRun(t, func(t *testing.T, u *url.URL) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() dstPath, err := os.MkdirTemp("", "clone_wiki") assert.NoError(t, err) diff --git a/tests/integration/git_helper_for_declarative_test.go b/tests/integration/git_helper_for_declarative_test.go index 4de9a7072d306..666f9f6fe9465 100644 --- a/tests/integration/git_helper_for_declarative_test.go +++ b/tests/integration/git_helper_for_declarative_test.go @@ -21,6 +21,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/ssh" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -61,7 +62,7 @@ func createSSHUrl(gitPath string, u *url.URL) *url.URL { func onGiteaRunTB(t testing.TB, callback func(testing.TB, *url.URL), prepare ...bool) { if len(prepare) == 0 || prepare[0] { - defer prepareTestEnv(t, 1)() + defer tests.PrepareTestEnv(t, 1)() } s := http.Server{ Handler: c, diff --git a/tests/integration/git_test.go b/tests/integration/git_test.go index 1f42bef9ca01f..c4858d56faa7f 100644 --- a/tests/integration/git_test.go +++ b/tests/integration/git_test.go @@ -28,6 +28,7 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -50,7 +51,7 @@ func testGit(t *testing.T, u *url.URL) { forkedUserCtx := NewAPITestContext(t, "user4", "repo1") t.Run("HTTP", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() ensureAnonymousClone(t, u) httpContext := baseAPITestContext httpContext.Reponame = "repo-tmp-17" @@ -86,7 +87,7 @@ func testGit(t *testing.T, u *url.URL) { t.Run("AutoMerge", doAutoPRMerge(&httpContext, dstPath)) t.Run("CreatePRAndSetManuallyMerged", doCreatePRAndSetManuallyMerged(httpContext, httpContext, dstPath, "master", "test-manually-merge")) t.Run("MergeFork", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("CreatePRAndMerge", doMergeFork(httpContext, forkedUserCtx, "master", httpContext.Username+":master")) rawTest(t, &forkedUserCtx, little, big, littleLFS, bigLFS) mediaTest(t, &forkedUserCtx, little, big, littleLFS, bigLFS) @@ -95,7 +96,7 @@ func testGit(t *testing.T, u *url.URL) { t.Run("PushCreate", doPushCreate(httpContext, u)) }) t.Run("SSH", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() sshContext := baseAPITestContext sshContext.Reponame = "repo-tmp-18" keyname := "my-testing-key" @@ -127,7 +128,7 @@ func testGit(t *testing.T, u *url.URL) { t.Run("CreateAgitFlowPull", doCreateAgitFlowPull(dstPath, &sshContext, "master", "test/head2")) t.Run("BranchProtectMerge", doBranchProtectPRMerge(&sshContext, dstPath)) t.Run("MergeFork", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("CreatePRAndMerge", doMergeFork(sshContext, forkedUserCtx, "master", sshContext.Username+":master")) rawTest(t, &forkedUserCtx, little, big, littleLFS, bigLFS) mediaTest(t, &forkedUserCtx, little, big, littleLFS, bigLFS) @@ -147,7 +148,7 @@ func ensureAnonymousClone(t *testing.T, u *url.URL) { func standardCommitAndPushTest(t *testing.T, dstPath string) (little, big string) { t.Run("Standard", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() little, big = commitAndPushTest(t, dstPath, "data-file-") }) return little, big @@ -155,7 +156,7 @@ func standardCommitAndPushTest(t *testing.T, dstPath string) (little, big string func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS string) { t.Run("LFS", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -187,7 +188,7 @@ func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS strin littleLFS, bigLFS = commitAndPushTest(t, dstPath, prefix) t.Run("Locks", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() lockTest(t, dstPath) }) }) @@ -196,9 +197,9 @@ func lfsCommitAndPushTest(t *testing.T, dstPath string) (littleLFS, bigLFS strin func commitAndPushTest(t *testing.T, dstPath, prefix string) (little, big string) { t.Run("PushCommit", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("Little", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() little = doCommitAndPush(t, littleSize, dstPath, prefix) }) t.Run("Big", func(t *testing.T) { @@ -206,7 +207,7 @@ func commitAndPushTest(t *testing.T, dstPath, prefix string) (little, big string t.Skip("Skipping test in short mode.") return } - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() big = doCommitAndPush(t, bigSize, dstPath, prefix) }) }) @@ -215,7 +216,7 @@ func commitAndPushTest(t *testing.T, dstPath, prefix string) (little, big string func rawTest(t *testing.T, ctx *APITestContext, little, big, littleLFS, bigLFS string) { t.Run("Raw", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() username := ctx.Username reponame := ctx.Reponame @@ -256,7 +257,7 @@ func rawTest(t *testing.T, ctx *APITestContext, little, big, littleLFS, bigLFS s func mediaTest(t *testing.T, ctx *APITestContext, little, big, littleLFS, bigLFS string) { t.Run("Media", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() username := ctx.Username reponame := ctx.Reponame @@ -371,7 +372,7 @@ func generateCommitWithNewData(size int, repoPath, email, fullName, prefix strin func doBranchProtectPRMerge(baseCtx *APITestContext, dstPath string) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() t.Run("CreateBranchProtected", doGitCreateBranch(dstPath, "protected")) t.Run("PushProtectedBranch", doGitPushTestRepository(dstPath, "origin", "protected")) @@ -461,7 +462,7 @@ func doProtectBranch(ctx APITestContext, branch, userToWhitelist, unprotectedFil func doMergeFork(ctx, baseCtx APITestContext, baseBranch, headBranch string) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() var pr api.PullRequest var err error @@ -509,7 +510,7 @@ func doMergeFork(ctx, baseCtx APITestContext, baseBranch, headBranch string) fun func doCreatePRAndSetManuallyMerged(ctx, baseCtx APITestContext, dstPath, baseBranch, headBranch string) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() var ( pr api.PullRequest err error @@ -561,7 +562,7 @@ func doEnsureDiffNoChange(ctx APITestContext, pr api.PullRequest, diffHash strin func doPushCreate(ctx APITestContext, u *url.URL) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() // create a context for a currently non-existent repository ctx.Reponame = fmt.Sprintf("repo-tmp-push-create-%s", u.Scheme) @@ -619,7 +620,7 @@ func doBranchDelete(ctx APITestContext, owner, repo, branch string) func(*testin func doAutoPRMerge(baseCtx *APITestContext, dstPath string) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() ctx := NewAPITestContext(t, baseCtx.Username, baseCtx.Reponame) @@ -701,7 +702,7 @@ func doAutoPRMerge(baseCtx *APITestContext, dstPath string) func(t *testing.T) { func doCreateAgitFlowPull(dstPath string, ctx *APITestContext, baseBranch, headBranch string) func(t *testing.T) { return func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() // skip this test if git version is low if git.CheckGitVersionAtLeast("2.29") != nil { diff --git a/tests/integration/goget_test.go b/tests/integration/goget_test.go index c0c7276b80544..c969f4aff10c9 100644 --- a/tests/integration/goget_test.go +++ b/tests/integration/goget_test.go @@ -10,12 +10,13 @@ import ( "testing" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestGoGet(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/blah/glah/plah?go-get=1") resp := MakeRequest(t, req, http.StatusOK) diff --git a/tests/integration/gpg_git_test.go b/tests/integration/gpg_git_test.go index b40b2001b3472..35e15c261c32f 100644 --- a/tests/integration/gpg_git_test.go +++ b/tests/integration/gpg_git_test.go @@ -17,6 +17,7 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" "golang.org/x/crypto/openpgp" @@ -24,7 +25,7 @@ import ( ) func TestGPGGit(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() username := "user2" // OK Set a new GPG home @@ -71,7 +72,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("Unsigned-Initial", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") t.Run("CreateRepository", doAPICreateRepository(testCtx, false)) t.Run("CheckMasterBranchUnsigned", doAPIGetBranch(testCtx, "master", func(t *testing.T, branch api.Branch) { @@ -95,7 +96,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("Unsigned-Initial-CRUD-ParentSigned", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") t.Run("CreateCRUDFile-ParentSigned", crudActionCreateFile( t, testCtx, user, "master", "parentsigned", "signed-parent.txt", func(t *testing.T, response api.FileResponse) { @@ -112,7 +113,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("Unsigned-Initial-CRUD-Never", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") t.Run("CreateCRUDFile-Never", crudActionCreateFile( t, testCtx, user, "parentsigned", "parentsigned-never", "unsigned-never2.txt", func(t *testing.T, response api.FileResponse) { @@ -125,7 +126,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("Unsigned-Initial-CRUD-Always", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") t.Run("CreateCRUDFile-Always", crudActionCreateFile( t, testCtx, user, "master", "always", "signed-always.txt", func(t *testing.T, response api.FileResponse) { @@ -162,7 +163,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("Unsigned-Initial-CRUD-ParentSigned", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") t.Run("CreateCRUDFile-Always-ParentSigned", crudActionCreateFile( t, testCtx, user, "always", "always-parentsigned", "signed-always-parentsigned.txt", func(t *testing.T, response api.FileResponse) { @@ -185,7 +186,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("AlwaysSign-Initial", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-always") t.Run("CreateRepository", doAPICreateRepository(testCtx, false)) t.Run("CheckMasterBranchSigned", doAPIGetBranch(testCtx, "master", func(t *testing.T, branch api.Branch) { @@ -213,7 +214,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("AlwaysSign-Initial-CRUD-Never", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-always-never") t.Run("CreateRepository", doAPICreateRepository(testCtx, false)) t.Run("CreateCRUDFile-Never", crudActionCreateFile( @@ -226,7 +227,7 @@ func TestGPGGit(t *testing.T) { onGiteaRun(t, func(t *testing.T, u *url.URL) { u.Path = baseAPITestContext.GitPath() t.Run("AlwaysSign-Initial-CRUD-ParentSigned-On-Always", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-always-parent") t.Run("CreateRepository", doAPICreateRepository(testCtx, false)) t.Run("CreateCRUDFile-ParentSigned", crudActionCreateFile( @@ -245,7 +246,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("AlwaysSign-Initial-CRUD-Always", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-always-always") t.Run("CreateRepository", doAPICreateRepository(testCtx, false)) t.Run("CreateCRUDFile-Always", crudActionCreateFile( @@ -265,7 +266,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("UnsignedMerging", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") var err error t.Run("CreatePullRequest", func(t *testing.T) { @@ -286,7 +287,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("BaseSignedMerging", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") var err error t.Run("CreatePullRequest", func(t *testing.T) { @@ -307,7 +308,7 @@ func TestGPGGit(t *testing.T) { u.Path = baseAPITestContext.GitPath() t.Run("CommitsSignedMerging", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() testCtx := NewAPITestContext(t, username, "initial-unsigned") var err error t.Run("CreatePullRequest", func(t *testing.T) { diff --git a/tests/integration/integration_test.go b/tests/integration/integration_test.go index 7f0437b8f1a9a..1eed962a58dc4 100644 --- a/tests/integration/integration_test.go +++ b/tests/integration/integration_test.go @@ -7,7 +7,6 @@ package integration import ( "bytes" "context" - "database/sql" "fmt" "hash" "hash/fnv" @@ -17,26 +16,20 @@ import ( "net/http/httptest" "net/url" "os" - "path" "path/filepath" - "runtime" "strings" "testing" "time" "code.gitea.io/gitea/models/unittest" - "code.gitea.io/gitea/modules/base" - "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/graceful" "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/queue" - repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/setting" - "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/web" "code.gitea.io/gitea/routers" + "code.gitea.io/gitea/tests" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" @@ -88,27 +81,27 @@ func TestMain(m *testing.M) { graceful.InitManager(managerCtx) defer cancel() - initIntegrationTest() + tests.InitTest() c = routers.NormalRoutes() // integration test settings... if setting.Cfg != nil { testingCfg := setting.Cfg.Section("integration-tests") - slowTest = testingCfg.Key("SLOW_TEST").MustDuration(slowTest) - slowFlush = testingCfg.Key("SLOW_FLUSH").MustDuration(slowFlush) + tests.SlowTest = testingCfg.Key("SLOW_TEST").MustDuration(tests.SlowTest) + tests.SlowFlush = testingCfg.Key("SLOW_FLUSH").MustDuration(tests.SlowFlush) } if os.Getenv("GITEA_SLOW_TEST_TIME") != "" { duration, err := time.ParseDuration(os.Getenv("GITEA_SLOW_TEST_TIME")) if err == nil { - slowTest = duration + tests.SlowTest = duration } } if os.Getenv("GITEA_SLOW_FLUSH_TIME") != "" { duration, err := time.ParseDuration(os.Getenv("GITEA_SLOW_FLUSH_TIME")) if err == nil { - slowFlush = duration + tests.SlowFlush = duration } } @@ -130,7 +123,7 @@ func TestMain(m *testing.M) { } exitCode := m.Run() - writerCloser.Reset() + tests.WriterCloser.Reset() if err = util.RemoveAll(setting.Indexer.IssuePath); err != nil { fmt.Printf("util.RemoveAll: %v\n", err) @@ -144,166 +137,6 @@ func TestMain(m *testing.M) { os.Exit(exitCode) } -func initIntegrationTest() { - giteaRoot := base.SetupGiteaRoot() - if giteaRoot == "" { - fmt.Println("Environment variable $GITEA_ROOT not set") - os.Exit(1) - } - giteaBinary := "gitea" - if runtime.GOOS == "windows" { - giteaBinary += ".exe" - } - setting.AppPath = path.Join(giteaRoot, giteaBinary) - if _, err := os.Stat(setting.AppPath); err != nil { - fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) - os.Exit(1) - } - - giteaConf := os.Getenv("GITEA_CONF") - if giteaConf == "" { - fmt.Println("Environment variable $GITEA_CONF not set") - os.Exit(1) - } else if !path.IsAbs(giteaConf) { - setting.CustomConf = path.Join(giteaRoot, giteaConf) - } else { - setting.CustomConf = giteaConf - } - - setting.SetCustomPathAndConf("", "", "") - setting.LoadForTest() - setting.Repository.DefaultBranch = "master" // many test code still assume that default branch is called "master" - _ = util.RemoveAll(repo_module.LocalCopyPath()) - - if err := git.InitOnceWithSync(context.Background()); err != nil { - log.Fatal("git.InitOnceWithSync: %v", err) - } - git.CheckLFSVersion() - - setting.InitDBConfig() - if err := storage.Init(); err != nil { - fmt.Printf("Init storage failed: %v", err) - os.Exit(1) - } - - switch { - case setting.Database.UseMySQL: - db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", - setting.Database.User, setting.Database.Passwd, setting.Database.Host)) - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", setting.Database.Name)); err != nil { - log.Fatal("db.Exec: %v", err) - } - case setting.Database.UsePostgreSQL: - var db *sql.DB - var err error - if setting.Database.Host[0] == '/' { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) - } else { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) - } - - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - dbrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", setting.Database.Name)) - if err != nil { - log.Fatal("db.Query: %v", err) - } - defer dbrows.Close() - - if !dbrows.Next() { - if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", setting.Database.Name)); err != nil { - log.Fatal("db.Exec: CREATE DATABASE: %v", err) - } - } - // Check if we need to setup a specific schema - if len(setting.Database.Schema) == 0 { - break - } - db.Close() - - if setting.Database.Host[0] == '/' { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) - } else { - db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", - setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) - } - // This is a different db object; requires a different Close() - defer db.Close() - if err != nil { - log.Fatal("sql.Open: %v", err) - } - schrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM information_schema.schemata WHERE schema_name = '%s'", setting.Database.Schema)) - if err != nil { - log.Fatal("db.Query: %v", err) - } - defer schrows.Close() - - if !schrows.Next() { - // Create and setup a DB schema - if _, err = db.Exec(fmt.Sprintf("CREATE SCHEMA %s", setting.Database.Schema)); err != nil { - log.Fatal("db.Exec: CREATE SCHEMA: %v", err) - } - } - - case setting.Database.UseMSSQL: - host, port := setting.ParseMSSQLHostPort(setting.Database.Host) - db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", - host, port, "master", setting.Database.User, setting.Database.Passwd)) - if err != nil { - log.Fatal("sql.Open: %v", err) - } - if _, err := db.Exec(fmt.Sprintf("If(db_id(N'%s') IS NULL) BEGIN CREATE DATABASE %s; END;", setting.Database.Name, setting.Database.Name)); err != nil { - log.Fatal("db.Exec: %v", err) - } - defer db.Close() - } - - routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) -} - -func prepareTestEnv(t testing.TB, skip ...int) func() { - t.Helper() - ourSkip := 2 - if len(skip) > 0 { - ourSkip += skip[0] - } - deferFn := PrintCurrentTest(t, ourSkip) - assert.NoError(t, unittest.LoadFixtures()) - assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) - assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again - ownerDirs, err := os.ReadDir(setting.RepoRootPath) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, ownerDir := range ownerDirs { - if !ownerDir.Type().IsDir() { - continue - } - repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, repoDir := range repoDirs { - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) - } - } - - return deferFn -} - type TestSession struct { jar http.CookieJar } @@ -572,33 +405,3 @@ func GetCSRF(t testing.TB, session *TestSession, urlStr string) string { doc := NewHTMLParser(t, resp.Body) return doc.GetCSRF() } - -// resetFixtures flushes queues, reloads fixtures and resets test repositories within a single test. -// Most tests should call defer prepareTestEnv(t)() (or have onGiteaRun do that for them) but sometimes -// within a single test this is required -func resetFixtures(t *testing.T) { - assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1)) - assert.NoError(t, unittest.LoadFixtures()) - assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) - assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again - ownerDirs, err := os.ReadDir(setting.RepoRootPath) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, ownerDir := range ownerDirs { - if !ownerDir.Type().IsDir() { - continue - } - repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) - if err != nil { - assert.NoError(t, err, "unable to read the new repo root: %v\n", err) - } - for _, repoDir := range repoDirs { - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) - _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) - } - } -} diff --git a/tests/integration/issue_test.go b/tests/integration/issue_test.go index 37a45fd00ca30..566f21ede18d7 100644 --- a/tests/integration/issue_test.go +++ b/tests/integration/issue_test.go @@ -24,6 +24,7 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" @@ -57,14 +58,14 @@ func assertMatch(t testing.TB, issue *issues_model.Issue, keyword string) { } func TestNoLoginViewIssues(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1/issues") MakeRequest(t, req, http.StatusOK) } func TestViewIssuesSortByType(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1}).(*user_model.User) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -92,7 +93,7 @@ func TestViewIssuesSortByType(t *testing.T) { } func TestViewIssuesKeyword(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ @@ -117,7 +118,7 @@ func TestViewIssuesKeyword(t *testing.T) { } func TestNoLoginViewIssue(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1/issues/1") MakeRequest(t, req, http.StatusOK) @@ -184,13 +185,13 @@ func testIssueAddComment(t *testing.T, session *TestSession, issueURL, content, } func TestNewIssue(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testNewIssue(t, session, "user2", "repo1", "Title", "Description") } func TestIssueCommentClose(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") issueURL := testNewIssue(t, session, "user2", "repo1", "Title", "Description") testIssueAddComment(t, session, issueURL, "Test comment 1", "") @@ -206,7 +207,7 @@ func TestIssueCommentClose(t *testing.T) { } func TestIssueReaction(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") issueURL := testNewIssue(t, session, "user2", "repo1", "Title", "Description") @@ -232,7 +233,7 @@ func TestIssueReaction(t *testing.T) { } func TestIssueCrossReference(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // Issue that will be referenced _, issueBase := testIssueWithBean(t, "user2", 1, "Title", "Description") @@ -332,7 +333,7 @@ func testIssueChangeInfo(t *testing.T, user, issueURL, info, value string) { } func TestIssueRedirect(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") // Test external tracker where style not set (shall default numeric) @@ -352,7 +353,7 @@ func TestIssueRedirect(t *testing.T) { } func TestSearchIssues(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -447,7 +448,7 @@ func TestSearchIssues(t *testing.T) { } func TestSearchIssuesWithLabels(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() token := getUserToken(t, "user1") @@ -510,7 +511,7 @@ func TestSearchIssuesWithLabels(t *testing.T) { } func TestGetIssueInfo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issue := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 10}).(*issues_model.Issue) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issue.RepoID}).(*repo_model.Repository) @@ -531,7 +532,7 @@ func TestGetIssueInfo(t *testing.T) { } func TestUpdateIssueDeadline(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() issueBefore := unittest.AssertExistsAndLoadBean(t, &issues_model.Issue{ID: 10}).(*issues_model.Issue) repoBefore := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: issueBefore.RepoID}).(*repo_model.Repository) diff --git a/tests/integration/lfs_getobject_test.go b/tests/integration/lfs_getobject_test.go index 98050990abd0b..0ed0129e285c3 100644 --- a/tests/integration/lfs_getobject_test.go +++ b/tests/integration/lfs_getobject_test.go @@ -19,6 +19,7 @@ import ( "code.gitea.io/gitea/modules/lfs" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers/web" + "code.gitea.io/gitea/tests" gzipp "github.com/klauspost/compress/gzip" "github.com/stretchr/testify/assert" @@ -82,7 +83,7 @@ func checkResponseTestContentEncoding(t *testing.T, content *[]byte, resp *httpt } func TestGetLFSSmall(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -95,7 +96,7 @@ func TestGetLFSSmall(t *testing.T) { } func TestGetLFSLarge(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -111,7 +112,7 @@ func TestGetLFSLarge(t *testing.T) { } func TestGetLFSGzip(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -132,7 +133,7 @@ func TestGetLFSGzip(t *testing.T) { } func TestGetLFSZip(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -155,7 +156,7 @@ func TestGetLFSZip(t *testing.T) { } func TestGetLFSRangeNo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() @@ -168,7 +169,7 @@ func TestGetLFSRangeNo(t *testing.T) { } func TestGetLFSRange(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() git.CheckLFSVersion() if !setting.LFS.StartServer { t.Skip() diff --git a/tests/integration/lfs_local_endpoint_test.go b/tests/integration/lfs_local_endpoint_test.go index 4c0d75521d549..88c08c63dbeec 100644 --- a/tests/integration/lfs_local_endpoint_test.go +++ b/tests/integration/lfs_local_endpoint_test.go @@ -12,6 +12,7 @@ import ( "testing" "code.gitea.io/gitea/modules/lfs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -22,7 +23,7 @@ func str2url(raw string) *url.URL { } func TestDetermineLocalEndpoint(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() root, _ := os.MkdirTemp("", "lfs_test") defer os.RemoveAll(root) diff --git a/tests/integration/links_test.go b/tests/integration/links_test.go index 9e6295c4298ff..4eb29f0cee7a2 100644 --- a/tests/integration/links_test.go +++ b/tests/integration/links_test.go @@ -13,12 +13,13 @@ import ( "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestLinksNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() links := []string{ "/explore/repos", @@ -47,7 +48,7 @@ func TestLinksNoLogin(t *testing.T) { } func TestRedirectsNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() redirects := map[string]string{ "/user2/repo1/commits/master": "/user2/repo1/commits/branch/master", @@ -65,7 +66,7 @@ func TestRedirectsNoLogin(t *testing.T) { } func TestNoLoginNotExist(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() links := []string{ "/user5/repo4/projects", @@ -169,7 +170,7 @@ func testLinksAsUser(userName string, t *testing.T) { } func TestLinksLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testLinksAsUser("user2", t) } diff --git a/tests/integration/migration-test/migration_test.go b/tests/integration/migration-test/migration_test.go index 2e55324f43fbd..10d5da7f498ff 100644 --- a/tests/integration/migration-test/migration_test.go +++ b/tests/integration/migration-test/migration_test.go @@ -26,7 +26,7 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "code.gitea.io/gitea/tests/integration" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" "xorm.io/xorm" @@ -35,21 +35,21 @@ import ( var currentEngine *xorm.Engine func initMigrationTest(t *testing.T) func() { - deferFn := integration.PrintCurrentTest(t, 2) + deferFn := tests.PrintCurrentTest(t, 2) giteaRoot := base.SetupGiteaRoot() if giteaRoot == "" { - integration.Printf("Environment variable $GITEA_ROOT not set\n") + tests.Printf("Environment variable $GITEA_ROOT not set\n") os.Exit(1) } setting.AppPath = path.Join(giteaRoot, "gitea") if _, err := os.Stat(setting.AppPath); err != nil { - integration.Printf("Could not find gitea binary at %s\n", setting.AppPath) + tests.Printf("Could not find gitea binary at %s\n", setting.AppPath) os.Exit(1) } giteaConf := os.Getenv("GITEA_CONF") if giteaConf == "" { - integration.Printf("Environment variable $GITEA_CONF not set\n") + tests.Printf("Environment variable $GITEA_CONF not set\n") os.Exit(1) } else if !path.IsAbs(giteaConf) { setting.CustomConf = path.Join(giteaRoot, giteaConf) @@ -145,7 +145,7 @@ func restoreOldDB(t *testing.T, version string) bool { data, err := readSQLFromFile(version) assert.NoError(t, err) if len(data) == 0 { - integration.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version) + tests.Printf("No db found to restore for %s version: %s\n", setting.Database.Type, version) return false } @@ -287,8 +287,8 @@ func wrappedMigrate(x *xorm.Engine) error { } func doMigrationTest(t *testing.T, version string) { - defer integration.PrintCurrentTest(t)() - integration.Printf("Performing migration test for %s version: %s\n", setting.Database.Type, version) + defer tests.PrintCurrentTest(t)() + tests.Printf("Performing migration test for %s version: %s\n", setting.Database.Type, version) if !restoreOldDB(t, version) { return } @@ -326,11 +326,11 @@ func TestMigrations(t *testing.T) { assert.NoError(t, err) if len(versions) == 0 { - integration.Printf("No old database versions available to migration test for %s\n", dialect) + tests.Printf("No old database versions available to migration test for %s\n", dialect) return } - integration.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) + tests.Printf("Preparing to test %d migrations for %s\n", len(versions), dialect) for _, version := range versions { t.Run(fmt.Sprintf("Migrate-%s-%s", dialect, version), func(t *testing.T) { doMigrationTest(t, version) diff --git a/tests/integration/mirror_pull_test.go b/tests/integration/mirror_pull_test.go index b1b1a27511e61..dd89abc008207 100644 --- a/tests/integration/mirror_pull_test.go +++ b/tests/integration/mirror_pull_test.go @@ -17,12 +17,13 @@ import ( "code.gitea.io/gitea/modules/repository" mirror_service "code.gitea.io/gitea/services/mirror" release_service "code.gitea.io/gitea/services/release" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestMirrorPull(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) diff --git a/tests/integration/mirror_push_test.go b/tests/integration/mirror_push_test.go index f1e66be2bd249..5c150f4d1a0ba 100644 --- a/tests/integration/mirror_push_test.go +++ b/tests/integration/mirror_push_test.go @@ -21,6 +21,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/services/migrations" mirror_service "code.gitea.io/gitea/services/mirror" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -30,7 +31,7 @@ func TestMirrorPush(t *testing.T) { } func testMirrorPush(t *testing.T, u *url.URL) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.Migrations.AllowLocalNetworks = true assert.NoError(t, migrations.Init()) diff --git a/tests/integration/nonascii_branches_test.go b/tests/integration/nonascii_branches_test.go index 30f0b3fed15cd..ae69506f1b563 100644 --- a/tests/integration/nonascii_branches_test.go +++ b/tests/integration/nonascii_branches_test.go @@ -10,6 +10,7 @@ import ( "path" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -197,7 +198,7 @@ func TestNonasciiBranches(t *testing.T) { }, } - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := "user2" repo := "utf8" diff --git a/tests/integration/oauth_test.go b/tests/integration/oauth_test.go index dab63e87d5cf2..7fa26c81474b5 100644 --- a/tests/integration/oauth_test.go +++ b/tests/integration/oauth_test.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -19,20 +20,20 @@ import ( const defaultAuthorize = "/login/oauth/authorize?client_id=da7da3ba-9a13-4167-856f-3899de0b0138&redirect_uri=a&response_type=code&state=thestate" func TestNoClientID(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/login/oauth/authorize") ctx := loginUser(t, "user2") ctx.MakeRequest(t, req, http.StatusBadRequest) } func TestLoginRedirect(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/login/oauth/authorize") assert.Contains(t, MakeRequest(t, req, http.StatusSeeOther).Body.String(), "/user/login") } func TestShowAuthorize(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", defaultAuthorize) ctx := loginUser(t, "user4") resp := ctx.MakeRequest(t, req, http.StatusOK) @@ -43,7 +44,7 @@ func TestShowAuthorize(t *testing.T) { } func TestRedirectWithExistingGrant(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", defaultAuthorize) ctx := loginUser(t, "user1") resp := ctx.MakeRequest(t, req, http.StatusSeeOther) @@ -54,7 +55,7 @@ func TestRedirectWithExistingGrant(t *testing.T) { } func TestAccessTokenExchange(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithValues(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", "client_id": "da7da3ba-9a13-4167-856f-3899de0b0138", @@ -78,7 +79,7 @@ func TestAccessTokenExchange(t *testing.T) { } func TestAccessTokenExchangeWithoutPKCE(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithJSON(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", "client_id": "da7da3ba-9a13-4167-856f-3899de0b0138", @@ -102,7 +103,7 @@ func TestAccessTokenExchangeWithoutPKCE(t *testing.T) { } func TestAccessTokenExchangeJSON(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithJSON(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", "client_id": "da7da3ba-9a13-4167-856f-3899de0b0138", @@ -114,7 +115,7 @@ func TestAccessTokenExchangeJSON(t *testing.T) { } func TestAccessTokenExchangeWithInvalidCredentials(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // invalid client id req := NewRequestWithValues(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", @@ -168,7 +169,7 @@ func TestAccessTokenExchangeWithInvalidCredentials(t *testing.T) { } func TestAccessTokenExchangeWithBasicAuth(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithValues(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", "redirect_uri": "a", @@ -210,7 +211,7 @@ func TestAccessTokenExchangeWithBasicAuth(t *testing.T) { } func TestRefreshTokenInvalidation(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequestWithValues(t, "POST", "/login/oauth/access_token", map[string]string{ "grant_type": "authorization_code", "client_id": "da7da3ba-9a13-4167-856f-3899de0b0138", diff --git a/tests/integration/org_test.go b/tests/integration/org_test.go index d1f9ed1d85756..d21a46efca42a 100644 --- a/tests/integration/org_test.go +++ b/tests/integration/org_test.go @@ -13,12 +13,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestOrgRepos(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() var ( users = []string{"user1", "user2"} @@ -48,7 +49,7 @@ func TestOrgRepos(t *testing.T) { } func TestLimitedOrg(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // not logged in user req := NewRequest(t, "GET", "/limited_org") @@ -78,7 +79,7 @@ func TestLimitedOrg(t *testing.T) { } func TestPrivateOrg(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // not logged in user req := NewRequest(t, "GET", "/privated_org") @@ -117,7 +118,7 @@ func TestPrivateOrg(t *testing.T) { } func TestOrgRestrictedUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // privated_org is a private org who has id 23 orgName := "privated_org" @@ -177,7 +178,7 @@ func TestOrgRestrictedUser(t *testing.T) { } func TestTeamSearch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 3}).(*user_model.User) diff --git a/tests/integration/privateactivity_test.go b/tests/integration/privateactivity_test.go index a02951ea28f7c..81f72a84a8c5c 100644 --- a/tests/integration/privateactivity_test.go +++ b/tests/integration/privateactivity_test.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -138,7 +139,7 @@ func testPrivateActivityHelperHasHeatmapContentFromSession(t *testing.T, session // check activity visibility if the visibility is enabled func TestPrivateActivityNoVisibleForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) visible := testPrivateActivityHelperHasVisibleActivitiesFromPublic(t) @@ -147,7 +148,7 @@ func TestPrivateActivityNoVisibleForPublic(t *testing.T) { } func TestPrivateActivityNoVisibleForUserItself(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestUser) @@ -157,7 +158,7 @@ func TestPrivateActivityNoVisibleForUserItself(t *testing.T) { } func TestPrivateActivityNoVisibleForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestOtherUser) @@ -167,7 +168,7 @@ func TestPrivateActivityNoVisibleForOtherUser(t *testing.T) { } func TestPrivateActivityNoVisibleForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestAdmin) @@ -179,7 +180,7 @@ func TestPrivateActivityNoVisibleForAdmin(t *testing.T) { // check activity visibility if the visibility is disabled func TestPrivateActivityYesInvisibleForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -189,7 +190,7 @@ func TestPrivateActivityYesInvisibleForPublic(t *testing.T) { } func TestPrivateActivityYesVisibleForUserItself(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -200,7 +201,7 @@ func TestPrivateActivityYesVisibleForUserItself(t *testing.T) { } func TestPrivateActivityYesInvisibleForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -211,7 +212,7 @@ func TestPrivateActivityYesInvisibleForOtherUser(t *testing.T) { } func TestPrivateActivityYesVisibleForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -224,7 +225,7 @@ func TestPrivateActivityYesVisibleForAdmin(t *testing.T) { // check heatmap visibility if the visibility is enabled func TestPrivateActivityNoHeatmapVisibleForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) visible := testPrivateActivityHelperHasVisibleHeatmapFromPublic(t) @@ -233,7 +234,7 @@ func TestPrivateActivityNoHeatmapVisibleForPublic(t *testing.T) { } func TestPrivateActivityNoHeatmapVisibleForUserItselfAtProfile(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestUser) @@ -243,7 +244,7 @@ func TestPrivateActivityNoHeatmapVisibleForUserItselfAtProfile(t *testing.T) { } func TestPrivateActivityNoHeatmapVisibleForUserItselfAtDashboard(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestUser) @@ -253,7 +254,7 @@ func TestPrivateActivityNoHeatmapVisibleForUserItselfAtDashboard(t *testing.T) { } func TestPrivateActivityNoHeatmapVisibleForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestOtherUser) @@ -263,7 +264,7 @@ func TestPrivateActivityNoHeatmapVisibleForOtherUser(t *testing.T) { } func TestPrivateActivityNoHeatmapVisibleForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestAdmin) @@ -275,7 +276,7 @@ func TestPrivateActivityNoHeatmapVisibleForAdmin(t *testing.T) { // check heatmap visibility if the visibility is disabled func TestPrivateActivityYesHeatmapInvisibleForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -285,7 +286,7 @@ func TestPrivateActivityYesHeatmapInvisibleForPublic(t *testing.T) { } func TestPrivateActivityYesHeatmapVisibleForUserItselfAtProfile(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -296,7 +297,7 @@ func TestPrivateActivityYesHeatmapVisibleForUserItselfAtProfile(t *testing.T) { } func TestPrivateActivityYesHeatmapVisibleForUserItselfAtDashboard(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -307,7 +308,7 @@ func TestPrivateActivityYesHeatmapVisibleForUserItselfAtDashboard(t *testing.T) } func TestPrivateActivityYesHeatmapInvisibleForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -318,7 +319,7 @@ func TestPrivateActivityYesHeatmapInvisibleForOtherUser(t *testing.T) { } func TestPrivateActivityYesHeatmapVisibleForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -331,7 +332,7 @@ func TestPrivateActivityYesHeatmapVisibleForAdmin(t *testing.T) { // check heatmap api provides content if the visibility is enabled func TestPrivateActivityNoHeatmapHasContentForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) hasContent := testPrivateActivityHelperHasHeatmapContentFromPublic(t) @@ -340,7 +341,7 @@ func TestPrivateActivityNoHeatmapHasContentForPublic(t *testing.T) { } func TestPrivateActivityNoHeatmapHasContentForUserItself(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestUser) @@ -350,7 +351,7 @@ func TestPrivateActivityNoHeatmapHasContentForUserItself(t *testing.T) { } func TestPrivateActivityNoHeatmapHasContentForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestOtherUser) @@ -360,7 +361,7 @@ func TestPrivateActivityNoHeatmapHasContentForOtherUser(t *testing.T) { } func TestPrivateActivityNoHeatmapHasContentForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) session := loginUser(t, privateActivityTestAdmin) @@ -373,7 +374,7 @@ func TestPrivateActivityNoHeatmapHasContentForAdmin(t *testing.T) { // this should be equal to the hidden heatmap at the UI func TestPrivateActivityYesHeatmapHasNoContentForPublic(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -383,7 +384,7 @@ func TestPrivateActivityYesHeatmapHasNoContentForPublic(t *testing.T) { } func TestPrivateActivityYesHeatmapHasNoContentForUserItself(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -394,7 +395,7 @@ func TestPrivateActivityYesHeatmapHasNoContentForUserItself(t *testing.T) { } func TestPrivateActivityYesHeatmapHasNoContentForOtherUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) @@ -405,7 +406,7 @@ func TestPrivateActivityYesHeatmapHasNoContentForOtherUser(t *testing.T) { } func TestPrivateActivityYesHeatmapHasNoContentForAdmin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testPrivateActivityDoSomethingForActionEntries(t) testPrivateActivityHelperEnablePrivateActivity(t) diff --git a/tests/integration/pull_compare_test.go b/tests/integration/pull_compare_test.go index 9be81f52ea5fb..7934b6e77c05a 100644 --- a/tests/integration/pull_compare_test.go +++ b/tests/integration/pull_compare_test.go @@ -8,11 +8,12 @@ import ( "net/http" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestPullCompare(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequest(t, "GET", "/user2/repo1/pulls") diff --git a/tests/integration/pull_create_test.go b/tests/integration/pull_create_test.go index 953be2350d0c6..24c73ab4e9c9b 100644 --- a/tests/integration/pull_create_test.go +++ b/tests/integration/pull_create_test.go @@ -12,6 +12,7 @@ import ( "strings" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -135,7 +136,7 @@ func testDeleteRepository(t *testing.T, session *TestSession, ownerName, repoNam func TestPullBranchDelete(t *testing.T) { onGiteaRun(t, func(t *testing.T, u *url.URL) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") testRepoFork(t, session, "user2", "repo1", "user1", "repo1") diff --git a/tests/integration/pull_review_test.go b/tests/integration/pull_review_test.go index 67d3bf78329b2..d713c0f8589b8 100644 --- a/tests/integration/pull_review_test.go +++ b/tests/integration/pull_review_test.go @@ -6,10 +6,12 @@ package integration import ( "net/http" "testing" + + "code.gitea.io/gitea/tests" ) func TestPullView_ReviewerMissed(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") req := NewRequest(t, "GET", "/pulls") diff --git a/tests/integration/release_test.go b/tests/integration/release_test.go index a4cbe1d2f6dc7..26044ee664335 100644 --- a/tests/integration/release_test.go +++ b/tests/integration/release_test.go @@ -15,6 +15,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" @@ -63,7 +64,7 @@ func checkLatestReleaseAndCount(t *testing.T, session *TestSession, repoURL, ver } func TestViewReleases(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequest(t, "GET", "/user2/repo1/releases") @@ -74,14 +75,14 @@ func TestViewReleases(t *testing.T) { } func TestViewReleasesNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1/releases") MakeRequest(t, req, http.StatusOK) } func TestCreateRelease(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, false) @@ -90,7 +91,7 @@ func TestCreateRelease(t *testing.T) { } func TestCreateReleasePreRelease(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", true, false) @@ -99,7 +100,7 @@ func TestCreateReleasePreRelease(t *testing.T) { } func TestCreateReleaseDraft(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") createNewRelease(t, session, "/user2/repo1", "v0.0.1", "v0.0.1", false, true) @@ -108,7 +109,7 @@ func TestCreateReleaseDraft(t *testing.T) { } func TestCreateReleasePaging(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() oldAPIDefaultNum := setting.API.DefaultPagingNum defer func() { @@ -132,7 +133,7 @@ func TestCreateReleasePaging(t *testing.T) { } func TestViewReleaseListNoLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -158,7 +159,7 @@ func TestViewReleaseListNoLogin(t *testing.T) { } func TestViewReleaseListLogin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) @@ -189,7 +190,7 @@ func TestViewReleaseListLogin(t *testing.T) { } func TestViewTagsList(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) diff --git a/tests/integration/repo_branch_test.go b/tests/integration/repo_branch_test.go index 1c6e11f77a655..96ffa5a46e6cc 100644 --- a/tests/integration/repo_branch_test.go +++ b/tests/integration/repo_branch_test.go @@ -14,6 +14,7 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -129,7 +130,7 @@ func testCreateBranches(t *testing.T, giteaURL *url.URL) { } func TestCreateBranchInvalidCSRF(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequestWithValues(t, "POST", "user2/repo1/branches/_new/branch/master", map[string]string{ "_csrf": "fake_csrf", diff --git a/tests/integration/repo_commits_search_test.go b/tests/integration/repo_commits_search_test.go index 3439543034b31..75e692f0abdc3 100644 --- a/tests/integration/repo_commits_search_test.go +++ b/tests/integration/repo_commits_search_test.go @@ -10,6 +10,7 @@ import ( "strings" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -26,7 +27,7 @@ func testRepoCommitsSearch(t *testing.T, query, commit string) { } func TestRepoCommitsSearch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() testRepoCommitsSearch(t, "e8eabd", "") testRepoCommitsSearch(t, "38a9cb", "") testRepoCommitsSearch(t, "6e8e", "6e8eabd9a7") diff --git a/tests/integration/repo_commits_test.go b/tests/integration/repo_commits_test.go index ff3e30664771e..4b38517eadfe2 100644 --- a/tests/integration/repo_commits_test.go +++ b/tests/integration/repo_commits_test.go @@ -13,12 +13,13 @@ import ( "code.gitea.io/gitea/modules/json" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestRepoCommits(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -33,7 +34,7 @@ func TestRepoCommits(t *testing.T) { } func doTestRepoCommitWithStatus(t *testing.T, state string, classes ...string) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") diff --git a/tests/integration/repo_fork_test.go b/tests/integration/repo_fork_test.go index 4fd54611e811a..96d4177ed3322 100644 --- a/tests/integration/repo_fork_test.go +++ b/tests/integration/repo_fork_test.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -55,13 +56,13 @@ func testRepoFork(t *testing.T, session *TestSession, ownerName, repoName, forkO } func TestRepoFork(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") testRepoFork(t, session, "user2", "repo1", "user1", "repo1") } func TestRepoForkToOrg(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testRepoFork(t, session, "user2", "repo1", "user3", "repo1") diff --git a/tests/integration/repo_generate_test.go b/tests/integration/repo_generate_test.go index 90c253c8c1070..d4a33e859d0f7 100644 --- a/tests/integration/repo_generate_test.go +++ b/tests/integration/repo_generate_test.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -56,13 +57,13 @@ func testRepoGenerate(t *testing.T, session *TestSession, templateOwnerName, tem } func TestRepoGenerate(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user1") testRepoGenerate(t, session, "user27", "template1", "user1", "generated1") } func TestRepoGenerateToOrg(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testRepoGenerate(t, session, "user27", "template1", "user2", "generated2") } diff --git a/tests/integration/repo_migrate_test.go b/tests/integration/repo_migrate_test.go index 933b64951413b..c69a2642cbe31 100644 --- a/tests/integration/repo_migrate_test.go +++ b/tests/integration/repo_migrate_test.go @@ -11,6 +11,7 @@ import ( "testing" "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -39,7 +40,7 @@ func testRepoMigrate(t testing.TB, session *TestSession, cloneAddr, repoName str } func TestRepoMigrate(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testRepoMigrate(t, session, "https://github.com/go-gitea/test_repo.git", "git") } diff --git a/tests/integration/repo_search_test.go b/tests/integration/repo_search_test.go index 432cf1ee09458..b20943c22ac6a 100644 --- a/tests/integration/repo_search_test.go +++ b/tests/integration/repo_search_test.go @@ -11,6 +11,7 @@ import ( repo_model "code.gitea.io/gitea/models/repo" code_indexer "code.gitea.io/gitea/modules/indexer/code" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" @@ -26,7 +27,7 @@ func resultFilenames(t testing.TB, doc *HTMLDoc) []string { } func TestSearchRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo, err := repo_model.GetRepositoryByOwnerAndName("user2", "repo1") assert.NoError(t, err) diff --git a/tests/integration/repo_tag_test.go b/tests/integration/repo_tag_test.go index cf3bf23c324e9..471ff5756705e 100644 --- a/tests/integration/repo_tag_test.go +++ b/tests/integration/repo_tag_test.go @@ -17,18 +17,19 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/release" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestCreateNewTagProtected(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) t.Run("API", func(t *testing.T) { - defer PrintCurrentTest(t)() + defer tests.PrintCurrentTest(t)() err := release.CreateNewTag(git.DefaultContext, owner, repo, "master", "v-1", "first tag") assert.NoError(t, err) diff --git a/tests/integration/repo_test.go b/tests/integration/repo_test.go index 11b48d38c6c7c..c7a19242d7009 100644 --- a/tests/integration/repo_test.go +++ b/tests/integration/repo_test.go @@ -13,13 +13,14 @@ import ( "time" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/PuerkitoBio/goquery" "github.com/stretchr/testify/assert" ) func TestViewRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1") MakeRequest(t, req, http.StatusOK) @@ -32,7 +33,7 @@ func TestViewRepo(t *testing.T) { } func testViewRepo(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user3/repo3") session := loginUser(t, "user2") @@ -100,7 +101,7 @@ func TestViewRepo2(t *testing.T) { } func TestViewRepo3(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user3/repo3") session := loginUser(t, "user4") @@ -108,7 +109,7 @@ func TestViewRepo3(t *testing.T) { } func TestViewRepo1CloneLinkAnonymous(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2/repo1") resp := MakeRequest(t, req, http.StatusOK) @@ -122,7 +123,7 @@ func TestViewRepo1CloneLinkAnonymous(t *testing.T) { } func TestViewRepo1CloneLinkAuthorized(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -140,7 +141,7 @@ func TestViewRepo1CloneLinkAuthorized(t *testing.T) { } func TestViewRepoWithSymlinks(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") @@ -168,7 +169,7 @@ func TestViewAsRepoAdmin(t *testing.T) { "user2": true, "user4": false, } { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, user) diff --git a/tests/integration/repo_topic_test.go b/tests/integration/repo_topic_test.go index c82c3b40260a7..5ff0c8273a4c9 100644 --- a/tests/integration/repo_topic_test.go +++ b/tests/integration/repo_topic_test.go @@ -10,12 +10,13 @@ import ( "testing" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestTopicSearch(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() searchURL, _ := url.Parse("/explore/topics/search") var topics struct { TopicNames []*api.TopicResponse `json:"topics"` diff --git a/tests/integration/setting_test.go b/tests/integration/setting_test.go index bf86e3e38522b..6273545c23623 100644 --- a/tests/integration/setting_test.go +++ b/tests/integration/setting_test.go @@ -9,12 +9,13 @@ import ( "testing" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestSettingShowUserEmailExplore(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() showUserEmail := setting.UI.ShowUserEmail setting.UI.ShowUserEmail = true @@ -42,7 +43,7 @@ func TestSettingShowUserEmailExplore(t *testing.T) { } func TestSettingShowUserEmailProfile(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() showUserEmail := setting.UI.ShowUserEmail setting.UI.ShowUserEmail = true @@ -80,7 +81,7 @@ func TestSettingShowUserEmailProfile(t *testing.T) { } func TestSettingLandingPage(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() landingPage := setting.LandingPageURL diff --git a/tests/integration/signin_test.go b/tests/integration/signin_test.go index 28ce660e5a5b3..7e38f8d1b875b 100644 --- a/tests/integration/signin_test.go +++ b/tests/integration/signin_test.go @@ -12,6 +12,7 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) @@ -32,7 +33,7 @@ func testLoginFailed(t *testing.T, username, password, message string) { } func TestSignin(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) diff --git a/tests/integration/signout_test.go b/tests/integration/signout_test.go index dceeb9cfe935a..1f1346a5c3c2e 100644 --- a/tests/integration/signout_test.go +++ b/tests/integration/signout_test.go @@ -7,10 +7,12 @@ package integration import ( "net/http" "testing" + + "code.gitea.io/gitea/tests" ) func TestSignOut(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") diff --git a/tests/integration/signup_test.go b/tests/integration/signup_test.go index 392478d84f159..410ea6b27ee0d 100644 --- a/tests/integration/signup_test.go +++ b/tests/integration/signup_test.go @@ -14,12 +14,13 @@ import ( user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestSignup(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.Service.EnableCaptcha = false @@ -37,7 +38,7 @@ func TestSignup(t *testing.T) { } func TestSignupAsRestricted(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.Service.EnableCaptcha = false setting.Service.DefaultUserIsRestricted = true @@ -59,7 +60,7 @@ func TestSignupAsRestricted(t *testing.T) { } func TestSignupEmail(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.Service.EnableCaptcha = false diff --git a/tests/integration/testlogger.go b/tests/integration/testlogger.go deleted file mode 100644 index 83a220d57c9a6..0000000000000 --- a/tests/integration/testlogger.go +++ /dev/null @@ -1,207 +0,0 @@ -// Copyright 2019 The Gitea Authors. All rights reserved. -// Use of this source code is governed by a MIT-style -// license that can be found in the LICENSE file. - -package integration - -import ( - "context" - "fmt" - "os" - "runtime" - "strings" - "sync" - "testing" - "time" - - "code.gitea.io/gitea/modules/json" - "code.gitea.io/gitea/modules/log" - "code.gitea.io/gitea/modules/queue" -) - -var ( - prefix string - slowTest = 10 * time.Second - slowFlush = 5 * time.Second -) - -// TestLogger is a logger which will write to the testing log -type TestLogger struct { - log.WriterLogger -} - -var writerCloser = &testLoggerWriterCloser{} - -type testLoggerWriterCloser struct { - sync.RWMutex - t []*testing.TB -} - -func (w *testLoggerWriterCloser) setT(t *testing.TB) { - w.Lock() - w.t = append(w.t, t) - w.Unlock() -} - -func (w *testLoggerWriterCloser) Write(p []byte) (int, error) { - w.RLock() - var t *testing.TB - if len(w.t) > 0 { - t = w.t[len(w.t)-1] - } - w.RUnlock() - if t != nil && *t != nil { - if len(p) > 0 && p[len(p)-1] == '\n' { - p = p[:len(p)-1] - } - - defer func() { - err := recover() - if err == nil { - return - } - var errString string - errErr, ok := err.(error) - if ok { - errString = errErr.Error() - } else { - errString, ok = err.(string) - } - if !ok { - panic(err) - } - if !strings.HasPrefix(errString, "Log in goroutine after ") { - panic(err) - } - }() - - (*t).Log(string(p)) - return len(p), nil - } - return len(p), nil -} - -func (w *testLoggerWriterCloser) Close() error { - w.Lock() - if len(w.t) > 0 { - w.t = w.t[:len(w.t)-1] - } - w.Unlock() - return nil -} - -func (w *testLoggerWriterCloser) Reset() { - w.Lock() - if len(w.t) > 0 { - for _, t := range w.t { - if t == nil { - continue - } - fmt.Fprintf(os.Stdout, "Unclosed logger writer in test: %s", (*t).Name()) - (*t).Errorf("Unclosed logger writer in test: %s", (*t).Name()) - } - w.t = nil - } - w.Unlock() -} - -// PrintCurrentTest prints the current test to os.Stdout -func PrintCurrentTest(t testing.TB, skip ...int) func() { - start := time.Now() - actualSkip := 1 - if len(skip) > 0 { - actualSkip = skip[0] - } - _, filename, line, _ := runtime.Caller(actualSkip) - - if log.CanColorStdout { - fmt.Fprintf(os.Stdout, "=== %s (%s:%d)\n", fmt.Formatter(log.NewColoredValue(t.Name())), strings.TrimPrefix(filename, prefix), line) - } else { - fmt.Fprintf(os.Stdout, "=== %s (%s:%d)\n", t.Name(), strings.TrimPrefix(filename, prefix), line) - } - writerCloser.setT(&t) - return func() { - took := time.Since(start) - if took > slowTest { - if log.CanColorStdout { - fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow))) - } else { - fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", t.Name(), took) - } - } - timer := time.AfterFunc(slowFlush, func() { - if log.CanColorStdout { - fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), slowFlush) - } else { - fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", t.Name(), slowFlush) - } - }) - if err := queue.GetManager().FlushAll(context.Background(), 2*time.Minute); err != nil { - t.Errorf("Flushing queues failed with error %v", err) - } - timer.Stop() - flushTook := time.Since(start) - took - if flushTook > slowFlush { - if log.CanColorStdout { - fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), fmt.Formatter(log.NewColoredValue(flushTook, log.Bold, log.FgRed))) - } else { - fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", t.Name(), flushTook) - } - } - _ = writerCloser.Close() - } -} - -// Printf takes a format and args and prints the string to os.Stdout -func Printf(format string, args ...interface{}) { - if log.CanColorStdout { - for i := 0; i < len(args); i++ { - args[i] = log.NewColoredValue(args[i]) - } - } - fmt.Fprintf(os.Stdout, "\t"+format, args...) -} - -// NewTestLogger creates a TestLogger as a log.LoggerProvider -func NewTestLogger() log.LoggerProvider { - logger := &TestLogger{} - logger.Colorize = log.CanColorStdout - logger.Level = log.TRACE - return logger -} - -// Init inits connection writer with json config. -// json config only need key "level". -func (log *TestLogger) Init(config string) error { - err := json.Unmarshal([]byte(config), log) - if err != nil { - return err - } - log.NewWriterLogger(writerCloser) - return nil -} - -// Content returns the content accumulated in the content provider -func (log *TestLogger) Content() (string, error) { - return "", fmt.Errorf("not supported") -} - -// Flush when log should be flushed -func (log *TestLogger) Flush() { -} - -// ReleaseReopen does nothing -func (log *TestLogger) ReleaseReopen() error { - return nil -} - -// GetName returns the default name for this implementation -func (log *TestLogger) GetName() string { - return "test" -} - -func init() { - log.Register("test", NewTestLogger) - _, filename, _, _ := runtime.Caller(0) - prefix = strings.TrimSuffix(filename, "tests/integration/testlogger.go") -} diff --git a/tests/integration/timetracking_test.go b/tests/integration/timetracking_test.go index 0f34dbe9b2522..54b81ff3bc0c5 100644 --- a/tests/integration/timetracking_test.go +++ b/tests/integration/timetracking_test.go @@ -11,26 +11,27 @@ import ( "time" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestViewTimetrackingControls(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testViewTimetrackingControls(t, session, "user2", "repo1", "1", true) // user2/repo1 } func TestNotViewTimetrackingControls(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user5") testViewTimetrackingControls(t, session, "user2", "repo1", "1", false) // user2/repo1 } func TestViewTimetrackingControlsDisabled(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") testViewTimetrackingControls(t, session, "user3", "repo3", "1", false) } diff --git a/tests/integration/user_test.go b/tests/integration/user_test.go index c3a2fce9bf2cc..78361ee52c9d8 100644 --- a/tests/integration/user_test.go +++ b/tests/integration/user_test.go @@ -15,19 +15,20 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/test" "code.gitea.io/gitea/modules/translation" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestViewUser(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() req := NewRequest(t, "GET", "/user2") MakeRequest(t, req, http.StatusOK) } func TestRenameUsername(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") req := NewRequestWithValues(t, "POST", "/user/settings", map[string]string{ @@ -43,7 +44,7 @@ func TestRenameUsername(t *testing.T) { } func TestRenameInvalidUsername(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() invalidUsernames := []string{ "%2f*", @@ -75,7 +76,7 @@ func TestRenameInvalidUsername(t *testing.T) { } func TestRenameReservedUsername(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() reservedUsernames := []string{ ".", @@ -139,7 +140,7 @@ func TestRenameReservedUsername(t *testing.T) { } func TestExportUserGPGKeys(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() // Export empty key list testExportUserGPGKeys(t, "user1", `-----BEGIN PGP PUBLIC KEY BLOCK----- Note: This user hasn't uploaded any GPG keys. @@ -227,7 +228,7 @@ func testExportUserGPGKeys(t *testing.T, user, expected string) { } func TestListStopWatches(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo.OwnerID}).(*user_model.User) diff --git a/tests/integration/version_test.go b/tests/integration/version_test.go index e713c9c22610b..83be62d3f468f 100644 --- a/tests/integration/version_test.go +++ b/tests/integration/version_test.go @@ -10,12 +10,13 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestVersion(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.AppVer = "test-version-1" req := NewRequest(t, "GET", "/api/v1/version") diff --git a/tests/integration/view_test.go b/tests/integration/view_test.go index 4c0b32995c1c1..63544dbe35195 100644 --- a/tests/integration/view_test.go +++ b/tests/integration/view_test.go @@ -8,11 +8,12 @@ import ( "net/http" "testing" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestRenderFileSVGIsInImgTag(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() session := loginUser(t, "user2") diff --git a/tests/integration/webfinger_test.go b/tests/integration/webfinger_test.go index 71e4cfdb270e3..966393a61d10e 100644 --- a/tests/integration/webfinger_test.go +++ b/tests/integration/webfinger_test.go @@ -13,12 +13,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestWebfinger(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() setting.Federation.Enabled = true defer func() { diff --git a/tests/integration/xss_test.go b/tests/integration/xss_test.go index 6ac68933c3852..5c9011a3cbd9f 100644 --- a/tests/integration/xss_test.go +++ b/tests/integration/xss_test.go @@ -10,12 +10,13 @@ import ( "code.gitea.io/gitea/models/unittest" user_model "code.gitea.io/gitea/models/user" + "code.gitea.io/gitea/tests" "github.com/stretchr/testify/assert" ) func TestXSSUserFullName(t *testing.T) { - defer prepareTestEnv(t)() + defer tests.PrepareTestEnv(t)() user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2}).(*user_model.User) const fullName = `name & ` diff --git a/tests/test_utils.go b/tests/test_utils.go new file mode 100644 index 0000000000000..2ea2ccb83a7ad --- /dev/null +++ b/tests/test_utils.go @@ -0,0 +1,220 @@ +// Copyright 2017 The Gitea Authors. All rights reserved. +// Use of this source code is governed by a MIT-style +// license that can be found in the LICENSE file. + +package tests + +import ( + "context" + "database/sql" + "fmt" + "os" + "path" + "path/filepath" + "runtime" + "testing" + + "code.gitea.io/gitea/models/unittest" + "code.gitea.io/gitea/modules/base" + "code.gitea.io/gitea/modules/git" + "code.gitea.io/gitea/modules/graceful" + "code.gitea.io/gitea/modules/log" + "code.gitea.io/gitea/modules/queue" + repo_module "code.gitea.io/gitea/modules/repository" + "code.gitea.io/gitea/modules/setting" + "code.gitea.io/gitea/modules/storage" + "code.gitea.io/gitea/modules/util" + "code.gitea.io/gitea/routers" + + "github.com/stretchr/testify/assert" +) + +func InitTest() { + giteaRoot := base.SetupGiteaRoot() + if giteaRoot == "" { + fmt.Println("Environment variable $GITEA_ROOT not set") + os.Exit(1) + } + giteaBinary := "gitea" + if runtime.GOOS == "windows" { + giteaBinary += ".exe" + } + setting.AppPath = path.Join(giteaRoot, giteaBinary) + if _, err := os.Stat(setting.AppPath); err != nil { + fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) + os.Exit(1) + } + + giteaConf := os.Getenv("GITEA_CONF") + if giteaConf == "" { + fmt.Println("Environment variable $GITEA_CONF not set") + os.Exit(1) + } else if !path.IsAbs(giteaConf) { + setting.CustomConf = path.Join(giteaRoot, giteaConf) + } else { + setting.CustomConf = giteaConf + } + + setting.SetCustomPathAndConf("", "", "") + setting.LoadForTest() + setting.Repository.DefaultBranch = "master" // many test code still assume that default branch is called "master" + _ = util.RemoveAll(repo_module.LocalCopyPath()) + + if err := git.InitOnceWithSync(context.Background()); err != nil { + log.Fatal("git.InitOnceWithSync: %v", err) + } + git.CheckLFSVersion() + + setting.InitDBConfig() + if err := storage.Init(); err != nil { + fmt.Printf("Init storage failed: %v", err) + os.Exit(1) + } + + switch { + case setting.Database.UseMySQL: + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s)/", + setting.Database.User, setting.Database.Passwd, setting.Database.Host)) + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", setting.Database.Name)); err != nil { + log.Fatal("db.Exec: %v", err) + } + case setting.Database.UsePostgreSQL: + var db *sql.DB + var err error + if setting.Database.Host[0] == '/' { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) + } else { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) + } + + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + dbrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = '%s'", setting.Database.Name)) + if err != nil { + log.Fatal("db.Query: %v", err) + } + defer dbrows.Close() + + if !dbrows.Next() { + if _, err = db.Exec(fmt.Sprintf("CREATE DATABASE %s", setting.Database.Name)); err != nil { + log.Fatal("db.Exec: CREATE DATABASE: %v", err) + } + } + // Check if we need to setup a specific schema + if len(setting.Database.Schema) == 0 { + break + } + db.Close() + + if setting.Database.Host[0] == '/' { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@/%s?sslmode=%s&host=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Name, setting.Database.SSLMode, setting.Database.Host)) + } else { + db, err = sql.Open("postgres", fmt.Sprintf("postgres://%s:%s@%s/%s?sslmode=%s", + setting.Database.User, setting.Database.Passwd, setting.Database.Host, setting.Database.Name, setting.Database.SSLMode)) + } + // This is a different db object; requires a different Close() + defer db.Close() + if err != nil { + log.Fatal("sql.Open: %v", err) + } + schrows, err := db.Query(fmt.Sprintf("SELECT 1 FROM information_schema.schemata WHERE schema_name = '%s'", setting.Database.Schema)) + if err != nil { + log.Fatal("db.Query: %v", err) + } + defer schrows.Close() + + if !schrows.Next() { + // Create and setup a DB schema + if _, err = db.Exec(fmt.Sprintf("CREATE SCHEMA %s", setting.Database.Schema)); err != nil { + log.Fatal("db.Exec: CREATE SCHEMA: %v", err) + } + } + + case setting.Database.UseMSSQL: + host, port := setting.ParseMSSQLHostPort(setting.Database.Host) + db, err := sql.Open("mssql", fmt.Sprintf("server=%s; port=%s; database=%s; user id=%s; password=%s;", + host, port, "master", setting.Database.User, setting.Database.Passwd)) + if err != nil { + log.Fatal("sql.Open: %v", err) + } + if _, err := db.Exec(fmt.Sprintf("If(db_id(N'%s') IS NULL) BEGIN CREATE DATABASE %s; END;", setting.Database.Name, setting.Database.Name)); err != nil { + log.Fatal("db.Exec: %v", err) + } + defer db.Close() + } + + routers.GlobalInitInstalled(graceful.GetManager().HammerContext()) +} + +func PrepareTestEnv(t testing.TB, skip ...int) func() { + t.Helper() + ourSkip := 2 + if len(skip) > 0 { + ourSkip += skip[0] + } + deferFn := PrintCurrentTest(t, ourSkip) + assert.NoError(t, unittest.LoadFixtures()) + assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again + ownerDirs, err := os.ReadDir(setting.RepoRootPath) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, ownerDir := range ownerDirs { + if !ownerDir.Type().IsDir() { + continue + } + repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, repoDir := range repoDirs { + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) + } + } + + return deferFn +} + +// resetFixtures flushes queues, reloads fixtures and resets test repositories within a single test. +// Most tests should call defer tests.PrepareTestEnv(t)() (or have onGiteaRun do that for them) but sometimes +// within a single test this is required +func ResetFixtures(t *testing.T) { + assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1)) + assert.NoError(t, unittest.LoadFixtures()) + assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) + assert.NoError(t, unittest.CopyDir(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, git.InitOnceWithSync(context.Background())) // the gitconfig has been removed above, so sync the gitconfig again + ownerDirs, err := os.ReadDir(setting.RepoRootPath) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, ownerDir := range ownerDirs { + if !ownerDir.Type().IsDir() { + continue + } + repoDirs, err := os.ReadDir(filepath.Join(setting.RepoRootPath, ownerDir.Name())) + if err != nil { + assert.NoError(t, err, "unable to read the new repo root: %v\n", err) + } + for _, repoDir := range repoDirs { + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "pack"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "objects", "info"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "heads"), 0o755) + _ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755) + } + } +} diff --git a/tests/e2e/testlogger.go b/tests/testlogger.go similarity index 93% rename from tests/e2e/testlogger.go rename to tests/testlogger.go index 924d583e081ca..b65573a771c41 100644 --- a/tests/e2e/testlogger.go +++ b/tests/testlogger.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. -package e2e +package tests import ( "context" @@ -21,8 +21,8 @@ import ( var ( prefix string - slowTest = 10 * time.Second - slowFlush = 5 * time.Second + SlowTest = 10 * time.Second + SlowFlush = 5 * time.Second ) // TestLogger is a logger which will write to the testing log @@ -30,7 +30,7 @@ type TestLogger struct { log.WriterLogger } -var writerCloser = &testLoggerWriterCloser{} +var WriterCloser = &testLoggerWriterCloser{} type testLoggerWriterCloser struct { sync.RWMutex @@ -119,21 +119,21 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() { } else { fmt.Fprintf(os.Stdout, "=== %s (%s:%d)\n", t.Name(), strings.TrimPrefix(filename, prefix), line) } - writerCloser.setT(&t) + WriterCloser.setT(&t) return func() { took := time.Since(start) - if took > slowTest { + if took > SlowTest { if log.CanColorStdout { fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgYellow)), fmt.Formatter(log.NewColoredValue(took, log.Bold, log.FgYellow))) } else { fmt.Fprintf(os.Stdout, "+++ %s is a slow test (took %v)\n", t.Name(), took) } } - timer := time.AfterFunc(slowFlush, func() { + timer := time.AfterFunc(SlowFlush, func() { if log.CanColorStdout { - fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), slowFlush) + fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), SlowFlush) } else { - fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", t.Name(), slowFlush) + fmt.Fprintf(os.Stdout, "+++ %s ... still flushing after %v ...\n", t.Name(), SlowFlush) } }) if err := queue.GetManager().FlushAll(context.Background(), 2*time.Minute); err != nil { @@ -141,14 +141,14 @@ func PrintCurrentTest(t testing.TB, skip ...int) func() { } timer.Stop() flushTook := time.Since(start) - took - if flushTook > slowFlush { + if flushTook > SlowFlush { if log.CanColorStdout { fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", fmt.Formatter(log.NewColoredValue(t.Name(), log.Bold, log.FgRed)), fmt.Formatter(log.NewColoredValue(flushTook, log.Bold, log.FgRed))) } else { fmt.Fprintf(os.Stdout, "+++ %s had a slow clean-up flush (took %v)\n", t.Name(), flushTook) } } - _ = writerCloser.Close() + _ = WriterCloser.Close() } } @@ -177,7 +177,7 @@ func (log *TestLogger) Init(config string) error { if err != nil { return err } - log.NewWriterLogger(writerCloser) + log.NewWriterLogger(WriterCloser) return nil } From 4a352082308a98ed3c6463f0a2046826a648edd6 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Mon, 27 Jun 2022 16:48:52 -0400 Subject: [PATCH 27/46] fix drone --- .drone.yml | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/.drone.yml b/.drone.yml index 35a0b8e89b9cc..82608dc8aac09 100644 --- a/.drone.yml +++ b/.drone.yml @@ -528,33 +528,16 @@ services: POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' steps: - - name: deps-frontend - image: node:16 - pull: always - commands: - - make deps-frontend - - - name: deps-backend - image: golang:1.18 - pull: always - commands: - - make deps-backend - volumes: - - name: deps - path: /go - -# Is this needed? - name: build - image: gitea/test_env:linux-arm64 # https://gitea.com/gitea/test-env - user: gitea + image: techknowlogick/xgo:go-1.18.x + pull: always commands: - - ./build/test-env-check.sh - - make backend + - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs + - export PATH=$PATH:$GOPATH/bin + - make build environment: GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - GOSUMDB: sum.golang.org - TAGS: bindata gogit sqlite sqlite_unlock_notify - depends_on: [deps-backend, prepare-test-env] + TAGS: bindata sqlite sqlite_unlock_notify volumes: - name: deps path: /go From c3a20630f62babefef148443025fa862cfa7a1ee Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 11:16:14 -0400 Subject: [PATCH 28/46] Clean up tests --- .gitignore | 3 +++ Makefile | 4 +++- playwright.config.js | 6 +++++- tests/e2e/e2e_test.go | 5 +++-- tests/e2e/example.test.e2e.js | 18 +++++++++++++----- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 10102e6a5ff00..480ed6a4ee38a 100644 --- a/.gitignore +++ b/.gitignore @@ -67,6 +67,9 @@ cpu.out /tests/integration/indexers-* /tests/e2e/gitea-e2e-* /tests/e2e/indexers-* +/tests/e2e/reports +/tests/e2e/test-artifacts +/tests/e2e/test-snapshots /tests/*.ini /node_modules /yarn.lock diff --git a/Makefile b/Makefile index 02fec65805777..811e7f3bed3cb 100644 --- a/Makefile +++ b/Makefile @@ -248,7 +248,7 @@ clean: tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ \ tests/e2e/gitea-e2e-pgsql/ tests/e2e/gitea-e2e-mysql/ tests/e2e/gitea-e2e-mysql8/ tests/e2e/gitea-e2e-sqlite/ \ tests/e2e/gitea-e2e-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql tests/e2e/indexers-sqlite \ - tests/e2e/indexers-mssql + tests/e2e/indexers-mssql tests/e2e/reports tests/e2e/test-artifacts tests/e2e/test-snapshots .PHONY: fmt fmt: @@ -516,6 +516,8 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen .PHONY: test-e2e% test-e2e%: TEST_TYPE ?= e2e + # Clear display env variable. Otherwise, chromium tests can fail. + DISPLAY= .PHONY: test-e2e test-e2e: test-e2e-sqlite diff --git a/playwright.config.js b/playwright.config.js index 094d59b6d8abe..45bde82bd14f9 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -52,6 +52,8 @@ const config = { /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ trace: 'on-first-retry', + + screenshot: 'only-on-failure', }, /* Configure projects for major browsers */ @@ -109,7 +111,9 @@ const config = { ], /* Folder for test artifacts such as screenshots, videos, traces, etc. */ - // outputDir: 'test-results/', + outputDir: 'tests/e2e/test-artifacts/', + /* Folder for test artifacts such as screenshots, videos, traces, etc. */ + snapshotDir: 'tests/e2e/test-snapshots/', /* Run your local dev server before starting the tests */ // webServer: { diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index bde6f4a4bc439..e820fd3dad630 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -76,10 +76,11 @@ func TestE2e(t *testing.T) { cmd.Stdout = &out err := cmd.Run() if err != nil { - log.Error("%v", out.String()) + // Currently colored output is conflicting. Using Printf until that is resolved. + fmt.Printf("%v", out.String()) log.Fatal("Playwright Failed: %s", err) } else { - log.Info("%v", out.String()) + fmt.Printf("%v", out.String()) } }) } diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index 239e31ac2f4b3..07e38f4bc0c1a 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -11,14 +11,22 @@ test('Load Homepage', async ({page}) => { test('Test Register Form', async ({page}, workerInfo) => { const response = await page.goto('/user/sign_up'); await expect(response?.status()).toBe(200); // Status OK - await page.type('input[name=user_name]', `test-${workerInfo.workerIndex}`); - await page.type('input[name=email]', `test-${workerInfo.workerIndex}@test.com`); + await page.type('input[name=user_name]', `e2e-test-${workerInfo.workerIndex}`); + await page.type('input[name=email]', `e2e-test-${workerInfo.workerIndex}@test.com`); await page.type('input[name=password]', 'test123'); await page.type('input[name=retype]', 'test123'); await page.click('form button.ui.green.button:visible'); // Make sure we routed to the home page. Else login failed. await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); - // Uncomment to see visual testing - // await expect(page).toHaveScreenshot({ timeout: 20000, mask: [page.locator('footer div.ui.left')] }); - // await page.screenshot({ path: `tools/e2e/screenshots/${workerInfo.title}-${workerInfo.project.name}.png` }); + await expect(page.locator('.dashboard-navbar span>img.ui.avatar.image')).toBeVisible(); + await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); + // Optionally include visual testing + if (process.env.VISUAL_TEST) { + await expect(page).toHaveScreenshot({ timeout: 20000, + mask: [ + page.locator('footer div.ui.left'), + page.locator('.dashboard-navbar span>img.ui.avatar.image'), + ] + }); + } }); From 27feb22f0466c8bbfaf42f4a7b06757a59c40ec8 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 11:24:06 -0400 Subject: [PATCH 29/46] Fix linting --- tests/e2e/example.test.e2e.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index 07e38f4bc0c1a..a8707a652e684 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -22,9 +22,9 @@ test('Test Register Form', async ({page}, workerInfo) => { await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); // Optionally include visual testing if (process.env.VISUAL_TEST) { - await expect(page).toHaveScreenshot({ timeout: 20000, + await expect(page).toHaveScreenshot({timeout: 20000, mask: [ - page.locator('footer div.ui.left'), + page.locator('footer div.ui.left'), page.locator('.dashboard-navbar span>img.ui.avatar.image'), ] }); From 7933e44b0b97db69a96994195fc1e620fb12c33c Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 11:49:56 -0400 Subject: [PATCH 30/46] Better mocking for page + version string --- .gitignore | 4 ---- tests/e2e/example.test.e2e.js | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 480ed6a4ee38a..0407dfbbd1dc1 100644 --- a/.gitignore +++ b/.gitignore @@ -111,7 +111,3 @@ prime/ # Manpage /man -test-results/ - -# E2E -tools/e2e/reports/ diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index a8707a652e684..0fd4139205f6c 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -22,9 +22,10 @@ test('Test Register Form', async ({page}, workerInfo) => { await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); // Optionally include visual testing if (process.env.VISUAL_TEST) { + // Mock page/version string + await page.locator('footer div.ui.left').evaluate((node) => node.innerHTML = 'MOCK'); await expect(page).toHaveScreenshot({timeout: 20000, mask: [ - page.locator('footer div.ui.left'), page.locator('.dashboard-navbar span>img.ui.avatar.image'), ] }); From 2861aa4d0c074cca8188af7563cf171c933ad56a Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 15:12:46 -0400 Subject: [PATCH 31/46] Cleanup test generation --- .../doc/developers/guidelines-backend.md | 5 +- playwright.config.js | 2 +- tests/e2e/e2e_test.go | 49 +++++++++++++------ 3 files changed, 37 insertions(+), 19 deletions(-) diff --git a/docs/content/doc/developers/guidelines-backend.md b/docs/content/doc/developers/guidelines-backend.md index a0d3d75952df1..e8820a37813ad 100644 --- a/docs/content/doc/developers/guidelines-backend.md +++ b/docs/content/doc/developers/guidelines-backend.md @@ -33,8 +33,9 @@ To maintain understandable code and avoid circular dependencies it is important - `build`: Scripts to help build Gitea. - `cmd`: All Gitea actual sub commands includes web, doctor, serv, hooks, admin and etc. `web` will start the web service. `serv` and `hooks` will be invoked by Git or OpenSSH. Other sub commands could help to maintain Gitea. -- `tests`: Tests - - `tests/integration`: Integration tests +- `tests`: Common test utility functions + - `tests/integration`: Integration tests, to test back-end regressions + - `tests/e2e`: E2e tests, to test test front-end <> back-end compatibility and visual regressions. - `models`: Contains the data structures used by xorm to construct database tables. It also contains functions to query and update the database. Dependencies to other Gitea code should be avoided. You can make exceptions in cases such as logging. - `models/db`: Basic database operations. All other `models/xxx` packages should depend on this package. The `GetEngine` function should only be invoked from `models/`. - `models/fixtures`: Sample data used in unit tests and integration tests. One `yml` file means one table which will be loaded into database when beginning the tests. diff --git a/playwright.config.js b/playwright.config.js index 45bde82bd14f9..39893c95ded7e 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -33,7 +33,7 @@ const config = { // workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: process.env.CI ? 'dot' : [['html', {outputFolder: 'tools/e2e/reports/', open: 'never'}]], + reporter: process.env.CI ? 'list' : [['list'], ['html', {outputFolder: 'tools/e2e/reports/', open: 'never'}]], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index e820fd3dad630..56a889b4857e7 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -67,20 +67,37 @@ func TestMain(m *testing.M) { } func TestE2e(t *testing.T) { - // Default 5 minute timeout - onGiteaRun(t, func(*testing.T, *url.URL) { - cmd := exec.Command("npx", "playwright", "test") - cmd.Env = os.Environ() - cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) - var out bytes.Buffer - cmd.Stdout = &out - err := cmd.Run() - if err != nil { - // Currently colored output is conflicting. Using Printf until that is resolved. - fmt.Printf("%v", out.String()) - log.Fatal("Playwright Failed: %s", err) - } else { - fmt.Printf("%v", out.String()) - } - }) + // Find the paths of all e2e test files in test test directory. + search_glob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js") + paths, err := filepath.Glob(search_glob) + if err != nil { + t.Fatal(err) + } else if len(paths) == 0 { + t.Fatal(fmt.Errorf("No e2e tests found in %s", search_glob)) + } + + // Create new test for each input file + for _, path := range paths { + _, filename := filepath.Split(path) + testname := filename[:len(filename)-len(filepath.Ext(path))] + + t.Run(testname, func(t *testing.T) { + // Default 2 minute timeout + onGiteaRun(t, func(*testing.T, *url.URL) { + cmd := exec.Command("npx", "playwright", "test") + cmd.Env = os.Environ() + cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) + var out bytes.Buffer + cmd.Stdout = &out + err := cmd.Run() + if err != nil { + // Currently colored output is conflicting. Using Printf until that is resolved. + fmt.Printf("%v", out.String()) + log.Fatal("Playwright Failed: %s", err) + } else { + fmt.Printf("%v", out.String()) + } + }) + }) + } } From adbd8a043f4fb35d70312c02921db49de5b9233d Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 17:40:08 -0400 Subject: [PATCH 32/46] Remove dependency on gitea binary --- .drone.yml | 25 ++++++++++++++++--------- playwright.config.js | 2 +- tests/e2e/e2e_test.go | 2 +- tests/e2e/example.test.e2e.js | 2 ++ tests/integration/integration_test.go | 2 +- tests/test_utils.go | 20 +++++++++++--------- 6 files changed, 32 insertions(+), 21 deletions(-) diff --git a/.drone.yml b/.drone.yml index 82608dc8aac09..6af6c16599777 100644 --- a/.drone.yml +++ b/.drone.yml @@ -528,16 +528,23 @@ services: POSTGRES_INITDB_ARGS: --encoding=UTF8 --lc-collate='en_US.UTF-8' --lc-ctype='en_US.UTF-8' steps: - - name: build - image: techknowlogick/xgo:go-1.18.x + - name: deps-frontend + image: node:16 pull: always commands: - - curl -sL https://deb.nodesource.com/setup_16.x | bash - && apt-get install -y nodejs - - export PATH=$PATH:$GOPATH/bin - - make build - environment: - GOPROXY: https://goproxy.io # proxy.golang.org is blocked in China, this proxy is not - TAGS: bindata sqlite sqlite_unlock_notify + - make deps-frontend + + - name: build-frontend + image: node:16 + commands: + - make frontend + depends_on: [deps-frontend] + + - name: deps-backend + image: golang:1.18 + pull: always + commands: + - make deps-backend volumes: - name: deps path: /go @@ -562,7 +569,7 @@ steps: NO_DEPS_PLAYWRIGHT: 1 TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' - depends_on: [build] + depends_on: [build-frontend, deps-backend] volumes: - name: deps path: /go diff --git a/playwright.config.js b/playwright.config.js index 39893c95ded7e..ba44cf0f3cf1a 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -33,7 +33,7 @@ const config = { // workers: process.env.CI ? 1 : undefined, /* Reporter to use. See https://playwright.dev/docs/test-reporters */ - reporter: process.env.CI ? 'list' : [['list'], ['html', {outputFolder: 'tools/e2e/reports/', open: 'never'}]], + reporter: process.env.CI ? 'list' : [['list'], ['html', {outputFolder: 'tests/e2e/reports/', open: 'never'}]], /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 56a889b4857e7..60f411249faba 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -30,7 +30,7 @@ var c *web.Route func TestMain(m *testing.M) { defer log.Close() - tests.InitTest() + tests.InitTest(false) c = routers.NormalRoutes() os.Unsetenv("GIT_AUTHOR_NAME") diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index 0fd4139205f6c..9dfb668b7ec25 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -22,11 +22,13 @@ test('Test Register Form', async ({page}, workerInfo) => { await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); // Optionally include visual testing if (process.env.VISUAL_TEST) { + await page.waitForLoadState('networkidle'); // Mock page/version string await page.locator('footer div.ui.left').evaluate((node) => node.innerHTML = 'MOCK'); await expect(page).toHaveScreenshot({timeout: 20000, mask: [ page.locator('.dashboard-navbar span>img.ui.avatar.image'), + page.locator('.ui.dropdown.jump.item.tooltip span>img.ui.avatar.image'), ] }); } diff --git a/tests/integration/integration_test.go b/tests/integration/integration_test.go index 1eed962a58dc4..cfcb65740f2f5 100644 --- a/tests/integration/integration_test.go +++ b/tests/integration/integration_test.go @@ -81,7 +81,7 @@ func TestMain(m *testing.M) { graceful.InitManager(managerCtx) defer cancel() - tests.InitTest() + tests.InitTest(true) c = routers.NormalRoutes() // integration test settings... diff --git a/tests/test_utils.go b/tests/test_utils.go index 2ea2ccb83a7ad..212d6a56e8da7 100644 --- a/tests/test_utils.go +++ b/tests/test_utils.go @@ -29,20 +29,22 @@ import ( "github.com/stretchr/testify/assert" ) -func InitTest() { +func InitTest(require_gitea bool) { giteaRoot := base.SetupGiteaRoot() if giteaRoot == "" { fmt.Println("Environment variable $GITEA_ROOT not set") os.Exit(1) } - giteaBinary := "gitea" - if runtime.GOOS == "windows" { - giteaBinary += ".exe" - } - setting.AppPath = path.Join(giteaRoot, giteaBinary) - if _, err := os.Stat(setting.AppPath); err != nil { - fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) - os.Exit(1) + if require_gitea { + giteaBinary := "gitea" + if runtime.GOOS == "windows" { + giteaBinary += ".exe" + } + setting.AppPath = path.Join(giteaRoot, giteaBinary) + if _, err := os.Stat(setting.AppPath); err != nil { + fmt.Printf("Could not find gitea binary at %s\n", setting.AppPath) + os.Exit(1) + } } giteaConf := os.Getenv("GITEA_CONF") From fab88eaaf7028f474f59942715e099e73f9b22f0 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 17:42:10 -0400 Subject: [PATCH 33/46] Fix linting --- tests/e2e/e2e_test.go | 6 +++--- tests/test_utils.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 60f411249faba..2660e7c7280e6 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -68,12 +68,12 @@ func TestMain(m *testing.M) { func TestE2e(t *testing.T) { // Find the paths of all e2e test files in test test directory. - search_glob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js") - paths, err := filepath.Glob(search_glob) + searchGlob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js") + paths, err := filepath.Glob(searchGlob) if err != nil { t.Fatal(err) } else if len(paths) == 0 { - t.Fatal(fmt.Errorf("No e2e tests found in %s", search_glob)) + t.Fatal(fmt.Errorf("No e2e tests found in %s", searchGlob)) } // Create new test for each input file diff --git a/tests/test_utils.go b/tests/test_utils.go index 212d6a56e8da7..5919a17b3a5b1 100644 --- a/tests/test_utils.go +++ b/tests/test_utils.go @@ -29,13 +29,13 @@ import ( "github.com/stretchr/testify/assert" ) -func InitTest(require_gitea bool) { +func InitTest(requireGitea bool) { giteaRoot := base.SetupGiteaRoot() if giteaRoot == "" { fmt.Println("Environment variable $GITEA_ROOT not set") os.Exit(1) } - if require_gitea { + if requireGitea { giteaBinary := "gitea" if runtime.GOOS == "windows" { giteaBinary += ".exe" From 32e3961bc1658e655f7942c4b667cbfbca0f6eae Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 18:26:15 -0400 Subject: [PATCH 34/46] add initial support for running specific tests --- Makefile | 10 +++++----- tests/e2e/e2e_test.go | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index 811e7f3bed3cb..eb0373e5ffd03 100644 --- a/Makefile +++ b/Makefile @@ -530,7 +530,7 @@ test-e2e-sqlite: e2e.sqlite.test generate-ini-sqlite .PHONY: test-e2e-sqlite\#% test-e2e-sqlite\#%: e2e.sqlite.test generate-ini-sqlite npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run TestE2e/$* .PHONY: test-e2e-mysql test-e2e-mysql: e2e.mysql.test generate-ini-mysql @@ -540,7 +540,7 @@ test-e2e-mysql: e2e.mysql.test generate-ini-mysql .PHONY: test-e2e-mysql\#% test-e2e-mysql\#%: e2e.mysql.test generate-ini-mysql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run TestE2e/$* .PHONY: test-e2e-mysql8 test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 @@ -550,7 +550,7 @@ test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 .PHONY: test-e2e-mysql8\#% test-e2e-mysql8\#%: e2e.mysql8.test generate-ini-mysql8 npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run TestE2e/$* .PHONY: test-e2e-pgsql test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql @@ -560,7 +560,7 @@ test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql .PHONY: test-e2e-pgsql\#% test-e2e-pgsql\#%: e2e.pgsql.test generate-ini-pgsql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run TestE2e/$* .PHONY: test-e2e-mssql test-e2e-mssql: e2e.mssql.test generate-ini-mssql @@ -570,7 +570,7 @@ test-e2e-mssql: e2e.mssql.test generate-ini-mssql .PHONY: test-e2e-mssql\#% test-e2e-mssql\#%: e2e.mssql.test generate-ini-mssql npx playwright install $(PLAYWRIGHT_FLAGS) - GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run + GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run TestE2e/$* .PHONY: bench-sqlite bench-sqlite: integrations.sqlite.test generate-ini-sqlite diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 2660e7c7280e6..7102dfe16200c 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -66,6 +66,8 @@ func TestMain(m *testing.M) { os.Exit(exitVal) } +// This should be the only test e2e necessary. It will collect all "*.test.e2e.js" +// files in this directory and build a test for each. func TestE2e(t *testing.T) { // Find the paths of all e2e test files in test test directory. searchGlob := filepath.Join(filepath.Dir(setting.AppPath), "tests", "e2e", "*.test.e2e.js") From cab441fc143d2333e947c20cd28770999a2c3523 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 18:55:05 -0400 Subject: [PATCH 35/46] Add ACCEPT_VISUAL variable --- tests/e2e/e2e_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 7102dfe16200c..3b8b5a89e85e5 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -78,6 +78,13 @@ func TestE2e(t *testing.T) { t.Fatal(fmt.Errorf("No e2e tests found in %s", searchGlob)) } + runArgs := []string{"npx", "playwright", "test"} + + // To update snapshot outputs + if _, set := os.LookupEnv("ACCEPT_VISUAL"); set { + runArgs = append(runArgs, "--update-snapshots") + } + // Create new test for each input file for _, path := range paths { _, filename := filepath.Split(path) @@ -86,7 +93,7 @@ func TestE2e(t *testing.T) { t.Run(testname, func(t *testing.T) { // Default 2 minute timeout onGiteaRun(t, func(*testing.T, *url.URL) { - cmd := exec.Command("npx", "playwright", "test") + cmd := exec.Command(runArgs[0], runArgs...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) var out bytes.Buffer From 2c98943fe42246d0d9f336deb42d3ec4af243003 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 19:03:02 -0400 Subject: [PATCH 36/46] don't require git-lfs --- .drone.yml | 2 -- Makefile | 10 +++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index 6af6c16599777..8d6f9a5778fea 100644 --- a/.drone.yml +++ b/.drone.yml @@ -557,8 +557,6 @@ steps: - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - apt-get update - apt-get install build-essential --yes - - curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash - - apt-get install -y git-lfs - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" diff --git a/Makefile b/Makefile index eb0373e5ffd03..fee01e93a03ff 100644 --- a/Makefile +++ b/Makefile @@ -657,19 +657,19 @@ migrations.individual.mssql.test: $(GO_SOURCES) migrations.individual.sqlite.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/models/migrations -o migrations.individual.sqlite.test -tags '$(TEST_TAGS)' -e2e.mysql.test: git-check $(GO_SOURCES) +e2e.mysql.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql.test -e2e.mysql8.test: git-check $(GO_SOURCES) +e2e.mysql8.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mysql8.test -e2e.pgsql.test: git-check $(GO_SOURCES) +e2e.pgsql.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.pgsql.test -e2e.mssql.test: git-check $(GO_SOURCES) +e2e.mssql.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.mssql.test -e2e.sqlite.test: git-check $(GO_SOURCES) +e2e.sqlite.test: $(GO_SOURCES) $(GO) test $(GOTESTFLAGS) -c code.gitea.io/gitea/tests/e2e -o e2e.sqlite.test -tags '$(TEST_TAGS)' .PHONY: check From 56c877a7915fce0c966a3aaac8b247096ee4f721 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 19:27:06 -0400 Subject: [PATCH 37/46] Add initial documentation --- CONTRIBUTING.md | 2 + tests/e2e/README.md | 93 +++++++++++++++++++++++++++++++++++++ tests/integration/README.md | 6 ++- 3 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 tests/e2e/README.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0a1a941884a55..428f24bb00bce 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,6 +88,8 @@ Here's how to run the test suite: |``make test[\#TestSpecificName]`` | run unit test | |``make test-sqlite[\#TestSpecificName]``| run [integration](tests/integration) test for SQLite | |[More details about integrations](tests/integration/README.md) | +|``make test-e2e-sqlite[\#TestSpecificFileName]``| run [end-to-end](tests/e2e) test for SQLite | +|[More details about e2e tests](tests/e2e/README.md) | ## Vendoring diff --git a/tests/e2e/README.md b/tests/e2e/README.md new file mode 100644 index 0000000000000..93a744e81280a --- /dev/null +++ b/tests/e2e/README.md @@ -0,0 +1,93 @@ +# End to end tests + +E2e tests largely follow the same syntax as [integration tests](tests/e2e/README.md). +Whereas integration tests are intended to mock and stress the back-end, server-side code, e2e tests the interface between front-end and back-end, as well as visual regressions with both assertions and visual comparisons. +They can be run with make commands for the appropriate backends, namely: +```shell +make test-sqlite +make test-pgsql +make test-mysql +make test-mysql8 +make test-mssql +``` + +Make sure to perform a clean front-end build before running tests: +``` +make clean frontend +``` + +## Install playwright dependencies +``` +npx install playwright --with-deps +``` + + +## Run all tests via local drone +``` +drone exec --local --build-event "pull_request" +``` + +## Run sqlite e2e tests +Start tests +``` +make NO_DEPS_PLAYWRIGHT=1 test-e2e-sqlite +``` + +## Run MySQL e2e tests +Setup a MySQL database inside docker +``` +docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" -p 3306:3306 --rm --name mysql mysql:latest #(just ctrl-c to stop db and clean the container) +docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --rm --name elasticsearch elasticsearch:7.6.0 #(in a second terminal, just ctrl-c to stop db and clean the container) +``` +Start tests based on the database container +``` +TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' NO_DEPS_PLAYWRIGHT=1 make test-e2e-mysql +``` + +## Run pgsql integration tests +Setup a pgsql database inside docker +``` +docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:latest #(just ctrl-c to stop db and clean the container) +``` +Start tests based on the database container +``` +TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres NO_DEPS_PLAYWRIGHT=1 make test-e2e-pgsql +``` + +## Run mssql integration tests +Setup a mssql database inside docker +``` +docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSecurePassword1" -p 1433:1433 --rm --name mssql microsoft/mssql-server-linux:latest #(just ctrl-c to stop db and clean the container) +``` +Start tests based on the database container +``` +TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=gitea_test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 NO_DEPS_PLAYWRIGHT=1 make test-e2e-mssql +``` + +## Running individual tests + +Example command to run `example.test.e2e.js` test file: + +_Note: unlike integration tests, this filtering is at the file level, not function_ + +For SQLite: + +``` +make test-e2e-sqlite#example +``` + +For other databases(replace `mssql` to `mysql`, `mysql8` or `pgsql`): + +``` +TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 NO_DEPS_PLAYWRIGHT=1 make test-e2e-mssql#example +``` + +## Visual testing + +Although the main goal of e2e is assertion testing, we have added a framework for visual regress testing. If you are working on front-end features, please use the following: + - Check out `main`, `make clean frontend`, and run e2e tests with `VISUAL_TEST=1` to generate outputs. This will initially fail, as no screenshots exist. You can run the e2e tests again to assert it passes. + - Check out your branch, `make clean frontend`, and run e2e tests with `VISUAL_TEST=1`. You should be able to assert you front-end changes don't break any other tests unintentionally. + +VISUAL_TEST=1 will create screenshots in tests/e2e/test-snapshots. The test will fail the first time this is enabled (until we get visual test image persistence figured out), because it will be testing against an empty screenshot folder. + +ACCEPT_VISUAL=1 will overwrite the snapshot images with new images. \ No newline at end of file diff --git a/tests/integration/README.md b/tests/integration/README.md index 2f5b5ae68510c..636949df38f47 100644 --- a/tests/integration/README.md +++ b/tests/integration/README.md @@ -3,9 +3,11 @@ Integration tests can be run with make commands for the appropriate backends, namely: ```shell -make test-mysql -make test-pgsql make test-sqlite +make test-pgsql +make test-mysql +make test-mysql8 +make test-mssql ``` Make sure to perform a clean build before running tests: From 49289b4c896482fb594caec86efc8485447ceb3c Mon Sep 17 00:00:00 2001 From: Kyle D Date: Tue, 28 Jun 2022 22:44:35 -0400 Subject: [PATCH 38/46] Review feedback --- tests/e2e/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 93a744e81280a..bdb28e28dd33d 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -44,7 +44,7 @@ Start tests based on the database container TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' NO_DEPS_PLAYWRIGHT=1 make test-e2e-mysql ``` -## Run pgsql integration tests +## Run pgsql e2e tests Setup a pgsql database inside docker ``` docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:latest #(just ctrl-c to stop db and clean the container) @@ -54,7 +54,7 @@ Start tests based on the database container TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres NO_DEPS_PLAYWRIGHT=1 make test-e2e-pgsql ``` -## Run mssql integration tests +## Run mssql e2e tests Setup a mssql database inside docker ``` docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSecurePassword1" -p 1433:1433 --rm --name mssql microsoft/mssql-server-linux:latest #(just ctrl-c to stop db and clean the container) From db18686b2bdc19394af5d582b63a898adba905d9 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 6 Jul 2022 11:37:44 -0400 Subject: [PATCH 39/46] Add logged in session test --- playwright.config.js | 2 +- tests/e2e/e2e_test.go | 10 +++--- tests/e2e/example.test.e2e.js | 46 +++++++++++++++++++------- tests/e2e/utils_e2e.js | 62 +++++++++++++++++++++++++++++++++++ 4 files changed, 103 insertions(+), 17 deletions(-) create mode 100644 tests/e2e/utils_e2e.js diff --git a/playwright.config.js b/playwright.config.js index ba44cf0f3cf1a..13a8b36f31b4c 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -37,7 +37,7 @@ const config = { /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { - headless: true, + headless: true, // set to false to debug locale: 'en-US', diff --git a/tests/e2e/e2e_test.go b/tests/e2e/e2e_test.go index 3b8b5a89e85e5..33c5afa490922 100644 --- a/tests/e2e/e2e_test.go +++ b/tests/e2e/e2e_test.go @@ -96,15 +96,17 @@ func TestE2e(t *testing.T) { cmd := exec.Command(runArgs[0], runArgs...) cmd.Env = os.Environ() cmd.Env = append(cmd.Env, fmt.Sprintf("GITEA_URL=%s", setting.AppURL)) - var out bytes.Buffer - cmd.Stdout = &out + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr err := cmd.Run() if err != nil { // Currently colored output is conflicting. Using Printf until that is resolved. - fmt.Printf("%v", out.String()) + fmt.Printf("%v", stdout.String()) + fmt.Printf("%v", stderr.String()) log.Fatal("Playwright Failed: %s", err) } else { - fmt.Printf("%v", out.String()) + fmt.Printf("%v", stdout.String()) } }) }) diff --git a/tests/e2e/example.test.e2e.js b/tests/e2e/example.test.e2e.js index 9dfb668b7ec25..bd19ceb8fc7cf 100644 --- a/tests/e2e/example.test.e2e.js +++ b/tests/e2e/example.test.e2e.js @@ -1,5 +1,10 @@ // @ts-check import {test, expect} from '@playwright/test'; +import {login_user, save_visual, load_logged_in_context} from './utils_e2e.js'; + +test.beforeAll(async ({browser}, workerInfo) => { + await login_user(browser, workerInfo, 'user2'); +}); test('Load Homepage', async ({page}) => { const response = await page.goto('/'); @@ -20,16 +25,33 @@ test('Test Register Form', async ({page}, workerInfo) => { await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); await expect(page.locator('.dashboard-navbar span>img.ui.avatar.image')).toBeVisible(); await expect(page.locator('.ui.positive.message.flash-success')).toHaveText('Account was successfully created.'); - // Optionally include visual testing - if (process.env.VISUAL_TEST) { - await page.waitForLoadState('networkidle'); - // Mock page/version string - await page.locator('footer div.ui.left').evaluate((node) => node.innerHTML = 'MOCK'); - await expect(page).toHaveScreenshot({timeout: 20000, - mask: [ - page.locator('.dashboard-navbar span>img.ui.avatar.image'), - page.locator('.ui.dropdown.jump.item.tooltip span>img.ui.avatar.image'), - ] - }); - } + + save_visual(page); +}); + +test('Test Login Form', async ({page}, workerInfo) => { + const response = await page.goto('/user/login'); + await expect(response?.status()).toBe(200); // Status OK + + await page.type('input[name=user_name]', `user2`); + await page.type('input[name=password]', `password`); + await page.click('form button.ui.green.button:visible'); + + await page.waitForLoadState('networkidle'); + + await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); + + save_visual(page); +}); + +test('Test Logged In User', async ({browser}, workerInfo) => { + const context = await load_logged_in_context(browser, workerInfo, 'user2'); + const page = await context.newPage(); + + await page.goto('/'); + + // Make sure we routed to the home page. Else login failed. + await expect(page.url()).toBe(`${workerInfo.project.use.baseURL}/`); + + save_visual(page); }); diff --git a/tests/e2e/utils_e2e.js b/tests/e2e/utils_e2e.js new file mode 100644 index 0000000000000..b3ddb348583a7 --- /dev/null +++ b/tests/e2e/utils_e2e.js @@ -0,0 +1,62 @@ +import {expect, request} from '@playwright/test'; + +const ARTIFACTS_PATH = `tests/e2e/test-artifacts` +const LOGIN_PASSWORD = 'password' + +/* +log in user and store session info. This should generally be +run in test.beforeAll(), then the session can be loaded in tests. +*/ +export async function login_user(browser, workerInfo, user) { + // Set up a new context + let context = await browser.newContext(); + let page = await context.newPage(); + + // Route to login page + // Note: this could probably be done more quickly with a POST + const response = await page.goto('/user/login'); + await expect(response?.status()).toBe(200); // Status OK + + // Fill out form + await page.type('input[name=user_name]', user); + await page.type('input[name=password]', LOGIN_PASSWORD); + await page.click('form button.ui.green.button:visible'); + + await page.waitForLoadState('networkidle'); + + await expect(page.url(), {message: `Failed to login user ${user}`}).toBe(`${workerInfo.project.use.baseURL}/`); + + // Save state + await context.storageState({ path: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json` }); + + return context; +} + +export async function load_logged_in_context(browser, workerInfo, user) { + try { + var context = await browser.newContext({ storageState: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json` }) + } catch(err) { + if (err.code == 'ENOENT') { + console.error(`Could not find state for '${user}'. Did you call login_user(browser, workerInfo, '${user}') in test.beforeAll()?`) + } + throw err; + } + return context; +} + +export async function save_visual(page) { + // Optionally include visual testing + if (process.env.VISUAL_TEST) { + await page.waitForLoadState('networkidle'); + // Mock page/version string + await page.locator('footer div.ui.left').evaluate((node) => node.innerHTML = 'MOCK'); + await expect(page).toHaveScreenshot({ + fullPage: true, + timeout: 20000, + mask: [ + page.locator('.dashboard-navbar span>img.ui.avatar.image'), + page.locator('.ui.dropdown.jump.item.tooltip span>img.ui.avatar.image'), + ], + }); + } +} \ No newline at end of file From 7feb1922f7c4ce36bf17c197e257034acf4c3761 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 6 Jul 2022 12:38:08 -0400 Subject: [PATCH 40/46] Attempt fixing drone race --- .drone.yml | 18 +++++++++--------- Makefile | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8d6f9a5778fea..a46fc47495dbc 100644 --- a/.drone.yml +++ b/.drone.yml @@ -514,9 +514,9 @@ trigger: event: - pull_request -volumes: - - name: deps - temp: {} +#volumes: +# - name: deps +# temp: {} services: - name: pgsql @@ -545,9 +545,9 @@ steps: pull: always commands: - make deps-backend - volumes: - - name: deps - path: /go +# volumes: +# - name: deps +# path: /go # TODO: We should probably build all dependencies into a test image - name: test-e2e @@ -568,9 +568,9 @@ steps: TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' depends_on: [build-frontend, deps-backend] - volumes: - - name: deps - path: /go +# volumes: +# - name: deps +# path: /go --- kind: pipeline diff --git a/Makefile b/Makefile index 21c0bda61118e..1a90eab809eb9 100644 --- a/Makefile +++ b/Makefile @@ -246,8 +246,8 @@ clean: tests/integration/gitea-integration-mssql/ tests/integration/indexers-mysql/ tests/integration/indexers-mysql8/ tests/integration/indexers-pgsql tests/integration/indexers-sqlite \ tests/integration/indexers-mssql tests/mysql.ini tests/mysql8.ini tests/pgsql.ini tests/mssql.ini man/ \ tests/e2e/gitea-e2e-pgsql/ tests/e2e/gitea-e2e-mysql/ tests/e2e/gitea-e2e-mysql8/ tests/e2e/gitea-e2e-sqlite/ \ - tests/e2e/gitea-e2e-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql tests/e2e/indexers-sqlite \ - tests/e2e/indexers-mssql tests/e2e/reports tests/e2e/test-artifacts tests/e2e/test-snapshots + tests/e2e/gitea-e2e-mssql/ tests/e2e/indexers-mysql/ tests/e2e/indexers-mysql8/ tests/e2e/indexers-pgsql/ tests/e2e/indexers-sqlite/ \ + tests/e2e/indexers-mssql/ tests/e2e/reports/ tests/e2e/test-artifacts/ tests/e2e/test-snapshots/ .PHONY: fmt fmt: From bbe663a72b5cb8b76704f46d3a6c5e534894cf41 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 6 Jul 2022 13:25:12 -0400 Subject: [PATCH 41/46] Cleanup and bump version --- .drone.yml | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/.drone.yml b/.drone.yml index a46fc47495dbc..e29e30d24cbfa 100644 --- a/.drone.yml +++ b/.drone.yml @@ -514,10 +514,6 @@ trigger: event: - pull_request -#volumes: -# - name: deps -# temp: {} - services: - name: pgsql pull: default @@ -545,13 +541,10 @@ steps: pull: always commands: - make deps-backend -# volumes: -# - name: deps -# path: /go # TODO: We should probably build all dependencies into a test image - name: test-e2e - image: mcr.microsoft.com/playwright:v1.22.2-focal + image: mcr.microsoft.com/playwright:v1.23.1-focal commands: - curl -sL https://go.dev/dl/go1.18.3.linux-amd64.tar.gz -o go1.18.3.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea @@ -568,9 +561,6 @@ steps: TEST_PGSQL_DBNAME: 'testgitea-e2e' NPX_FLAGS: '--yes' depends_on: [build-frontend, deps-backend] -# volumes: -# - name: deps -# path: /go --- kind: pipeline From 72a3dc587be3ce8a46ca9c133c2535a896ce95af Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 31 Aug 2022 22:17:15 -0400 Subject: [PATCH 42/46] Bump deps --- Makefile | 2 +- package-lock.json | 224 +++++++++++++++++--------- package.json | 7 +- tests/integration/integration_test.go | 1 - 4 files changed, 154 insertions(+), 80 deletions(-) diff --git a/Makefile b/Makefile index af9a245a789d6..70d8c3b3ea415 100644 --- a/Makefile +++ b/Makefile @@ -327,7 +327,7 @@ lint: lint-frontend lint-backend .PHONY: lint-frontend lint-frontend: node_modules - npx eslint --color --max-warnings=0 web_src/js build templates *.config.js docs/assets/js tests/e2e/*.test.e2e.js + npx eslint --color --max-warnings=0 --ext js,vue web_src/js build *.config.js docs/assets/js tests/e2e/*.test.e2e.js npx stylelint --color --max-warnings=0 web_src/less npx spectral lint -q -F hint $(SWAGGER_SPEC) npx markdownlint docs *.md diff --git a/package-lock.json b/package-lock.json index 8142eea692dce..aa0632dae0547 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,7 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { + "@playwright/test": "1.25.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", @@ -1356,6 +1357,22 @@ "node": ">= 8" } }, + "node_modules/@playwright/test": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", + "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "playwright-core": "1.25.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -1527,9 +1544,9 @@ } }, "node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", - "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", + "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", "dev": true, "engines": { "node": ">=8" @@ -1610,9 +1627,9 @@ } }, "node_modules/@stoplight/spectral-core": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz", - "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz", + "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==", "dev": true, "dependencies": { "@stoplight/better-ajv-errors": "1.0.3", @@ -1630,7 +1647,7 @@ "ajv-formats": "~2.1.0", "blueimp-md5": "2.18.0", "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "6.0.1", + "jsonpath-plus": "7.1.0", "lodash": "~4.17.21", "lodash.topath": "^4.5.2", "minimatch": "3.1.2", @@ -1865,18 +1882,18 @@ } }, "node_modules/@stoplight/spectral-ruleset-migrator": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", - "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz", + "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==", "dev": true, "dependencies": { - "@stoplight/json": "~3.17.0", - "@stoplight/ordered-object-literal": "1.0.2", + "@stoplight/json": "~3.20.1", + "@stoplight/ordered-object-literal": "~1.0.4", "@stoplight/path": "1.3.2", "@stoplight/spectral-functions": "^1.0.0", "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^12.3.0", - "@stoplight/yaml": "4.2.2", + "@stoplight/types": "^13.6.0", + "@stoplight/yaml": "~4.2.3", "@types/node": "*", "ajv": "^8.6.0", "ast-types": "0.14.2", @@ -1889,28 +1906,34 @@ "node": ">=12" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", - "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/json": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", + "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", "dev": true, + "dependencies": { + "@stoplight/ordered-object-literal": "^1.0.3", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + }, "engines": { - "node": ">=8" + "node": ">=8.3.0" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", - "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/types": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", + "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", "dev": true, "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^12.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" }, "engines": { - "node": ">=10.8" + "node": "^12.20 || >=14.13" } }, "node_modules/@stoplight/spectral-rulesets": { @@ -7694,12 +7717,12 @@ } }, "node_modules/jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", + "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">=12.0.0" } }, "node_modules/jsonpointer": { @@ -8533,6 +8556,16 @@ "lodash.topath": "^4.5.2" } }, + "node_modules/nimma/node_modules/jsonpath-plus": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -9028,6 +9061,18 @@ "node": ">=8" } }, + "node_modules/playwright-core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", + "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -9719,9 +9764,9 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "node_modules/rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", + "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", "dev": true, "peer": true, "bin": { @@ -11015,9 +11060,9 @@ } }, "node_modules/vm2": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", - "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", + "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", "dev": true, "dependencies": { "acorn": "^8.7.0", @@ -12789,6 +12834,16 @@ "fastq": "^1.6.0" } }, + "@playwright/test": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", + "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", + "dev": true, + "requires": { + "@types/node": "*", + "playwright-core": "1.25.1" + } + }, "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -12930,9 +12985,9 @@ } }, "@stoplight/ordered-object-literal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", - "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", + "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", "dev": true }, "@stoplight/path": { @@ -12997,9 +13052,9 @@ } }, "@stoplight/spectral-core": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz", - "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz", + "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==", "dev": true, "requires": { "@stoplight/better-ajv-errors": "1.0.3", @@ -13017,7 +13072,7 @@ "ajv-formats": "~2.1.0", "blueimp-md5": "2.18.0", "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "6.0.1", + "jsonpath-plus": "7.1.0", "lodash": "~4.17.21", "lodash.topath": "^4.5.2", "minimatch": "3.1.2", @@ -13212,18 +13267,18 @@ } }, "@stoplight/spectral-ruleset-migrator": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", - "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz", + "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==", "dev": true, "requires": { - "@stoplight/json": "~3.17.0", - "@stoplight/ordered-object-literal": "1.0.2", + "@stoplight/json": "~3.20.1", + "@stoplight/ordered-object-literal": "~1.0.4", "@stoplight/path": "1.3.2", "@stoplight/spectral-functions": "^1.0.0", "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^12.3.0", - "@stoplight/yaml": "4.2.2", + "@stoplight/types": "^13.6.0", + "@stoplight/yaml": "~4.2.3", "@types/node": "*", "ajv": "^8.6.0", "ast-types": "0.14.2", @@ -13233,22 +13288,28 @@ "validate-npm-package-name": "3.0.0" }, "dependencies": { - "@stoplight/ordered-object-literal": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", - "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==", - "dev": true + "@stoplight/json": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", + "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", + "dev": true, + "requires": { + "@stoplight/ordered-object-literal": "^1.0.3", + "@stoplight/path": "^1.3.2", + "@stoplight/types": "^13.6.0", + "jsonc-parser": "~2.2.1", + "lodash": "^4.17.21", + "safe-stable-stringify": "^1.1" + } }, - "@stoplight/yaml": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", - "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", + "@stoplight/types": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", + "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", "dev": true, "requires": { - "@stoplight/ordered-object-literal": "^1.0.1", - "@stoplight/types": "^12.0.0", - "@stoplight/yaml-ast-parser": "0.0.48", - "tslib": "^2.2.0" + "@types/json-schema": "^7.0.4", + "utility-types": "^3.10.0" } } } @@ -17614,9 +17675,9 @@ } }, "jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", + "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", "dev": true }, "jsonpointer": { @@ -18262,6 +18323,15 @@ "jsep": "^1.2.0", "jsonpath-plus": "^6.0.1", "lodash.topath": "^4.5.2" + }, + "dependencies": { + "jsonpath-plus": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", + "dev": true, + "optional": true + } } }, "node-fetch": { @@ -18627,6 +18697,12 @@ } } }, + "playwright-core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", + "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", + "dev": true + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -19113,9 +19189,9 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "rollup": { - "version": "2.78.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", - "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", + "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", "dev": true, "peer": true, "requires": { @@ -20125,9 +20201,9 @@ } }, "vm2": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", - "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", + "version": "3.9.11", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", + "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", "dev": true, "requires": { "acorn": "^8.7.0", diff --git a/package.json b/package.json index 74b0609b86b69..5090531d7834b 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,9 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@happy-dom/jest-environment": "4.0.1", - "@playwright/test": "1.22.2", - "eslint": "8.15.0", - "eslint-plugin-html": "6.2.0", + "@stoplight/spectral-cli": "6.5.1", + "@playwright/test": "1.25.1", + "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-jquery": "1.5.1", "eslint-plugin-sonarjs": "0.15.0", diff --git a/tests/integration/integration_test.go b/tests/integration/integration_test.go index 56b106683f38d..8fc8a854a70dc 100644 --- a/tests/integration/integration_test.go +++ b/tests/integration/integration_test.go @@ -405,4 +405,3 @@ func GetCSRF(t testing.TB, session *TestSession, urlStr string) string { doc := NewHTMLParser(t, resp.Body) return doc.GetCSRF() } - From a18ed340b8a9e4a8b1e35b395d848e349fabe799 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Wed, 31 Aug 2022 23:02:10 -0400 Subject: [PATCH 43/46] Review feedback --- .drone.yml | 7 +- Makefile | 2 +- package-lock.json | 179 +++++++++++++++++------------------------ package.json | 2 +- playwright.config.js | 29 +------ tests/e2e/utils_e2e.js | 40 +++++---- 6 files changed, 100 insertions(+), 159 deletions(-) diff --git a/.drone.yml b/.drone.yml index 141dfd8fadc71..678f1c587bef0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -546,10 +546,9 @@ steps: - name: test-e2e image: mcr.microsoft.com/playwright:v1.23.1-focal commands: - - curl -sL https://go.dev/dl/go1.18.3.linux-amd64.tar.gz -o go1.18.3.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz + - curl -sLO https://go.dev/dl/go1.18.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz - groupadd --gid 1001 gitea && useradd -m --gid 1001 --uid 1001 gitea - - apt-get update - - apt-get install build-essential --yes + - apt-get -qq update && apt-get -qqy install build-essential - export TEST_PGSQL_SCHEMA='' - ./build/test-env-prepare.sh - su gitea bash -c "export PATH=$PATH:/usr/local/go/bin && timeout -s ABRT 40m make test-e2e-pgsql" @@ -559,7 +558,7 @@ steps: USE_REPO_TEST_DIR: 1 NO_DEPS_PLAYWRIGHT: 1 TEST_PGSQL_DBNAME: 'testgitea-e2e' - NPX_FLAGS: '--yes' + DEBIAN_FRONTEND: noninteractive depends_on: [build-frontend, deps-backend] --- diff --git a/Makefile b/Makefile index 70d8c3b3ea415..95289d0ce66f1 100644 --- a/Makefile +++ b/Makefile @@ -327,7 +327,7 @@ lint: lint-frontend lint-backend .PHONY: lint-frontend lint-frontend: node_modules - npx eslint --color --max-warnings=0 --ext js,vue web_src/js build *.config.js docs/assets/js tests/e2e/*.test.e2e.js + npx eslint --color --max-warnings=0 --ext js,vue web_src/js build *.config.js docs/assets/js tests/e2e/*.test.e2e.js tests/e2e/utils_e2e.js npx stylelint --color --max-warnings=0 web_src/less npx spectral lint -q -F hint $(SWAGGER_SPEC) npx markdownlint docs *.md diff --git a/package-lock.json b/package-lock.json index aa0632dae0547..ef534bf879772 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1544,9 +1544,9 @@ } }, "node_modules/@stoplight/ordered-object-literal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", - "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", + "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==", "dev": true, "engines": { "node": ">=8" @@ -1627,9 +1627,9 @@ } }, "node_modules/@stoplight/spectral-core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz", - "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz", + "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==", "dev": true, "dependencies": { "@stoplight/better-ajv-errors": "1.0.3", @@ -1647,7 +1647,7 @@ "ajv-formats": "~2.1.0", "blueimp-md5": "2.18.0", "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "7.1.0", + "jsonpath-plus": "6.0.1", "lodash": "~4.17.21", "lodash.topath": "^4.5.2", "minimatch": "3.1.2", @@ -1882,18 +1882,18 @@ } }, "node_modules/@stoplight/spectral-ruleset-migrator": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz", - "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", + "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", "dev": true, "dependencies": { - "@stoplight/json": "~3.20.1", - "@stoplight/ordered-object-literal": "~1.0.4", + "@stoplight/json": "~3.17.0", + "@stoplight/ordered-object-literal": "1.0.2", "@stoplight/path": "1.3.2", "@stoplight/spectral-functions": "^1.0.0", "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^13.6.0", - "@stoplight/yaml": "~4.2.3", + "@stoplight/types": "^12.3.0", + "@stoplight/yaml": "4.2.2", "@types/node": "*", "ajv": "^8.6.0", "ast-types": "0.14.2", @@ -1906,34 +1906,28 @@ "node": ">=12" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/json": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", - "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/ordered-object-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", + "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==", "dev": true, - "dependencies": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - }, "engines": { - "node": ">=8.3.0" + "node": ">=8" } }, - "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/types": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", - "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/@stoplight/yaml": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", + "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@stoplight/ordered-object-literal": "^1.0.1", + "@stoplight/types": "^12.0.0", + "@stoplight/yaml-ast-parser": "0.0.48", + "tslib": "^2.2.0" }, "engines": { - "node": "^12.20 || >=14.13" + "node": ">=10.8" } }, "node_modules/@stoplight/spectral-rulesets": { @@ -7717,12 +7711,12 @@ } }, "node_modules/jsonpath-plus": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", - "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", "dev": true, "engines": { - "node": ">=12.0.0" + "node": ">=10.0.0" } }, "node_modules/jsonpointer": { @@ -8556,16 +8550,6 @@ "lodash.topath": "^4.5.2" } }, - "node_modules/nimma/node_modules/jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", - "dev": true, - "optional": true, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", @@ -9764,9 +9748,9 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "node_modules/rollup": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", - "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", "dev": true, "peer": true, "bin": { @@ -11060,9 +11044,9 @@ } }, "node_modules/vm2": { - "version": "3.9.11", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", - "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", + "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", "dev": true, "dependencies": { "acorn": "^8.7.0", @@ -12985,9 +12969,9 @@ } }, "@stoplight/ordered-object-literal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.4.tgz", - "integrity": "sha512-OF8uib1jjDs5/cCU+iOVy+GJjU3X7vk/qJIkIJFqwmlJKrrtijFmqwbu8XToXrwTYLQTP+Hebws5gtZEmk9jag==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.3.tgz", + "integrity": "sha512-cjJ7PPkhgTXNMTkevAlmyrx9xOOCaI3c6rEeYb6VitL1o1WcZtrz9KyFyISmTmUa7yYTiy2IS/ud9S8s2sn3+A==", "dev": true }, "@stoplight/path": { @@ -13052,9 +13036,9 @@ } }, "@stoplight/spectral-core": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.1.tgz", - "integrity": "sha512-UMPfkrDqIMiAoZuVx4QiVV3D5fssfhDQ6R36qTP3x0hZFOeVDIFIcVdKV8lgmvsbpKaOgU/AD/2s4jScyTIqoA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.14.0.tgz", + "integrity": "sha512-CJOudlFTajdOS+A4QBkjogFQCVzoVcKQzJ1HMkLGq4RHgu9D5cy5iiMbADMW5e/Ffew+dxs3PPAH29Y0gaEHGg==", "dev": true, "requires": { "@stoplight/better-ajv-errors": "1.0.3", @@ -13072,7 +13056,7 @@ "ajv-formats": "~2.1.0", "blueimp-md5": "2.18.0", "es-aggregate-error": "^1.0.7", - "jsonpath-plus": "7.1.0", + "jsonpath-plus": "6.0.1", "lodash": "~4.17.21", "lodash.topath": "^4.5.2", "minimatch": "3.1.2", @@ -13267,18 +13251,18 @@ } }, "@stoplight/spectral-ruleset-migrator": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.4.tgz", - "integrity": "sha512-QySMWSvGUC5D8cNDvXhrXEY0a4DB5hewHwjxXbwlH51fVNiVKJ4+KcaCW3s2yAT4T1p6/ij8NkLX9T81D4vSCg==", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.7.3.tgz", + "integrity": "sha512-1TlJgNxIqlcafzrH6gsGpQQcVkFhndib5piMNXVg9xshJ42l2yC6A0AUAixUC+ODJ5098DR7SjIYBVKk+CTQSw==", "dev": true, "requires": { - "@stoplight/json": "~3.20.1", - "@stoplight/ordered-object-literal": "~1.0.4", + "@stoplight/json": "~3.17.0", + "@stoplight/ordered-object-literal": "1.0.2", "@stoplight/path": "1.3.2", "@stoplight/spectral-functions": "^1.0.0", "@stoplight/spectral-runtime": "^1.1.0", - "@stoplight/types": "^13.6.0", - "@stoplight/yaml": "~4.2.3", + "@stoplight/types": "^12.3.0", + "@stoplight/yaml": "4.2.2", "@types/node": "*", "ajv": "^8.6.0", "ast-types": "0.14.2", @@ -13288,28 +13272,22 @@ "validate-npm-package-name": "3.0.0" }, "dependencies": { - "@stoplight/json": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.20.1.tgz", - "integrity": "sha512-FXfud+uWgIj1xv6nUO9WnmgmnVikaxJcbtR4XQt4C42n5c2qua3U05Z/3B57hP5TJRSj+tpn9ID6/bFeyYYlEg==", - "dev": true, - "requires": { - "@stoplight/ordered-object-literal": "^1.0.3", - "@stoplight/path": "^1.3.2", - "@stoplight/types": "^13.6.0", - "jsonc-parser": "~2.2.1", - "lodash": "^4.17.21", - "safe-stable-stringify": "^1.1" - } + "@stoplight/ordered-object-literal": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz", + "integrity": "sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==", + "dev": true }, - "@stoplight/types": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.6.0.tgz", - "integrity": "sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==", + "@stoplight/yaml": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.2.tgz", + "integrity": "sha512-N086FU8pmSpjc5TvMBjmlTniZVh3OXzmEh6SYljSLiuv6aMxgjyjf13YrAlUqgu0b4b6pQ5zmkjrfo9i0SiLsw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.4", - "utility-types": "^3.10.0" + "@stoplight/ordered-object-literal": "^1.0.1", + "@stoplight/types": "^12.0.0", + "@stoplight/yaml-ast-parser": "0.0.48", + "tslib": "^2.2.0" } } } @@ -17675,9 +17653,9 @@ } }, "jsonpath-plus": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", - "integrity": "sha512-gTaNRsPWO/K2KY6MrqaUFClF9kmuM6MFH5Dhg1VYDODgFbByw1yb7xu3hrViE/sz+dGOeMWgCzwUwQtAnCTE9g==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", + "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", "dev": true }, "jsonpointer": { @@ -18323,15 +18301,6 @@ "jsep": "^1.2.0", "jsonpath-plus": "^6.0.1", "lodash.topath": "^4.5.2" - }, - "dependencies": { - "jsonpath-plus": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-6.0.1.tgz", - "integrity": "sha512-EvGovdvau6FyLexFH2OeXfIITlgIbgZoAZe3usiySeaIDm5QS+A10DKNpaPBBqqRSZr2HN6HVNXxtwUAr2apEw==", - "dev": true, - "optional": true - } } }, "node-fetch": { @@ -19189,9 +19158,9 @@ "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, "rollup": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", - "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", + "version": "2.78.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz", + "integrity": "sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==", "dev": true, "peer": true, "requires": { @@ -20201,9 +20170,9 @@ } }, "vm2": { - "version": "3.9.11", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.11.tgz", - "integrity": "sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==", + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.10.tgz", + "integrity": "sha512-AuECTSvwu2OHLAZYhG716YzwodKCIJxB6u1zG7PgSQwIgAlEaoXH52bxdcvT8GkGjnYK7r7yWDW0m0sOsPuBjQ==", "dev": true, "requires": { "acorn": "^8.7.0", diff --git a/package.json b/package.json index 5090531d7834b..5a937ced955e4 100644 --- a/package.json +++ b/package.json @@ -46,8 +46,8 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@stoplight/spectral-cli": "6.5.1", "@playwright/test": "1.25.1", + "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-jquery": "1.5.1", diff --git a/playwright.config.js b/playwright.config.js index 13a8b36f31b4c..af67717a2de97 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -1,13 +1,13 @@ // @ts-check import {devices} from '@playwright/test'; -const BASE_URL = process.env.GITEA_URL ? process.env.GITEA_URL.replace(/\/$/g, '') : 'http://localhost:3000'; +const BASE_URL = process.env.GITEA_URL?.replace?.(/\/$/g, '') || 'http://localhost:3000'; /** * @see https://playwright.dev/docs/test-configuration * @type {import('@playwright/test').PlaywrightTestConfig} */ -const config = { +export default { testDir: './tests/e2e/', testMatch: /.*\.test\.e2e\.js/, // Match any .test.e2e.js files @@ -29,9 +29,6 @@ const config = { /* Retry on CI only */ retries: process.env.CI ? 2 : 0, - /* Opt out of parallel tests on CI. */ - // workers: process.env.CI ? 1 : undefined, - /* Reporter to use. See https://playwright.dev/docs/test-reporters */ reporter: process.env.CI ? 'list' : [['list'], ['html', {outputFolder: 'tests/e2e/reports/', open: 'never'}]], @@ -94,32 +91,10 @@ const config = { ...devices['iPhone 12'], }, }, - - /* Test against branded browsers. */ - // { - // name: 'Microsoft Edge', - // use: { - // channel: 'msedge', - // }, - // }, - // { - // name: 'Google Chrome', - // use: { - // channel: 'chrome', - // }, - // }, ], /* Folder for test artifacts such as screenshots, videos, traces, etc. */ outputDir: 'tests/e2e/test-artifacts/', /* Folder for test artifacts such as screenshots, videos, traces, etc. */ snapshotDir: 'tests/e2e/test-snapshots/', - - /* Run your local dev server before starting the tests */ - // webServer: { - // command: 'npm run start', - // port: 3000, - // }, }; - -export default config; diff --git a/tests/e2e/utils_e2e.js b/tests/e2e/utils_e2e.js index b3ddb348583a7..b5b9ce2751e64 100644 --- a/tests/e2e/utils_e2e.js +++ b/tests/e2e/utils_e2e.js @@ -1,17 +1,15 @@ -import {expect, request} from '@playwright/test'; +import {expect} from '@playwright/test'; -const ARTIFACTS_PATH = `tests/e2e/test-artifacts` -const LOGIN_PASSWORD = 'password' +const ARTIFACTS_PATH = `tests/e2e/test-artifacts`; +const LOGIN_PASSWORD = 'password'; -/* -log in user and store session info. This should generally be -run in test.beforeAll(), then the session can be loaded in tests. -*/ +// log in user and store session info. This should generally be +// run in test.beforeAll(), then the session can be loaded in tests. export async function login_user(browser, workerInfo, user) { // Set up a new context - let context = await browser.newContext(); - let page = await context.newPage(); - + const context = await browser.newContext(); + const page = await context.newPage(); + // Route to login page // Note: this could probably be done more quickly with a POST const response = await page.goto('/user/login'); @@ -27,21 +25,21 @@ export async function login_user(browser, workerInfo, user) { await expect(page.url(), {message: `Failed to login user ${user}`}).toBe(`${workerInfo.project.use.baseURL}/`); // Save state - await context.storageState({ path: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json` }); + await context.storageState({path: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json`}); return context; } export async function load_logged_in_context(browser, workerInfo, user) { - try { - var context = await browser.newContext({ storageState: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json` }) - } catch(err) { - if (err.code == 'ENOENT') { - console.error(`Could not find state for '${user}'. Did you call login_user(browser, workerInfo, '${user}') in test.beforeAll()?`) - } - throw err; + let context; + try { + context = await browser.newContext({storageState: `${ARTIFACTS_PATH}/state-${user}-${workerInfo.workerIndex}.json`}); + } catch (err) { + if (err.code === 'ENOENT') { + throw new Error(`Could not find state for '${user}'. Did you call login_user(browser, workerInfo, '${user}') in test.beforeAll()?`); } - return context; + } + return context; } export async function save_visual(page) { @@ -52,11 +50,11 @@ export async function save_visual(page) { await page.locator('footer div.ui.left').evaluate((node) => node.innerHTML = 'MOCK'); await expect(page).toHaveScreenshot({ fullPage: true, - timeout: 20000, + timeout: 20000, mask: [ page.locator('.dashboard-navbar span>img.ui.avatar.image'), page.locator('.ui.dropdown.jump.item.tooltip span>img.ui.avatar.image'), ], }); } -} \ No newline at end of file +} From b44459cd9b035a3b8dadc75083947cedfe76553e Mon Sep 17 00:00:00 2001 From: Kyle D Date: Thu, 1 Sep 2022 16:32:01 -0400 Subject: [PATCH 44/46] simplify installation --- .drone.yml | 1 - Makefile | 40 +++++++++++++++++++--------------------- package-lock.json | 45 --------------------------------------------- package.json | 1 - tests/e2e/README.md | 10 +++++----- 5 files changed, 24 insertions(+), 73 deletions(-) diff --git a/.drone.yml b/.drone.yml index 678f1c587bef0..09a8c34c6040a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -556,7 +556,6 @@ steps: GOPROXY: https://goproxy.io GOSUMDB: sum.golang.org USE_REPO_TEST_DIR: 1 - NO_DEPS_PLAYWRIGHT: 1 TEST_PGSQL_DBNAME: 'testgitea-e2e' DEBIAN_FRONTEND: noninteractive depends_on: [build-frontend, deps-backend] diff --git a/Makefile b/Makefile index 95289d0ce66f1..4ad62b5d7daa7 100644 --- a/Makefile +++ b/Makefile @@ -131,7 +131,8 @@ ifeq ($(filter $(TAGS_SPLIT),bindata),bindata) GO_SOURCES += $(BINDATA_DEST) endif -ifneq ($(NO_DEPS_PLAYWRIGHT),1) +# Force installation of playwright dependencies by setting this flag +ifdef DEPS_PLAYWRIGHT PLAYWRIGHT_FLAGS += --with-deps endif @@ -523,6 +524,13 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.mssql.test -test.failfast GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.individual.mssql.test -test.failfast +PLAYWRIGHT_PACKAGE := @playwright/test@1.25 + +.PHONY: playwright +playwright: $(PLAYWRIGHT_DIR) + npm install --no-save $(PLAYWRIGHT_PACKAGE) + npx playwright install $(PLAYWRIGHT_FLAGS) + .PHONY: test-e2e% test-e2e%: TEST_TYPE ?= e2e # Clear display env variable. Otherwise, chromium tests can fail. @@ -532,53 +540,43 @@ test-e2e%: TEST_TYPE ?= e2e test-e2e: test-e2e-sqlite .PHONY: test-e2e-sqlite -test-e2e-sqlite: e2e.sqlite.test generate-ini-sqlite - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-sqlite: playwright e2e.sqlite.test generate-ini-sqlite GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test .PHONY: test-e2e-sqlite\#% -test-e2e-sqlite\#%: e2e.sqlite.test generate-ini-sqlite - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-sqlite\#%: playwright e2e.sqlite.test generate-ini-sqlite GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/sqlite.ini ./e2e.sqlite.test -test.run TestE2e/$* .PHONY: test-e2e-mysql -test-e2e-mysql: e2e.mysql.test generate-ini-mysql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mysql: playwright e2e.mysql.test generate-ini-mysql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test .PHONY: test-e2e-mysql\#% -test-e2e-mysql\#%: e2e.mysql.test generate-ini-mysql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mysql\#%: playwright e2e.mysql.test generate-ini-mysql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql.ini ./e2e.mysql.test -test.run TestE2e/$* .PHONY: test-e2e-mysql8 -test-e2e-mysql8: e2e.mysql8.test generate-ini-mysql8 - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mysql8: playwright e2e.mysql8.test generate-ini-mysql8 GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test .PHONY: test-e2e-mysql8\#% -test-e2e-mysql8\#%: e2e.mysql8.test generate-ini-mysql8 - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mysql8\#%: playwright e2e.mysql8.test generate-ini-mysql8 GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mysql8.ini ./e2e.mysql8.test -test.run TestE2e/$* .PHONY: test-e2e-pgsql -test-e2e-pgsql: e2e.pgsql.test generate-ini-pgsql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-pgsql: playwright e2e.pgsql.test generate-ini-pgsql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test .PHONY: test-e2e-pgsql\#% -test-e2e-pgsql\#%: e2e.pgsql.test generate-ini-pgsql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-pgsql\#%: playwright e2e.pgsql.test generate-ini-pgsql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/pgsql.ini ./e2e.pgsql.test -test.run TestE2e/$* .PHONY: test-e2e-mssql -test-e2e-mssql: e2e.mssql.test generate-ini-mssql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mssql: playwright e2e.mssql.test generate-ini-mssql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test .PHONY: test-e2e-mssql\#% -test-e2e-mssql\#%: e2e.mssql.test generate-ini-mssql - npx playwright install $(PLAYWRIGHT_FLAGS) +test-e2e-mssql\#%: playwright e2e.mssql.test generate-ini-mssql GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./e2e.mssql.test -test.run TestE2e/$* .PHONY: bench-sqlite diff --git a/package-lock.json b/package-lock.json index ef534bf879772..8142eea692dce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,7 +46,6 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@playwright/test": "1.25.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", @@ -1357,22 +1356,6 @@ "node": ">= 8" } }, - "node_modules/@playwright/test": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", - "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "playwright-core": "1.25.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -9045,18 +9028,6 @@ "node": ">=8" } }, - "node_modules/playwright-core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", - "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", - "dev": true, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -12818,16 +12789,6 @@ "fastq": "^1.6.0" } }, - "@playwright/test": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", - "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", - "dev": true, - "requires": { - "@types/node": "*", - "playwright-core": "1.25.1" - } - }, "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -18666,12 +18627,6 @@ } } }, - "playwright-core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", - "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", - "dev": true - }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", diff --git a/package.json b/package.json index 5a937ced955e4..3a5cb3f624a90 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,6 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { - "@playwright/test": "1.25.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", diff --git a/tests/e2e/README.md b/tests/e2e/README.md index bdb28e28dd33d..9dbdfc21d82ee 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -30,7 +30,7 @@ drone exec --local --build-event "pull_request" ## Run sqlite e2e tests Start tests ``` -make NO_DEPS_PLAYWRIGHT=1 test-e2e-sqlite +make test-e2e-sqlite ``` ## Run MySQL e2e tests @@ -41,7 +41,7 @@ docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --rm --name ``` Start tests based on the database container ``` -TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' NO_DEPS_PLAYWRIGHT=1 make test-e2e-mysql +TEST_MYSQL_HOST=localhost:3306 TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-e2e-mysql ``` ## Run pgsql e2e tests @@ -51,7 +51,7 @@ docker run -e "POSTGRES_DB=test" -p 5432:5432 --rm --name pgsql postgres:latest ``` Start tests based on the database container ``` -TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres NO_DEPS_PLAYWRIGHT=1 make test-e2e-pgsql +TEST_PGSQL_HOST=localhost:5432 TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-e2e-pgsql ``` ## Run mssql e2e tests @@ -61,7 +61,7 @@ docker run -e "ACCEPT_EULA=Y" -e "MSSQL_PID=Standard" -e "SA_PASSWORD=MwantsaSec ``` Start tests based on the database container ``` -TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=gitea_test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 NO_DEPS_PLAYWRIGHT=1 make test-e2e-mssql +TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=gitea_test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-e2e-mssql ``` ## Running individual tests @@ -79,7 +79,7 @@ make test-e2e-sqlite#example For other databases(replace `mssql` to `mysql`, `mysql8` or `pgsql`): ``` -TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 NO_DEPS_PLAYWRIGHT=1 make test-e2e-mssql#example +TEST_MSSQL_HOST=localhost:1433 TEST_MSSQL_DBNAME=test TEST_MSSQL_USERNAME=sa TEST_MSSQL_PASSWORD=MwantsaSecurePassword1 make test-e2e-mssql#example ``` ## Visual testing From 224d45adf23f2ee99789e79bd8d84ba4cb5b7012 Mon Sep 17 00:00:00 2001 From: Kyle D Date: Thu, 1 Sep 2022 17:30:32 -0400 Subject: [PATCH 45/46] Fix ci --- .drone.yml | 7 +++++++ Makefile | 4 +--- package-lock.json | 45 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 1 + 4 files changed, 54 insertions(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index 09a8c34c6040a..93a471fae1db4 100644 --- a/.drone.yml +++ b/.drone.yml @@ -514,6 +514,10 @@ trigger: event: - pull_request +volumes: + - name: deps + temp: {} + services: - name: pgsql pull: default @@ -541,6 +545,9 @@ steps: pull: always commands: - make deps-backend + volumes: + - name: deps + path: /go # TODO: We should probably build all dependencies into a test image - name: test-e2e diff --git a/Makefile b/Makefile index 4ad62b5d7daa7..17b346e07018c 100644 --- a/Makefile +++ b/Makefile @@ -524,11 +524,9 @@ test-mssql-migration: migrations.mssql.test migrations.individual.mssql.test gen GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.mssql.test -test.failfast GITEA_ROOT="$(CURDIR)" GITEA_CONF=tests/mssql.ini ./migrations.individual.mssql.test -test.failfast -PLAYWRIGHT_PACKAGE := @playwright/test@1.25 - .PHONY: playwright playwright: $(PLAYWRIGHT_DIR) - npm install --no-save $(PLAYWRIGHT_PACKAGE) + npm install --no-save @playwright/test npx playwright install $(PLAYWRIGHT_FLAGS) .PHONY: test-e2e% diff --git a/package-lock.json b/package-lock.json index 8142eea692dce..ef534bf879772 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,6 +46,7 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { + "@playwright/test": "1.25.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", @@ -1356,6 +1357,22 @@ "node": ">= 8" } }, + "node_modules/@playwright/test": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", + "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "playwright-core": "1.25.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -9028,6 +9045,18 @@ "node": ">=8" } }, + "node_modules/playwright-core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", + "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", + "dev": true, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -12789,6 +12818,16 @@ "fastq": "^1.6.0" } }, + "@playwright/test": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.25.1.tgz", + "integrity": "sha512-IJ4X0yOakXtwkhbnNzKkaIgXe6df7u3H3FnuhI9Jqh+CdO0e/lYQlDLYiyI9cnXK8E7UAppAWP+VqAv6VX7HQg==", + "dev": true, + "requires": { + "@types/node": "*", + "playwright-core": "1.25.1" + } + }, "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", @@ -18627,6 +18666,12 @@ } } }, + "playwright-core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.25.1.tgz", + "integrity": "sha512-lSvPCmA2n7LawD2Hw7gSCLScZ+vYRkhU8xH0AapMyzwN+ojoDqhkH/KIEUxwNu2PjPoE/fcE0wLAksdOhJ2O5g==", + "dev": true + }, "pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", diff --git a/package.json b/package.json index 3a5cb3f624a90..5a937ced955e4 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "wrap-ansi": "8.0.1" }, "devDependencies": { + "@playwright/test": "1.25.1", "@stoplight/spectral-cli": "6.5.1", "eslint": "8.22.0", "eslint-plugin-import": "2.26.0", From d06d1c9e93752a5179f0c2f9a9511a109feff5aa Mon Sep 17 00:00:00 2001 From: Kyle D Date: Fri, 2 Sep 2022 08:20:22 -0400 Subject: [PATCH 46/46] Update install docs --- tests/e2e/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/README.md b/tests/e2e/README.md index 9dbdfc21d82ee..c84d7807fc0d6 100644 --- a/tests/e2e/README.md +++ b/tests/e2e/README.md @@ -16,9 +16,9 @@ Make sure to perform a clean front-end build before running tests: make clean frontend ``` -## Install playwright dependencies +## Install playwright system dependencies ``` -npx install playwright --with-deps +npx playwright install-deps ```