From d1b17bff235073a80679e51ef5883252b88284b8 Mon Sep 17 00:00:00 2001 From: nileshgulia1 Date: Tue, 23 Aug 2022 14:15:04 +0530 Subject: [PATCH 1/8] update(jest): add @plone/volto-slate resolver refs- #153447 --- jest-addon.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/jest-addon.config.js b/jest-addon.config.js index 1e5c80c..e31115a 100644 --- a/jest-addon.config.js +++ b/jest-addon.config.js @@ -12,7 +12,8 @@ module.exports = { '@root/(.*)$': '/src/$1', '@plone/volto-quanta/(.*)$': '/src/addons/volto-quanta/src/$1', '@eeacms/(.*?)/(.*)$': '/src/addons/$1/src/$2', - 'volto-slate/(.*)$': '/src/addons/volto-slate/src/$1', + '@plone/volto-slate': + '/node_modules/@plone/volto/packages/volto-slate/src', '~/(.*)$': '/src/$1', 'load-volto-addons': '/node_modules/@plone/volto/jest-addons-loader.js', From 131adf85ba2d534ac92b56a4a958aa0360c5e050 Mon Sep 17 00:00:00 2001 From: EEA Jenkins Date: Thu, 22 Sep 2022 19:52:52 +0300 Subject: [PATCH 2/8] Add Sonarqube tag using eea-website-frontend addons list --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 2e046e8..6ca4a8c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { environment { GIT_NAME = "volto-widget-temporal-coverage" NAMESPACE = "@eeacms" - SONARQUBE_TAGS = "volto.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,forest.eea.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,circularity.eea.europa.eu" + SONARQUBE_TAGS = "volto.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,forest.eea.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,circularity.eea.europa.eu,prod-www.eea.europa.eu" DEPENDENCIES = "" VOLTO = "alpha" } From a85de2473e9afd331c38dff2feee0214a3330b47 Mon Sep 17 00:00:00 2001 From: valentinab25 Date: Fri, 30 Sep 2022 17:28:26 +0300 Subject: [PATCH 3/8] [JENKINS] Add missing md5 dev dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 35e2ff4..de8320e 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "dependencies": {}, "devDependencies": { "@cypress/code-coverage": "^3.9.5", - "babel-plugin-transform-class-properties": "^6.24.1" + "babel-plugin-transform-class-properties": "^6.24.1", + "md5": "^2.3.0" }, "scripts": { "release": "release-it", From 2aad9afc04afe37df914877b79c6c66d5836b972 Mon Sep 17 00:00:00 2001 From: EEA Jenkins Date: Tue, 4 Oct 2022 23:57:49 +0300 Subject: [PATCH 4/8] Add Sonarqube tag using marine-frontend addons list --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6ca4a8c..0abe47b 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ pipeline { environment { GIT_NAME = "volto-widget-temporal-coverage" NAMESPACE = "@eeacms" - SONARQUBE_TAGS = "volto.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,forest.eea.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,circularity.eea.europa.eu,prod-www.eea.europa.eu" + SONARQUBE_TAGS = "volto.eea.europa.eu,www.eea.europa.eu-ims,climate-energy.eea.europa.eu,sustainability.eionet.europa.eu,forest.eea.europa.eu,biodiversity.europa.eu,clms.land.copernicus.eu,industry.eea.europa.eu,water.europa.eu-freshwater,demo-www.eea.europa.eu,clmsdemo.devel6cph.eea.europa.eu,circularity.eea.europa.eu,prod-www.eea.europa.eu,water.europa.eu-marine" DEPENDENCIES = "" VOLTO = "alpha" } From abe78b8aa10af13a29f7842d52089a6587669778 Mon Sep 17 00:00:00 2001 From: Miu Razvan Date: Tue, 25 Oct 2022 16:12:51 +0300 Subject: [PATCH 5/8] Use latest volto & cypress --- .coverage.babel.config.js | 2 +- .gitignore | 2 + .i18n.babel.config.js | 1 + .npmignore | 96 ++++++++++ Jenkinsfile | 12 +- Makefile | 61 ++++++- README.md | 75 +------- RELEASE.md | 74 ++++++++ babel.config.js | 17 ++ cypress.config.js | 26 +++ cypress.json | 17 -- .../01-block-basics.cy.js} | 9 +- cypress/plugins/index.js | 26 --- cypress/support/commands.js | 172 +++++++++++++++++- cypress/support/e2e.js | 125 +++++++++++++ cypress/support/index.js | 53 ------ jest-addon.config.js | 4 +- locales/volto.pot | 0 package.json | 5 +- 19 files changed, 582 insertions(+), 195 deletions(-) create mode 100644 .i18n.babel.config.js create mode 100644 .npmignore create mode 100644 RELEASE.md create mode 100644 babel.config.js create mode 100644 cypress.config.js delete mode 100644 cypress.json rename cypress/{integration/block-basics.js => e2e/01-block-basics.cy.js} (79%) delete mode 100644 cypress/plugins/index.js create mode 100644 cypress/support/e2e.js delete mode 100644 cypress/support/index.js create mode 100644 locales/volto.pot diff --git a/.coverage.babel.config.js b/.coverage.babel.config.js index e8b54d3..37219fd 100644 --- a/.coverage.babel.config.js +++ b/.coverage.babel.config.js @@ -2,7 +2,7 @@ const defaultBabel = require('@plone/volto/babel'); function applyDefault(api) { const voltoBabel = defaultBabel(api); - voltoBabel.plugins.push('@babel/plugin-transform-modules-commonjs', 'transform-class-properties', 'istanbul'); + voltoBabel.plugins.push('istanbul'); return voltoBabel; } diff --git a/.gitignore b/.gitignore index cdcaf46..53b9801 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ .vscode/ .history .eslintrc.js +.nyc_output project +coverage logs *.log npm-debug.log* diff --git a/.i18n.babel.config.js b/.i18n.babel.config.js new file mode 100644 index 0000000..a900a75 --- /dev/null +++ b/.i18n.babel.config.js @@ -0,0 +1 @@ +module.exports = require('@plone/volto/babel'); diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..080322a --- /dev/null +++ b/.npmignore @@ -0,0 +1,96 @@ +# https://docs.npmjs.com/using-npm/developers.html#keeping-files-out-of-your-package + +# Directories +api/ +bin/ +build/ +lib/ +g-api/ +tests/ + +# Docs +docs/ + +# Cypress +cypress/ + +# Tests +__tests__/ +*.snap + +# Files +.travis.yml +requirements-docs.txt +requirements-tests.txt +yarn.lock +.dockerignore +.gitattributes +.yarnrc +.nvmrc +changelogupdater.js +pip-selfcheck.json +Dockerfile +CNAME +entrypoint.sh +Jenkinsfile +Makefile + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# next.js build output +.next + +styleguide.config +.vscode +packages diff --git a/Jenkinsfile b/Jenkinsfile index 0abe47b..c368c15 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -41,19 +41,19 @@ pipeline { "ES lint": { node(label: 'docker') { - sh '''docker run -i --rm --name="$BUILD_TAG-eslint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" plone/volto-addon-ci eslint''' + sh '''docker run -i --rm --name="$BUILD_TAG-eslint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha eslint''' } }, "Style lint": { node(label: 'docker') { - sh '''docker run -i --rm --name="$BUILD_TAG-stylelint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" plone/volto-addon-ci stylelint''' + sh '''docker run -i --rm --name="$BUILD_TAG-stylelint" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha stylelint''' } }, "Prettier": { node(label: 'docker') { - sh '''docker run -i --rm --name="$BUILD_TAG-prettier" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" plone/volto-addon-ci prettier''' + sh '''docker run -i --rm --name="$BUILD_TAG-prettier" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha prettier''' } } ) @@ -77,8 +77,8 @@ pipeline { node(label: 'docker') { script { try { - sh '''docker pull plone/volto-addon-ci''' - sh '''docker run -i --name="$BUILD_TAG-volto" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" plone/volto-addon-ci''' + sh '''docker pull plone/volto-addon-ci:alpha''' + sh '''docker run -i --name="$BUILD_TAG-volto" -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e VOLTO=$VOLTO plone/volto-addon-ci:alpha''' sh '''rm -rf xunit-reports''' sh '''mkdir -p xunit-reports''' sh '''docker cp $BUILD_TAG-volto:/opt/frontend/my-volto-project/coverage xunit-reports/''' @@ -126,7 +126,7 @@ pipeline { script { try { sh '''docker pull eeacms/plone-backend; docker run --rm -d --name="$BUILD_TAG-plone" -e SITE="Plone" -e PROFILES="eea.kitkat:testing" eeacms/plone-backend''' - sh '''docker pull plone/volto-addon-ci; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e DEPENDENCIES="$DEPENDENCIES" -e NODE_ENV=development -e VOLTO="$VOLTO" plone/volto-addon-ci cypress''' + sh '''docker pull plone/volto-addon-ci:alpha; docker run -i --name="$BUILD_TAG-cypress" --link $BUILD_TAG-plone:plone -e NAMESPACE="$NAMESPACE" -e GIT_NAME=$GIT_NAME -e GIT_BRANCH="$BRANCH_NAME" -e GIT_CHANGE_ID="$CHANGE_ID" -e DEPENDENCIES="$DEPENDENCIES" -e NODE_ENV=development -e VOLTO=$VOLTO plone/volto-addon-ci:alpha cypress''' } finally { try { sh '''rm -rf cypress-reports cypress-results cypress-coverage''' diff --git a/Makefile b/Makefile index b57f58f..a43db1d 100644 --- a/Makefile +++ b/Makefile @@ -36,14 +36,63 @@ start-backend-docker: ## Starts a Docker-based backend .PHONY: test test: - docker pull plone/volto-addon-ci - docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" plone/volto-addon-ci yarn test --watchAll=false + docker pull plone/volto-addon-ci:alpha + docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha .PHONY: test-update test-update: - docker pull plone/volto-addon-ci - docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" plone/volto-addon-ci yarn test --watchAll=false -u + docker pull plone/volto-addon-ci:alpha + docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha yarn test src/addons/${DIR}/src --watchAll=false -u .PHONY: help -help: ## Show this help. - @echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)" +help: ## Show this help. + @echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)" + + +ifeq ($(wildcard ./project),) + NODE_MODULES = "../../../node_modules" +else + NODE_MODULES = "./project/node_modules" +endif + +.PHONY: stylelint +stylelint: + $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}' + +.PHONY: stylelint-overrides +stylelint-overrides: + $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides' + +.PHONY: stylelint-fix +stylelint-fix: + $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}' --fix + $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides' --fix + +.PHONY: prettier +prettier: + $(NODE_MODULES)/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}' + +.PHONY: prettier-fix +prettier-fix: + $(NODE_MODULES)/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}' + +.PHONY: lint +lint: + $(NODE_MODULES)/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}' + +.PHONY: lint-fix +lint-fix: + $(NODE_MODULES)/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}' + +.PHONY: i18n +i18n: + rm -rf build/messages + NODE_ENV=development $(NODE_MODULES)/.bin/i18n --addon + +.PHONY: cypress-run +cypress-run: + NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress run + +.PHONY: cypress-open +cypress-open: + NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress open diff --git a/README.md b/README.md index 85b37c4..c61344e 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,12 @@ [![Bugs](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-widget-temporal-coverage-develop&metric=bugs)](https://sonarqube.eea.europa.eu/dashboard?id=volto-widget-temporal-coverage-develop) [![Duplicated Lines (%)](https://sonarqube.eea.europa.eu/api/project_badges/measure?project=volto-widget-temporal-coverage-develop&metric=duplicated_lines_density)](https://sonarqube.eea.europa.eu/dashboard?id=volto-widget-temporal-coverage-develop) - [Volto](https://github.com/plone/volto) Widget: Temporal Coverage ## Features ![Widget Temporal coverage](https://github.com/eea/volto-widget-temporal-coverage/raw/docs/docs/volto-widget-temporal-coverage.gif) - ## Getting started 1. Create new volto project if you don't already have one: @@ -59,78 +57,7 @@ ## Release -### Automatic release using Jenkins - -* The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory. -* It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits. -* The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage. -* Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool. -* As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready. -* The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0). -* You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation. -* Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file. - -### Manual release from the develop branch ( beta release ) - -#### Installation and configuration of release-it - -You need to first install the [release-it](https://github.com/release-it/release-it) client. - - ``` - npm install -g release-it - ``` - -Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository. - -Release-it is a tool that automates 4 important steps in the release process: - -1. Version increase in `package.json` ( increased from the current version in `package.json`) -2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases ) -3. GitHub release on the commit with the changelog and package.json modification on the develop branch -4. NPM release ( by default it's disabled, but can be enabled in the configuration file ) - -To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens) - - ``` - export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX - ``` - - To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN : - - ``` - echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc - ``` - -#### Using release-it tool - -There are 3 yarn scripts that can be run to do the release - -##### yarn release-beta - -Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input). - -``` -? Select increment (next version): -❯ prepatch (0.1.1-beta.0) - preminor (0.2.0-beta.0) - premajor (1.0.0-beta.0) - Other, please specify... -``` - -##### yarn release-major-beta - -Same as `yarn release-beta`, but with premajor version pre-selected. - -##### yarn release - -Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other. - -#### Important notes - -> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST. - -> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version). - +See [RELEASE.md](https://github.com/eea/volto-widget-temporal-coverage/blob/master/RELEASE.md). ## How to contribute diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000..24f98ee --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,74 @@ +## Release + +### Automatic release using Jenkins + +* The automatic release is started by creating a [Pull Request](../../compare/master...develop) from `develop` to `master`. The pull request status checks correlated to the branch and PR Jenkins jobs need to be processed successfully. 1 review from a github user with rights is mandatory. +* It runs on every commit on `master` branch, which is protected from direct commits, only allowing pull request merge commits. +* The automatic release is done by [Jenkins](https://ci.eionet.europa.eu). The status of the release job can be seen both in the Readme.md badges and the green check/red cross/yellow circle near the last commit information. If you click on the icon, you will have the list of checks that were run. The `continuous-integration/jenkins/branch` link goes to the Jenkins job execution webpage. +* Automated release scripts are located in the `eeacms/gitflow` docker image, specifically [js-release.sh](https://github.com/eea/eea.docker.gitflow/blob/master/src/js-release.sh) script. It uses the `release-it` tool. +* As long as a PR request is open from develop to master, the PR Jenkins job will automatically re-create the CHANGELOG.md and package.json files to be production-ready. +* The version format must be MAJOR.MINOR.PATCH. By default, next release is set to next minor version (with patch 0). +* You can manually change the version in `package.json`. The new version must not be already present in the tags/releases of the repository, otherwise it will be automatically increased by the script. Any changes to the version will trigger a `CHANGELOG.md` re-generation. +* Automated commits and commits with [JENKINS] or [YARN] in the commit log are excluded from `CHANGELOG.md` file. + +### Manual release from the develop branch ( beta release ) + +#### Installation and configuration of release-it + +You need to first install the [release-it](https://github.com/release-it/release-it) client. + + ``` + npm install -g release-it + ``` + +Release-it uses the configuration written in the [`.release-it.json`](./.release-it.json) file located in the root of the repository. + +Release-it is a tool that automates 4 important steps in the release process: + +1. Version increase in `package.json` ( increased from the current version in `package.json`) +2. `CHANGELOG.md` automatic generation from commit messages ( grouped by releases ) +3. GitHub release on the commit with the changelog and package.json modification on the develop branch +4. NPM release ( by default it's disabled, but can be enabled in the configuration file ) + +To configure the authentification, you need to export GITHUB_TOKEN for [GitHub](https://github.com/settings/tokens) + + ``` + export GITHUB_TOKEN=XXX-XXXXXXXXXXXXXXXXXXXXXX + ``` + + To configure npm, you can use the `npm login` command or use a configuration file with a TOKEN : + + ``` + echo "//registry.npmjs.org/:_authToken=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" > .npmrc + ``` + +#### Using release-it tool + +There are 3 yarn scripts that can be run to do the release + +##### yarn release-beta + +Automatically calculates and presents 3 beta versions - patch, minor and major for you to choose ( or Other for manual input). + +``` +? Select increment (next version): +❯ prepatch (0.1.1-beta.0) + preminor (0.2.0-beta.0) + premajor (1.0.0-beta.0) + Other, please specify... +``` + +##### yarn release-major-beta + +Same as `yarn release-beta`, but with premajor version pre-selected. + +##### yarn release + +Generic command, does not automatically add the `beta` to version, but you can still manually write it if you choose Other. + +#### Important notes + +> Do not use release-it tool on master branch, the commit on CHANGELOG.md file and the version increase in the package.json file can't be done without a PULL REQUEST. + +> Do not keep Pull Requests from develop to master branches open when you are doing beta releases from the develop branch. As long as a PR to master is open, an automatic script will run on every commit and will update both the version and the changelog to a production-ready state - ( MAJOR.MINOR.PATCH mandatory format for version). + diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..51bd52b --- /dev/null +++ b/babel.config.js @@ -0,0 +1,17 @@ +module.exports = function (api) { + api.cache(true); + const presets = ['razzle']; + const plugins = [ + [ + 'react-intl', // React Intl extractor, required for the whole i18n infrastructure to work + { + messagesDir: './build/messages/', + }, + ], + ]; + + return { + plugins, + presets, + }; +}; diff --git a/cypress.config.js b/cypress.config.js new file mode 100644 index 0000000..30be8ac --- /dev/null +++ b/cypress.config.js @@ -0,0 +1,26 @@ +const { defineConfig } = require('cypress'); + +module.exports = defineConfig({ + viewportWidth: 1280, + defaultCommandTimeout: 8888, + chromeWebSecurity: false, + reporter: 'junit', + video: true, + retries: { + runMode: 8, + openMode: 0, + }, + reporterOptions: { + mochaFile: 'cypress/reports/cypress-[hash].xml', + jenkinsMode: true, + toConsole: true, + }, + e2e: { + setupNodeEvents(on, config) { + // e2e testing node events setup code + require('@cypress/code-coverage/task')(on, config); + return config; + }, + baseUrl: 'http://localhost:3000', + }, +}); diff --git a/cypress.json b/cypress.json deleted file mode 100644 index 736dedd..0000000 --- a/cypress.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "baseUrl": "http://localhost:3000", - "viewportWidth": 1280, - "defaultCommandTimeout": 8888, - "chromeWebSecurity": false, - "reporter": "junit", - "video": true, - "retries": { - "runMode": 8, - "openMode": 0 - }, - "reporterOptions": { - "mochaFile": "cypress/reports/cypress-[hash].xml", - "jenkinsMode": true, - "toConsole": true - } -} diff --git a/cypress/integration/block-basics.js b/cypress/e2e/01-block-basics.cy.js similarity index 79% rename from cypress/integration/block-basics.js rename to cypress/e2e/01-block-basics.cy.js index 4daed6d..81e421c 100644 --- a/cypress/integration/block-basics.js +++ b/cypress/e2e/01-block-basics.cy.js @@ -1,13 +1,10 @@ -import { setupBeforeEach, tearDownAfterEach } from '../support'; +import { slateBeforeEach, slateAfterEach } from '../support/e2e'; describe('Blocks Tests', () => { - beforeEach(setupBeforeEach); - afterEach(tearDownAfterEach); + beforeEach(slateBeforeEach); + afterEach(slateAfterEach); it('Add Block: Empty', () => { - // without this the clear command below does nothing sometimes - cy.wait(500); - // Change page title cy.get('[contenteditable=true]').first().clear(); diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js deleted file mode 100644 index 27a31a5..0000000 --- a/cypress/plugins/index.js +++ /dev/null @@ -1,26 +0,0 @@ -/// -// *********************************************************** -// This example plugins/index.js can be used to load plugins -// -// You can change the location of this file or turn off loading -// the plugins file with the 'pluginsFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/plugins-guide -// *********************************************************** - -// This function is called when a project is opened or re-opened (e.g. due to -// the project's config changing) - -/** - * @type {Cypress.PluginConfig} - */ -module.exports = (on, config) => { - // `on` is used to hook into various events Cypress emits - // `config` is the resolved Cypress config - /* coverage-start - require('@cypress/code-coverage/task')(on, config) - on('file:preprocessor', require('@cypress/code-coverage/use-babelrc')) - return config - coverage-end */ -}; diff --git a/cypress/support/commands.js b/cypress/support/commands.js index ac48461..0a63558 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -92,7 +92,7 @@ Cypress.Commands.add( title: contentTitle, blocks: { 'd3f1c443-583f-4e8e-a682-3bf25752a300': { '@type': 'title' }, - '7624cf59-05d0-4055-8f55-5fd6597d84b0': { '@type': 'text' }, + '7624cf59-05d0-4055-8f55-5fd6597d84b0': { '@type': 'slate' }, }, blocks_layout: { items: [ @@ -125,6 +125,100 @@ Cypress.Commands.add( }, ); +// --- Add DX Content-Type ---------------------------------------------------------- +Cypress.Commands.add('addContentType', (name) => { + let api_url, auth; + api_url = Cypress.env('API_PATH') || 'http://localhost:8080/Plone'; + auth = { + user: 'admin', + pass: 'admin', + }; + return cy + .request({ + method: 'POST', + url: `${api_url}/@controlpanels/dexterity-types/${name}`, + headers: { + Accept: 'application/json', + }, + auth: auth, + body: { + title: name, + }, + }) + .then(() => console.log(`${name} content-type added.`)); +}); + +// --- Remove DX behavior ---------------------------------------------------------- +Cypress.Commands.add('removeContentType', (name) => { + let api_url, auth; + api_url = Cypress.env('API_PATH') || 'http://localhost:8080/Plone'; + auth = { + user: 'admin', + pass: 'admin', + }; + return cy + .request({ + method: 'DELETE', + url: `${api_url}/@controlpanels/dexterity-types/${name}`, + headers: { + Accept: 'application/json', + }, + auth: auth, + body: {}, + }) + .then(() => console.log(`${name} content-type removed.`)); +}); + +// --- Add DX field ---------------------------------------------------------- +Cypress.Commands.add('addSlateJSONField', (type, name) => { + let api_url, auth; + api_url = Cypress.env('API_PATH') || 'http://localhost:8080/Plone'; + auth = { + user: 'admin', + pass: 'admin', + }; + return cy + .request({ + method: 'POST', + url: `${api_url}/@types/${type}`, + headers: { + Accept: 'application/json', + }, + auth: auth, + body: { + id: name, + title: name, + description: 'Slate JSON Field', + factory: 'SlateJSONField', + required: false, + }, + }) + .then(() => console.log(`${name} SlateJSONField field added to ${type}`)); +}); + +// --- Remove DX field ---------------------------------------------------------- +Cypress.Commands.add('removeSlateJSONField', (type, name) => { + let api_url, auth; + api_url = Cypress.env('API_PATH') || 'http://localhost:8080/Plone'; + auth = { + user: 'admin', + pass: 'admin', + }; + return cy + .request({ + method: 'DELETE', + url: `${api_url}/@types/${type}/${name}`, + headers: { + Accept: 'application/json', + }, + auth: auth, + body: {}, + }) + .then(() => + console.log(`${name} SlateJSONField field removed from ${type}`), + ); +}); + // --- REMOVE CONTENT -------------------------------------------------------- Cypress.Commands.add('removeContent', (path) => { let api_url, auth; @@ -146,6 +240,41 @@ Cypress.Commands.add('removeContent', (path) => { .then(() => console.log(`${path} removed`)); }); +Cypress.Commands.add('typeInSlate', { prevSubject: true }, (subject, text) => { + return ( + cy + .wrap(subject) + .then((subject) => { + subject[0].dispatchEvent( + new InputEvent('beforeinput', { + inputType: 'insertText', + data: text, + }), + ); + return subject; + }) + // TODO: do this only for Electron-based browser which does not understand instantaneously + // that the user inserted some text in the block + .wait(1000) + ); +}); + +Cypress.Commands.add('lineBreakInSlate', { prevSubject: true }, (subject) => { + return ( + cy + .wrap(subject) + .then((subject) => { + subject[0].dispatchEvent( + new InputEvent('beforeinput', { inputType: 'insertLineBreak' }), + ); + return subject; + }) + // TODO: do this only for Electron-based browser which does not understand instantaneously + // that the block was split + .wait(1000) + ); +}); + // --- SET WORKFLOW ---------------------------------------------------------- Cypress.Commands.add( 'setWorkflow', @@ -247,6 +376,47 @@ Cypress.Commands.add( }, ); +Cypress.Commands.add('getSlateEditorAndType', (type) => { + cy.get('.content-area .slate-editor [contenteditable=true]') + .focus() + .click() + .wait(1000) + .type(type); +}); + +Cypress.Commands.add('setSlateSelection', (subject, query, endQuery) => { + cy.get('.slate-editor.selected [contenteditable=true]') + .focus() + .click() + .setSelection(subject, query, endQuery) + .wait(1000); +}); + +Cypress.Commands.add('setSlateCursor', (subject, query, endQuery) => { + cy.get('.slate-editor.selected [contenteditable=true]') + .focus() + .click() + .setCursor(subject, query, endQuery) + .wait(1000); +}); + +Cypress.Commands.add('clickSlateButton', (button) => { + cy.get(`.slate-inline-toolbar .button-wrapper a[title="${button}"]`).click(); +}); + +Cypress.Commands.add('toolbarSave', () => { + cy.wait(1000); + + // Save + cy.get('#toolbar-save').click(); + cy.waitForResourceToLoad('@navigation'); + cy.waitForResourceToLoad('@breadcrumbs'); + cy.waitForResourceToLoad('@actions'); + cy.waitForResourceToLoad('@types'); + cy.waitForResourceToLoad('my-page'); + cy.url().should('eq', Cypress.config().baseUrl + '/cypress/my-page'); +}); + // Low level command reused by `setCursorBefore` and `setCursorAfter`, equal to `setCursorAfter` Cypress.Commands.add( 'setCursor', diff --git a/cypress/support/e2e.js b/cypress/support/e2e.js new file mode 100644 index 0000000..f696418 --- /dev/null +++ b/cypress/support/e2e.js @@ -0,0 +1,125 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; +// Alternatively you can use CommonJS syntax: +// require('./commands') + +//Generate code-coverage +import '@cypress/code-coverage/support'; + +export const slateBeforeEach = (contentType = 'Document') => { + cy.autologin(); + cy.createContent({ + contentType: 'Document', + contentId: 'cypress', + contentTitle: 'Cypress', + }); + cy.createContent({ + contentType: contentType, + contentId: 'my-page', + contentTitle: 'My Page', + path: 'cypress', + }); + cy.visit('/cypress/my-page'); + cy.waitForResourceToLoad('@navigation'); + cy.waitForResourceToLoad('@breadcrumbs'); + cy.waitForResourceToLoad('@actions'); + cy.waitForResourceToLoad('@types'); + cy.waitForResourceToLoad('my-page'); + cy.navigate('/cypress/my-page/edit'); +}; + +export const slateAfterEach = () => { + cy.autologin(); + cy.removeContent('cypress'); +}; + +export const slateJsonBeforeEach = (contentType = 'slate') => { + cy.autologin(); + cy.addContentType(contentType); + cy.addSlateJSONField(contentType, 'slate'); + slateBeforeEach(contentType); +}; + +export const slateJsonAfterEach = (contentType = 'slate') => { + cy.autologin(); + cy.removeContentType(contentType); + slateAfterEach(); +}; + +export const getSelectedSlateEditor = () => { + return cy.get('.slate-editor.selected [contenteditable=true]').click(); +}; + +export const createSlateBlock = () => { + cy.get('.ui.basic.icon.button.block-add-button').first().click(); + cy.get('.blocks-chooser .title').contains('Text').click(); + cy.get('.ui.basic.icon.button.slate').contains('Text').click(); + return getSelectedSlateEditor(); +}; + +export const getSlateBlockValue = (sb) => { + return sb.invoke('attr', 'data-slate-value').then((str) => { + return typeof str === 'undefined' ? [] : JSON.parse(str); + }); +}; + +export const createSlateBlockWithList = ({ + numbered, + firstItemText, + secondItemText, +}) => { + let s1 = createSlateBlock(); + + s1.typeInSlate(firstItemText + secondItemText); + + // select all contents of slate block + // - this opens hovering toolbar + cy.contains(firstItemText + secondItemText).then((el) => { + selectSlateNodeOfWord(el); + }); + + // TODO: do not hardcode these selectors: + if (numbered) { + // this is the numbered list option in the hovering toolbar + cy.get('.slate-inline-toolbar > :nth-child(9)').click(); + } else { + // this is the bulleted list option in the hovering toolbar + cy.get('.slate-inline-toolbar > :nth-child(10)').click(); + } + + // move the text cursor + const sse = getSelectedSlateEditor(); + sse.type('{leftarrow}'); + for (let i = 0; i < firstItemText.length; ++i) { + sse.type('{rightarrow}'); + } + + // simulate pressing Enter + getSelectedSlateEditor().lineBreakInSlate(); + + return s1; +}; + +export const selectSlateNodeOfWord = (el) => { + return cy.window().then((win) => { + var event = new CustomEvent('Test_SelectWord', { + detail: el[0], + }); + win.document.dispatchEvent(event); + }); +}; diff --git a/cypress/support/index.js b/cypress/support/index.js deleted file mode 100644 index 32395ab..0000000 --- a/cypress/support/index.js +++ /dev/null @@ -1,53 +0,0 @@ -// *********************************************************** -// This example support/index.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands'; - -// Alternatively you can use CommonJS syntax: -// require('./commands') - -/* coverage-start -//Generate code-coverage -import '@cypress/code-coverage/support'; -coverage-end */ - -export const setupBeforeEach = () => { - cy.autologin(); - cy.createContent({ - contentType: 'Document', - contentId: 'cypress', - contentTitle: 'Cypress', - }); - cy.createContent({ - contentType: 'Document', - contentId: 'my-page', - contentTitle: 'My Page', - path: 'cypress', - }); - cy.visit('/cypress/my-page'); - cy.waitForResourceToLoad('@navigation'); - cy.waitForResourceToLoad('@breadcrumbs'); - cy.waitForResourceToLoad('@actions'); - cy.waitForResourceToLoad('@types'); - cy.waitForResourceToLoad('my-page'); - cy.navigate('/cypress/my-page/edit'); - cy.get(`.block.title h1`); -}; - -export const tearDownAfterEach = () => { - cy.autologin(); - cy.removeContent('cypress'); -}; diff --git a/jest-addon.config.js b/jest-addon.config.js index e31115a..da38318 100644 --- a/jest-addon.config.js +++ b/jest-addon.config.js @@ -17,12 +17,10 @@ module.exports = { '~/(.*)$': '/src/$1', 'load-volto-addons': '/node_modules/@plone/volto/jest-addons-loader.js', + '\\.(css|less|scss|sass)$': 'identity-obj-proxy', }, transform: { '^.+\\.js(x)?$': 'babel-jest', - '^.+\\.css$': 'jest-css-modules', - '^.+\\.less$': 'jest-css-modules', - '^.+\\.scss$': 'jest-css-modules', '^.+\\.(png)$': 'jest-file', '^.+\\.(jpg)$': 'jest-file', '^.+\\.(svg)$': './node_modules/@plone/volto/jest-svgsystem-transform.js', diff --git a/locales/volto.pot b/locales/volto.pot new file mode 100644 index 0000000..e69de29 diff --git a/package.json b/package.json index de8320e..43dfd8d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@eeacms/volto-widget-temporal-coverage", - "version": "4.0.6", + "version": "5.0.0", "description": "volto-widget-temporal-coverage: Volto add-on", "main": "src/index.js", "author": "European Environment Agency: IDM2 A-Team", @@ -18,7 +18,8 @@ }, "dependencies": {}, "devDependencies": { - "@cypress/code-coverage": "^3.9.5", + "@plone/scripts": "*", + "@cypress/code-coverage": "^3.10.0", "babel-plugin-transform-class-properties": "^6.24.1", "md5": "^2.3.0" }, From 3b94ba407cce0f72baba92b159f79b4dc0ae7ea2 Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Wed, 26 Oct 2022 13:34:45 +0300 Subject: [PATCH 6/8] Cleanup --- src/index.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index 98753c4..dd7112b 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,7 @@ import { TemporalWidgetEdit, TemporalWidgetView } from './components'; const applyConfig = (config) => { - config.widgets.widget = { - ...config.widgets.widget, - temporal: TemporalWidgetEdit, - }; + config.widgets.widget.temporal = TemporalWidgetEdit; // volto-widgets-view if (config.widgets.views?.widget) { From 62db38df23b5835e28167a6c58239f5fa7d5ecb1 Mon Sep 17 00:00:00 2001 From: Alin Voinea Date: Fri, 28 Oct 2022 20:09:23 +0300 Subject: [PATCH 7/8] test(jest): Fix jest tests --- Makefile | 43 +- .../manage/Widgets/TemporalWidget.test.jsx | 500 +++++++++--------- .../TemporalWidget.test.jsx.snap | 22 +- 3 files changed, 283 insertions(+), 282 deletions(-) diff --git a/Makefile b/Makefile index a43db1d..f5a5a4b 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,12 @@ GREEN=`tput setaf 2` RESET=`tput sgr0` YELLOW=`tput setaf 3` +ifeq ($(wildcard ./project),) + NODE_MODULES = "../../../node_modules" +else + NODE_MODULES = "./project/node_modules" +endif + project: npm install -g yo npm install -g @plone/generator-volto @@ -35,28 +41,17 @@ start-backend-docker: ## Starts a Docker-based backend docker run -it --rm --name=plone -p 8080:8080 -e SITE=Plone -e ADDONS="kitconcept.volto" -e ZCML="kitconcept.volto.cors" plone .PHONY: test -test: +test: ## Run jest tests docker pull plone/volto-addon-ci:alpha docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha .PHONY: test-update -test-update: +test-update: ## Update jest tests snapshots docker pull plone/volto-addon-ci:alpha docker run -it --rm -e NAMESPACE="@eeacms" -e GIT_NAME="${DIR}" -e RAZZLE_JEST_CONFIG=jest-addon.config.js -v "$$(pwd):/opt/frontend/my-volto-project/src/addons/${DIR}" -e CI="true" plone/volto-addon-ci:alpha yarn test src/addons/${DIR}/src --watchAll=false -u -.PHONY: help -help: ## Show this help. - @echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)" - - -ifeq ($(wildcard ./project),) - NODE_MODULES = "../../../node_modules" -else - NODE_MODULES = "./project/node_modules" -endif - .PHONY: stylelint -stylelint: +stylelint: ## Stylelint $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}' .PHONY: stylelint-overrides @@ -64,35 +59,39 @@ stylelint-overrides: $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides' .PHONY: stylelint-fix -stylelint-fix: +stylelint-fix: ## Fix stylelint $(NODE_MODULES)/stylelint/bin/stylelint.js --allow-empty-input 'src/**/*.{css,less}' --fix $(NODE_MODULES)/.bin/stylelint --syntax less --allow-empty-input 'theme/**/*.overrides' 'src/**/*.overrides' --fix .PHONY: prettier -prettier: +prettier: ## Prettier $(NODE_MODULES)/.bin/prettier --single-quote --check 'src/**/*.{js,jsx,json,css,less,md}' .PHONY: prettier-fix -prettier-fix: +prettier-fix: ## Fix prettier $(NODE_MODULES)/.bin/prettier --single-quote --write 'src/**/*.{js,jsx,json,css,less,md}' .PHONY: lint -lint: +lint: ## ES Lint $(NODE_MODULES)/eslint/bin/eslint.js --max-warnings=0 'src/**/*.{js,jsx}' .PHONY: lint-fix -lint-fix: +lint-fix: ## Fix ES Lint $(NODE_MODULES)/eslint/bin/eslint.js --fix 'src/**/*.{js,jsx}' .PHONY: i18n -i18n: +i18n: ## i18n rm -rf build/messages NODE_ENV=development $(NODE_MODULES)/.bin/i18n --addon .PHONY: cypress-run -cypress-run: +cypress-run: ## Run cypress integration tests NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress run .PHONY: cypress-open -cypress-open: +cypress-open: ## Open cypress integration tests NODE_ENV=development $(NODE_MODULES)/cypress/bin/cypress open + +.PHONY: help +help: ## Show this help. + @echo -e "$$(grep -hE '^\S+:.*##' $(MAKEFILE_LIST) | sed -e 's/:.*##\s*/:/' -e 's/^\(.\+\):\(.*\)/\\x1b[36m\1\\x1b[m:\2/' | column -c2 -t -s :)" diff --git a/src/components/manage/Widgets/TemporalWidget.test.jsx b/src/components/manage/Widgets/TemporalWidget.test.jsx index b9f5a70..493b2dd 100644 --- a/src/components/manage/Widgets/TemporalWidget.test.jsx +++ b/src/components/manage/Widgets/TemporalWidget.test.jsx @@ -2,277 +2,279 @@ import React from 'react'; import { render } from '@testing-library/react'; import configureStore from 'redux-mock-store'; import { Provider } from 'react-intl-redux'; - +import thunk from 'redux-thunk'; import TemporalWidget from './TemporalWidget'; -const mockStore = configureStore(); +const mockStore = configureStore([thunk]); -test('renders an empty temporal widget edit component when temporal is missing', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, +describe('TemporalWidget', () => { + it('renders an empty temporal widget edit component when temporal is missing', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component when temporal is null', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: null, + it('renders an temporal widget edit component when temporal is null', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: null, + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component when temporal is an empty list', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [], + it('renders an temporal widget edit component when temporal is an empty list', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [{ value: '1900', label: '1900' }], + it('renders an temporal widget edit component', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [{ value: '1900', label: '1900' }], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with ranges', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1900', label: '1900' }, - { value: '1901', label: '1901' }, - ], + it('renders an temporal widget edit component with ranges', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1900', label: '1900' }, + { value: '1901', label: '1901' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with ranges and single values', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1900', label: '1900' }, - { value: '1901', label: '1901' }, - { value: '1905', label: '1905' }, - { value: '1907', label: '1907' }, - ], + it('renders an temporal widget edit component with ranges and single values', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1900', label: '1900' }, + { value: '1901', label: '1901' }, + { value: '1905', label: '1905' }, + { value: '1907', label: '1907' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with ranges and single values', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1900', label: '1900' }, - { value: '1901', label: '1901' }, - { value: '1905', label: '1905' }, - { value: '1907', label: '1907' }, - ], + it('renders an temporal widget edit component with ranges and single values', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1900', label: '1900' }, + { value: '1901', label: '1901' }, + { value: '1905', label: '1905' }, + { value: '1907', label: '1907' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with multiple ranges and single values', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1900', label: '1900' }, - { value: '1901', label: '1901' }, - { value: '1905', label: '1905' }, - { value: '1907', label: '1907' }, - { value: '1908', label: '1908' }, - ], + it('renders an temporal widget edit component with multiple ranges and single values', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1900', label: '1900' }, + { value: '1901', label: '1901' }, + { value: '1905', label: '1905' }, + { value: '1907', label: '1907' }, + { value: '1908', label: '1908' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with joined temporal ranges from existing temporal ranges and new temporal ranges', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1898-1901', label: '1898-1901' }, - { value: '1900-1905', label: '1900-1905' }, - ], + it('renders an temporal widget edit component with joined temporal ranges from existing temporal ranges and new temporal ranges', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1898-1901', label: '1898-1901' }, + { value: '1900-1905', label: '1900-1905' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with existing temporal ranges and single values', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1890', label: '1890' }, - { value: '1900-1905', label: '1900-1905' }, - { value: '1915', label: '1915' }, - ], + it('renders an temporal widget edit component with existing temporal ranges and single values', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1890', label: '1890' }, + { value: '1900-1905', label: '1900-1905' }, + { value: '1915', label: '1915' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); -}); -test('renders an temporal widget edit component with existing temporal ranges ignoring value already present', async () => { - const store = mockStore({ - intl: { - locale: 'en', - messages: {}, - }, - temporal: [ - { value: '1900-1905', label: '1900-1905' }, - { value: '1904', label: '1904' }, - ], + it('renders an temporal widget edit component with existing temporal ranges ignoring value already present', () => { + const store = mockStore({ + intl: { + locale: 'en', + messages: {}, + }, + temporal: [ + { value: '1900-1905', label: '1900-1905' }, + { value: '1904', label: '1904' }, + ], + }); + const state = store.getState(); + const component = render( + + {}} + /> + , + ); + expect(component.container).toMatchSnapshot(); }); - const state = store.getState(); - const component = render( - - {}} - /> - , - ); - expect(component.container).toMatchSnapshot(); }); diff --git a/src/components/manage/Widgets/__snapshots__/TemporalWidget.test.jsx.snap b/src/components/manage/Widgets/__snapshots__/TemporalWidget.test.jsx.snap index 990359f..9af7d3f 100644 --- a/src/components/manage/Widgets/__snapshots__/TemporalWidget.test.jsx.snap +++ b/src/components/manage/Widgets/__snapshots__/TemporalWidget.test.jsx.snap @@ -1,6 +1,6 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`renders an empty temporal widget edit component when temporal is missing 1`] = ` +exports[`TemporalWidget renders an empty temporal widget edit component when temporal is missing 1`] = `
`; -exports[`renders an temporal widget edit component 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component 1`] = `
`; -exports[`renders an temporal widget edit component when temporal is an empty list 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component when temporal is an empty list 1`] = `
`; -exports[`renders an temporal widget edit component when temporal is null 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component when temporal is null 1`] = `
`; -exports[`renders an temporal widget edit component with existing temporal ranges and single values 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with existing temporal ranges and single values 1`] = `
`; -exports[`renders an temporal widget edit component with existing temporal ranges ignoring value already present 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with existing temporal ranges ignoring value already present 1`] = `
`; -exports[`renders an temporal widget edit component with joined temporal ranges from existing temporal ranges and new temporal ranges 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with joined temporal ranges from existing temporal ranges and new temporal ranges 1`] = `
`; -exports[`renders an temporal widget edit component with multiple ranges and single values 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with multiple ranges and single values 1`] = `
`; -exports[`renders an temporal widget edit component with ranges 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with ranges 1`] = `
`; -exports[`renders an temporal widget edit component with ranges and single values 1`] = ` +exports[`TemporalWidget renders an temporal widget edit component with ranges and single values 1`] = `
`; -exports[`renders an temporal widget edit component with ranges and single values 2`] = ` +exports[`TemporalWidget renders an temporal widget edit component with ranges and single values 2`] = `
Date: Fri, 28 Oct 2022 17:22:57 +0000 Subject: [PATCH 8/8] Automated release 5.0.0 --- CHANGELOG.md | 154 ++++++++++++++++++++------------------------------- 1 file changed, 59 insertions(+), 95 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7d37717..475ef91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,133 +4,97 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [4.0.6](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.5...4.0.6) +### [5.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.6...5.0.0) - 28 October 2022 +#### :hammer_and_wrench: Others -#### [4.0.5](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.4...4.0.5) +- test(jest): Fix jest tests [Alin Voinea - [`62db38d`](https://github.com/eea/volto-widget-temporal-coverage/commit/62db38df23b5835e28167a6c58239f5fa7d5ecb1)] +- Cleanup [Alin Voinea - [`3b94ba4`](https://github.com/eea/volto-widget-temporal-coverage/commit/3b94ba407cce0f72baba92b159f79b4dc0ae7ea2)] +- Use latest volto & cypress [Miu Razvan - [`abe78b8`](https://github.com/eea/volto-widget-temporal-coverage/commit/abe78b8aa10af13a29f7842d52089a6587669778)] +- update(jest): add @plone/volto-slate resolver refs- #153447 [nileshgulia1 - [`d1b17bf`](https://github.com/eea/volto-widget-temporal-coverage/commit/d1b17bff235073a80679e51ef5883252b88284b8)] +### [4.0.6](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.5...4.0.6) - 1 July 2022 -> 20 January 2022 +#### :hammer_and_wrench: Others -- Fix missing temporal [`#22`](https://github.com/eea/volto-widget-temporal-coverage/pull/22) +### [4.0.5](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.4...4.0.5) - 20 January 2022 -#### [4.0.4](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.3...4.0.4) +### [4.0.4](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.3...4.0.4) - 3 January 2022 -> 3 January 2022 +### [4.0.3](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.2...4.0.3) - 21 December 2021 +### [4.0.2](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.1...4.0.2) - 18 December 2021 -#### [4.0.3](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.2...4.0.3) +#### :hammer_and_wrench: Others -> 21 December 2021 +### [4.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.0...4.0.1) - 10 December 2021 -- Fix tests snapshots [`#20`](https://github.com/eea/volto-widget-temporal-coverage/pull/20) +#### :hammer_and_wrench: Others -#### [4.0.2](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.1...4.0.2) +- Refs #142010 - Optimize Volto-addons gitflow pipelines [valentinab25 - [`9c890b5`](https://github.com/eea/volto-widget-temporal-coverage/commit/9c890b54735cd21552716b7850f296b7f78c8bf7)] +## [4.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.2...4.0.0) - 24 September 2021 -> 18 December 2021 +#### :hammer_and_wrench: Others -- Add SonarQube badges [`#19`](https://github.com/eea/volto-widget-temporal-coverage/pull/19) +- Update TemporalWidgetView unit test [Alin Voinea - [`8388694`](https://github.com/eea/volto-widget-temporal-coverage/commit/8388694a2152fcbccbffceeb3c10d3c5247870f7)] +### [3.0.2](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.1...3.0.2) - 10 September 2021 -#### [4.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/4.0.0...4.0.1) +#### :hammer_and_wrench: Others -> 10 December 2021 +### [3.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.0...3.0.1) - 9 August 2021 -- Develop [`#18`](https://github.com/eea/volto-widget-temporal-coverage/pull/18) -- Correct Cypress tests [`#17`](https://github.com/eea/volto-widget-temporal-coverage/pull/17) -- Refs #142010 - Optimize Volto-addons gitflow pipelines [`9c890b5`](https://github.com/eea/volto-widget-temporal-coverage/commit/9c890b54735cd21552716b7850f296b7f78c8bf7) +#### :hammer_and_wrench: Others -### [4.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.2...4.0.0) +- Fix val.includes is not a function [Alin Voinea - [`1ea782a`](https://github.com/eea/volto-widget-temporal-coverage/commit/1ea782a84a5e8b955271a7af22d2821ed8f0c267)] +## [3.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.2.0...3.0.0) - 9 June 2021 -> 24 September 2021 +#### :hammer_and_wrench: Others -- Make TemporalWidgetView reusable within metadata section block [`#16`](https://github.com/eea/volto-widget-temporal-coverage/pull/16) -- Update TemporalWidgetView unit test [`8388694`](https://github.com/eea/volto-widget-temporal-coverage/commit/8388694a2152fcbccbffceeb3c10d3c5247870f7) +- Bump major release [Alin Voinea - [`fcaa0ad`](https://github.com/eea/volto-widget-temporal-coverage/commit/fcaa0ada7bf4d5075d00b2baca4bc0cde572bef1)] +- Fix propTypes definitions [Alin Voinea - [`50437dd`](https://github.com/eea/volto-widget-temporal-coverage/commit/50437dd23357be77473f65ccaf4aa80596605073)] +### [2.2.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.3...2.2.0) - 4 June 2021 -#### [3.0.2](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.1...3.0.2) +#### :hammer_and_wrench: Others -> 10 September 2021 +- Bump minor version [Alin Voinea - [`cd2ae41`](https://github.com/eea/volto-widget-temporal-coverage/commit/cd2ae415137344e05ce8d7e291e4cf06a86c2b14)] +- Cypress coverage [valentinab25 - [`a499cc8`](https://github.com/eea/volto-widget-temporal-coverage/commit/a499cc878fdd010854458bf1bbbeba9d0d214d96)] +### [2.1.3](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.2...2.1.3) - 27 May 2021 -- Fix tests and package metadata [`#15`](https://github.com/eea/volto-widget-temporal-coverage/pull/15) +### [2.1.2](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.1...2.1.2) - 13 May 2021 -#### [3.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/3.0.0...3.0.1) +#### :hammer_and_wrench: Others -> 9 August 2021 +- Fix styling [kreafox - [`1d8dba0`](https://github.com/eea/volto-widget-temporal-coverage/commit/1d8dba05f2527d932b11c563b6c267dd337d5493)] +### [2.1.1](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.0...2.1.1) - 12 May 2021 -- Release save all years but display range of years (#13) [`#14`](https://github.com/eea/volto-widget-temporal-coverage/pull/14) -- save all years but display range of years [`#13`](https://github.com/eea/volto-widget-temporal-coverage/pull/13) -- Fix val.includes is not a function [`1ea782a`](https://github.com/eea/volto-widget-temporal-coverage/commit/1ea782a84a5e8b955271a7af22d2821ed8f0c267) +### [2.1.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.0.0...2.1.0) - 8 March 2021 -### [3.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.2.0...3.0.0) +#### :hammer_and_wrench: Others -> 9 June 2021 +- Release 2.1.0 [Alin Voinea - [`fb99c59`](https://github.com/eea/volto-widget-temporal-coverage/commit/fb99c59147aaeed2f5bbbf4f673fe861ce492e8c)] +- Cleanup DEPENDENCIES from Jenkinsfile [Alin Voinea - [`ed08915`](https://github.com/eea/volto-widget-temporal-coverage/commit/ed08915c79c00f1cd73f82dcb78f6592c87c4c8f)] +## [2.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/1.0.1...2.0.0) - 28 February 2021 -- Major release latest refactoring [`#12`](https://github.com/eea/volto-widget-temporal-coverage/pull/12) -- Bump major release [`fcaa0ad`](https://github.com/eea/volto-widget-temporal-coverage/commit/fcaa0ada7bf4d5075d00b2baca4bc0cde572bef1) -- Fix propTypes definitions [`50437dd`](https://github.com/eea/volto-widget-temporal-coverage/commit/50437dd23357be77473f65ccaf4aa80596605073) +#### :hammer_and_wrench: Others -#### [2.2.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.3...2.2.0) +- Release 2.0.0 [Alin Voinea - [`4994526`](https://github.com/eea/volto-widget-temporal-coverage/commit/499452606cd62e7efee546fe55d72666162e62b9)] +- Volto 12 upgrade: ~/config -> @plone/volto/registry [Alin Voinea - [`7056ea5`](https://github.com/eea/volto-widget-temporal-coverage/commit/7056ea5dcc2ede7b9deb153e30124bdc7bd32e7d)] +### [1.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/1.0.0...1.0.1) - 26 November 2020 -> 4 June 2021 +#### :hammer_and_wrench: Others -- Sync master/develop branch [`#11`](https://github.com/eea/volto-widget-temporal-coverage/pull/11) -- Use the Volto's widget api in widget [`#9`](https://github.com/eea/volto-widget-temporal-coverage/pull/9) -- Bump minor version [`cd2ae41`](https://github.com/eea/volto-widget-temporal-coverage/commit/cd2ae415137344e05ce8d7e291e4cf06a86c2b14) -- Cypress coverage [`a499cc8`](https://github.com/eea/volto-widget-temporal-coverage/commit/a499cc878fdd010854458bf1bbbeba9d0d214d96) +- Release 1.0.1 [Alin Voinea - [`1f8fc44`](https://github.com/eea/volto-widget-temporal-coverage/commit/1f8fc44fd993b9511e748b893f143f0a29919c9f)] +## [1.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/0.1.0...1.0.0) - 16 November 2020 -#### [2.1.3](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.2...2.1.3) +#### :hammer_and_wrench: Others -> 27 May 2021 +- Release 1.0.0 [Alin Voinea - [`a6d113f`](https://github.com/eea/volto-widget-temporal-coverage/commit/a6d113f0d7b06c629d0c9c0eda4e507d76a1908f)] +- remove unnecessary proptype [nileshgulia1 - [`c39be09`](https://github.com/eea/volto-widget-temporal-coverage/commit/c39be0915b2987afdbf2e5b17a7292ab42c51eb3)] +- Update README.md [Nilesh - [`eb3d0cc`](https://github.com/eea/volto-widget-temporal-coverage/commit/eb3d0cc0b771b51bc27e8caca2963c756dedecf8)] +### 0.1.0 - 12 October 2020 -- Use Volto widget API [`#10`](https://github.com/eea/volto-widget-temporal-coverage/pull/10) +#### :hammer_and_wrench: Others -#### [2.1.2](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.1...2.1.2) - -> 13 May 2021 - -- Fix no data case [`#7`](https://github.com/eea/volto-widget-temporal-coverage/pull/7) -- Fix no data case [`#6`](https://github.com/eea/volto-widget-temporal-coverage/pull/6) -- Fix styling [`1d8dba0`](https://github.com/eea/volto-widget-temporal-coverage/commit/1d8dba05f2527d932b11c563b6c267dd337d5493) - -#### [2.1.1](https://github.com/eea/volto-widget-temporal-coverage/compare/2.1.0...2.1.1) - -> 12 May 2021 - - -#### [2.1.0](https://github.com/eea/volto-widget-temporal-coverage/compare/2.0.0...2.1.0) - -> 8 March 2021 - -- Release 2.1.0 [`fb99c59`](https://github.com/eea/volto-widget-temporal-coverage/commit/fb99c59147aaeed2f5bbbf4f673fe861ce492e8c) - -### [2.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/1.0.1...2.0.0) - -> 28 February 2021 - -- Release 2.0.0 [`4994526`](https://github.com/eea/volto-widget-temporal-coverage/commit/499452606cd62e7efee546fe55d72666162e62b9) -- Volto 12 upgrade: ~/config -> @plone/volto/registry [`7056ea5`](https://github.com/eea/volto-widget-temporal-coverage/commit/7056ea5dcc2ede7b9deb153e30124bdc7bd32e7d) - -#### [1.0.1](https://github.com/eea/volto-widget-temporal-coverage/compare/1.0.0...1.0.1) - -> 26 November 2020 - -- fix console warnings [`#4`](https://github.com/eea/volto-widget-temporal-coverage/pull/4) -- Release 1.0.1 [`1f8fc44`](https://github.com/eea/volto-widget-temporal-coverage/commit/1f8fc44fd993b9511e748b893f143f0a29919c9f) - -### [1.0.0](https://github.com/eea/volto-widget-temporal-coverage/compare/0.1.0...1.0.0) - -> 16 November 2020 - -- fix console warnings [`#3`](https://github.com/eea/volto-widget-temporal-coverage/pull/3) -- Release 1.0.0 [`a6d113f`](https://github.com/eea/volto-widget-temporal-coverage/commit/a6d113f0d7b06c629d0c9c0eda4e507d76a1908f) -- remove unnecessary proptype [`c39be09`](https://github.com/eea/volto-widget-temporal-coverage/commit/c39be0915b2987afdbf2e5b17a7292ab42c51eb3) -- Update README.md [`eb3d0cc`](https://github.com/eea/volto-widget-temporal-coverage/commit/eb3d0cc0b771b51bc27e8caca2963c756dedecf8) - -#### 0.1.0 - -> 12 October 2020 - -- Release 0.1.0 [`#2`](https://github.com/eea/volto-widget-temporal-coverage/pull/2) -- add base temporal Widget [`#1`](https://github.com/eea/volto-widget-temporal-coverage/pull/1) -- adapt to volto widget guidelines [`ad1ec31`](https://github.com/eea/volto-widget-temporal-coverage/commit/ad1ec31e88ecc6edfcb06bf7f5a5b569d6884aae) -- add base temporal [`2846018`](https://github.com/eea/volto-widget-temporal-coverage/commit/284601801b209b72be50a1e6d54fdefe5d742b6f) -- Bootstrap [`2e7accc`](https://github.com/eea/volto-widget-temporal-coverage/commit/2e7accc77e8903dd1fdb856f0544637d800d38de) -- Initial commit [`23f88ef`](https://github.com/eea/volto-widget-temporal-coverage/commit/23f88efc99f111417bdd5498c8100239cafd1537) +- adapt to volto widget guidelines [nileshgulia1 - [`ad1ec31`](https://github.com/eea/volto-widget-temporal-coverage/commit/ad1ec31e88ecc6edfcb06bf7f5a5b569d6884aae)] +- add base temporal [nileshgulia1 - [`2846018`](https://github.com/eea/volto-widget-temporal-coverage/commit/284601801b209b72be50a1e6d54fdefe5d742b6f)] +- Bootstrap [Alin Voinea - [`2e7accc`](https://github.com/eea/volto-widget-temporal-coverage/commit/2e7accc77e8903dd1fdb856f0544637d800d38de)] +- Initial commit [Alin Voinea - [`23f88ef`](https://github.com/eea/volto-widget-temporal-coverage/commit/23f88efc99f111417bdd5498c8100239cafd1537)]