Repository: jhipster/generator-jhipster
Pull request #8442 (2018-10-02 21:10:11)

use promise to parallelise protractor input
Wip: Use promise.all to parallelize protractor inputs.
This as reduced the time of our build by two on a big project!

-   [x] [Travis tests](https://travis-ci.org/jhipster/generator-jhipster/pull_requests) are green
-   [x] Tests are added where necessary
-   [x] Documentation is added/updated where necessary
-   [x] Coding Rules & Commit Guidelines as per our [CONTRIBUTING.md document](https://github.com/jhipster/generator-jhipster/blob/master/CONTRIBUTING.md) are followed



wmarques: @Tcharl I have to try this out :o 
pascalgrimaud: Some error in Travis: https://travis-ci.org/jhipster/generator-jhipster/builds/436354159
Can you have a look plz ?
Tcharl: Sure, I'll take a look asap sorry for the inconvenience
pascalgrimaud: don't be sorry for contributing plz :) 

Patch:
diff --git a/generators/client/files-angular.js b/generators/client/files-angular.js
index d48e48e196..7659e5dc04 100644
--- a/generators/client/files-angular.js
+++ b/generators/client/files-angular.js
@@ -47,10 +47,6 @@ const files = {
                 'postcss.config.js',
                 { file: 'webpack/logo-jhipster.png', method: 'copy' }
             ]
-        },
-        {
-            condition: generator => !generator.skipCommitHook,
-            templates: [{ file: '.huskyrc', method: 'copy', noEjs: true }]
         }
     ],
     css: [
diff --git a/generators/client/files-react.js b/generators/client/files-react.js
index c48c4c1bc7..2aae279add 100644
--- a/generators/client/files-react.js
+++ b/generators/client/files-react.js
@@ -49,10 +49,6 @@ const files = {
         {
             condition: generator => generator.protractorTests,
             templates: ['tsconfig.e2e.json']
-        },
-        {
-            condition: generator => !generator.skipCommitHook,
-            templates: [{ file: '.huskyrc', method: 'copy', noEjs: true }]
         }
     ],
     sass: [
diff --git a/generators/client/templates/angular/.huskyrc b/generators/client/templates/angular/.huskyrc
deleted file mode 100644
index 9e18d87674..0000000000
--- a/generators/client/templates/angular/.huskyrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "hooks": {
-     "pre-commit": "lint-staged"
-  }
-}
diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs
index 499802eaee..1c78260fc7 100644
--- a/generators/client/templates/angular/package.json.ejs
+++ b/generators/client/templates/angular/package.json.ejs
@@ -63,6 +63,7 @@
     "@ngtools/webpack": "6.0.0",
     <%_ if (protractorTests) { _%>
     "@types/chai": "4.1.4",
+    "@types/chai-string": "1.4.1",
     <%_ } _%>
     "@types/jest": "22.2.3",
     <%_ if (protractorTests) { _%>
@@ -80,6 +81,7 @@
     <%_ if (protractorTests) { _%>
     "chai": "4.1.2",
     "chai-as-promised": "7.1.1",
+    "chai-string": "1.5.0",
     <%_ } _%>
     "codelyzer": "4.2.1",
     "copy-webpack-plugin": "4.5.1",
@@ -92,14 +94,14 @@
     "html-loader": "0.5.5",
     "html-webpack-plugin": "3.2.0",
     <%_ if(!skipCommitHook) { _%>
-    "husky": "1.1.0",
+    "husky": "0.14.3",
     <%_ } _%>
     "jest": "22.4.3",
     "jest-junit": "5.1.0",
     "jest-preset-angular": "5.2.2",
     "jest-sonar-reporter": "2.0.0",
     <%_ if(!skipCommitHook) { _%>
-    "lint-staged": "7.3.0",
+    "lint-staged": "7.0.0",
     <%_ } _%>
     <%_ if (enableTranslation) { _%>
     "merge-jsons-webpack-plugin": "1.0.14",
@@ -164,6 +166,9 @@
   },
   <%_ } _%>
   "scripts": {
+    <%_ if(!skipCommitHook) { _%>
+    "precommit": "lint-staged",
+    <%_ } _%>
     "prettier:format": "prettier --write \"src/**/*.{ts,css,scss}\"",
     "lint": "tslint --project tsconfig.json -e 'node_modules/**'",
     "lint:fix": "<%= clientPackageManager %> run lint <%= optionsForwarder %>--fix",
diff --git a/generators/client/templates/angular/src/main/webapp/app/shared/shared-libs.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/shared/shared-libs.module.ts.ejs
index 96158317c7..ed5b5cc64d 100644
--- a/generators/client/templates/angular/src/main/webapp/app/shared/shared-libs.module.ts.ejs
+++ b/generators/client/templates/angular/src/main/webapp/app/shared/shared-libs.module.ts.ejs
@@ -31,7 +31,6 @@ import { FontAwesomeModule } from '@fortawesome/angular-fontawesome';
         NgJhipsterModule.forRoot({
             // set below to true to make alerts look like toast
             alertAsToast: false,
-            alertTimeout: 5000,
             <%_ if (enableTranslation) { _%>
             i18nEnabled: true,
             defaultI18nLang: '<%= nativeLanguage %>'
diff --git a/generators/client/templates/react/.huskyrc b/generators/client/templates/react/.huskyrc
deleted file mode 100644
index 9e18d87674..0000000000
--- a/generators/client/templates/react/.huskyrc
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-  "hooks": {
-     "pre-commit": "lint-staged"
-  }
-}
diff --git a/generators/client/templates/react/package.json.ejs b/generators/client/templates/react/package.json.ejs
index 0805e83b99..1a3b990c61 100644
--- a/generators/client/templates/react/package.json.ejs
+++ b/generators/client/templates/react/package.json.ejs
@@ -105,7 +105,7 @@ limitations under the License.
     "html-webpack-plugin": "3.2.0",
     "http-proxy-middleware": "0.18.0",
     <%_ if(!skipCommitHook) { _%>
-    "husky": "1.1.0",
+    "husky": "0.14.3",
     <%_ } _%>
     "identity-obj-proxy": "3.0.0",
     "image-webpack-loader": "4.3.1",
@@ -114,7 +114,7 @@ limitations under the License.
     "jest-sonar-reporter": "2.0.0",
     "json-loader": "0.5.7",
     <%_ if(!skipCommitHook) { _%>
-    "lint-staged": "7.3.0",
+    "lint-staged": "7.2.2",
     <%_ } _%>
     <%_ if (enableTranslation) { _%>
     "merge-jsons-webpack-plugin": "1.0.17",
@@ -186,6 +186,9 @@ limitations under the License.
   },
   <%_ } _%>
   "scripts": {
+    <%_ if(!skipCommitHook) { _%>
+    "precommit": "lint-staged",
+    <%_ } _%>
     "prettier:format": "prettier --write \"src/**/*.{ts,tsx,css,scss}\"",
     "lint": "tslint --project tsconfig.json -e 'node_modules/**'",
     "lint:fix": "<%= clientPackageManager %> run lint <%= optionsForwarder %>--fix",
diff --git a/generators/docker-compose/templates/central-server-config/application.yml.ejs b/generators/docker-compose/templates/central-server-config/application.yml.ejs
index 2e71a30de9..5e5efd2777 100644
--- a/generators/docker-compose/templates/central-server-config/application.yml.ejs
+++ b/generators/docker-compose/templates/central-server-config/application.yml.ejs
@@ -40,9 +40,6 @@ spring:
     zipkin:
         base-url: http://jhipster-zipkin:9411
         enabled: true
-    sleuth:
-        sampler:
-            percentage: 1 # report 100% of traces to Zipkin
   <%_ } _%>
 <%_ } _%>
 
diff --git a/generators/docker-compose/templates/jhipster-console.yml.ejs b/generators/docker-compose/templates/jhipster-console.yml.ejs
index 73914b46fb..8ce0879da3 100644
--- a/generators/docker-compose/templates/jhipster-console.yml.ejs
+++ b/generators/docker-compose/templates/jhipster-console.yml.ejs
@@ -65,7 +65,7 @@ services:
             - 9411:9411
         environment:
             - ES_HOSTS=http://jhipster-elasticsearch:9200
-            - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/discover/d0682f20-e0e9-11e7-9c68-0b9a0f0c183c?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-30d,mode:quick,to:now))&_a=(columns:!(X-B3-TraceId,app_name,level,message),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,index:'logs-*',key:X-B3-TraceId,negate:!f,params:(query:'trace',type:phrase),type:phrase,value:'trace'),query:(match:(X-B3-TraceId:(query:'{traceId}',type:phrase))))),index:'logs-*',interval:auto,query:(language:lucene,query:''),sort:!('@timestamp',desc))
+            - ZIPKIN_UI_LOGS_URL=http://localhost:5601/app/kibana#/dashboard/logs-dashboard?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&_a=(filters:!(),options:(darkTheme:!f),panels:!((col:1,id:logs-levels,panelIndex:2,row:1,size_x:6,size_y:3,type:visualization),(col:7,columns:!(stack_trace),id:Stacktraces,panelIndex:7,row:1,size_x:4,size_y:3,sort:!('@timestamp',desc),type:search),(col:11,id:Log-forwarding-instructions,panelIndex:8,row:1,size_x:2,size_y:3,type:visualization),(col:1,columns:!(app_name,level,message),id:All-logs,panelIndex:9,row:4,size_x:12,size_y:7,sort:!('@timestamp',asc),type:search)),query:(query_string:(analyze_wildcard:!t,query:'{traceId}')),title:logs-dashboard,uiState:())
     <%_ } _%>
 
 # Uncomment to use the log-data volume
diff --git a/generators/docker-compose/templates/log-conf/logstash.conf.ejs b/generators/docker-compose/templates/log-conf/logstash.conf.ejs
index 9db8713bf3..b26eceb02a 100644
--- a/generators/docker-compose/templates/log-conf/logstash.conf.ejs
+++ b/generators/docker-compose/templates/log-conf/logstash.conf.ejs
@@ -27,66 +27,48 @@ input {
         type => syslog
         codec => json_lines
     }
-    http {
-        port => "${INPUT_HTTP_PORT}"
-        codec => "json"
-    }
 }
 
 filter {
     if [logger_name] =~ "metrics" {
         kv {
             source => "message"
-            field_split_pattern => ", "
+            field_split => ", "
             prefix => "metric_"
         }
-        mutate {
-            convert => { "metric_value" => "float" }
-            convert => { "metric_count" => "integer" }
-            convert => { "metric_min" => "float" }
-            convert => { "metric_max" => "float" }
-            convert => { "metric_mean" => "float" }
-            convert => { "metric_stddev" => "float" }
-            convert => { "metric_median" => "float" }
-            convert => { "metric_p75" => "float" }
-            convert => { "metric_p95" => "float" }
-            convert => { "metric_p98" => "float" }
-            convert => { "metric_p99" => "float" }
-            convert => { "metric_p999" => "float" }
-            convert => { "metric_mean_rate" => "float" }
-            convert => { "metric_m1" => "float" }
-            convert => { "metric_m5" => "float" }
-            convert => { "metric_m15" => "float" }
-            # No need to keep message field after it has been parsed
-            remove_field => ["message"]
-        }
-    }
-    if [type] == "syslog" {
-        mutate {
-            add_field => { "instance_name" => "%{app_name}-%{host}:%{app_port}" }
+	mutate {
+          convert => { "metric_value" => "float" }
+          convert => { "metric_count" => "integer" }
+          convert => { "metric_min" => "float" }
+          convert => { "metric_max" => "float" }
+          convert => { "metric_mean" => "float" }
+          convert => { "metric_stddev" => "float" }
+          convert => { "metric_median" => "float" }
+          convert => { "metric_p75" => "float" }
+          convert => { "metric_p95" => "float" }
+          convert => { "metric_p98" => "float" }
+          convert => { "metric_p99" => "float" }
+          convert => { "metric_p999" => "float" }
+          convert => { "metric_mean_rate" => "float" }
+          convert => { "metric_m1" => "float" }
+          convert => { "metric_m5" => "float" }
+          convert => { "metric_m15" => "float" }
         }
     }
     mutate {
+    	add_field => { "instance_name" => "%{app_name}-%{host}:%{app_port}" }
         # workaround from https://github.com/elastic/logstash/issues/5115
         add_field => { "[@metadata][LOGSTASH_DEBUG]" => "${LOGSTASH_DEBUG:false}" }
     }
 }
 
 output {
-    if [logger_name] =~ "metrics" {
-        elasticsearch {
-            hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
-            index => "metrics-%{+YYYY.MM.dd}"
-        }
-    } else {
-        elasticsearch {
-            hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
-            index => "logs-%{+YYYY.MM.dd}"
-        }
+    elasticsearch {
+        hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
     }
     if [@metadata][LOGSTASH_DEBUG] == "true" {
         stdout {
             codec => rubydebug
         }
     }
-}
+}
\ No newline at end of file
diff --git a/generators/entity-server/templates/src/main/java/package/domain/Entity.java.ejs b/generators/entity-server/templates/src/main/java/package/domain/Entity.java.ejs
index 6297d7ea63..259a755956 100644
--- a/generators/entity-server/templates/src/main/java/package/domain/Entity.java.ejs
+++ b/generators/entity-server/templates/src/main/java/package/domain/Entity.java.ejs
@@ -243,7 +243,7 @@ public class <%= entityClass %> implements Serializable {
     <%_ } else if (relationshipType === 'many-to-one') {
             if(databaseType === 'sql') {
     _%>
-    @ManyToOne<% if (relationshipRequired) { %>(optional = false)<% } %>
+    @ManyToOne<%_ if (relationshipRequired) { _%>(optional = false)<%_ } _%>
         <%_ if (relationshipValidate) { _%>
     <%- include relationship_validators -%>
         <%_ }
@@ -255,8 +255,8 @@ public class <%= entityClass %> implements Serializable {
     private <%= otherEntityNameCapitalized %> <%= relationshipFieldName %>;
 
     <%_ } else if (relationshipType === 'many-to-many') {
-        if (databaseType === 'sql') { _%>
-    @ManyToMany<% if (ownerSide === false) { %>(mappedBy = "<%= otherEntityRelationshipNamePlural %>")<% } %>
+        if(databaseType === 'sql') { _%>
+    @ManyToMany<%_ if (ownerSide === false) { _%>(mappedBy = "<%= otherEntityRelationshipNamePlural %>")<%_ } _%>
         <%_ if (enableHibernateCache) {
                 if (cacheProvider === 'infinispan') { _%>
     @Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@@ -274,9 +274,7 @@ public class <%= entityClass %> implements Serializable {
         } else if (databaseType === 'mongodb') { _%>
     @DBRef
     @Field("<%= relationshipFieldNamePlural %>")
-    <%_ } if (ownerSide === false) { _%>
-    @JsonIgnore
-    <%_ } _%>
+    <%_ } if (ownerSide === false) { _%>@JsonIgnore<%_ } _%>
     private Set<<%= otherEntityNameCapitalized %>> <%= relationshipFieldNamePlural %> = new HashSet<>();
 
     <%_ } else {
diff --git a/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs b/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs
index 2b0b7f8153..89f5b70d51 100644
--- a/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs
+++ b/generators/entity-server/templates/src/main/java/package/service/EntityQueryService.java.ejs
@@ -30,8 +30,6 @@ package <%=packageName%>.service;
     const criteria = entityClass + 'Criteria'; _%>
 import java.util.List;
 
-import javax.persistence.criteria.JoinType;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.domain.Page;
@@ -132,8 +130,7 @@ public class <%= serviceClassName %> extends QueryService<<%= entityClass %>> {
             relationships.forEach((relationship) => {
                 const metamodelFieldName = (relationship.relationshipType === 'many-to-many' || relationship.relationshipType === 'one-to-many') ? relationship.relationshipFieldNamePlural : relationship.relationshipFieldName; _%>
             if (criteria.get<%= relationship.relationshipNameCapitalized %>Id() != null) {
-                specification = specification.and(buildSpecification(criteria.get<%= relationship.relationshipNameCapitalized %>Id(),
-                    root -> root.join(<%= entityClass %>_.<%= metamodelFieldName %>, JoinType.LEFT).get(<%= relationship.otherEntityNameCapitalized %>_.id)));
+                specification = specification.and(buildReferringEntitySpecification(criteria.get<%= relationship.relationshipNameCapitalized %>Id(), <%= entityClass %>_.<%= metamodelFieldName %>, <%= relationship.otherEntityNameCapitalized %>_.id));
             }
             <%_ }); // forEach
         _%>
diff --git a/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs b/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs
index 41f75f8e59..7a2ef8ac65 100644
--- a/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs
+++ b/generators/entity-server/templates/src/main/java/package/service/impl/EntityServiceImpl.java.ejs
@@ -97,8 +97,7 @@ public class <%= serviceClassName %><% if (service === 'serviceImpl') { %> imple
     @Override
     <%_ } _%>
     public <%= instanceType %> save(<%= instanceType %> <%= instanceName %>) {
-        log.debug("Request to save <%= entityClass %> : {}", <%= instanceName %>);
-<%- include('../../common/save_template', {viaService: viaService, returnDirectly: true}); -%>
+        log.debug("Request to save <%= entityClass %> : {}", <%= instanceName %>);<%- include('../../common/save_template', {viaService: viaService, returnDirectly: true}); -%>
     }
 
     /**
diff --git a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
index d2036ab914..6f612c98a3 100644
--- a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
+++ b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity.xml.ejs
@@ -126,19 +126,18 @@
             <%_ } _%><% for (idx in relationships) {
                 let nullable_relation = true,
                 relationshipType = relationships[idx].relationshipType,
-                relationshipName = relationships[idx].relationshipName,
-                relationshipColumnType = relationshipName === 'user' && authenticationType === 'oauth2' ? 'varchar(100)' : 'bigint';
+                relationshipName = relationships[idx].relationshipName;
                 if (relationships[idx].relationshipValidate === true && relationships[idx].relationshipRequired) {
                     nullable_relation = false;
                 }
                 if (relationships[idx].relationshipType === 'many-to-one') { %>
-            <column name="<%=getColumnName(relationshipName) %>_id" type="<%= relationshipColumnType %>">
+            <column name="<%=getColumnName(relationshipName) %>_id" type="<%_ if (relationshipName === 'user' && authenticationType === 'oauth2') { _%>varchar(100)<%_ } else { _%>bigint<%_ } _%>">
                 <constraints nullable="<%= nullable_relation %>" />
             </column>
             <%_ } else if (relationshipType === 'one-to-one' && relationships[idx].ownerSide === true) { 
                 const uniqueConstraintName = getUXConstraintName(entityTableName, getColumnName(relationshipName) + '_id', prodDatabaseType);
             _%>
-            <column name="<%=getColumnName(relationshipName) %>_id" type="<%= relationshipColumnType %>">
+            <column name="<%=getColumnName(relationshipName) %>_id" type="bigint">
                 <constraints unique="true" nullable="<%= nullable_relation %>" uniqueConstraintName="<%= uniqueConstraintName %>" />
             </column><% } %><% } %>
             <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
diff --git a/generators/generator-base-private.js b/generators/generator-base-private.js
index bbd3b6d407..cbe076f7d9 100644
--- a/generators/generator-base-private.js
+++ b/generators/generator-base-private.js
@@ -872,7 +872,6 @@ module.exports = class extends Generator {
         relationships.forEach(relationship => {
             let query;
             let variableName;
-            let filter;
             hasManyToMany = hasManyToMany || relationship.relationshipType === 'many-to-many';
             if (
                 relationship.relationshipType === 'one-to-one' &&
@@ -887,13 +886,8 @@ module.exports = class extends Generator {
                 const relationshipFieldNameIdCheck =
                     dto === 'no' ? `!${relationshipFieldName} || !${relationshipFieldName}.id` : `!${relationshipFieldName}Id`;
 
-                filter = `filter: '${relationship.otherEntityRelationshipName.toLowerCase()}-is-null'`;
-                if (this.jpaMetamodelFiltering) {
-                    filter = `'${relationship.otherEntityRelationshipName}Id.specified': 'false'`;
-                }
-
                 query = `this.${relationship.otherEntityName}Service
-            .query({${filter}})
+            .query({filter: '${relationship.otherEntityRelationshipName.toLowerCase()}-is-null'})
             .subscribe((res: HttpResponse<I${relationship.otherEntityAngularName}[]>) => {
                 if (${relationshipFieldNameIdCheck}) {
                     this.${variableName} = res.body;
diff --git a/generators/generator-constants.js b/generators/generator-constants.js
index 8db02bccbc..59e37a61a3 100644
--- a/generators/generator-constants.js
+++ b/generators/generator-constants.js
@@ -35,12 +35,12 @@ const DOCKER_ELASTICSEARCH = 'elasticsearch:5.6.5'; // docker.elastic.co/elastic
 const DOCKER_KAFKA = 'wurstmeister/kafka:1.0.0';
 const DOCKER_ZOOKEEPER = 'wurstmeister/zookeeper:3.4.6';
 const DOCKER_SONAR = 'sonarqube:7.1-alpine';
-const DOCKER_JHIPSTER_CONSOLE = 'jhipster/jhipster-console:v4.0.0';
-const DOCKER_JHIPSTER_CURATOR = 'jhipster/jhipster-curator:v4.0.0';
-const DOCKER_JHIPSTER_ELASTICSEARCH = 'jhipster/jhipster-elasticsearch:v4.0.0';
-const DOCKER_JHIPSTER_LOGSTASH = 'jhipster/jhipster-logstash:v4.0.0';
-const DOCKER_JHIPSTER_IMPORT_DASHBOARDS = 'jhipster/jhipster-import-dashboards:v4.0.0';
-const DOCKER_JHIPSTER_ZIPKIN = 'jhipster/jhipster-zipkin:v4.0.0';
+const DOCKER_JHIPSTER_CONSOLE = 'jhipster/jhipster-console:v3.0.1';
+const DOCKER_JHIPSTER_CURATOR = 'jhipster/jhipster-curator:v3.0.1';
+const DOCKER_JHIPSTER_ELASTICSEARCH = 'jhipster/jhipster-elasticsearch:v3.0.1';
+const DOCKER_JHIPSTER_LOGSTASH = 'jhipster/jhipster-logstash:v3.0.1';
+const DOCKER_JHIPSTER_IMPORT_DASHBOARDS = 'jhipster/jhipster-import-dashboards:v3.0.1';
+const DOCKER_JHIPSTER_ZIPKIN = 'jhipster/jhipster-zipkin:v3.0.1';
 const DOCKER_TRAEFIK = 'traefik:1.7.1';
 const DOCKER_CONSUL = 'consul:1.2.3';
 const DOCKER_CONSUL_CONFIG_LOADER = 'jhipster/consul-config-loader:v0.3.0';
diff --git a/generators/kubernetes/templates/console/jhipster-zipkin.yml.ejs b/generators/kubernetes/templates/console/jhipster-zipkin.yml.ejs
index f4fa3e2aa9..66d96889a9 100644
--- a/generators/kubernetes/templates/console/jhipster-zipkin.yml.ejs
+++ b/generators/kubernetes/templates/console/jhipster-zipkin.yml.ejs
@@ -40,7 +40,7 @@ spec:
           value: http://jhipster-elasticsearch:9200
         # TODO - better to update to an Ingress endpoint
         - name: ZIPKIN_UI_LOGS_URL
-          value: "http://localhost:5601/app/kibana#/discover/d0682f20-e0e9-11e7-9c68-0b9a0f0c183c?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-30d,mode:quick,to:now))&_a=(columns:!(X-B3-TraceId,app_name,level,message),filters:!(('$state':(store:appState),meta:(alias:!n,disabled:!f,index:'logs-*',key:X-B3-TraceId,negate:!f,params:(query:'trace',type:phrase),type:phrase,value:'trace'),query:(match:(X-B3-TraceId:(query:'{traceId}',type:phrase))))),index:'logs-*',interval:auto,query:(language:lucene,query:''),sort:!('@timestamp',desc))"
+          value: "http://jhipster-console/app/kibana#/dashboard/logs-dashboard?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:now-1h,mode:quick,to:now))&_a=(filters:!(),options:(darkTheme:!f),panels:!((col:1,id:logs-levels,panelIndex:2,row:1,size_x:6,size_y:3,type:visualization),(col:7,columns:!(stack_trace),id:Stacktraces,panelIndex:7,row:1,size_x:4,size_y:3,sort:!('@timestamp',desc),type:search),(col:11,id:Log-forwarding-instructions,panelIndex:8,row:1,size_x:2,size_y:3,type:visualization),(col:1,columns:!(app_name,level,message),id:All-logs,panelIndex:9,row:4,size_x:12,size_y:7,sort:!('@timestamp',asc),type:search)),query:(query_string:(analyze_wildcard:!t,query:'{traceId}')),title:logs-dashboard,uiState:())"
       restartPolicy: Always
 ---
 apiVersion: v1
diff --git a/generators/kubernetes/templates/console/logstash-config.yml.ejs b/generators/kubernetes/templates/console/logstash-config.yml.ejs
index 57afd45f1e..29a0049925 100644
--- a/generators/kubernetes/templates/console/logstash-config.yml.ejs
+++ b/generators/kubernetes/templates/console/logstash-config.yml.ejs
@@ -25,18 +25,14 @@ data:
   logstash.conf: |-
     input {
         udp {
-            port => "${INPUT_UDP_PORT}"
+            port => 5000
             type => syslog
             codec => json
         }
         tcp {
-            port => "${INPUT_TCP_PORT}"
+            port => 5000
             type => syslog
-            codec => json_lines
-        }
-        http {
-            port => "${INPUT_HTTP_PORT}"
-            codec => "json"
+            codec => json
         }
     }
 
@@ -44,56 +40,39 @@ data:
         if [logger_name] =~ "metrics" {
             kv {
                 source => "message"
-                field_split_pattern => ", "
+                field_split => ", "
                 prefix => "metric_"
             }
-            mutate {
-                convert => { "metric_value" => "float" }
-                convert => { "metric_count" => "integer" }
-                convert => { "metric_min" => "float" }
-                convert => { "metric_max" => "float" }
-                convert => { "metric_mean" => "float" }
-                convert => { "metric_stddev" => "float" }
-                convert => { "metric_median" => "float" }
-                convert => { "metric_p75" => "float" }
-                convert => { "metric_p95" => "float" }
-                convert => { "metric_p98" => "float" }
-                convert => { "metric_p99" => "float" }
-                convert => { "metric_p999" => "float" }
-                convert => { "metric_mean_rate" => "float" }
-                convert => { "metric_m1" => "float" }
-                convert => { "metric_m5" => "float" }
-                convert => { "metric_m15" => "float" }
-                # No need to keep message field after it has been parsed
-                remove_field => ["message"]
-            }
-        }
-        if [type] == "syslog" {
-            mutate {
-                add_field => { "instance_name" => "%{app_name}-%{host}:%{app_port}" }
+        mutate {
+              convert => { "metric_value" => "float" }
+              convert => { "metric_count" => "integer" }
+              convert => { "metric_min" => "float" }
+              convert => { "metric_max" => "float" }
+              convert => { "metric_mean" => "float" }
+              convert => { "metric_stddev" => "float" }
+              convert => { "metric_median" => "float" }
+              convert => { "metric_p75" => "float" }
+              convert => { "metric_p95" => "float" }
+              convert => { "metric_p98" => "float" }
+              convert => { "metric_p99" => "float" }
+              convert => { "metric_p999" => "float" }
+              convert => { "metric_mean_rate" => "float" }
+              convert => { "metric_m1" => "float" }
+              convert => { "metric_m5" => "float" }
+              convert => { "metric_m15" => "float" }
             }
         }
         mutate {
-            # workaround from https://github.com/elastic/logstash/issues/5115
-            add_field => { "[@metadata][LOGSTASH_DEBUG]" => "${LOGSTASH_DEBUG:false}" }
+            add_field => { "instance_name" => "%{app_name}-%{host}:%{app_port}" }
         }
     }
 
     output {
-        if [logger_name] =~ "metrics" {
-            elasticsearch {
-                hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
-                index => "metrics-%{+YYYY.MM.dd}"
-            }
-        } else {
-            elasticsearch {
-                hosts => ["${ELASTICSEARCH_HOST}:${ELASTICSEARCH_PORT}"]
-                index => "logs-%{+YYYY.MM.dd}"
-            }
+        elasticsearch {
+            hosts => ["jhipster-elasticsearch.<%= kubernetesNamespace %>.svc.cluster.local"]
         }
-        if [@metadata][LOGSTASH_DEBUG] == "true" {
-            stdout {
-                codec => rubydebug
-            }
+        stdout {
+            codec => rubydebug
         }
     }
+
diff --git a/generators/server/templates/gradle.properties.ejs b/generators/server/templates/gradle.properties.ejs
index 83cf5ae339..cbb9c20737 100644
--- a/generators/server/templates/gradle.properties.ejs
+++ b/generators/server/templates/gradle.properties.ejs
@@ -25,7 +25,7 @@ npm_version=<%= NPM_VERSION %>
 yarn_version=<%= YARN_VERSION %>
 
 # Dependency versions
-jhipster_dependencies_version=2.0.24
+jhipster_dependencies_version=2.0.22
 # The spring-boot version should match the one managed by
 # https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster_dependencies_version}
 spring_boot_version=2.0.5.RELEASE
diff --git a/generators/server/templates/gradle/profile_dev.gradle.ejs b/generators/server/templates/gradle/profile_dev.gradle.ejs
index 372ebc2cb4..0b74388a28 100644
--- a/generators/server/templates/gradle/profile_dev.gradle.ejs
+++ b/generators/server/templates/gradle/profile_dev.gradle.ejs
@@ -44,15 +44,12 @@ bootRun {
 
 <%_ if (!skipClient) { _%>
 task webpackBuildDev(type: <%= _.upperFirst(clientPackageManager) %>Task, dependsOn: '<%= clientPackageManager %>_install') {
-    inputs.dir("<%= CLIENT_MAIN_SRC_DIR %>")
-    inputs.files(fileTree('<%= CLIENT_MAIN_SRC_DIR %>'))
-    outputs.dir("<%= CLIENT_DIST_DIR %>")
-    outputs.file("<%= CLIENT_DIST_DIR %>app/main.bundle.js")
+    onlyIf { shouldWebpackRun() == true }
     args = ["run", "webpack:build"]
 }
 
 war {
-    webAppDirName = '<%= CLIENT_DIST_DIR %>'
+    webAppDirName = '<%= CLIENT_MAIN_SRC_DIR %>'
 }
 
 task copyIntoStatic (type: Copy) {
@@ -86,9 +83,9 @@ processResources.dependsOn webpackBuildDev
 copyIntoStatic.dependsOn processResources
 bootJar.dependsOn copyIntoStatic
 
-<%= clientPackageManager %>_install.onlyIf { shouldWebpackRun() == true }
+yarn_install.onlyIf { shouldWebpackRun() == true }
 
 def shouldWebpackRun() {
-    project.hasProperty('webpack')
+    file('build/www/app/main.bundle.js').exists() == false || project.hasProperty('webpack')
 }
 <%_ } _%>
diff --git a/generators/server/templates/gradle/profile_prod.gradle.ejs b/generators/server/templates/gradle/profile_prod.gradle.ejs
index 8798227cd7..fbb6d63449 100644
--- a/generators/server/templates/gradle/profile_prod.gradle.ejs
+++ b/generators/server/templates/gradle/profile_prod.gradle.ejs
@@ -47,10 +47,6 @@ task webpack_test(type: <%= _.upperFirst(clientPackageManager) %>Task, dependsOn
 }
 
 task webpack(type: <%= _.upperFirst(clientPackageManager) %>Task, dependsOn: '<%= clientPackageManager %>_install') {
-    inputs.dir("CLIENT_MAIN_SRC_DIR")
-    inputs.files(fileTree('CLIENT_MAIN_SRC_DIRp'))
-    outputs.dir("<%= CLIENT_DIST_DIR %>")
-    outputs.file("<%= CLIENT_DIST_DIR %>app/main.bundle.js")
     args = ["run", "webpack:prod"]
 }
 
diff --git a/generators/server/templates/gradle/swagger.gradle.ejs b/generators/server/templates/gradle/swagger.gradle.ejs
index 2a79d525d0..561623a921 100644
--- a/generators/server/templates/gradle/swagger.gradle.ejs
+++ b/generators/server/templates/gradle/swagger.gradle.ejs
@@ -32,7 +32,7 @@ openApiGenerate {
     modelFilesConstrainedTo = [""]
     supportingFilesConstrainedTo = ["ApiUtil.java"]
     configOptions = [delegatePattern: "true"]
-    validateSpec = true
+    validateSpec = false
 }
 
 sourceSets {
diff --git a/generators/server/templates/pom.xml.ejs b/generators/server/templates/pom.xml.ejs
index 64fcd76efa..276b577c0e 100644
--- a/generators/server/templates/pom.xml.ejs
+++ b/generators/server/templates/pom.xml.ejs
@@ -72,7 +72,7 @@
         <profile.tls />
 
         <!-- Dependency versions -->
-        <jhipster-dependencies.version>2.0.24</jhipster-dependencies.version>
+        <jhipster-dependencies.version>2.0.22</jhipster-dependencies.version>
         <!-- The spring-boot version should match the one managed by
         https://mvnrepository.com/artifact/io.github.jhipster/jhipster-dependencies/${jhipster-dependencies.version} -->
         <spring-boot.version>2.0.5.RELEASE</spring-boot.version>
@@ -107,7 +107,7 @@
         <scala-maven-plugin.version>3.4.2</scala-maven-plugin.version>
         <sonar-maven-plugin.version>3.5.0.1254</sonar-maven-plugin.version>
         <%_ if (enableSwaggerCodegen) { _%>
-        <openapi-generator-maven-plugin.version>3.3.0</openapi-generator-maven-plugin.version>
+        <openapi-generator-maven-plugin.version>3.2.3</openapi-generator-maven-plugin.version>
         <%_ } _%>
         <git-commit-id-plugin.version>2.2.5</git-commit-id-plugin.version>
 
@@ -1058,7 +1058,6 @@
                             <apiPackage><%= packageName %>.web.api</apiPackage>
                             <modelPackage><%= packageName %>.web.api.model</modelPackage>
                             <supportingFilesToGenerate>ApiUtil.java</supportingFilesToGenerate>
-                            <validateSpec>true</validateSpec>
                             <configOptions>
                                 <delegatePattern>true</delegatePattern>
                             </configOptions>
diff --git a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
index ee65138b5f..631e99658e 100644
--- a/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
+++ b/generators/server/templates/src/main/resources/config/application-dev.yml.ejs
@@ -221,9 +221,6 @@ spring:
     thymeleaf:
         cache: false
 <%_ if (serviceDiscoveryType || applicationType === 'gateway' || applicationType === 'microservice' || applicationType === 'uaa') { _%>
-    sleuth:
-        sampler:
-            percentage: 1 # report 100% of traces
     zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies
         base-url: http://localhost:9411
         enabled: false
diff --git a/generators/server/templates/src/main/resources/config/application-prod.yml.ejs b/generators/server/templates/src/main/resources/config/application-prod.yml.ejs
index 1bffebfd23..5375564e5a 100644
--- a/generators/server/templates/src/main/resources/config/application-prod.yml.ejs
+++ b/generators/server/templates/src/main/resources/config/application-prod.yml.ejs
@@ -193,9 +193,6 @@ spring:
     thymeleaf:
         cache: true
 <%_ if (serviceDiscoveryType || applicationType === 'gateway' || applicationType === 'microservice' || applicationType === 'uaa') { _%>
-    sleuth:
-        sampler:
-            percentage: 1 # report 100% of traces
     zipkin: # Use the "zipkin" Maven profile to have the Spring Cloud Zipkin dependencies
         base-url: http://localhost:9411
         enabled: false
diff --git a/generators/server/templates/src/main/resources/swagger/api.yml.ejs b/generators/server/templates/src/main/resources/swagger/api.yml.ejs
index d001850d0e..0bd0937e60 100644
--- a/generators/server/templates/src/main/resources/swagger/api.yml.ejs
+++ b/generators/server/templates/src/main/resources/swagger/api.yml.ejs
@@ -19,7 +19,7 @@
 # API-first development with OpenAPI
 # This file will be used at compile time to generate Spring-MVC endpoint stubs using openapi-generator
 openapi: "3.0.1"
+title: "<%= baseName %>"
 info:
-  title: "<%= baseName %>"
   version: 0.0.1
 paths: {}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 965f5d61a0..fb77ab796c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
 {
     "name": "generator-jhipster",
-    "version": "5.4.1",
+    "version": "5.3.4",
     "lockfileVersion": 1,
     "requires": true,
     "dependencies": {
diff --git a/package.json b/package.json
index a210fb72fa..6fcd9aae7b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "generator-jhipster",
-    "version": "5.4.1",
+    "version": "5.3.4",
     "description": "Spring Boot + Angular/React in one handy generator",
     "files": [
         "cli",
diff --git a/travis/scripts/05-run.sh b/travis/scripts/05-run.sh
index b5a5eea78f..650e2724f0 100755
--- a/travis/scripts/05-run.sh
+++ b/travis/scripts/05-run.sh
@@ -69,7 +69,7 @@ fi
 # Decrease Angular timeout for Protractor tests
 #-------------------------------------------------------------------------------
 if [ "$PROTRACTOR" == 1 ] && [ -e "src/main/webapp/app/shared/shared-libs.module.ts" ]; then
-    sed -e 's/alertTimeout: 5000/alertTimeout: 1/1;' src/main/webapp/app/shared/shared-libs.module.ts > src/main/webapp/app/shared/shared-libs.module.ts.sed
+    sed -e 's/alertAsToast: false,/alertAsToast: false, alertTimeout: 1,/1;' src/main/webapp/app/shared/shared-libs.module.ts > src/main/webapp/app/shared/shared-libs.module.ts.sed
     mv -f src/main/webapp/app/shared/shared-libs.module.ts.sed src/main/webapp/app/shared/shared-libs.module.ts
     cat src/main/webapp/app/shared/shared-libs.module.ts | grep alertTimeout
 fi


Test patch:
diff --git a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
index 87d951b76b..b7ee2af166 100644
--- a/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
+++ b/generators/client/templates/angular/src/test/javascript/protractor.conf.js.ejs
@@ -65,6 +65,8 @@ exports.config = {
         const chai = require('chai');
         const chaiAsPromised = require('chai-as-promised');
         chai.use(chaiAsPromised);
+        const chaiString = require('chai-string');
+        chai.use(chaiString);
         // @ts-ignore
         global.chai = chai;
     },
diff --git a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs
index 286ad020fc..a423481d8c 100644
--- a/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs
+++ b/generators/entity-client/templates/angular/src/test/javascript/e2e/entities/entity.spec.ts.ejs
@@ -17,7 +17,7 @@
  limitations under the License.
 -%>
 /* tslint:disable no-unused-expression */
-import { browser, ExpectedConditions as ec, <% if ( fieldsContainInstant || fieldsContainZonedDateTime ) { %>protractor<% } %> } from 'protractor';
+import { browser, ExpectedConditions as ec, <% if ( fieldsContainInstant || fieldsContainZonedDateTime ) { %>protractor, <% } %>promise } from 'protractor';
 import { NavBarPage, SignInPage } from '../../<%= entityParentPathAddition %>page-objects/jhi-page-objects';
 
 import { <%= entityClass %>ComponentsPage, <%= entityClass %>DeleteDialog, <%= entityClass %>UpdatePage } from './<%= entityFileName %>.page-object';
@@ -49,7 +49,8 @@ describe('<%= entityClass %> e2e test', () => {
     let <%= entityInstance %>ComponentsPage: <%= entityClass %>ComponentsPage;
     <%= openBlockComment %>let <%= entityInstance %>DeleteDialog: <%= entityClass %>DeleteDialog;<%= closeBlockComment %>
     <%_ if (fieldsContainBlobOrImage) { _%>
-    const fileToUpload = '../../../../../<%= entityParentPathAddition %>main/webapp/content/images/logo-jhipster.png';
+    const fileNameToUpload = 'logo-jhipster.png';
+    const fileToUpload = '../../../../../<%= entityParentPathAddition %>main/webapp/content/images/' + fileNameToUpload;
     const absolutePath = path.resolve(__dirname, fileToUpload);
     <%_ } _%>
 
@@ -94,23 +95,56 @@ describe('<%= entityClass %> e2e test', () => {
         const nbButtonsBeforeCreate = await <%= entityInstance %>ComponentsPage.countDeleteButtons();
 
         await <%= entityInstance %>ComponentsPage.clickOnCreateButton();
+        await promise.all([
         <%_ fields.forEach((field) => {
             const fieldName = field.fieldName;
             const fieldNameCapitalized = field.fieldNameCapitalized;
             const fieldType = field.fieldType;
             const fieldTypeBlobContent = field.fieldTypeBlobContent;
             const fieldIsEnum = field.fieldIsEnum;
-        _%>
-        <%_ if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('5');
+            if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('5'),
+            <%_ } else if (fieldType === 'LocalDate') { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('2000-12-31'),
+            <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01/01/2001' + protractor.Key.TAB + '02:30AM'),
+            <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType) && fieldTypeBlobContent === 'text') { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>'),
+            <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input(absolutePath),
+            <%_ } else if (fieldIsEnum) { _%>
+            <%= entityInstance %>UpdatePage.<%=fieldName %>SelectLastOption(),
+            <%_ } else if (fieldType === 'UUID'){ _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('64c99148-3908-465d-8c4a-e510e3ade974'),
+            <%_ } else if (fieldType !== 'Boolean') { _%>
+            <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>'),
+            <%_ } _%>
+            <%_ }); _%>
+            <%_ relationships.forEach((relationship) => {
+                const relationshipType = relationship.relationshipType;
+                const ownerSide = relationship.ownerSide;
+                const relationshipName = relationship.relationshipName;
+                const relationshipFieldName = relationship.relationshipFieldName;
+                if (relationshipType === 'many-to-one' || (relationshipType === 'one-to-one' && ownerSide === true)) { _%>
+            <%= entityInstance %>UpdatePage.<%=relationshipName %>SelectLastOption(),
+            <%_ } else if ((relationshipType === 'many-to-many' && ownerSide === true)) { _%>
+            // <%= entityInstance %>UpdatePage.<%=relationshipName %>SelectLastOption(),
+            <%_ } _%>
+        <%_ }); _%>
+        ]);
+        <%_ fields.forEach((field) => {
+            const fieldName = field.fieldName;
+            const fieldNameCapitalized = field.fieldNameCapitalized;
+            const fieldType = field.fieldType;
+            const fieldTypeBlobContent = field.fieldTypeBlobContent;
+            const fieldIsEnum = field.fieldIsEnum;
+            if (['Integer', 'Long', 'Float', 'Double', 'BigDecimal'].includes(fieldType)) { _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('5');
-        <%_ } else if (fieldType === 'LocalDate') { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('2000-12-31');
+            <%_ } else if (fieldType === 'LocalDate') { _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('2000-12-31');
-        <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01/01/2001' + protractor.Key.TAB + '02:30AM');
+            <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('2001-01-01T02:30');
-        <%_ } else if (fieldType === 'Boolean') { _%>
+            <%_ } else if (fieldType === 'Boolean') { _%>
         const selected<%= fieldNameCapitalized %> = <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input();
         if (await selected<%= fieldNameCapitalized %>.isSelected()) {
             await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click();
@@ -119,31 +153,15 @@ describe('<%= entityClass %> e2e test', () => {
             await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click();
             expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).to.be.true;
         }
-        <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType) && fieldTypeBlobContent === 'text') { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>');
+            <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType) && fieldTypeBlobContent === 'text') { _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('<%= fieldName %>');
-        <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input(absolutePath);
-        <%_ } else if (fieldIsEnum) { _%>
-        await <%= entityInstance %>UpdatePage.<%=fieldName %>SelectLastOption();
-        <%_ } else if (fieldType === 'UUID'){ _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('64c99148-3908-465d-8c4a-e510e3ade974');
+            <%_ } else if (['byte[]', 'ByteBuffer'].includes(fieldType)) { _%>
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.endsWith(fileNameToUpload);
+            <%_ } else if (fieldType === 'UUID'){ _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('64c99148-3908-465d-8c4a-e510e3ade974');
-        <%_ } else { _%>
-        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>');
+            <%_ } else if (!fieldIsEnum) { _%>
         expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('<%= fieldName %>');
-        <%_ } _%>
-        <%_ }); _%>
-        <%_ relationships.forEach((relationship) => {
-            const relationshipType = relationship.relationshipType;
-            const ownerSide = relationship.ownerSide;
-            const relationshipName = relationship.relationshipName;
-            const relationshipFieldName = relationship.relationshipFieldName; _%>
-        <%_ if (relationshipType === 'many-to-one' || (relationshipType === 'one-to-one' && ownerSide === true)) { _%>
-        await <%= entityInstance %>UpdatePage.<%=relationshipName %>SelectLastOption();
-        <%_ } else if ((relationshipType === 'many-to-many' && ownerSide === true)) { _%>
-        // <%= entityInstance %>UpdatePage.<%=relationshipName %>SelectLastOption();
-        <%_ } _%>
+            <%_ } _%>
         <%_ }); _%>
         await <%= entityInstance %>UpdatePage.save();
         expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).to.be.false;
diff --git a/generators/entity-client/templates/react/src/test/javascript/spec/app/entities/entity-reducer.spec.ts.ejs b/generators/entity-client/templates/react/src/test/javascript/spec/app/entities/entity-reducer.spec.ts.ejs
index c70851ea29..3f9a819e25 100644
--- a/generators/entity-client/templates/react/src/test/javascript/spec/app/entities/entity-reducer.spec.ts.ejs
+++ b/generators/entity-client/templates/react/src/test/javascript/spec/app/entities/entity-reducer.spec.ts.ejs
@@ -276,7 +276,7 @@ describe('Entities reducer tests', () => {
         }
         <%_ } _%>
       ];
-      await store.dispatch(createEntity({ id: <% if (pkType === 'Long') { %>1<%} else {%>'1'<%}%> })).then(() => expect(store.getActions()).toEqual(expectedActions));
+      await store.dispatch(createEntity({ id: <% if (databaseType === 'sql') { %>1<%} else {%>'1'<%}%> })).then(() => expect(store.getActions()).toEqual(expectedActions));
     });
 
     it('dispatches ACTION_TYPES.UPDATE_<%= entityActionName %> actions', async () => {
@@ -297,7 +297,7 @@ describe('Entities reducer tests', () => {
         }
         <%_ } _%>
       ];
-      await store.dispatch(updateEntity({ id: <% if (pkType === 'Long') { %>1<%} else {%>'1'<%}%> })).then(() => expect(store.getActions()).toEqual(expectedActions));
+      await store.dispatch(updateEntity({ id: <% if (databaseType === 'sql') { %>1<%} else {%>'1'<%}%> })).then(() => expect(store.getActions()).toEqual(expectedActions));
     });
 
     it('dispatches ACTION_TYPES.DELETE_<%= entityActionName %> actions', async () => {
diff --git a/test/utils/expected-files.js b/test/utils/expected-files.js
index 4f835c83b1..0b70bf4ffe 100644
--- a/test/utils/expected-files.js
+++ b/test/utils/expected-files.js
@@ -285,7 +285,6 @@ const expectedFiles = {
 
     client: [
         'angular.json',
-        '.huskyrc',
         '.prettierignore',
         '.prettierrc',
         'package.json',