Repository: jhipster/generator-jhipster
Pull request #9273 (2019-02-15 20:41:15)

Update spring-boot version to 2.1.3.RELEASE
-   Please make sure the below checklist is followed for Pull Requests.

-   [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

<!--
Please also reference the issue number in a commit message to [automatically close the related Github issue](https://help.github.com/articles/closing-issues-via-commit-messages/)

Note: It is also possible to add `[skip ci]` to your commit message to skip Travis tests
-->



Patch:
diff --git a/.prettierignore b/.prettierignore
index adacca64d4..2f01b6af9e 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,7 +1,6 @@
 node_modules
 travis
 docs
-.git
 .jhipster
 .vscode
 **/templates/**/
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 014e6fe703..b4e6bb3ebf 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -272,7 +272,7 @@ To ensure consistency throughout the source code, keep these rules in mind as yo
 -   Java files **must be** formatted using Intellij IDEA default code style.
 -   Generators JavaScript files **must follow** the eslint configuration defined at the project root, which is based on [Airbnb JavaScript Style Guide](https://github.com/airbnb/javascript).
 -   Any client side feature/change should be done for both Angular and react clients
--   Web apps JavaScript files **must follow** [Google's JavaScript Style Guide](https://google.github.io/styleguide/jsguide.html).
+-   Web apps JavaScript files **must follow** [Google's JavaScript Style Guide](https://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml).
 -   Angular Typescript files **must follow** the [Official Angular style guide](https://angular.io/styleguide).
 -   React/Redux Typescript files **may follow** the [React/Redux Typescript guide](https://github.com/piotrwitek/react-redux-typescript-guide).
 
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index 63d4172972..926fca67ca 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -47,7 +47,6 @@ jobs:
         JHI_ENTITY: sql
       react-noi18n-es-ws-gradle-session:
         JHI_APP: react-noi18n-es-ws-gradle-session
-        JHI_PROFILE: prod
         JHI_PROTRACTOR: 1
         JHI_ENTITY: sql
       ms-ngx-gateway-eureka-oauth2:
diff --git a/generators/cleanup.js b/generators/cleanup.js
index 74e459dd26..579ad72237 100644
--- a/generators/cleanup.js
+++ b/generators/cleanup.js
@@ -157,7 +157,7 @@ function cleanupOldServerFiles(generator, javaDir, testDir, mainResourceDir, tes
         generator.removeFile(`${mainResourceDir}mails/passwordResetEmail.html`);
         generator.removeFile(`${mainResourceDir}mails/socialRegistrationValidationEmail.html`);
         generator.removeFile(`${testResourceDir}mail/testEmail.html`);
-        generator.removeFile(`${testDir}web/rest/ProfileInfoResourceIT.java`);
+        generator.removeFile(`${testDir}web/rest/ProfileInfoResourceIntTest.java`);
         generator.removeFile('gradle/mapstruct.gradle');
     }
     if (generator.isJhipsterVersionLessThan('5.2.2')) {
@@ -175,9 +175,4 @@ function cleanupOldServerFiles(generator, javaDir, testDir, mainResourceDir, tes
             generator.removeFile(`${testResourceDir}cassandra-random-port.yml`);
         }
     }
-    if (generator.isJhipsterVersionLessThan('6.0.0')) {
-        generator.removeFile(`${javaDir}web/rest/util/PaginationUtil.java`);
-        generator.removeFile(`${javaDir}web/rest/util/HeaderUtil.java`);
-        generator.removeFile(`${testDir}web/rest/util/PaginationUtilUnitTest.java`);
-    }
 }
diff --git a/generators/client/files-react.js b/generators/client/files-react.js
index 9d9c874474..e760157298 100644
--- a/generators/client/files-react.js
+++ b/generators/client/files-react.js
@@ -310,7 +310,6 @@ const files = {
                 { file: 'shared/auth/private-route.tsx', method: 'processJsx' },
                 { file: 'shared/error/error-boundary.tsx', method: 'processJsx' },
                 { file: 'shared/error/error-boundary-route.tsx', method: 'processJsx' },
-                { file: 'shared/error/page-not-found.tsx', method: 'processJsx' },
                 // model
                 'shared/model/user.model.ts'
             ]
diff --git a/generators/client/index.js b/generators/client/index.js
index e6f3cbb47c..f411ce07fd 100644
--- a/generators/client/index.js
+++ b/generators/client/index.js
@@ -330,7 +330,7 @@ module.exports = class extends BaseBlueprintGenerator {
 
                 this.styleSheetExt = this.useSass ? 'scss' : 'css';
                 this.pkType = this.getPkType(this.databaseType);
-                this.apiUaaPath = `${this.authenticationType === 'uaa' ? `services/${this.uaaBaseName.toLowerCase()}/` : ''}`;
+                this.apiUaaPath = `${this.authenticationType === 'uaa' ? `${this.uaaBaseName.toLowerCase()}/` : ''}`;
                 this.DIST_DIR = this.getResourceBuildDirectoryForBuildTool(this.configOptions.buildTool) + constants.CLIENT_DIST_DIR;
                 this.AOT_DIR = `${this.getResourceBuildDirectoryForBuildTool(this.configOptions.buildTool)}aot`;
                 this.CLIENT_MAIN_SRC_DIR = constants.CLIENT_MAIN_SRC_DIR;
diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs
index 4a8409cf88..5ca7dc69bb 100644
--- a/generators/client/templates/angular/package.json.ejs
+++ b/generators/client/templates/angular/package.json.ejs
@@ -43,7 +43,7 @@
     "bootstrap": "4.2.1",
     "core-js": "2.6.4",
     "moment": "2.24.0",
-    "ng-jhipster": "0.9.3",
+    "ng-jhipster": "0.9.1",
     "ngx-cookie": "2.0.1",
     "ngx-infinite-scroll": "7.0.1",
     "ngx-webstorage": "2.0.1",
@@ -75,7 +75,6 @@
     "angular-router-loader": "0.8.5",
     "angular2-template-loader": "0.6.2",
     "autoprefixer": "9.4.7",
-    "base-href-webpack-plugin": "2.0.0",
     "browser-sync": "2.26.3",
     "browser-sync-webpack-plugin": "2.2.2",
     "cache-loader": "2.0.1",
diff --git a/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs b/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs
index 2c51e04251..3ce2af545d 100644
--- a/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs
+++ b/generators/client/templates/angular/src/main/webapp/app/app-routing.module.ts.ejs
@@ -36,7 +36,7 @@ const LAYOUT_ROUTES = [
                 },
                 ...LAYOUT_ROUTES
             ],
-            { enableTracing: DEBUG_INFO_ENABLED }
+            { useHash: true , enableTracing: DEBUG_INFO_ENABLED }
         )
     ],
     exports: [
diff --git a/generators/client/templates/angular/src/main/webapp/index.html.ejs b/generators/client/templates/angular/src/main/webapp/index.html.ejs
index 83a8c7ef11..9f2cc39578 100644
--- a/generators/client/templates/angular/src/main/webapp/index.html.ejs
+++ b/generators/client/templates/angular/src/main/webapp/index.html.ejs
@@ -19,7 +19,7 @@
 <!doctype html>
 <html class="no-js" lang="<% if (enableTranslation) { %><%= nativeLanguage %><% } else { %>en<% } %>" dir="ltr">
 <head>
-    <base href="/" />
+    <base href="./" />
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <title><%= baseName %></title>
diff --git a/generators/client/templates/angular/src/main/webapp/manifest.webapp.ejs b/generators/client/templates/angular/src/main/webapp/manifest.webapp.ejs
index 44f810248f..e854d40762 100644
--- a/generators/client/templates/angular/src/main/webapp/manifest.webapp.ejs
+++ b/generators/client/templates/angular/src/main/webapp/manifest.webapp.ejs
@@ -25,7 +25,7 @@
   ],
   "theme_color": "#000000",
   "background_color": "#e0e0e0",
-  "start_url": ".",
+  "start_url": "/index.html",
   "display": "standalone",
   "orientation": "portrait"
 }
diff --git a/generators/client/templates/angular/webpack/webpack.dev.js.ejs b/generators/client/templates/angular/webpack/webpack.dev.js.ejs
index f114fc82b7..174172d7cf 100644
--- a/generators/client/templates/angular/webpack/webpack.dev.js.ejs
+++ b/generators/client/templates/angular/webpack/webpack.dev.js.ejs
@@ -39,8 +39,16 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), {
     devServer: {
         contentBase: './<%= DIST_DIR %>',
         proxy: [{
-            context: [
-                '/'
+            context: [<% if (authenticationType === 'uaa') { %>
+                '/<%= uaaBaseName.toLowerCase() %>',<% } %>
+                /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */
+                '/api',
+                '/management',
+                '/swagger-resources',
+                '/v2/api-docs',
+                '/h2-console',<% if (authenticationType === 'oauth2') { %>
+                '/login',<% } %>
+                '/auth'
             ],
             target: `http${options.tls ? 's' : ''}://localhost:<%= serverPort %>`,
             secure: false,
diff --git a/generators/client/templates/angular/webpack/webpack.prod.js.ejs b/generators/client/templates/angular/webpack/webpack.prod.js.ejs
index 7e7e5705ff..544394e86d 100644
--- a/generators/client/templates/angular/webpack/webpack.prod.js.ejs
+++ b/generators/client/templates/angular/webpack/webpack.prod.js.ejs
@@ -18,7 +18,6 @@
 -%>
 const webpack = require('webpack');
 const webpackMerge = require('webpack-merge');
-const { BaseHrefWebpackPlugin } = require('base-href-webpack-plugin');
 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");
 const Visualizer = require('webpack-visualizer-plugin');
@@ -165,8 +164,7 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), {
         new WorkboxPlugin.GenerateSW({
           clientsClaim: true,
           skipWaiting: true,
-        }),
-        new BaseHrefWebpackPlugin({ baseHref: '/' })
+        })
     ],
     mode: 'production'
 });
diff --git a/generators/client/templates/react/package.json.ejs b/generators/client/templates/react/package.json.ejs
index 9d8a3cf199..ab56cb9591 100644
--- a/generators/client/templates/react/package.json.ejs
+++ b/generators/client/templates/react/package.json.ejs
@@ -84,7 +84,6 @@ limitations under the License.
     <%_ } _%>
     "@types/webpack-env": "1.13.6",
     "autoprefixer": "9.2.0",
-    "base-href-webpack-plugin": "2.0.0",
     "browser-sync": "2.26.3",
     "browser-sync-webpack-plugin": "2.2.2",
     "cache-loader": "1.2.2",
diff --git a/generators/client/templates/react/src/main/webapp/app/app.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/app.tsx.ejs
index 277617e9a7..c35b43dffa 100644
--- a/generators/client/templates/react/src/main/webapp/app/app.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/app.tsx.ejs
@@ -22,7 +22,7 @@ import './app.<%= styleSheetExt %>';
 import React from 'react';
 import { connect } from 'react-redux';
 import { Card } from 'reactstrap';
-import { BrowserRouter as Router } from 'react-router-dom';
+import { HashRouter as Router } from 'react-router-dom';
 import { ToastContainer, ToastPosition, toast } from 'react-toastify';
 
 import { IRootState } from 'app/shared/reducers';
diff --git a/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs
index 04eb46ed08..b783c77b77 100644
--- a/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/routes.tsx.ejs
@@ -32,7 +32,6 @@ import Home from 'app/modules/home/home';
 import Entities from 'app/entities';
 import PrivateRoute from 'app/shared/auth/private-route';
 import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
-import PageNotFound from 'app/shared/error/page-not-found';
 import { AUTHORITIES } from 'app/config/constants';
 
 // tslint:disable:space-in-parens
@@ -51,10 +50,10 @@ const Admin = Loadable({
 
 const Routes = () => (
   <div className="view-routes">
-    <Switch>
     <%_ if (authenticationType !== 'oauth2') { _%>
-      <ErrorBoundaryRoute path="/login" component={Login} />
+    <ErrorBoundaryRoute path="/login" component={Login} />
     <%_ } _%>
+    <Switch>
       <ErrorBoundaryRoute path="/logout" component={Logout} />
     <%_ if (authenticationType !== 'oauth2') { _%>
       <ErrorBoundaryRoute path="/register" component={Register} />
@@ -67,8 +66,7 @@ const Routes = () => (
       <PrivateRoute path="/account" component={Account} hasAnyAuthorities={[AUTHORITIES.ADMIN, AUTHORITIES.USER]}/>
     <%_ } _%>
       <PrivateRoute path="/entity" component={Entities} hasAnyAuthorities={[AUTHORITIES.USER]}/>
-      <ErrorBoundaryRoute path="/" exact component={Home}/>
-      <ErrorBoundaryRoute component={PageNotFound} />
+      <ErrorBoundaryRoute path="/" component={Home}/>
     </Switch>
   </div>
 );
diff --git a/generators/client/templates/react/src/main/webapp/app/shared/error/page-not-found.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/shared/error/page-not-found.tsx.ejs
deleted file mode 100644
index 21abc39eba..0000000000
--- a/generators/client/templates/react/src/main/webapp/app/shared/error/page-not-found.tsx.ejs
+++ /dev/null
@@ -1,19 +0,0 @@
-import React from 'react';
-import { Translate } from 'react-jhipster';
-import { Row, Col, Alert } from 'reactstrap';
-
-class PageNotFound extends React.Component {
-  render() {
-    return (
-      <div>
-        <Alert color="danger">
-          <Translate contentKey="error.http.404">
-            The page does not exist.
-          </Translate>
-        </Alert>
-      </div>
-    );
-  }
-}
-
-export default PageNotFound;
diff --git a/generators/client/templates/react/src/main/webapp/index.html.ejs b/generators/client/templates/react/src/main/webapp/index.html.ejs
index a9ba2daff6..f4fd783136 100644
--- a/generators/client/templates/react/src/main/webapp/index.html.ejs
+++ b/generators/client/templates/react/src/main/webapp/index.html.ejs
@@ -19,7 +19,7 @@
 <!doctype html>
 <html class="no-js" lang="<%= nativeLanguage %>" dir="ltr">
 <head>
-    <base href="/" />
+    <base href="./" />
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <title><%= baseName %></title>
diff --git a/generators/client/templates/react/src/main/webapp/manifest.webapp.ejs b/generators/client/templates/react/src/main/webapp/manifest.webapp.ejs
index fcd8c3ca0b..c28140adde 100644
--- a/generators/client/templates/react/src/main/webapp/manifest.webapp.ejs
+++ b/generators/client/templates/react/src/main/webapp/manifest.webapp.ejs
@@ -25,7 +25,7 @@
   ],
   "theme_color": "#000000",
   "background_color": "#e0e0e0",
-  "start_url": ".",
+  "start_url": "/index.html",
   "display": "standalone",
   "orientation": "portrait"
 }
diff --git a/generators/client/templates/react/webpack/webpack.dev.js.ejs b/generators/client/templates/react/webpack/webpack.dev.js.ejs
index a2213cc4e6..bd8e436ab2 100644
--- a/generators/client/templates/react/webpack/webpack.dev.js.ejs
+++ b/generators/client/templates/react/webpack/webpack.dev.js.ejs
@@ -69,8 +69,16 @@ module.exports = (options) => webpackMerge(commonConfig({ env: ENV }), {
     hot: true,
     contentBase: './<%= DIST_DIR %>',
     proxy: [{
-      context: [
-        '/'
+      context: [<% if (authenticationType === 'uaa') { %>
+        '/<%= uaaBaseName.toLowerCase() %>',<% } %>
+        /* jhipster-needle-add-entity-to-webpack - JHipster will add entity api paths here */
+        '/api',
+        '/management',
+        '/swagger-resources',
+        '/v2/api-docs',
+        '/h2-console',<% if (authenticationType === 'oauth2') { %>
+        '/login',<% } %>        
+        '/auth'
       ],
       target: `http${options.tls ? 's' : ''}://localhost:<%= serverPort %>`,
       secure: false,
diff --git a/generators/client/templates/react/webpack/webpack.prod.js.ejs b/generators/client/templates/react/webpack/webpack.prod.js.ejs
index a65dddf29d..2df3bfa8be 100644
--- a/generators/client/templates/react/webpack/webpack.prod.js.ejs
+++ b/generators/client/templates/react/webpack/webpack.prod.js.ejs
@@ -18,7 +18,6 @@
 -%>
 const webpack = require('webpack');
 const webpackMerge = require('webpack-merge');
-const { BaseHrefWebpackPlugin } = require('base-href-webpack-plugin');
 const MiniCssExtractPlugin = require('mini-css-extract-plugin');
 const WorkboxPlugin = require('workbox-webpack-plugin');
 const TerserPlugin = require('terser-webpack-plugin');
@@ -125,7 +124,6 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), {
     new WorkboxPlugin.GenerateSW({
       clientsClaim: true,
       skipWaiting: true,
-    }),
-    new BaseHrefWebpackPlugin({ baseHref: '/' })
+    })
   ]
 });
diff --git a/generators/common/templates/.prettierignore.ejs b/generators/common/templates/.prettierignore.ejs
index 91b1ba356d..151fcf7916 100644
--- a/generators/common/templates/.prettierignore.ejs
+++ b/generators/common/templates/.prettierignore.ejs
@@ -1,4 +1,3 @@
 node_modules
 target
 package-lock.json
-.git
diff --git a/generators/docker-compose/templates/traefik/traefik.toml.ejs b/generators/docker-compose/templates/traefik/traefik.toml.ejs
index a15bc3ad25..2f1a6db1c7 100644
--- a/generators/docker-compose/templates/traefik/traefik.toml.ejs
+++ b/generators/docker-compose/templates/traefik/traefik.toml.ejs
@@ -20,4 +20,4 @@
 endpoint = "consul:8500"
 exposedByDefault = true
 prefix = "traefik"
-frontEndRule = "PathPrefixStrip: /services/{{.ServiceName}}"
+frontEndRule = "PathPrefixStrip: /{{.ServiceName}}"
diff --git a/generators/entity-client/files.js b/generators/entity-client/files.js
index 5c71041c08..989996ef04 100644
--- a/generators/entity-client/files.js
+++ b/generators/entity-client/files.js
@@ -16,6 +16,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+const _ = require('lodash');
 const constants = require('../generator-constants');
 
 /* Constants use throughout */
@@ -265,6 +266,9 @@ function writeFiles() {
                     this.clientFramework
                 );
             }
+            if (this.applicationType === 'gateway' && !_.isUndefined(this.microserviceName)) {
+                this.addEntityToWebpack(this.microserviceName, this.clientFramework);
+            }
             this.addEntityToMenu(this.entityStateName, this.enableTranslation, this.clientFramework, this.entityTranslationKeyMenu);
         }
     };
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-update.component.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-update.component.ts.ejs
index 2f6ea9cc2a..38412f5c23 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-update.component.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity-management-update.component.ts.ejs
@@ -34,7 +34,7 @@ import { DATE_TIME_FORMAT } from 'app/shared/constants/input.constants';
     <%_ } _%>
 <%_ } _%>
 <%_ if (queries && queries.length > 0 || fieldsContainBlob) { _%>
-import { <% if (fieldsContainBlob || queries && queries.length > 0) { %>JhiAlertService, <% } %><% if (fieldsContainBlob) { %>JhiDataUtils<% } %> } from 'ng-jhipster';
+import { <% if (queries && queries.length > 0) { %>JhiAlertService, <% } %><% if (fieldsContainBlob) { %>JhiDataUtils<% } %> } from 'ng-jhipster';
 <%_ } _%>
 import { I<%= entityAngularName %> } from 'app/shared/model/<%= entityModelFileName %>.model';
 import { <%= entityAngularName %>Service } from './<%= entityFileName %>.service';
@@ -88,7 +88,7 @@ export class <%= entityAngularName %>UpdateComponent implements OnInit {
         <%_ if (fieldsContainBlob) { _%>
         protected dataUtils: JhiDataUtils,
         <%_ } _%>
-        <%_ if (fieldsContainBlob || queries && queries.length > 0) { _%>
+        <%_ if (queries && queries.length > 0) { _%>
         protected jhiAlertService: JhiAlertService,
         <%_ } _%>
         protected <%= entityInstance %>Service: <%= entityAngularName %>Service,
@@ -135,11 +135,7 @@ export class <%= entityAngularName %>UpdateComponent implements OnInit {
     }
 
     setFileData(event, entity, field, isImage) {
-        this.dataUtils.setFileData(event, entity, field, isImage)
-            .then(
-                modifiedEntity => entity = { ...modifiedEntity },
-                this.onError
-            );
+        this.dataUtils.setFileData(event, entity, field, isImage);
     }
 
     <%_ if (fieldsContainImageBlob) { _%>
@@ -184,7 +180,7 @@ export class <%= entityAngularName %>UpdateComponent implements OnInit {
     protected onSaveError() {
         this.isSaving = false;
     }
-    <%_ if (fieldsContainBlob || queries && queries.length > 0) { _%>
+    <%_ if (queries && queries.length > 0) { _%>
 
     protected onError(errorMessage: string) {
         this.jhiAlertService.error(errorMessage, null, null);
diff --git a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs
index 61b9f41228..768840d4a4 100644
--- a/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs
+++ b/generators/entity-client/templates/angular/src/main/webapp/app/entities/entity.service.ts.ejs
@@ -35,9 +35,9 @@ type EntityArrayResponseType = HttpResponse<I<%= entityAngularName %>[]>;
 @Injectable({providedIn: 'root'})
 export class <%= entityAngularName %>Service {
 
-    public resourceUrl = SERVER_API_URL + '<% if (applicationType === 'gateway' && locals.microserviceName) { %>services/<%= microserviceName.toLowerCase() %>/<% } %>api/<%= entityApiUrl %>';
+    public resourceUrl = SERVER_API_URL + '<% if (applicationType === 'gateway' && locals.microserviceName) { %><%= microserviceName.toLowerCase() %>/<% } %>api/<%= entityApiUrl %>';
     <%_ if (searchEngine === 'elasticsearch') { _%>
-    public resourceSearchUrl = SERVER_API_URL + '<% if (applicationType === 'gateway' && locals.microserviceName) { %>services/<%= microserviceName.toLowerCase() %>/<% } %>api/_search/<%= entityApiUrl %>';
+    public resourceSearchUrl = SERVER_API_URL + '<% if (applicationType === 'gateway' && locals.microserviceName) { %><%= microserviceName.toLowerCase() %>/<% } %>api/_search/<%= entityApiUrl %>';
     <%_ } _%>
 
     constructor(protected http: HttpClient) { }
diff --git a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs
index 71047a8062..c989aaf0fc 100644
--- a/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs
+++ b/generators/entity-client/templates/react/src/main/webapp/app/entities/entity.reducer.ts.ejs
@@ -176,9 +176,9 @@ export default (state: <%= entityReactName %>State = initialState, action): <%=
   }
 };
 
-const apiUrl = '<% if (applicationType === 'gateway' && locals.microserviceName) { %>services/<%= microserviceName.toLowerCase() %>/<% } %>api/<%= entityApiUrl %>';
+const apiUrl = '<% if (applicationType === 'gateway' && locals.microserviceName) { %><%= microserviceName.toLowerCase() %>/<% } %>api/<%= entityApiUrl %>';
 <%_ if (searchEngine === 'elasticsearch') { _%>
-const apiSearchUrl = '<% if (applicationType === 'gateway' && locals.microserviceName) { %>services/<%= microserviceName.toLowerCase() %>/<% } %>api/_search/<%= entityApiUrl %>';
+const apiSearchUrl = '<% if (applicationType === 'gateway' && locals.microserviceName) { %><%= microserviceName.toLowerCase() %>/<% } %>api/_search/<%= entityApiUrl %>';
 <%_ } _%>
 
 // Actions
diff --git a/generators/entity-server/files.js b/generators/entity-server/files.js
index f492a1bc31..e214ab01ef 100644
--- a/generators/entity-server/files.js
+++ b/generators/entity-server/files.js
@@ -19,7 +19,6 @@
 const _ = require('lodash');
 const randexp = require('randexp');
 const chalk = require('chalk');
-const faker = require('faker');
 const fs = require('fs');
 const utils = require('../utils');
 const constants = require('../generator-constants');
@@ -31,9 +30,6 @@ const SERVER_MAIN_RES_DIR = constants.SERVER_MAIN_RES_DIR;
 const TEST_DIR = constants.TEST_DIR;
 const SERVER_TEST_SRC_DIR = constants.SERVER_TEST_SRC_DIR;
 
-// In order to have consistent results with Faker, the seed is fixed.
-faker.seed(42);
-
 /**
  * The default is to use a file path string. It implies use of the template method.
  * For any other config an object { file:.., method:.., template:.. } can be used
@@ -48,16 +44,6 @@ const serverFiles = {
                     file: 'config/liquibase/changelog/added_entity.xml',
                     options: { interpolate: INTERPOLATE_REGEX },
                     renameTo: generator => `config/liquibase/changelog/${generator.changelogDate}_added_entity_${generator.entityClass}.xml`
-                },
-                {
-                    file: 'config/liquibase/data/table.csv',
-                    options: {
-                        interpolate: INTERPOLATE_REGEX,
-                        context: {
-                            faker
-                        }
-                    },
-                    renameTo: generator => `config/liquibase/data/${generator.entityTableName}.csv`
                 }
             ]
         },
@@ -188,7 +174,7 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/EntityResourceIT.java',
+                    file: 'package/web/rest/EntityResourceIntTest.java',
                     options: {
                         context: {
                             randexp,
@@ -198,7 +184,7 @@ const serverFiles = {
                             SERVER_TEST_SRC_DIR
                         }
                     },
-                    renameTo: generator => `${generator.packageFolder}/web/rest/${generator.entityClass}ResourceIT.java`
+                    renameTo: generator => `${generator.packageFolder}/web/rest/${generator.entityClass}ResourceIntTest.java`
                 }
             ]
         },
diff --git a/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs b/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
index c06176a95c..ec6f6b8d33 100644
--- a/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
+++ b/generators/entity-server/templates/src/main/java/package/web/rest/EntityResource.java.ejs
@@ -17,7 +17,6 @@
  limitations under the License.
 -%>
 package <%=packageName%>.web.rest;
-
 <%_ const viaService = service !== 'no';
     let isUsingMapsId = false;
     let mapsIdAssoc;
@@ -50,6 +49,8 @@ import <%=packageName%>.repository.search.<%= entityClass %>SearchRepository;
 import <%=packageName%>.repository.UserRepository;
 <%_ } _%>
 import <%=packageName%>.web.rest.errors.BadRequestAlertException;
+import <%=packageName%>.web.rest.util.HeaderUtil;<% if (pagination !== 'no') { %>
+import <%=packageName%>.web.rest.util.PaginationUtil;<% } %>
 <%_ if (dto === 'mapstruct') { _%>
 import <%=packageName%>.service.dto.<%= asDto(entityClass) %>;
 <%_ if (service === 'no') { _%>
@@ -59,15 +60,9 @@ import <%=packageName%>.service.mapper.<%= entityClass %>Mapper;
 import <%=packageName%>.service.dto.<%= entityClass %>Criteria;
 import <%=packageName%>.service.<%= entityClass %>QueryService;
 <%_ } _%>
-
-import io.github.jhipster.web.util.HeaderUtil;
-<%_ if (pagination !== 'no') { _%>
-import io.github.jhipster.web.util.PaginationUtil;
-<%_ } _%>
 import io.github.jhipster.web.util.ResponseUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (pagination !== 'no') { _%>
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -115,9 +110,6 @@ public class <%= entityClass %>Resource {
         entityName = _.camelCase(`${clientRootFolder}${entityClass}`);
     } _%>
     private static final String ENTITY_NAME = "<%= entityName %>";
-
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
     <%_
     const instanceType = (dto === 'mapstruct') ? asDto(entityClass) : asEntity(entityClass);
     const instanceName = (dto === 'mapstruct') ? asDto(entityInstance) : asEntity(entityInstance);
@@ -147,7 +139,7 @@ public class <%= entityClass %>Resource {
         <%_ } _%>
 <%- include('../../common/save_template', {asEntity, asDto, viaService: viaService, returnDirectly: false, isUsingMapsId: isUsingMapsId, mapsIdAssoc: mapsIdAssoc, isController: true}); -%>
         return ResponseEntity.created(new URI("/api/<%= entityApiUrl %>/" + result.getId()))
-            .headers(HeaderUtil.createEntityCreationAlert(applicationName, ENTITY_NAME, result.getId().toString()))
+            .headers(HeaderUtil.createEntityCreationAlert(ENTITY_NAME, result.getId().toString()))
             .body(result);
     }
 
@@ -174,7 +166,7 @@ public class <%= entityClass %>Resource {
         <%_ } _%>
 <%- include('../../common/save_template', {asEntity, asDto, viaService: viaService, returnDirectly: false, isUsingMapsId: false, mapsIdAssoc: mapsIdAssoc}); -%>
         return ResponseEntity.ok()
-            .headers(HeaderUtil.createEntityUpdateAlert(applicationName, ENTITY_NAME, <%= instanceName %>.getId().toString()))
+            .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, <%= instanceName %>.getId().toString()))
             .body(result);
     }
 
@@ -234,7 +226,7 @@ public class <%= entityClass %>Resource {
     public ResponseEntity<Void> delete<%= entityClass %>(@PathVariable <%= pkType %> id) {
         log.debug("REST request to delete <%= entityClass %> : {}", id);
 <%- include('../../common/delete_template', {viaService: viaService}); -%>
-        return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(applicationName, ENTITY_NAME, id<% if (pkType !== 'String') { %>.toString()<% } %>)).build();
+        return ResponseEntity.ok().headers(HeaderUtil.createEntityDeletionAlert(ENTITY_NAME, id<% if (pkType !== 'String') { %>.toString()<% } %>)).build();
     }<% if (searchEngine === 'elasticsearch') { %>
 
     /**
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 95209ed831..8b1ee90284 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
@@ -25,9 +25,9 @@
                         http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
 
     <property name="now" value="now()" dbms="h2"/>
-    <% let autoIncrementValue = true;
+    <% let autoIncrementValue = true; 
         for (idx in relationships) {
-            if (relationships[idx].useJPADerivedIdentifier === true) {
+            if (relationships[idx].useJPADerivedIdentifier === true) { 
                 autoIncrementValue = false;
                 break;
             }
@@ -120,17 +120,12 @@
                 <constraints nullable="<%= nullable %>" />
                 <%_ } _%>
             </column>
-                <%_ if (fieldType === 'byte[]' && fieldTypeBlobContent !== 'text') {
-                    columnType = "varchar(255)"; _%>
-            <column name="<%=columnName %>_content_type" type="<%=columnType %>">
+            <%_ if (fieldType === 'byte[]' && fieldTypeBlobContent !== 'text') { _%>
+            <column name="<%=columnName %>_content_type" type="varchar(255)">
                 <constraints nullable="<%= nullable %>" />
             </column>
-                <%_ } _%>
-            <%_
-            fields[idx].columnType = columnType;
-            _%>
-            <%_ } _%>
-            <%_ for (idx in relationships) {
+            <%_ }  _%>
+            <%_ } _%><% for (idx in relationships) {
                 let nullable_relation = true,
                 relationshipType = relationships[idx].relationshipType,
                 relationshipName = relationships[idx].relationshipName,
@@ -138,13 +133,12 @@
                 if (relationships[idx].relationshipValidate === true && relationships[idx].relationshipRequired) {
                     nullable_relation = false;
                 }
-                if (relationships[idx].relationshipType === 'many-to-one') { _%>
-
+                if (relationships[idx].relationshipType === 'many-to-one') { %>
             <column name="<%=getColumnName(relationshipName) %>_id" type="<%= relationshipColumnType %>">
                 <constraints nullable="<%= nullable_relation %>" />
             </column>
-            <%_ } else if (relationshipType === 'one-to-one' && relationships[idx].ownerSide === true
-                            && (relationships[idx].useJPADerivedIdentifier == null || relationships[idx].useJPADerivedIdentifier === false)) {
+            <%_ } else if (relationshipType === 'one-to-one' && relationships[idx].ownerSide === true 
+                            && (relationships[idx].useJPADerivedIdentifier == null || relationships[idx].useJPADerivedIdentifier === false)) { 
                 const uniqueConstraintName = getUXConstraintName(entityTableName, getColumnName(relationshipName) + '_id', prodDatabaseType);
             _%>
             <column name="<%=getColumnName(relationshipName) %>_id" type="<%= relationshipColumnType %>">
@@ -152,54 +146,12 @@
             </column><% } %><% } %>
             <!-- jhipster-needle-liquibase-add-column - JHipster will add columns here, do not remove-->
         </createTable>
-
         <%_ for (const idx in fields) {
             if (fields[idx].fieldType === 'ZonedDateTime' || fields[idx].fieldType === 'Instant') { _%>
         <dropDefaultValue tableName="<%= entityTableName %>" columnName="<%=fields[idx].fieldNameAsDatabaseColumn %>" columnDataType="datetime"/>
         <%_ }
         } _%>
-    </changeSet>
-
-    <!--
-        Load sample data generated with Faker.js
-        - This data can be easily edited using a CSV editor (or even MS Excel) and
-          is located in the 'src/main/resources/config/liquibase/data' directory
-        - By default this data is applied when running with the JHipster 'dev' profile.
-          This can be customized by adding or removing 'faker' in the 'spring.liquibase.contexts'
-          Spring Boot configuration key.
-    -->
-    <changeSet id="<%= changelogDate %>-1-data" author="jhipster" context="faker">
-        <loadData
-                  file="config/liquibase/data/<%= entityTableName %>.csv"
-                  separator=";"
-                  tableName="<%= entityTableName %>"
-                  context="dev">
-            <column name="id" type="numeric"/>
-            <%_ for (idx in fields) {
-                let loadColumnType = 'string';
-                let columnType = fields[idx].columnType;
-                if (columnType === 'integer' || columnType === 'bigint' || columnType === 'double' || columnType === 'decimal(10,2)' || columnType === '${floatType}') {
-                    loadColumnType = 'numeric';
-                } else if (columnType === 'date' || columnType === 'datetime') {
-                    loadColumnType = 'date';
-                } else if (columnType === 'boolean') {
-                    loadColumnType = 'boolean';
-                } else if (fields[idx].fieldIsEnum) {
-                    loadColumnType = 'string';
-                } else if (columnType === 'clob' || columnType === 'blob' || columnType === 'longblob') {
-                    loadColumnType = 'string';
-                }
-                _%>
-            <column name="<%=fields[idx].fieldNameAsDatabaseColumn%>" type="<%=loadColumnType%>"/>
-                <%_ if (fields[idx].fieldType === 'byte[]' && fields[idx].fieldTypeBlobContent !== 'text') { _%>
-            <column name="<%=fields[idx].fieldNameAsDatabaseColumn%>_content_type" type="string"/>
-                <%_ } _%>
-            <%_ } _%>
-        </loadData>
-    </changeSet>
-
-    <changeSet id="<%= changelogDate %>-1-relations" author="jhipster">
-        <%_ for (idx in relationships) {
+        <% for (idx in relationships) {
             const relationshipType = relationships[idx].relationshipType,
             relationshipName = relationships[idx].relationshipName,
             ownerSide = relationships[idx].ownerSide,
diff --git a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs
index 52dc1c82b0..7e521b7a08 100644
--- a/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs
+++ b/generators/entity-server/templates/src/main/resources/config/liquibase/changelog/added_entity_constraints.xml.ejs
@@ -52,7 +52,6 @@
                                  constraintName="<%= constraintName %>"
                                  referencedColumnNames="id"
                                  referencedTableName="<%= entityTableName %>"/>
-
         <addForeignKeyConstraint baseColumnNames="<%= getColumnName(relationshipName) %>_id"
                                  baseTableName="<%= joinTableName %>"
                                  constraintName="<%= getColumnName(otherEntityConstraintName) %>"
diff --git a/generators/entity-server/templates/src/main/resources/config/liquibase/data/table.csv.ejs b/generators/entity-server/templates/src/main/resources/config/liquibase/data/table.csv.ejs
deleted file mode 100644
index 4ab84aa160..0000000000
--- a/generators/entity-server/templates/src/main/resources/config/liquibase/data/table.csv.ejs
+++ /dev/null
@@ -1,141 +0,0 @@
-<%#
- Copyright 2013-2019 the original author or authors from the JHipster project.
-
- This file is part of the JHipster project, see https://www.jhipster.tech/
- for more information.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--%>
-<%_
-let table = [];
-
-// Generate CSV header
-let header = [];
-header.push('id');
-for (idx in fields) {
-    header.push(fields[idx].fieldNameAsDatabaseColumn);
-    if (fields[idx].fieldType === 'byte[]' && fields[idx].fieldTypeBlobContent !== 'text') {
-        header.push(fields[idx].fieldNameAsDatabaseColumn + '_content_type');
-    }
-}
-for (idx in relationships) {
-    if (relationships[idx].relationshipValidate === true && relationships[idx].relationshipRequired) {
-        header.push(getColumnName(relationships[idx].relationshipName) + '_id');
-    }
-}
-table.push(header);
-
-// Generate CSV rows
-
-for (lineNb = 1; lineNb <= 10; lineNb++) {
-    let line = [ lineNb ];
-    for (idx in fields) {
-        let data = '';
-        let columnType = fields[idx].columnType;
-        let fieldType = fields[idx].fieldType;
-        if (columnType === 'integer'
-            || columnType === 'bigint'
-            || columnType === 'double'
-            || columnType.startsWith('decimal')) {
-            data = this.faker.random.number();
-        } else if (columnType === '${floatType}') {
-            data = this.faker.random.number();
-        } else if (columnType === 'boolean') {
-            data = this.faker.random.boolean();
-        } else if (columnType === 'date' || columnType === 'datetime') {
-            // Write the date without milliseconds so Java can parse it
-            // See https://stackoverflow.com/a/34053802/150868
-            data = this.faker.date.recent().toISOString().split('.')[0];
-        } else if (columnType.startsWith('varchar')) {
-            let columnName = fields[idx].fieldNameAsDatabaseColumn;
-            if (columnName === 'first_name') {
-                data = this.faker.name.firstName();
-            } else if (columnName === 'last_name') {
-                data = this.faker.name.lastName();
-            } else if (columnName === 'job_title') {
-                data = this.faker.name.jobTitle();
-            } else if (columnName === 'telephone' || columnName === 'phone') {
-                data = this.faker.phone.phoneNumber();
-            } else if (columnName === 'zip_code' || columnName === 'post_code') {
-                data = this.faker.address.zipCode();
-            } else if (columnName === 'city') {
-                data = this.faker.address.city();
-            } else if (columnName === 'street_name' || columnName === 'street') {
-                data = this.faker.address.streetName();
-            } else if (columnName === 'country') {
-                data = this.faker.address.country();
-            } else if (columnName === 'country_code') {
-                data = this.faker.address.countryCode();
-            } else if (columnName === 'color') {
-                data = this.faker.commerce.color();
-            } else if (columnName === 'account') {
-                data = this.faker.commerce.account();
-            } else if (columnName === 'account_name') {
-                data = this.faker.finance.accountName();
-            } else if (columnName === 'currency_code') {
-                data = this.faker.finance.currencyCode();
-            } else if (columnName === 'currency_name') {
-                data = this.faker.finance.currencyName();
-            } else if (columnName === 'currency_symbol') {
-                data = this.faker.finance.currencySymbol();
-            } else if (columnName === 'iban') {
-                data = this.faker.finance.iban();
-            } else if (columnName === 'bic') {
-                data = this.faker.finance.bic();
-            } else if (columnName === 'email') {
-                data = this.faker.internet.email();
-            } else if (columnName === 'url') {
-                data = this.faker.internet.url();
-            } else {
-                data = this.faker.random.words();
-            }
-            // manage String max length
-            if (fields[idx].fieldValidate === true && fields[idx].fieldValidateRules.includes('maxlength')) {
-                let maxlength = fields[idx].fieldValidateRulesMaxlength;
-                data = data.substring(0, maxlength);
-            }
-        }
-        if (fields[idx].fieldIsEnum) {
-            if (fields[idx].fieldValues.length !== 0) {
-                const enums = fields[idx].fieldValues.split(',');
-                data = enums[0];
-            } else {
-                data = '';
-            }
-        }
-        if (fieldType === 'byte[]') {
-            data = Buffer.from(this.faker.random.words(), 'utf8').toString('hex');
-        }
-        line.push(data);
-        if (fieldType === 'byte[]' && fields[idx].fieldTypeBlobContent !== 'text') {
-            line.push('image/png');
-        }
-    }
-    for (idx in relationships) {
-        if (relationships[idx].relationshipValidate === true && relationships[idx].relationshipRequired) {
-            line.push(this.faker.random.number({min: 1, max: 10}));
-        }
-    }
-    table.push(line);
-}
-
-let result = table
-        .map(line =>
-            line.map(data => {
-                    return data;
-                })
-                .join(';')
-        )
-        .join('\n');
- _%>
-<%-result%>
diff --git a/generators/entity/prompts.js b/generators/entity/prompts.js
index 51ca27b3d1..b7b4b415b2 100644
--- a/generators/entity/prompts.js
+++ b/generators/entity/prompts.js
@@ -60,7 +60,7 @@ function askForMicroserviceJson() {
             message: 'Enter the path to the microservice root directory:',
             store: true,
             validate: input => {
-                let fromPath;
+                let fromPath = '';
                 if (path.isAbsolute(input)) {
                     fromPath = `${input}/${context.filename}`;
                 } else {
diff --git a/generators/generator-base.js b/generators/generator-base.js
index 54d632e6b1..9dcfa02f4c 100644
--- a/generators/generator-base.js
+++ b/generators/generator-base.js
@@ -115,13 +115,21 @@ module.exports = class extends PrivateBase {
         }
     }
 
+    /**
+     * Add a new entity route path to webpacks config
+     *
+     * @param {string} microserviceName - The name of the microservice to put into the url
+     */
+    addEntityToWebpack(microserviceName) {
+        this.needleApi.clientWebpack.addEntity(microserviceName);
+    }
+
     /**
      * Add a new entity in the "entities" menu.
      *
      * @param {string} routerName - The name of the Angular router (which by default is the name of the entity).
      * @param {boolean} enableTranslation - If translations are enabled or not
      * @param {string} clientFramework - The name of the client framework
-     * @param {string} entityTranslationKeyMenu - i18n key for entity entry in menu
      */
     addEntityToMenu(routerName, enableTranslation, clientFramework, entityTranslationKeyMenu = _.camelCase(routerName)) {
         if (this.clientFramework === 'angularX') {
@@ -141,7 +149,6 @@ module.exports = class extends PrivateBase {
      * @param {string} entityFileName - Entity File Name
      * @param {boolean} entityUrl - Entity router URL
      * @param {string} clientFramework - The name of the client framework
-     * @param {string} microServiceName - Microservice Name
      */
     addEntityToModule(
         entityInstance,
@@ -674,10 +681,8 @@ module.exports = class extends PrivateBase {
     /**
      * Add a distributionManagement to the Maven build.
      *
-     * @param {string} snapshotsId Snapshots Repository Id
-     * @param {string} snapshotsUrl Snapshots Repository Url
-     * @param {string} releasesId Repository Id
-     * @param {string} releasesUrl Repository Url
+     * @param {string} id - id of the repository
+     * @param {string} url - url of the repository
      */
     addMavenDistributionManagement(snapshotsId, snapshotsUrl, releasesId, releasesUrl) {
         this.needleApi.serverMaven.addDistributionManagement(snapshotsId, snapshotsUrl, releasesId, releasesUrl);
@@ -798,7 +803,6 @@ module.exports = class extends PrivateBase {
     /**
      * A new dependency to build.gradle file in a specific folder.
      *
-     * @param {string} directory - directory
      * @param {string} scope - scope of the new dependency, e.g. compile
      * @param {string} group - maven GroupId
      * @param {string} name - maven ArtifactId
diff --git a/generators/generator-constants.js b/generators/generator-constants.js
index e07c5bac0c..e67281fa0e 100644
--- a/generators/generator-constants.js
+++ b/generators/generator-constants.js
@@ -25,7 +25,7 @@ const DOCKER_MARIADB = 'mariadb:10.4.2';
 const DOCKER_POSTGRESQL = 'postgres:11.1';
 const DOCKER_MONGODB = 'mongo:4.0.6';
 const DOCKER_COUCHBASE = 'couchbase/server:6.0.1';
-const DOCKER_CASSANDRA = 'cassandra:3.11.4';
+const DOCKER_CASSANDRA = 'cassandra:3.11.3';
 const DOCKER_MSSQL = 'microsoft/mssql-server-linux:latest';
 const DOCKER_ORACLE = 'sath89/oracle-12c:latest';
 const DOCKER_HAZELCAST_MANAGEMENT_CENTER = 'hazelcast/management-center:3.11.3';
diff --git a/generators/internal/needle-api/needle-client-webpack.js b/generators/internal/needle-api/needle-client-webpack.js
index 6d2dc1c913..c2c1c8b708 100644
--- a/generators/internal/needle-api/needle-client-webpack.js
+++ b/generators/internal/needle-api/needle-client-webpack.js
@@ -16,6 +16,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+const chalk = require('chalk');
+
 const needleClient = require('./needle-client');
 const constants = require('../../generator-constants');
 
@@ -23,6 +25,18 @@ const CLIENT_MAIN_SRC_DIR = constants.CLIENT_MAIN_SRC_DIR;
 const CLIENT_WEBPACK_DIR = constants.CLIENT_WEBPACK_DIR;
 
 module.exports = class extends needleClient {
+    addEntity(microserviceName) {
+        const errorMessage = `${chalk.yellow(' Reference to ') + microserviceName} ${chalk.yellow('not added to menu.')}`;
+        const webpackDevPath = `${CLIENT_WEBPACK_DIR}/webpack.dev.js`;
+        const rewriteFileModel = this.generateFileModel(
+            webpackDevPath,
+            'jhipster-needle-add-entity-to-webpack',
+            `'/${microserviceName.toLowerCase()}',`
+        );
+
+        this.addBlockContentToFile(rewriteFileModel, errorMessage);
+    }
+
     copyExternalAssets(sourceFolder, targetFolder) {
         const errorMessage = 'Resource path not added to JHipster app.';
         const from = `${CLIENT_MAIN_SRC_DIR}content/${sourceFolder}/`;
diff --git a/generators/server/files.js b/generators/server/files.js
index cac6ceaf3e..05cb8e65c2 100644
--- a/generators/server/files.js
+++ b/generators/server/files.js
@@ -1136,28 +1136,19 @@ const serverFiles = {
                     file: 'package/web/rest/vm/package-info.java',
                     renameTo: generator => `${generator.javaDir}web/rest/vm/package-info.java`
                 },
+                { file: 'package/web/rest/vm/LoggerVM.java', renameTo: generator => `${generator.javaDir}web/rest/vm/LoggerVM.java` },
+
                 {
-                    file: 'package/web/rest/vm/LoggerVM.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/vm/LoggerVM.java`
+                    file: 'package/web/rest/util/HeaderUtil.java',
+                    renameTo: generator => `${generator.javaDir}web/rest/util/HeaderUtil.java`
                 },
                 {
-                    file: 'package/web/rest/package-info.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/package-info.java`
+                    file: 'package/web/rest/util/PaginationUtil.java',
+                    renameTo: generator => `${generator.javaDir}web/rest/util/PaginationUtil.java`
                 },
-                {
-                    file: 'package/web/rest/LogsResource.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/LogsResource.java`
-                }
-            ]
-        },
-        {
-            condition: generator => !generator.skipClient,
-            path: SERVER_MAIN_SRC_DIR,
-            templates: [
-                {
-                    file: 'package/web/rest/ClientForwardController.java',
-                    renameTo: generator => `${generator.javaDir}web/rest/ClientForwardController.java`
-                }
+                { file: 'package/web/rest/package-info.java', renameTo: generator => `${generator.javaDir}web/rest/package-info.java` },
+
+                { file: 'package/web/rest/LogsResource.java', renameTo: generator => `${generator.javaDir}web/rest/LogsResource.java` }
             ]
         }
     ],
@@ -1191,13 +1182,13 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/CassandraKeyspaceIT.java',
-                    renameTo: generator => `${generator.testDir}CassandraKeyspaceIT.java`
+                    file: 'package/CassandraKeyspaceUnitTest.java',
+                    renameTo: generator => `${generator.testDir}CassandraKeyspaceUnitTest.java`
                 },
                 { file: 'package/AbstractCassandraTest.java', renameTo: generator => `${generator.testDir}AbstractCassandraTest.java` },
                 {
-                    file: 'package/config/CassandraConfigurationIT.java',
-                    renameTo: generator => `${generator.testDir}config/CassandraConfigurationIT.java`
+                    file: 'package/config/CassandraTestConfiguration.java',
+                    renameTo: generator => `${generator.testDir}config/CassandraTestConfiguration.java`
                 }
             ]
         },
@@ -1206,8 +1197,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/config/DatabaseConfigurationIT.java',
-                    renameTo: generator => `${generator.testDir}config/DatabaseConfigurationIT.java`
+                    file: 'package/config/DatabaseTestConfiguration.java',
+                    renameTo: generator => `${generator.testDir}config/DatabaseTestConfiguration.java`
                 }
             ]
         },
@@ -1216,26 +1207,20 @@ const serverFiles = {
             templates: [
                 { file: 'package/web/rest/TestUtil.java', renameTo: generator => `${generator.testDir}web/rest/TestUtil.java` },
                 {
-                    file: 'package/web/rest/LogsResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/LogsResourceIT.java`
+                    file: 'package/web/rest/LogsResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/LogsResourceIntTest.java`
                 },
                 {
-                    file: 'package/web/rest/errors/ExceptionTranslatorIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorIT.java`
+                    file: 'package/web/rest/errors/ExceptionTranslatorIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorIntTest.java`
                 },
                 {
                     file: 'package/web/rest/errors/ExceptionTranslatorTestController.java',
                     renameTo: generator => `${generator.testDir}web/rest/errors/ExceptionTranslatorTestController.java`
-                }
-            ]
-        },
-        {
-            condition: generator => !generator.skipClient,
-            path: SERVER_TEST_SRC_DIR,
-            templates: [
+                },
                 {
-                    file: 'package/web/rest/ClientForwardControllerIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/ClientForwardControllerIT.java`
+                    file: 'package/web/rest/util/PaginationUtilUnitTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/util/PaginationUtilUnitTest.java`
                 }
             ]
         },
@@ -1244,8 +1229,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/config/timezone/HibernateTimeZoneIT.java',
-                    renameTo: generator => `${generator.testDir}config/timezone/HibernateTimeZoneIT.java`
+                    file: 'package/config/timezone/HibernateTimeZoneTest.java',
+                    renameTo: generator => `${generator.testDir}config/timezone/HibernateTimeZoneTest.java`
                 },
                 {
                     file: 'package/repository/timezone/DateTimeWrapper.java',
@@ -1335,8 +1320,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/LogoutResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/LogoutResourceIT.java`
+                    file: 'package/web/rest/LogoutResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/LogoutResourceIntTest.java`
                 }
             ]
         },
@@ -1362,7 +1347,7 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 // Create Cucumber test files
-                { file: 'package/cucumber/CucumberIT.java', renameTo: generator => `${generator.testDir}cucumber/CucumberIT.java` },
+                { file: 'package/cucumber/CucumberTest.java', renameTo: generator => `${generator.testDir}cucumber/CucumberTest.java` },
                 {
                     file: 'package/cucumber/stepdefs/StepDefs.java',
                     renameTo: generator => `${generator.testDir}cucumber/stepdefs/StepDefs.java`
@@ -1380,8 +1365,8 @@ const serverFiles = {
             templates: [
                 // Create auth config test files
                 {
-                    file: 'package/security/DomainUserDetailsServiceIT.java',
-                    renameTo: generator => `${generator.testDir}security/DomainUserDetailsServiceIT.java`
+                    file: 'package/security/DomainUserDetailsServiceIntTest.java',
+                    renameTo: generator => `${generator.testDir}security/DomainUserDetailsServiceIntTest.java`
                 }
             ]
         }
@@ -1394,7 +1379,7 @@ const serverFiles = {
                     generator.applicationType !== 'microservice') ||
                 (!generator.skipUserManagement && generator.databaseType === 'sql'),
             path: SERVER_MAIN_RES_DIR,
-            templates: ['config/liquibase/data/user.csv']
+            templates: ['config/liquibase/users.csv']
         },
         {
             condition: generator =>
@@ -1404,7 +1389,7 @@ const serverFiles = {
                     generator.databaseType === 'sql') ||
                 (!generator.skipUserManagement && generator.databaseType === 'sql'),
             path: SERVER_MAIN_RES_DIR,
-            templates: ['config/liquibase/data/authority.csv', 'config/liquibase/data/user_authority.csv']
+            templates: ['config/liquibase/authorities.csv', 'config/liquibase/users_authorities.csv']
         },
         {
             condition: generator => generator.skipUserManagement && generator.authenticationType === 'oauth2',
@@ -1465,16 +1450,16 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/service/UserServiceIT.java',
-                    renameTo: generator => `${generator.testDir}service/UserServiceIT.java`
+                    file: 'package/service/UserServiceIntTest.java',
+                    renameTo: generator => `${generator.testDir}service/UserServiceIntTest.java`
                 },
                 {
-                    file: 'package/service/mapper/UserMapperIT.java',
-                    renameTo: generator => `${generator.testDir}service/mapper/UserMapperIT.java`
+                    file: 'package/service/mapper/UserMapperTest.java',
+                    renameTo: generator => `${generator.testDir}service/mapper/UserMapperTest.java`
                 },
                 {
-                    file: 'package/web/rest/UserResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/UserResourceIT.java`
+                    file: 'package/web/rest/UserResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/UserResourceIntTest.java`
                 }
             ]
         },
@@ -1486,8 +1471,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/AccountResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/AccountResourceIT.java`
+                    file: 'package/web/rest/AccountResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/AccountResourceIntTest.java`
                 }
             ]
         },
@@ -1547,12 +1532,12 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/repository/CustomAuditEventRepositoryIT.java',
-                    renameTo: generator => `${generator.testDir}repository/CustomAuditEventRepositoryIT.java`
+                    file: 'package/repository/CustomAuditEventRepositoryIntTest.java',
+                    renameTo: generator => `${generator.testDir}repository/CustomAuditEventRepositoryIntTest.java`
                 },
                 {
-                    file: 'package/web/rest/AuditResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/AuditResourceIT.java`
+                    file: 'package/web/rest/AuditResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/AuditResourceIntTest.java`
                 }
             ]
         },
@@ -1682,8 +1667,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/UserJWTControllerIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/UserJWTControllerIT.java`
+                    file: 'package/web/rest/UserJWTControllerIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/UserJWTControllerIntTest.java`
                 }
             ]
         },
@@ -1694,8 +1679,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/web/rest/AuditResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/AuditResourceIT.java`
+                    file: 'package/web/rest/AuditResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/AuditResourceIntTest.java`
                 }
             ]
         },
@@ -1704,8 +1689,8 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/repository/CustomAuditEventRepositoryIT.java',
-                    renameTo: generator => `${generator.testDir}repository/CustomAuditEventRepositoryIT.java`
+                    file: 'package/repository/CustomAuditEventRepositoryIntTest.java',
+                    renameTo: generator => `${generator.testDir}repository/CustomAuditEventRepositoryIntTest.java`
                 }
             ]
         },
@@ -1734,24 +1719,24 @@ const serverFiles = {
             path: SERVER_TEST_SRC_DIR,
             templates: [
                 {
-                    file: 'package/service/MailServiceIT.java',
-                    renameTo: generator => `${generator.testDir}service/MailServiceIT.java`
+                    file: 'package/service/MailServiceIntTest.java',
+                    renameTo: generator => `${generator.testDir}service/MailServiceIntTest.java`
                 },
                 {
-                    file: 'package/service/UserServiceIT.java',
-                    renameTo: generator => `${generator.testDir}service/UserServiceIT.java`
+                    file: 'package/service/UserServiceIntTest.java',
+                    renameTo: generator => `${generator.testDir}service/UserServiceIntTest.java`
                 },
                 {
-                    file: 'package/service/mapper/UserMapperIT.java',
-                    renameTo: generator => `${generator.testDir}service/mapper/UserMapperIT.java`
+                    file: 'package/service/mapper/UserMapperTest.java',
+                    renameTo: generator => `${generator.testDir}service/mapper/UserMapperTest.java`
                 },
                 {
-                    file: 'package/web/rest/AccountResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/AccountResourceIT.java`
+                    file: 'package/web/rest/AccountResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/AccountResourceIntTest.java`
                 },
                 {
-                    file: 'package/web/rest/UserResourceIT.java',
-                    renameTo: generator => `${generator.testDir}web/rest/UserResourceIT.java`
+                    file: 'package/web/rest/UserResourceIntTest.java',
+                    renameTo: generator => `${generator.testDir}web/rest/UserResourceIntTest.java`
                 }
             ]
         }
diff --git a/generators/server/templates/build.gradle.ejs b/generators/server/templates/build.gradle.ejs
index 031a56b3bb..40b5a94a33 100644
--- a/generators/server/templates/build.gradle.ejs
+++ b/generators/server/templates/build.gradle.ejs
@@ -139,7 +139,7 @@ if (OperatingSystem.current().isWindows()) {
 }
 
 test {
-    exclude '**/*CucumberIT*'
+    exclude '**/CucumberTest*'
 
     // uncomment if the tests reports are not generated
     // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484
@@ -151,7 +151,7 @@ test {
 task cucumberTest(type: Test) {
     description = "Execute cucumber BDD tests."
     group = "verification"
-    include '**/*CucumberIT*'
+    include '**/CucumberTest*'
 
     // uncomment if the tests reports are not generated
     // see https://github.com/jhipster/generator-jhipster/pull/2771 and https://github.com/jhipster/generator-jhipster/pull/4484
diff --git a/generators/server/templates/gradle.properties.ejs b/generators/server/templates/gradle.properties.ejs
index 1d2ba479d2..a4409e9523 100644
--- a/generators/server/templates/gradle.properties.ejs
+++ b/generators/server/templates/gradle.properties.ejs
@@ -28,7 +28,7 @@ yarn_version=<%= YARN_VERSION %>
 jhipster_dependencies_version=3.0.0-SNAPSHOT
 # 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.1.2.RELEASE
+spring_boot_version=2.1.3.RELEASE
 # The hibernate version should match the one managed by
 # https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
 hibernate_version=5.3.7.Final
diff --git a/generators/server/templates/pom.xml.ejs b/generators/server/templates/pom.xml.ejs
index 7e68c6e840..80bafda705 100644
--- a/generators/server/templates/pom.xml.ejs
+++ b/generators/server/templates/pom.xml.ejs
@@ -94,7 +94,7 @@
         <jhipster-dependencies.version>3.0.0-SNAPSHOT</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.1.2.RELEASE</spring-boot.version>
+        <spring-boot.version>2.1.3.RELEASE</spring-boot.version>
         <%_ if (databaseType === 'sql') { _%>
         <!-- The hibernate version should match the one managed by
         https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-dependencies/${spring-boot.version} -->
diff --git a/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs b/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
index e9f34ef165..e8c00efba2 100644
--- a/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/AuditResource.java.ejs
@@ -19,8 +19,8 @@
 package <%=packageName%>.web.rest;
 
 import <%=packageName%>.service.AuditEventService;
+import <%=packageName%>.web.rest.util.PaginationUtil;
 
-import io.github.jhipster.web.util.PaginationUtil;;
 import io.github.jhipster.web.util.ResponseUtil;
 import org.springframework.boot.actuate.audit.AuditEvent;
 import org.springframework.data.domain.Page;
diff --git a/generators/server/templates/src/main/java/package/web/rest/ClientForwardController.java.ejs b/generators/server/templates/src/main/java/package/web/rest/ClientForwardController.java.ejs
deleted file mode 100644
index 426c6f6f69..0000000000
--- a/generators/server/templates/src/main/java/package/web/rest/ClientForwardController.java.ejs
+++ /dev/null
@@ -1,33 +0,0 @@
-<%#
-Copyright 2013-2019 the original author or authors from the JHipster project.
-
-This file is part of the JHipster project, see https://www.jhipster.tech/
-for more information.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-     http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
--%>
-package <%=packageName%>.web.rest;
-
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-
-@Controller
-public class ClientForwardController {
-    /**
-     * Forwards any unmapped paths (except those containing a period) to the client index.html
-     */
-    @GetMapping(value = "/**/{path:[^\\.]*}")
-    public String forward() {
-        return "forward:/";
-    }
-}
diff --git a/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs b/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
index 9648575d02..962cbdc0ef 100644
--- a/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/UserResource.java.ejs
@@ -38,11 +38,10 @@ import <%=packageName%>.service.dto.<%= asDto('User') %>;
 import <%=packageName%>.web.rest.errors.BadRequestAlertException;
 import <%=packageName%>.web.rest.errors.EmailAlreadyUsedException;
 import <%=packageName%>.web.rest.errors.LoginAlreadyUsedException;
+import <%=packageName%>.web.rest.util.HeaderUtil;
 <%_ } _%>
-
-import io.github.jhipster.web.util.HeaderUtil;
 <%_ if (databaseType === 'sql' || databaseType === 'mongodb' || databaseType === 'couchbase') { _%>
-import io.github.jhipster.web.util.PaginationUtil;
+import <%=packageName%>.web.rest.util.PaginationUtil;
 <%_ } _%>
 <%_ if (!reactive) { _%>
 import io.github.jhipster.web.util.ResponseUtil;
@@ -50,7 +49,6 @@ import io.github.jhipster.web.util.ResponseUtil;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (databaseType === 'sql' || databaseType === 'mongodb' || databaseType === 'couchbase') { _%>
     <%_ if (!reactive) { _%>
 import org.springframework.data.domain.Page;
@@ -121,9 +119,6 @@ public class UserResource {
 
     private final Logger log = LoggerFactory.getLogger(UserResource.class);
 
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
-
     private final UserService userService;
 <%_ if (authenticationType !== 'oauth2') { _%>
 
@@ -180,7 +175,7 @@ public class UserResource {
             <%= asEntity('User') %> newUser = userService.createUser(userDTO);
             mailService.sendCreationEmail(newUser);
             return ResponseEntity.created(new URI("/api/users/" + newUser.getLogin()))
-                .headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) {%> "userManagement.created"<% } else { %> "A user is created with identifier " + newUser.getLogin()<% } %>, newUser.getLogin()))
+                .headers(HeaderUtil.createAlert(<% if (enableTranslation) {%> "userManagement.created"<% } else { %> "A user is created with identifier " + newUser.getLogin()<% } %>, newUser.getLogin()))
                 .body(newUser);
         }
         <%_ } else { _%>
@@ -204,7 +199,7 @@ public class UserResource {
             .map(user -> {
                 try {
                     return ResponseEntity.created(new URI("/api/users/" + user.getLogin()))
-                        .headers(HeaderUtil.createAlert(applicationName, "userManagement.created", user.getLogin()))
+                        .headers(HeaderUtil.createAlert( "userManagement.created", user.getLogin()))
                         .body(user);
                 } catch (URISyntaxException e) {
                     throw new RuntimeException(e);
@@ -237,7 +232,7 @@ public class UserResource {
         Optional<<%= asDto('User') %>> updatedUser = userService.updateUser(userDTO);
 
         return ResponseUtil.wrapOrNotFound(updatedUser,
-            HeaderUtil.createAlert(applicationName, <% if (enableTranslation) { %>"userManagement.updated"<% } else { %>"A user is updated with identifier " + userDTO.getLogin()<% } %>, userDTO.getLogin()));
+            HeaderUtil.createAlert(<% if (enableTranslation) { %>"userManagement.updated"<% } else { %>"A user is updated with identifier " + userDTO.getLogin()<% } %>, userDTO.getLogin()));
     <%_ } else { _%>
     public Mono<ResponseEntity<<%= asDto('User') %>>> updateUser(@Valid @RequestBody <%= asDto('User') %> userDTO) {
         log.debug("REST request to update User : {}", userDTO);
@@ -260,7 +255,7 @@ public class UserResource {
             })
             .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)))
             .map(user -> ResponseEntity.ok()
-                .headers(HeaderUtil.createAlert(applicationName, "userManagement.updated", userDTO.getLogin()))
+                .headers(HeaderUtil.createAlert("userManagement.updated", userDTO.getLogin()))
                 .body(user)
             );
     <%_ } _%>
@@ -339,12 +334,12 @@ public class UserResource {
     public ResponseEntity<Void> deleteUser(@PathVariable String login) {
         log.debug("REST request to delete User: {}", login);
         userService.deleteUser(login);
-        return ResponseEntity.ok().headers(HeaderUtil.createAlert(applicationName, <% if (enableTranslation) {%> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
+        return ResponseEntity.ok().headers(HeaderUtil.createAlert(<% if (enableTranslation) {%> "userManagement.deleted"<% } else { %> "A user is deleted with identifier " + login<% } %>, login)).build();
     <%_ } else { _%>
     public Mono<ResponseEntity<Void>> deleteUser(@PathVariable String login) {
         log.debug("REST request to delete User: {}", login);
         return userService.deleteUser(login)
-            .map(it -> ResponseEntity.ok().headers(HeaderUtil.createAlert( applicationName, "userManagement.deleted", login)).build());
+            .map(it -> ResponseEntity.ok().headers(HeaderUtil.createAlert( "userManagement.deleted", login)).build());
     <%_ } _%>
     }
 <%_ } _%>
diff --git a/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs b/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
index 7cb5918e83..fff66282b0 100644
--- a/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
+++ b/generators/server/templates/src/main/java/package/web/rest/errors/ExceptionTranslator.java.ejs
@@ -18,9 +18,8 @@
 -%>
 package <%=packageName%>.web.rest.errors;
 
-import io.github.jhipster.web.util.HeaderUtil;
+import <%=packageName%>.web.rest.util.HeaderUtil;
 
-import org.springframework.beans.factory.annotation.Value;
 <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%>
 import org.springframework.dao.ConcurrencyFailureException;
 <%_ } _%>
@@ -82,9 +81,6 @@ _%>
     private static final String PATH_KEY = "path";
     private static final String VIOLATIONS_KEY = "violations";
 
-    @Value("${spring.application.name:JHIPSTER}")
-    private String applicationName;
-
     /**
      * Post-process the Problem payload to add the message key for the front-end if needed
      */
@@ -162,7 +158,7 @@ _%>
 
     @ExceptionHandler
     public <%- returnType %> handleBadRequestAlertException(BadRequestAlertException ex, <%= requestClass %> request) {
-        return create(ex, request, HeaderUtil.createFailureAlert(applicationName, ex.getEntityName(), ex.getErrorKey(), ex.getMessage()));
+        return create(ex, request, HeaderUtil.createFailureAlert(ex.getEntityName(), ex.getErrorKey(), ex.getMessage()));
     }
     <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%>
 
diff --git a/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs b/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs
new file mode 100644
index 0000000000..f205a66230
--- /dev/null
+++ b/generators/server/templates/src/main/java/package/web/rest/util/HeaderUtil.java.ejs
@@ -0,0 +1,81 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpHeaders;
+<%_
+let createdMessage;
+let updatedMessage;
+let deletedMessage;
+let errorMessage;
+_%>
+
+/**
+ * Utility class for HTTP headers creation.
+ */
+public final class HeaderUtil {
+
+    private static final Logger log = LoggerFactory.getLogger(HeaderUtil.class);
+
+    private static final String APPLICATION_NAME = "<%= angularAppName %>";
+
+    private HeaderUtil() {
+    }
+
+    public static HttpHeaders createAlert(String message, String param) {
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-" + APPLICATION_NAME + "-alert", message);
+        headers.add("X-" + APPLICATION_NAME + "-params", param);
+        return headers;
+    }
+<%
+    if (enableTranslation) {
+        createdMessage = 'APPLICATION_NAME + "." + entityName + ".created"';
+        updatedMessage = 'APPLICATION_NAME + "." + entityName + ".updated"';
+        deletedMessage = 'APPLICATION_NAME + "." + entityName + ".deleted"';
+        errorMessage = '"error." + errorKey';
+    } else {
+        createdMessage = '"A new " + entityName + " is created with identifier " + param';
+        updatedMessage = '"A " + entityName + " is updated with identifier " + param';
+        deletedMessage = '"A " + entityName + " is deleted with identifier " + param';
+        errorMessage = 'defaultMessage';
+    }
+%>
+    public static HttpHeaders createEntityCreationAlert(String entityName, String param) {
+        return createAlert(<%- createdMessage %>, param);
+    }
+
+    public static HttpHeaders createEntityUpdateAlert(String entityName, String param) {
+        return createAlert(<%- updatedMessage %>, param);
+    }
+
+    public static HttpHeaders createEntityDeletionAlert(String entityName, String param) {
+        return createAlert(<%- deletedMessage %>, param);
+    }
+
+    public static HttpHeaders createFailureAlert(String entityName, String errorKey, String defaultMessage) {
+        log.error("Entity processing failed, {}", defaultMessage);
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-" + APPLICATION_NAME + "-error", <%- errorMessage %>);
+        headers.add("X-" + APPLICATION_NAME + "-params", entityName);
+        return headers;
+    }
+}
diff --git a/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs b/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs
new file mode 100644
index 0000000000..1bdd0fe4c4
--- /dev/null
+++ b/generators/server/templates/src/main/java/package/web/rest/util/PaginationUtil.java.ejs
@@ -0,0 +1,98 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpHeaders;
+import org.springframework.web.util.UriComponentsBuilder;
+<%_ if (searchEngine === 'elasticsearch') { _%>
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+<%_ } _%>
+
+/**
+ * Utility class for handling pagination.
+ *
+ * <p>
+ * Pagination uses the same principles as the <a href="https://developer.github.com/v3/#pagination">GitHub API</a>,
+ * and follow <a href="http://tools.ietf.org/html/rfc5988">RFC 5988 (Link header)</a>.
+ */
+public final class PaginationUtil {
+
+    private PaginationUtil() {
+    }
+
+    public static <T> HttpHeaders generatePaginationHttpHeaders(Page<T> page, String baseUrl) {
+
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-Total-Count", Long.toString(page.getTotalElements()));
+        String link = "";
+        if ((page.getNumber() + 1) < page.getTotalPages()) {
+            link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + ">; rel=\"next\",";
+        }
+        // prev link
+        if ((page.getNumber()) > 0) {
+            link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + ">; rel=\"prev\",";
+        }
+        // last and first link
+        int lastPage = 0;
+        if (page.getTotalPages() > 0) {
+            lastPage = page.getTotalPages() - 1;
+        }
+        link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + ">; rel=\"last\",";
+        link += "<" + generateUri(baseUrl, 0, page.getSize()) + ">; rel=\"first\"";
+        headers.add(HttpHeaders.LINK, link);
+        return headers;
+    }
+
+    private static String generateUri(String baseUrl, int page, int size) {
+        return UriComponentsBuilder.fromUriString(baseUrl).queryParam("page", page).queryParam("size", size).toUriString();
+    }
+    <%_ if (searchEngine === 'elasticsearch') { _%>
+
+    public static <T> HttpHeaders generateSearchPaginationHttpHeaders(String query, Page<T> page, String baseUrl) {
+        String escapedQuery;
+        try {
+            escapedQuery = URLEncoder.encode(query, "UTF-8");
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+        HttpHeaders headers = new HttpHeaders();
+        headers.add("X-Total-Count", Long.toString(page.getTotalElements()));
+        String link = "";
+        if ((page.getNumber() + 1) < page.getTotalPages()) {
+            link = "<" + generateUri(baseUrl, page.getNumber() + 1, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"next\",";
+        }
+        // prev link
+        if ((page.getNumber()) > 0) {
+            link += "<" + generateUri(baseUrl, page.getNumber() - 1, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"prev\",";
+        }
+        // last and first link
+        int lastPage = 0;
+        if (page.getTotalPages() > 0) {
+            lastPage = page.getTotalPages() - 1;
+        }
+        link += "<" + generateUri(baseUrl, lastPage, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"last\",";
+        link += "<" + generateUri(baseUrl, 0, page.getSize()) + "&query=" + escapedQuery + ">; rel=\"first\"";
+        headers.add(HttpHeaders.LINK, link);
+        return headers;
+    }
+    <%_ } _%>
+}
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 a28b149651..650fd61488 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
@@ -212,8 +212,7 @@ spring:
     <%_ } _%>
     <%_ if (databaseType === 'sql') { _%>
     liquibase:
-        # Remove 'faker' if you do not want the sample data to be loaded automatically
-        contexts: dev, faker
+        contexts: dev
     <%_ } _%>
     mail:
         host: localhost
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 83c36d3d9f..876feed516 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
@@ -181,7 +181,6 @@ spring:
             password: password
     <%_ } _%>
     <%_ if (databaseType === 'sql') { _%>
-    # Replace by 'prod, faker' to add the faker context and have sample data loaded in production
     liquibase:
         contexts: prod
     <%_ } _%>
diff --git a/generators/server/templates/src/main/resources/config/application.yml.ejs b/generators/server/templates/src/main/resources/config/application.yml.ejs
index 87348bca02..7a5d084025 100644
--- a/generators/server/templates/src/main/resources/config/application.yml.ejs
+++ b/generators/server/templates/src/main/resources/config/application.yml.ejs
@@ -67,7 +67,6 @@ zuul: # those values must be configured depending on the application specific ne
     host:
         max-total-connections: 1000
         max-per-route-connections: 100
-    prefix: /services
     semaphore:
         max-semaphores: 500
     <%_ if (serviceDiscoveryType === 'consul') { _%>
@@ -269,7 +268,7 @@ security:
 server:
     servlet:
         <%_ if ((applicationType === 'microservice' || applicationType === 'uaa') && !serviceDiscoveryType) { _%>
-        context-path: /services/${spring.application.name}
+        context-path: /${spring.application.name}
         <%_ } _%>
         session:
             cookie:
diff --git a/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs b/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
index ed1e1f3748..9490ba722f 100644
--- a/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
+++ b/generators/server/templates/src/main/resources/config/liquibase/changelog/initial_schema.xml.ejs
@@ -29,7 +29,7 @@
     <%_ } _%>
     <%_ if (prodDatabaseType === 'postgresql' || prodDatabaseType === 'oracle' || prodDatabaseType === 'mssql') { _%>
     <changeSet id="00000000000000" author="jhipster">
-        <createSequence sequenceName="sequence_generator" startValue="1050" incrementBy="50"/>
+        <createSequence sequenceName="sequence_generator" startValue="1000" incrementBy="50"/>
     </changeSet>
     <%_ } _%>
 
@@ -140,8 +140,8 @@
                                  referencedTableName="<%= jhiTablePrefix %>_user"/>
     <%_ } _%>
     <%_ if (authenticationType !== 'oauth2' || (authenticationType === 'oauth2' && applicationType !== 'microservice')) { _%>
-        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData
-                  file="config/liquibase/data/user.csv"
+        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData encoding="UTF-8"
+                  file="config/liquibase/users.csv"
                   separator=";"
                   <%_ if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { _%>
                   identityInsertEnabled="true"
@@ -154,16 +154,16 @@
             <column name="created_date" type="timestamp"/>
         </<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData>
         <dropDefaultValue tableName="<%= jhiTablePrefix %>_user" columnName="created_date" columnDataType="datetime"/>
-        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData
-                  file="config/liquibase/data/authority.csv"
+        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData encoding="UTF-8"
+                  file="config/liquibase/authorities.csv"
                   separator=";"
                   <%_ if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { _%>
                   identityInsertEnabled="true"
                   <%_ } _%>
                   tableName="<%= jhiTablePrefix %>_authority"/>
 
-        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData
-                  file="config/liquibase/data/user_authority.csv"
+        <<% if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { %>ext:<% } %>loadData encoding="UTF-8"
+                  file="config/liquibase/users_authorities.csv"
                   separator=";"
                   <%_ if (devDatabaseType === 'mssql' || prodDatabaseType === 'mssql') { _%>
                   identityInsertEnabled="true"
diff --git a/generators/server/templates/src/main/resources/config/liquibase/data/authority.csv.ejs b/generators/server/templates/src/main/resources/config/liquibase/data/authority.csv.ejs
deleted file mode 100644
index af5c6dfa18..0000000000
--- a/generators/server/templates/src/main/resources/config/liquibase/data/authority.csv.ejs
+++ /dev/null
@@ -1,3 +0,0 @@
-name
-ROLE_ADMIN
-ROLE_USER
diff --git a/generators/server/templates/src/main/resources/config/liquibase/data/oauth_client_details.csv.ejs b/generators/server/templates/src/main/resources/config/liquibase/data/oauth_client_details.csv.ejs
deleted file mode 100644
index ad3d52d67b..0000000000
--- a/generators/server/templates/src/main/resources/config/liquibase/data/oauth_client_details.csv.ejs
+++ /dev/null
@@ -1,2 +0,0 @@
-client_id;resource_ids;client_secret;scope;authorized_grant_types;web_server_redirect_uri;authorities;access_token_validity;refresh_token_validity;additional_information;autoapprove
-<%= baseName %>app;res_<%= baseName %>;bXktc2VjcmV0LXRva2VuLXRvLWNoYW5nZS1pbi1wcm9kdWN0aW9uLWFuZC10by1rZWVwLWluLWEtc2VjdXJlLXBsYWNl;read,write;password,refresh_token,authorization_code,implicit;;ROLE_ADMIN,ROLE_USER;1800;2000;{};true
diff --git a/generators/server/templates/src/main/resources/config/liquibase/data/user.csv.ejs b/generators/server/templates/src/main/resources/config/liquibase/data/user.csv.ejs
deleted file mode 100644
index 590a55c9cf..0000000000
--- a/generators/server/templates/src/main/resources/config/liquibase/data/user.csv.ejs
+++ /dev/null
@@ -1,7 +0,0 @@
-id;login;<% if (authenticationType !== 'oauth2') { %>password_hash;<% } %>first_name;last_name;email;image_url;activated;lang_key;created_by;last_modified_by
-1;system;<% if (authenticationType !== 'oauth2') { %>$2a$10$mE.qmcV0mFU5NcKh73TZx.z4ueI/.bDWbj0T1BYyqP481kGGarKLG;<% } %>System;System;system@localhost;;true;<%= nativeLanguage %>;system;system
-2;anonymoususer;<% if (authenticationType !== 'oauth2') { %>$2a$10$j8S5d7Sr7.8VTOYNviDPOeWX8KcYILUVJBsYV83Y5NtECayypx9lO;<% } %>Anonymous;User;anonymous@localhost;;true;<%= nativeLanguage %>;system;system
-<%_ if (authenticationType !== 'oauth2') { _%>
-3;admin;$2a$10$gSAhZrxMllrbgj/kkK9UceBPpChGWJA7SYIb1Mqo.n5aNLq1/oRrC;Administrator;Administrator;admin@localhost;;true;<%= nativeLanguage %>;system;system
-4;user;$2a$10$VEjxo0jq2YG9Rbk2HmX9S.k1uZBGYUHdUcid3g/vfiEl7lwWgOH/K;User;User;user@localhost;;true;<%= nativeLanguage %>;system;system
-<%_ } _%>
diff --git a/generators/server/templates/src/main/resources/config/liquibase/data/user_authority.csv.ejs b/generators/server/templates/src/main/resources/config/liquibase/data/user_authority.csv.ejs
deleted file mode 100644
index 7d17146cc5..0000000000
--- a/generators/server/templates/src/main/resources/config/liquibase/data/user_authority.csv.ejs
+++ /dev/null
@@ -1,8 +0,0 @@
-user_id;authority_name
-1;ROLE_ADMIN
-1;ROLE_USER
-<%_ if (authenticationType !== 'oauth2') { _%>
-3;ROLE_ADMIN
-3;ROLE_USER
-4;ROLE_USER
-<%_ } _%>
diff --git a/generators/server/templates/src/main/resources/templates/mail/activationEmail.html.ejs b/generators/server/templates/src/main/resources/templates/mail/activationEmail.html.ejs
index 1ae9445d97..cb021d8e6a 100644
--- a/generators/server/templates/src/main/resources/templates/mail/activationEmail.html.ejs
+++ b/generators/server/templates/src/main/resources/templates/mail/activationEmail.html.ejs
@@ -13,7 +13,7 @@
             Your JHipster account has been created, please click on the URL below to activate it:
         </p>
         <p>
-            <a th:with="url=(@{|${baseUrl}/activate?key=${user.activationKey}|})" th:href="${url}"
+            <a th:with="url=(@{|${baseUrl}/#/activate?key=${user.activationKey}|})" th:href="${url}"
             th:text="${url}">Activation link</a>
         </p>
         <p>
diff --git a/generators/server/templates/src/main/resources/templates/mail/creationEmail.html.ejs b/generators/server/templates/src/main/resources/templates/mail/creationEmail.html.ejs
index a4455edfd2..dc0cff5883 100644
--- a/generators/server/templates/src/main/resources/templates/mail/creationEmail.html.ejs
+++ b/generators/server/templates/src/main/resources/templates/mail/creationEmail.html.ejs
@@ -13,7 +13,7 @@
             Your JHipster account has been created, please click on the URL below to access it:
         </p>
         <p>
-            <a th:with="url=(@{|${baseUrl}/reset/finish?key=${user.resetKey}|})" th:href="${url}"
+            <a th:with="url=(@{|${baseUrl}/#/reset/finish?key=${user.resetKey}|})" th:href="${url}"
             th:text="${url}">Login link</a>
         </p>
         <p>
diff --git a/generators/server/templates/src/main/resources/templates/mail/passwordResetEmail.html.ejs b/generators/server/templates/src/main/resources/templates/mail/passwordResetEmail.html.ejs
index 4bdca2ca93..f44511265b 100644
--- a/generators/server/templates/src/main/resources/templates/mail/passwordResetEmail.html.ejs
+++ b/generators/server/templates/src/main/resources/templates/mail/passwordResetEmail.html.ejs
@@ -13,7 +13,7 @@
             For your JHipster account a password reset was requested, please click on the URL below to reset it:
         </p>
         <p>
-            <a th:with="url=(@{|${baseUrl}/reset/finish?key=${user.resetKey}|})" th:href="${url}"
+            <a th:with="url=(@{|${baseUrl}/#/reset/finish?key=${user.resetKey}|})" th:href="${url}"
             th:text="${url}">Login link</a>
         </p>
         <p>
diff --git a/generators/spring-controller/index.js b/generators/spring-controller/index.js
index e3904c0eed..4273f7c12f 100644
--- a/generators/spring-controller/index.js
+++ b/generators/spring-controller/index.js
@@ -167,8 +167,8 @@ module.exports = class extends BaseBlueprintGenerator {
                 this.template(
                     `${this.fetchFromInstalledJHipster(
                         'spring-controller/templates'
-                    )}/${SERVER_TEST_SRC_DIR}package/web/rest/ResourceIT.java.ejs`,
-                    `${SERVER_TEST_SRC_DIR}${this.packageFolder}/web/rest/${this.controllerClass}IT.java`
+                    )}/${SERVER_TEST_SRC_DIR}package/web/rest/ResourceIntTest.java.ejs`,
+                    `${SERVER_TEST_SRC_DIR}${this.packageFolder}/web/rest/${this.controllerClass}IntTest.java`
                 );
             }
         };
diff --git a/package-lock.json b/package-lock.json
index 73de14595e..56cd1da6ed 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -769,6 +769,17 @@
             "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
             "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
         },
+        "concat-stream": {
+            "version": "1.6.2",
+            "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+            "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+            "requires": {
+                "buffer-from": "^1.0.0",
+                "inherits": "^2.0.3",
+                "readable-stream": "^2.2.2",
+                "typedarray": "^0.0.6"
+            }
+        },
         "conf": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/conf/-/conf-2.0.0.tgz",
@@ -1439,7 +1450,7 @@
                 },
                 "load-json-file": {
                     "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+                    "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
                     "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
                     "dev": true,
                     "requires": {
@@ -1730,11 +1741,6 @@
             "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
             "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
         },
-        "faker": {
-            "version": "4.1.0",
-            "resolved": "https://registry.npmjs.org/faker/-/faker-4.1.0.tgz",
-            "integrity": "sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8="
-        },
         "fast-deep-equal": {
             "version": "2.0.1",
             "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
@@ -3654,19 +3660,12 @@
             }
         },
         "read-chunk": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.0.0.tgz",
-            "integrity": "sha512-8lBUVPjj9TC5bKLBacB+rpexM03+LWiYbv6ma3BeWmUYXGxqA1WNNgIZHq/iIsCrbFMzPhFbkOqdsyOFRnuoXg==",
+            "version": "2.1.0",
+            "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
+            "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=",
             "requires": {
-                "pify": "^4.0.0",
-                "with-open-file": "^0.1.3"
-            },
-            "dependencies": {
-                "pify": {
-                    "version": "4.0.1",
-                    "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
-                    "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
-                }
+                "pify": "^3.0.0",
+                "safe-buffer": "^5.1.1"
             }
         },
         "read-input": {
@@ -4224,19 +4223,6 @@
             "requires": {
                 "concat-stream": "^1.4.7",
                 "os-shim": "^0.1.2"
-            },
-            "dependencies": {
-                "concat-stream": {
-                    "version": "1.6.2",
-                    "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
-                    "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
-                    "requires": {
-                        "buffer-from": "^1.0.0",
-                        "inherits": "^2.0.3",
-                        "readable-stream": "^2.2.2",
-                        "typedarray": "^0.0.6"
-                    }
-                }
             }
         },
         "spdx-correct": {
@@ -4747,7 +4733,8 @@
         "tslib": {
             "version": "1.9.3",
             "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
-            "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ=="
+            "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+            "dev": true
         },
         "tunnel-agent": {
             "version": "0.6.0",
@@ -5045,23 +5032,6 @@
                 "triple-beam": "^1.2.0"
             }
         },
-        "with-open-file": {
-            "version": "0.1.5",
-            "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.5.tgz",
-            "integrity": "sha512-zY51cJCXG6qBilVuMceKNwU3rzjB/Ygt96BuSQ4+tXo3ewlxvj9ET99lpUHNzWfkYmsyfqKZEB9NJORmGZ1Ltw==",
-            "requires": {
-                "p-finally": "^1.0.0",
-                "p-try": "^2.0.0",
-                "pify": "^3.0.0"
-            },
-            "dependencies": {
-                "p-try": {
-                    "version": "2.0.0",
-                    "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
-                    "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ=="
-                }
-            }
-        },
         "wordwrap": {
             "version": "1.0.0",
             "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
@@ -5346,37 +5316,27 @@
             "dev": true
         },
         "yeoman-environment": {
-            "version": "2.3.4",
-            "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.4.tgz",
-            "integrity": "sha512-KLxE5ft/74Qj7h3AsQZv8G6MEEHYJwmD5F99nfOVaep3rBzCtbrJKkdqWc7bDV141Nr8UZZsIXmzc3IcCm6E2w==",
+            "version": "2.3.0",
+            "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.3.0.tgz",
+            "integrity": "sha512-PHSAkVOqYdcR+C+Uht1SGC4eVD/9OhygYFkYaI66xF8vKIeS1RNYay+umj2ZrQeJ50tF5Q/RSO6qGDz9y3Ifug==",
             "requires": {
-                "chalk": "^2.4.1",
+                "chalk": "^2.1.0",
                 "cross-spawn": "^6.0.5",
                 "debug": "^3.1.0",
-                "diff": "^3.5.0",
+                "diff": "^3.3.1",
                 "escape-string-regexp": "^1.0.2",
                 "globby": "^8.0.1",
                 "grouped-queue": "^0.3.3",
-                "inquirer": "^6.0.0",
+                "inquirer": "^5.2.0",
                 "is-scoped": "^1.0.0",
                 "lodash": "^4.17.10",
-                "log-symbols": "^2.2.0",
+                "log-symbols": "^2.1.0",
                 "mem-fs": "^1.1.0",
                 "strip-ansi": "^4.0.0",
                 "text-table": "^0.2.0",
-                "untildify": "^3.0.3"
+                "untildify": "^3.0.2"
             },
             "dependencies": {
-                "ansi-regex": {
-                    "version": "4.0.0",
-                    "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
-                    "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w=="
-                },
-                "chardet": {
-                    "version": "0.7.0",
-                    "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
-                    "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
-                },
                 "cross-spawn": {
                     "version": "6.0.5",
                     "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -5388,71 +5348,13 @@
                         "shebang-command": "^1.2.0",
                         "which": "^1.2.9"
                     }
-                },
-                "external-editor": {
-                    "version": "3.0.3",
-                    "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
-                    "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
-                    "requires": {
-                        "chardet": "^0.7.0",
-                        "iconv-lite": "^0.4.24",
-                        "tmp": "^0.0.33"
-                    }
-                },
-                "inquirer": {
-                    "version": "6.2.2",
-                    "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
-                    "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
-                    "requires": {
-                        "ansi-escapes": "^3.2.0",
-                        "chalk": "^2.4.2",
-                        "cli-cursor": "^2.1.0",
-                        "cli-width": "^2.0.0",
-                        "external-editor": "^3.0.3",
-                        "figures": "^2.0.0",
-                        "lodash": "^4.17.11",
-                        "mute-stream": "0.0.7",
-                        "run-async": "^2.2.0",
-                        "rxjs": "^6.4.0",
-                        "string-width": "^2.1.0",
-                        "strip-ansi": "^5.0.0",
-                        "through": "^2.3.6"
-                    },
-                    "dependencies": {
-                        "chalk": {
-                            "version": "2.4.2",
-                            "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
-                            "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
-                            "requires": {
-                                "ansi-styles": "^3.2.1",
-                                "escape-string-regexp": "^1.0.5",
-                                "supports-color": "^5.3.0"
-                            }
-                        },
-                        "strip-ansi": {
-                            "version": "5.0.0",
-                            "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
-                            "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
-                            "requires": {
-                                "ansi-regex": "^4.0.0"
-                            }
-                        }
-                    }
-                },
-                "rxjs": {
-                    "version": "6.4.0",
-                    "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
-                    "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
-                    "requires": {
-                        "tslib": "^1.9.0"
-                    }
                 }
             }
         },
         "yeoman-generator": {
-            "version": "3.2.0",
-            "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-3.2.0.tgz",
-            "integrity": "sha512-iR/qb2je3GdXtSfxgvOXxUW0Cp8+C6LaZaNlK2BAICzFNzwHtM10t/QBwz5Ea9nk6xVDQNj4Q889TjCXGuIv8w==",
+            "version": "3.0.0",
+            "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-3.0.0.tgz",
+            "integrity": "sha512-aHsNXzkdgAoakZTZsDX7T56wYWYd1O5E/GBIFAVMJLH7TKRr+1MiEJszZQbbCSA+J+lpT743/8L88j35yNdTLQ==",
             "requires": {
                 "async": "^2.6.0",
                 "chalk": "^2.3.0",
@@ -5460,7 +5362,7 @@
                 "cross-spawn": "^6.0.5",
                 "dargs": "^6.0.0",
                 "dateformat": "^3.0.3",
-                "debug": "^4.1.0",
+                "debug": "^3.1.0",
                 "detect-conflict": "^1.0.0",
                 "error": "^7.0.2",
                 "find-up": "^3.0.0",
@@ -5471,13 +5373,13 @@
                 "mem-fs-editor": "^5.0.0",
                 "minimist": "^1.2.0",
                 "pretty-bytes": "^5.1.0",
-                "read-chunk": "^3.0.0",
+                "read-chunk": "^2.1.0",
                 "read-pkg-up": "^4.0.0",
                 "rimraf": "^2.6.2",
                 "run-async": "^2.0.0",
                 "shelljs": "^0.8.0",
                 "text-table": "^0.2.0",
-                "through2": "^3.0.0",
+                "through2": "^2.0.0",
                 "yeoman-environment": "^2.0.5"
             },
             "dependencies": {
@@ -5493,14 +5395,6 @@
                         "which": "^1.2.9"
                     }
                 },
-                "debug": {
-                    "version": "4.1.1",
-                    "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
-                    "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
-                    "requires": {
-                        "ms": "^2.1.1"
-                    }
-                },
                 "find-up": {
                     "version": "3.0.0",
                     "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
@@ -5523,11 +5417,6 @@
                     "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
                     "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
                 },
-                "ms": {
-                    "version": "2.1.1",
-                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
-                    "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
-                },
                 "p-limit": {
                     "version": "2.1.0",
                     "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
@@ -5557,22 +5446,13 @@
                         "find-up": "^3.0.0",
                         "read-pkg": "^3.0.0"
                     }
-                },
-                "through2": {
-                    "version": "3.0.0",
-                    "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.0.tgz",
-                    "integrity": "sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ==",
-                    "requires": {
-                        "readable-stream": "2 || 3",
-                        "xtend": "~4.0.1"
-                    }
                 }
             }
         },
         "yeoman-test": {
-            "version": "1.9.1",
-            "resolved": "https://registry.npmjs.org/yeoman-test/-/yeoman-test-1.9.1.tgz",
-            "integrity": "sha512-aWB8CglmjBfXd+U5g5Cm1b8KVW0uotjo521IgkepvhNXiAX/YswHYGVnbEFb0m9ZdXztELuNJn2UtuwgFZIw6Q==",
+            "version": "1.8.0",
+            "resolved": "https://registry.npmjs.org/yeoman-test/-/yeoman-test-1.8.0.tgz",
+            "integrity": "sha512-QnuWAciKfp5zWAfK5GGkEyzPZJ/hSSLA11KtI3Jog96OmYWG97XQUYuSj12f/WoxP75Pn1ECG4PzFfEM8RMNwQ==",
             "dev": true,
             "requires": {
                 "inquirer": "^5.2.0",
@@ -5661,16 +5541,6 @@
                     "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=",
                     "dev": true
                 },
-                "read-chunk": {
-                    "version": "2.1.0",
-                    "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz",
-                    "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=",
-                    "dev": true,
-                    "requires": {
-                        "pify": "^3.0.0",
-                        "safe-buffer": "^5.1.1"
-                    }
-                },
                 "replace-ext": {
                     "version": "1.0.0",
                     "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz",
diff --git a/package.json b/package.json
index 13e1595573..4a56c89503 100644
--- a/package.json
+++ b/package.json
@@ -56,7 +56,6 @@
         "conf": "2.0.0",
         "didyoumean": "1.2.1",
         "ejs": "2.6.1",
-        "faker": "4.1.0",
         "glob": "7.1.2",
         "gulp-filter": "5.1.0",
         "insight": "0.10.1",
@@ -76,8 +75,8 @@
         "tabtab": "2.2.2",
         "through2": "2.0.3",
         "uuid": "3.3.2",
-        "yeoman-environment": "2.3.4",
-        "yeoman-generator": "3.2.0"
+        "yeoman-environment": "2.3.0",
+        "yeoman-generator": "3.0.0"
     },
     "devDependencies": {
         "chai": "4.1.2",
@@ -92,7 +91,7 @@
         "mocha": "5.2.0",
         "sinon": "6.1.3",
         "yeoman-assert": "3.1.1",
-        "yeoman-test": "1.9.1"
+        "yeoman-test": "1.8.0"
     },
     "engines": {
         "node": ">=8.10.0",


Test patch:
diff --git a/generators/client/templates/react/src/test/javascript/e2e/modules/account/account.spec.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/modules/account/account.spec.ts.ejs
index cc8861b1c4..405d349736 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/modules/account/account.spec.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/modules/account/account.spec.ts.ejs
@@ -335,7 +335,7 @@ describe('Account', () => {
   });
 
   it('should delete previously created fake user', async () => {
-    await browser.get('/admin/user-management/user_test/delete');
+    await browser.get('#/admin/user-management/user_test/delete');
     const deleteModal = element(by.className('modal'));
     await waitUntilDisplayed(deleteModal);
 
diff --git a/generators/client/templates/react/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs
index e70cd6e1f5..04540f45c9 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/page-objects/navbar-page.ts.ejs
@@ -38,7 +38,7 @@ export default class NavBarPage extends BasePage {
 
   async getRegisterPage() {
     await this.clickOnAccountMenu();
-    await this.clickOnTabMenu('/register');
+    await this.clickOnTabMenu('#/register');
     return new RegisterPage();
   }
   <%_ } _%>
@@ -46,7 +46,7 @@ export default class NavBarPage extends BasePage {
   async getSignInPage() {
     await this.clickOnAccountMenu();
     <%_ if (authenticationType !== 'oauth2') { _%>
-    await this.clickOnTabMenu('/login');
+    await this.clickOnTabMenu('#/login');
     <%_ } else { _%>
     await this.loginItem.click();
     <%_ } _%>
@@ -71,12 +71,12 @@ export default class NavBarPage extends BasePage {
 
   async clickOnAccountMenuItem(item: string) {
     await this.accountMenu.click();
-    await this.selector.$(`.dropdown-item[href="/account/${item}"`).click();
+    await this.selector.$(`.dropdown-item[href="#/account/${item}"`).click();
   }
 
   async clickOnAdminMenuItem(item: string) {
     await this.adminMenu.click();
-    await this.selector.$(`.dropdown-item[href="/admin/${item}"]`).click();
+    await this.selector.$(`.dropdown-item[href="#/admin/${item}"]`).click();
   }
 
   async clickOnEntityMenu() {
@@ -84,7 +84,7 @@ export default class NavBarPage extends BasePage {
   }
 
   async clickOnEntity(entityName: string) {
-    await this.selector.$(`.dropdown-item[href="/entity/${entityName}"]`).click();
+    await this.selector.$(`.dropdown-item[href="#/entity/${entityName}"]`).click();
   }
 
   async autoSignIn() {
@@ -97,7 +97,6 @@ export default class NavBarPage extends BasePage {
   }
 
   async autoSignOut() {
-    await this.accountMenu.click();
-    await this.selector.$(`.dropdown-item[href="/logout"`).click();
+    await this.signInPage.autoSignOut();
   }
 }
diff --git a/generators/client/templates/react/src/test/javascript/e2e/page-objects/password-page.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/page-objects/password-page.ts.ejs
index dd0bb1b527..69d1fe8bb0 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/page-objects/password-page.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/page-objects/password-page.ts.ejs
@@ -17,7 +17,7 @@ export default class PasswordPage extends BasePage {
   }
 
   async get() {
-    await browser.get('/account/password');
+    await browser.get('#/account/password');
     await this.waitUntilDisplayed();
   }
 
diff --git a/generators/client/templates/react/src/test/javascript/e2e/page-objects/register-page.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/page-objects/register-page.ts.ejs
index 9d15b84f3c..675baff1d8 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/page-objects/register-page.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/page-objects/register-page.ts.ejs
@@ -18,7 +18,7 @@ export default class RegisterPage extends BasePage {
   }
 
   async get() {
-    await browser.get('/register');
+    await browser.get('#/register');
     await this.waitUntilDisplayed();
   }
 
diff --git a/generators/client/templates/react/src/test/javascript/e2e/page-objects/settings-page.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/page-objects/settings-page.ts.ejs
index 7fc176f415..dee5214da6 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/page-objects/settings-page.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/page-objects/settings-page.ts.ejs
@@ -18,7 +18,7 @@ export default class SettingsPage extends BasePage {
   }
 
   async get() {
-    await browser.get('/account/settings');
+    await browser.get('#/account/settings');
     await this.waitUntilDisplayed();
   }
 
diff --git a/generators/client/templates/react/src/test/javascript/e2e/page-objects/signin-page.ts.ejs b/generators/client/templates/react/src/test/javascript/e2e/page-objects/signin-page.ts.ejs
index 89b2d23d33..1e627bc8b0 100644
--- a/generators/client/templates/react/src/test/javascript/e2e/page-objects/signin-page.ts.ejs
+++ b/generators/client/templates/react/src/test/javascript/e2e/page-objects/signin-page.ts.ejs
@@ -22,7 +22,7 @@ export default class SignInPage extends BasePage {
   }
 
   async get() {
-    await browser.get('/login');
+    await browser.get('#/login');
     await this.waitUntilDisplayed();
   }
 
@@ -63,7 +63,7 @@ export default class SignInPage extends BasePage {
   <%_ } _%>
 
   async autoSignOut() {
-    await browser.get('/logout');
+    await browser.get('#/logout');
   }
 
   async login() {
diff --git a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
index bd9e83bf13..163b3aa050 100644
--- a/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
+++ b/generators/entity-client/templates/react/src/test/javascript/e2e/entities/entity.spec.ts.ejs
@@ -91,73 +91,66 @@ describe('<%= entityClass %> e2e test', () => {
         expect(await <%= entityInstance %>UpdatePage.getPageTitle().getText())
             .to.match(/Create or edit a <%= entityClass %>/);
         <%_ } _%>
-        await <%= entityInstance %>UpdatePage.cancel();
     });
 
    <%= openBlockComment %> it('should create and save <%= entityClassPlural %>', async () => {
-        async function create<%= entityClass %>() {
-            await <%= entityInstance %>ComponentsPage.clickOnCreateButton();
-            <%_ 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');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('5');
-            <%_ } else if (fieldType === 'LocalDate') { _%>
-            await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01-01-2001');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('2001-01-01');
-            <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%>
-            await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01/01/2001' + protractor.Key.TAB + '02:30AM');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('2001-01-01T02:30');
-            <%_ } else if (fieldType === 'Boolean') { _%>
-            const selected<%= fieldNameCapitalized %> = await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected();
-            if (selected<%= fieldNameCapitalized %>) {
-                await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click();
-                expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).to.be.false;
-            } else {
-                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 %>');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/<%= 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');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/64c99148-3908-465d-8c4a-e510e3ade974/);
-            <%_ } else { _%>
-            await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>');
-            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/<%= 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 waitUntilDisplayed(<%= entityInstance %>UpdatePage.getSaveButton());
-            await <%= entityInstance %>UpdatePage.save();
-            await waitUntilHidden(<%= entityInstance %>UpdatePage.getSaveButton());
-            expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).to.be.false;
-        }
-
-        await create<%= entityClass %>();
-        <%= entityInstance %>ComponentsPage.waitUntilLoaded();
         const nbButtonsBeforeCreate = await <%= entityInstance %>ComponentsPage.countDeleteButtons();
-        await create<%= entityClass %>();
+
+        <%_ 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');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('5');
+        <%_ } else if (fieldType === 'LocalDate') { _%>
+        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01-01-2001');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.eq('2001-01-01');
+        <%_ } else if (['Instant', 'ZonedDateTime'].includes(fieldType)) { _%>
+        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('01/01/2001' + protractor.Key.TAB + '02:30AM');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.contain('2001-01-01T02:30');
+        <%_ } else if (fieldType === 'Boolean') { _%>
+        const selected<%= fieldNameCapitalized %> = await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected();
+        if (selected<%= fieldNameCapitalized %>) {
+            await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().click();
+            expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input().isSelected()).to.be.false;
+        } else {
+            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 %>');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/<%= 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');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/64c99148-3908-465d-8c4a-e510e3ade974/);
+        <%_ } else { _%>
+        await <%= entityInstance %>UpdatePage.set<%= fieldNameCapitalized %>Input('<%= fieldName %>');
+        expect(await <%= entityInstance %>UpdatePage.get<%= fieldNameCapitalized %>Input()).to.match(/<%= 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 waitUntilDisplayed(<%= entityInstance %>UpdatePage.getSaveButton());
+        await <%= entityInstance %>UpdatePage.save();
+        await waitUntilHidden(<%= entityInstance %>UpdatePage.getSaveButton());
+        expect(await <%= entityInstance %>UpdatePage.getSaveButton().isPresent()).to.be.false;
 
         await <%= entityInstance %>ComponentsPage.waitUntilDeleteButtonsLength(nbButtonsBeforeCreate + 1);
         expect(await <%= entityInstance %>ComponentsPage.countDeleteButtons()).to.eq(nbButtonsBeforeCreate + 1);
diff --git a/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs b/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIntTest.java.ejs
similarity index 99%
rename from generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs
rename to generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIntTest.java.ejs
index 553dcac645..13b79bbc5f 100644
--- a/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIT.java.ejs
+++ b/generators/entity-server/templates/src/test/java/package/web/rest/EntityResourceIntTest.java.ejs
@@ -150,11 +150,11 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 <%_ } else { _%>
 @SpringBootTest(classes = <%= mainClass %>.class)
 <%_ } _%>
-public class <%= entityClass %>ResourceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class <%= entityClass %>ResourceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 <%_
     let oldSource = '';
     try {
-        oldSource = this.fs.readFileSync(this.SERVER_TEST_SRC_DIR + packageFolder + '/web/rest/' + entityClass + 'ResourceIT.java', 'utf8');
+        oldSource = this.fs.readFileSync(this.SERVER_TEST_SRC_DIR + packageFolder + '/web/rest/' + entityClass + 'ResourceIntTest.java', 'utf8');
     } catch (e) {}
 _%>
     <%_ for (idx in fields) {
@@ -245,7 +245,7 @@ _%>
                 updatedTextString = updatedTextString + "B";
                 log(this.chalkRed('Randomly generated first and second test values for entity "' + entityClass +
                     '" field "' + fields[idx].fieldName + '" with pattern "' + fields[idx].fieldValidateRulesPattern +
-                    '" in file "' + entityClass + 'ResourceIT" where equal, added symbol "B" to second value.'));
+                    '" in file "' + entityClass + 'ResourceIntTest" where equal, added symbol "B" to second value.'));
             }
         }_%>
 
@@ -428,7 +428,7 @@ _%>
             if ((relationshipValidate !== null && relationshipValidate === true) || mapsIdUse === true) { _%>
         // Add required entity
             <%_ if (alreadyGeneratedEntities.indexOf(otherEntityName) == -1) { _%>
-        <%= asEntity(otherEntityNameCapitalized) %> <%= otherEntityName %> = <%= otherEntityNameCapitalized %>ResourceIT.createEntity(<% if (databaseType === 'sql') { %>em<% } %>);
+        <%= asEntity(otherEntityNameCapitalized) %> <%= otherEntityName %> = <%= otherEntityNameCapitalized %>ResourceIntTest.createEntity(<% if (databaseType === 'sql') { %>em<% } %>);
                 <%_ if (databaseType === 'sql') { _%>
         em.persist(<%= otherEntityName %>);
         em.flush();
@@ -734,7 +734,7 @@ _%>
     @Transactional<% } %>
     public void getAll<%= entityClassPlural %>By<%= relationship.relationshipNameCapitalized %>IsEqualToSomething() throws Exception {
         // Initialize the database
-        <%= asEntity(relationship.otherEntityNameCapitalized) %> <%= relationship.relationshipFieldName %> = <%= relationship.otherEntityNameCapitalized %>ResourceIT.createEntity(em);
+        <%= asEntity(relationship.otherEntityNameCapitalized) %> <%= relationship.relationshipFieldName %> = <%= relationship.otherEntityNameCapitalized %>ResourceIntTest.createEntity(em);
         em.persist(<%= relationship.relationshipFieldName %>);
         em.flush();
 <%_ if (relationship.relationshipType === 'many-to-many' || relationship.relationshipType === 'one-to-many') { _%>
diff --git a/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs b/generators/server/templates/src/test/java/package/CassandraKeyspaceUnitTest.java.ejs
similarity index 95%
rename from generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs
rename to generators/server/templates/src/test/java/package/CassandraKeyspaceUnitTest.java.ejs
index 5facb0db11..ba2d89aa30 100644
--- a/generators/server/templates/src/test/java/package/CassandraKeyspaceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/CassandraKeyspaceUnitTest.java.ejs
@@ -30,7 +30,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class CassandraKeyspaceIT extends AbstractCassandraTest {
+public class CassandraKeyspaceUnitTest extends AbstractCassandraTest {
 
     @Autowired
     private Session session;
diff --git a/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs b/generators/server/templates/src/test/java/package/config/CassandraTestConfiguration.java.ejs
similarity index 95%
rename from generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs
rename to generators/server/templates/src/test/java/package/config/CassandraTestConfiguration.java.ejs
index 2e04b3addf..1f821d2dd6 100644
--- a/generators/server/templates/src/test/java/package/config/CassandraConfigurationIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/config/CassandraTestConfiguration.java.ejs
@@ -29,7 +29,7 @@ import org.springframework.context.annotation.Profile;
 
 @Configuration
 @Profile(JHipsterConstants.SPRING_PROFILE_TEST)
-public class CassandraConfigurationIT extends CassandraConfiguration {
+public class CassandraTestConfiguration extends CassandraConfiguration {
 
     /**
      * Override how to get the port to connect to the Cassandra cluster.
diff --git a/generators/server/templates/src/test/java/package/config/DatabaseConfigurationIT.java.ejs b/generators/server/templates/src/test/java/package/config/DatabaseTestConfiguration.java.ejs
similarity index 95%
rename from generators/server/templates/src/test/java/package/config/DatabaseConfigurationIT.java.ejs
rename to generators/server/templates/src/test/java/package/config/DatabaseTestConfiguration.java.ejs
index 30e14c38df..81e0d89238 100644
--- a/generators/server/templates/src/test/java/package/config/DatabaseConfigurationIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/config/DatabaseTestConfiguration.java.ejs
@@ -34,13 +34,13 @@ import org.testcontainers.couchbase.CouchbaseContainer;
 import java.util.List;
 
 @Configuration
-public class DatabaseConfigurationIT extends AbstractCouchbaseConfiguration {
+public class DatabaseTestConfiguration extends AbstractCouchbaseConfiguration {
 
     private CouchbaseProperties couchbaseProperties;
 
     private static CouchbaseContainer<? extends CouchbaseContainer<?>> couchbaseContainer;
 
-    public DatabaseConfigurationIT(CouchbaseProperties couchbaseProperties) {
+    public DatabaseTestConfiguration(CouchbaseProperties couchbaseProperties) {
         this.couchbaseProperties = couchbaseProperties;
     }
 
diff --git a/generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneIT.java.ejs b/generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneIT.java.ejs
rename to generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneTest.java.ejs
index 538543a674..6040123ae5 100644
--- a/generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/config/timezone/HibernateTimeZoneTest.java.ejs
@@ -49,7 +49,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 <%_ } else { _%>
 @SpringBootTest(classes = <%= mainClass %>.class)
 <%_ } _%>
-public class HibernateTimeZoneIT {
+public class HibernateTimeZoneTest {
 
     @Autowired
     private DateTimeWrapperRepository dateTimeWrapperRepository;
diff --git a/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs b/generators/server/templates/src/test/java/package/cucumber/CucumberTest.java.ejs
similarity index 90%
rename from generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs
rename to generators/server/templates/src/test/java/package/cucumber/CucumberTest.java.ejs
index 3a28c309e9..904c21d95c 100644
--- a/generators/server/templates/src/test/java/package/cucumber/CucumberIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/cucumber/CucumberTest.java.ejs
@@ -27,6 +27,6 @@ import cucumber.api.junit.Cucumber;
 
 @RunWith(Cucumber.class)
 @CucumberOptions(plugin = "pretty", features = "<%= TEST_DIR %>features")
-public class CucumberIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest<% } %> {
+public class CucumberTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest<% } %> {
 
 }
diff --git a/generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIT.java.ejs b/generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIT.java.ejs
rename to generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIntTest.java.ejs
index 52c02cf50f..2ed29a125b 100644
--- a/generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/repository/CustomAuditEventRepositoryIntTest.java.ejs
@@ -54,7 +54,7 @@ import static <%=packageName%>.repository.CustomAuditEventRepository.EVENT_DATA_
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)<% if (databaseType === 'sql') { %>
 @Transactional<% } %>
-public class CustomAuditEventRepositoryIT {
+public class CustomAuditEventRepositoryIntTest {
 
     @Autowired
     private PersistenceAuditEventRepository persistenceAuditEventRepository;
diff --git a/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs b/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIntTest.java.ejs
similarity index 98%
rename from generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs
rename to generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIntTest.java.ejs
index 9ff88f43ed..2331050363 100644
--- a/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/security/DomainUserDetailsServiceIntTest.java.ejs
@@ -69,7 +69,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 <%_ if (databaseType === 'couchbase') { _%>
 @WithMockUser("test-user-one")
 <%_ } _%>
-public class DomainUserDetailsServiceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class DomainUserDetailsServiceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     private static final String USER_ONE_LOGIN = "test-user-one";
     private static final String USER_ONE_EMAIL = "test-user-one@localhost";
diff --git a/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs b/generators/server/templates/src/test/java/package/service/MailServiceIntTest.java.ejs
similarity index 98%
rename from generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs
rename to generators/server/templates/src/test/java/package/service/MailServiceIntTest.java.ejs
index 76e4652136..ffd0b3a79a 100644
--- a/generators/server/templates/src/test/java/package/service/MailServiceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/service/MailServiceIntTest.java.ejs
@@ -50,7 +50,7 @@ import static org.mockito.Mockito.*;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class MailServiceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class MailServiceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     @Autowired
     private JHipsterProperties jHipsterProperties;
diff --git a/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs b/generators/server/templates/src/test/java/package/service/UserServiceIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs
rename to generators/server/templates/src/test/java/package/service/UserServiceIntTest.java.ejs
index ac5215cfcf..5b9830f32d 100644
--- a/generators/server/templates/src/test/java/package/service/UserServiceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/service/UserServiceIntTest.java.ejs
@@ -126,7 +126,7 @@ import static org.mockito.Mockito.when;
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)<% if (databaseType === 'sql') { %>
 @Transactional<% } %>
-public class UserServiceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class UserServiceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     <%_ if ((databaseType === 'sql' || databaseType === 'mongodb' || databaseType === 'couchbase') && authenticationType === 'session') { _%>
     @Autowired
diff --git a/generators/server/templates/src/test/java/package/service/mapper/UserMapperIT.java.ejs b/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs
similarity index 98%
rename from generators/server/templates/src/test/java/package/service/mapper/UserMapperIT.java.ejs
rename to generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs
index f11d9bc32d..a4f3176f67 100644
--- a/generators/server/templates/src/test/java/package/service/mapper/UserMapperIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/service/mapper/UserMapperTest.java.ejs
@@ -29,7 +29,7 @@ import static org.assertj.core.api.Assertions.assertThat;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class UserMapperIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class UserMapperTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     private static final String DEFAULT_LOGIN = "johndoe";
 
diff --git a/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs
index 1a8909d979..b75b825a1b 100644
--- a/generators/server/templates/src/test/java/package/web/rest/AccountResourceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/AccountResourceIntTest.java.ejs
@@ -61,7 +61,7 @@ import org.springframework.web.context.WebApplicationContext;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class AccountResourceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class AccountResourceIntTest<% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     @Autowired
     private UserRepository userRepository;
@@ -248,7 +248,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class AccountResourceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class AccountResourceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     @Autowired
     private UserRepository userRepository;
diff --git a/generators/server/templates/src/test/java/package/web/rest/AuditResourceIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/AuditResourceIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/web/rest/AuditResourceIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/AuditResourceIntTest.java.ejs
index 199e84a731..ce06dbe494 100644
--- a/generators/server/templates/src/test/java/package/web/rest/AuditResourceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/AuditResourceIntTest.java.ejs
@@ -56,7 +56,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)<% if (databaseType === 'sql') { %>
 @Transactional<% } %>
-public class AuditResourceIT {
+public class AuditResourceIntTest {
 
     private static final String SAMPLE_PRINCIPAL = "SAMPLE_PRINCIPAL";
     private static final String SAMPLE_TYPE = "SAMPLE_TYPE";
diff --git a/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs
deleted file mode 100644
index 6466246cb1..0000000000
--- a/generators/server/templates/src/test/java/package/web/rest/ClientForwardControllerIT.java.ejs
+++ /dev/null
@@ -1,81 +0,0 @@
-<%#
- Copyright 2013-2019 the original author or authors from the JHipster project.
-
- This file is part of the JHipster project, see https://www.jhipster.tech/
- for more information.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--%>
-package <%=packageName%>.web.rest;
-
-<%_ if (databaseType === 'cassandra') { _%>
-import <%= packageName %>.AbstractCassandraTest;
-<%_ } _%>
-import <%=packageName%>.<%= mainClass %>;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.ResultActions;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.forwardedUrl;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-/**
- * Test class for the ClientForwardController REST controller.
- *
- * @see ClientForwardController
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = <%= mainClass %>.class)
-public class ClientForwardControllerIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
-
-    private MockMvc restMockMvc;
-
-    @Before
-    public void setup() {
-        ClientForwardController clientForwardController = new ClientForwardController();
-        LogsResource logsResource = new LogsResource();
-        this.restMockMvc = MockMvcBuilders
-            .standaloneSetup(clientForwardController, logsResource)
-            .build();
-    }
-
-    @Test
-    public void getBackendEndpoint() throws Exception {
-        restMockMvc.perform(get("/management/logs"))
-            .andExpect(status().isOk())
-            .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE));
-    }
-
-    @Test
-    public void getClientEndpoint() throws Exception {
-        ResultActions perform = restMockMvc.perform(get("/non-existant-mapping"));
-        perform
-            .andExpect(status().isOk())
-            .andExpect(forwardedUrl("/"));
-    }
-
-    @Test
-    public void getNestedClientEndpoint() throws Exception {
-        restMockMvc.perform(get("/admin/user-management"))
-            .andExpect(status().isOk())
-            .andExpect(forwardedUrl("/"));
-    }
-}
diff --git a/generators/server/templates/src/test/java/package/web/rest/LogoutResourceIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/LogoutResourceIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/web/rest/LogoutResourceIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/LogoutResourceIntTest.java.ejs
index fd18547ad4..375fceaf67 100644
--- a/generators/server/templates/src/test/java/package/web/rest/LogoutResourceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/LogoutResourceIntTest.java.ejs
@@ -49,7 +49,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class LogoutResourceIT {
+public class LogoutResourceIntTest {
 
     @Autowired
     private MappingJackson2HttpMessageConverter jacksonMessageConverter;
diff --git a/generators/server/templates/src/test/java/package/web/rest/LogsResourceIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/LogsResourceIntTest.java.ejs
similarity index 97%
rename from generators/server/templates/src/test/java/package/web/rest/LogsResourceIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/LogsResourceIntTest.java.ejs
index 77674cc15c..ab7fce3df7 100644
--- a/generators/server/templates/src/test/java/package/web/rest/LogsResourceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/LogsResourceIntTest.java.ejs
@@ -61,7 +61,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 <%_ } else { _%>
 @SpringBootTest(classes = <%= mainClass %>.class)
 <%_ } _%>
-public class LogsResourceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class LogsResourceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     <%_ if (reactive) { _%>
     private WebTestClient webTestClient;
diff --git a/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIntTest.java.ejs
similarity index 98%
rename from generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIntTest.java.ejs
index c15848f864..be5f90d460 100644
--- a/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/UserJWTControllerIntTest.java.ejs
@@ -65,7 +65,7 @@ import static org.hamcrest.Matchers.not;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class UserJWTControllerIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class UserJWTControllerIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     @Autowired
     private TokenProvider tokenProvider;
diff --git a/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/UserResourceIntTest.java.ejs
similarity index 99%
rename from generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/UserResourceIntTest.java.ejs
index e39cd1297d..069155524d 100644
--- a/generators/server/templates/src/test/java/package/web/rest/UserResourceIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/UserResourceIntTest.java.ejs
@@ -106,7 +106,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class UserResourceIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class UserResourceIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     private static final String DEFAULT_LOGIN = "johndoe";
     <%_ if (authenticationType !== 'oauth2') { _%>
diff --git a/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs b/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIntTest.java.ejs
similarity index 98%
rename from generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs
rename to generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIntTest.java.ejs
index edd0ad7c8d..a1fbc3d97d 100644
--- a/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIT.java.ejs
+++ b/generators/server/templates/src/test/java/package/web/rest/errors/ExceptionTranslatorIntTest.java.ejs
@@ -54,7 +54,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
 <%_ } else { _%>
 @SpringBootTest(classes = <%= mainClass %>.class)
 <%_ } _%>
-public class ExceptionTranslatorIT <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
+public class ExceptionTranslatorIntTest <% if (databaseType === 'cassandra') { %>extends AbstractCassandraTest <% } %>{
 
     @Autowired
     private ExceptionTranslatorTestController controller;
@@ -199,7 +199,7 @@ import java.util.List;
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class ExceptionTranslatorIT {
+public class ExceptionTranslatorIntTest {
 
     @Autowired
     private ExceptionTranslatorTestController controller;
diff --git a/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs b/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs
new file mode 100644
index 0000000000..131e58fc1d
--- /dev/null
+++ b/generators/server/templates/src/test/java/package/web/rest/util/PaginationUtilUnitTest.java.ejs
@@ -0,0 +1,178 @@
+<%#
+ Copyright 2013-2019 the original author or authors from the JHipster project.
+
+ This file is part of the JHipster project, see https://www.jhipster.tech/
+ for more information.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-%>
+package <%=packageName%>.web.rest.util;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.http.HttpHeaders;
+
+/**
+ * Tests based on parsing algorithm in app/components/util/pagination-util.service.js
+ *
+ * @see PaginationUtil
+ */
+public class PaginationUtilUnitTest {
+
+    @Test
+    public void generatePaginationHttpHeadersTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content, PageRequest.of(6, 50), 400L);
+        HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        String expectedData = "</api/_search/example?page=7&size=50>; rel=\"next\","
+                + "</api/_search/example?page=5&size=50>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+    }
+
+    <%_ if (searchEngine === 'elasticsearch') { _%>
+    @Test
+    public void commaTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content);
+        String query = "Test1, test2";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 2);
+        String expectedData = "</api/_search/example?page=0&size=0&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=0&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(0L));
+    }
+
+    @Test
+    public void multiplePagesTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+
+        // Page 0
+        Page<String> page = new PageImpl<>(content, PageRequest.of(0, 50), 400L);
+        String query = "Test1, test2";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 3);
+        String expectedData = "</api/_search/example?page=1&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 1
+        page = new PageImpl<>(content, PageRequest.of(1, 50), 400L);
+        query = "Test1, test2";
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        expectedData = "</api/_search/example?page=2&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 6
+        page = new PageImpl<>(content, PageRequest.of(6, 50), 400L);
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 4);
+        expectedData = "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"next\","
+                + "</api/_search/example?page=5&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(400L));
+
+        // Page 7
+        page = new PageImpl<>(content, PageRequest.of(7, 50), 400L);
+        headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 3);
+        expectedData = "</api/_search/example?page=6&size=50&query=Test1%2C+test2>; rel=\"prev\","
+                + "</api/_search/example?page=7&size=50&query=Test1%2C+test2>; rel=\"last\","
+                + "</api/_search/example?page=0&size=50&query=Test1%2C+test2>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+    }
+
+    @Test
+    public void greaterSemicolonTest() {
+        String baseUrl = "/api/_search/example";
+        List<String> content = new ArrayList<>();
+        Page<String> page = new PageImpl<>(content);
+        String query = "Test>;test";
+        HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, baseUrl);
+        List<String> strHeaders = headers.get(HttpHeaders.LINK);
+        assertNotNull(strHeaders);
+        assertTrue(strHeaders.size() == 1);
+        String headerData = strHeaders.get(0);
+        assertTrue(headerData.split(",").length == 2);
+        String[] linksData = headerData.split(",");
+        assertTrue(linksData.length == 2);
+        assertTrue(linksData[0].split(">;").length == 2);
+        assertTrue(linksData[1].split(">;").length == 2);
+        String expectedData = "</api/_search/example?page=0&size=0&query=Test%3E%3Btest>; rel=\"last\","
+                + "</api/_search/example?page=0&size=0&query=Test%3E%3Btest>; rel=\"first\"";
+        assertEquals(expectedData, headerData);
+        List<String> xTotalCountHeaders = headers.get("X-Total-Count");
+        assertTrue(xTotalCountHeaders.size() == 1);
+        assertTrue(Long.valueOf(xTotalCountHeaders.get(0)).equals(0L));
+    }
+    <%_ }  _%>
+}
diff --git a/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs b/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIntTest.java.ejs
similarity index 98%
rename from generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs
rename to generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIntTest.java.ejs
index 339915eb21..1d5f6267ea 100644
--- a/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIT.java.ejs
+++ b/generators/spring-controller/templates/src/test/java/package/web/rest/ResourceIntTest.java.ejs
@@ -39,7 +39,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.
  */
 @RunWith(SpringRunner.class)
 @SpringBootTest(classes = <%= mainClass %>.class)
-public class <%= controllerClass %>IT {
+public class <%= controllerClass %>IntTest {
 
     private MockMvc restMockMvc;
 
diff --git a/test-integration/samples/README.md b/test-integration/samples/README.md
index 122ff75179..d3aaa715ed 100644
--- a/test-integration/samples/README.md
+++ b/test-integration/samples/README.md
@@ -6,26 +6,31 @@ To generate test applications, either automatically by Travis or locally on the
 
 Those are described in `.yo-rc.json` files which is the descriptor file created by Yeoman to keep track of the choices selected while generating an application.
 
--   app-sample-dev: left empty for local testing, launching the generator with the VSCode debugger will generate an app in this folder
--   jdl-default
--   ms-micro-consul
--   ms-micro-eureka
--   ms-ngx-gateway-consul
--   ms-ngx-gateway-eureka
--   ms-ngx-gateway-eureka-oauth2
--   ms-ngx-gateway-uaa
--   ngx-couchbase
--   ngx-default
--   ngx-gradle-fr
--   ngx-h2mem-ws-nol2
--   ngx-mariadb-oauth2-sass-infinispan
--   ngx-mongodb-kafka-cucumber
--   ngx-psql-es-noi18n
--   ngx-session-cassandra-fr
--   react-default
--   react-noi18n-es-ws-gradle-session
+-   app-sample-dev : left empty for local testing, launching the generator with the VSCode debugger will generate an app in this folder
+-   app-ng2-default-from-scratch
+-   app-mariadb-kafka
+-   app-ng2-cassandra
+-   app-ng2-gateway-consul
+-   app-ng2-infinispan
+-   app-ng2-sass-noi18n
+-   app-gradle
+-   app-microservice-consul
+-   app-ng2-couchbase
+-   app-ng2-gateway-eureka
+-   app-ng2-mongodb
+-   app-ng2-websocket
+-   app-hazelcast-cucumber
+-   app-microservice-eureka
+-   app-ng2-cache-nol2
+-   app-ng2-gateway-uaa
+-   app-ng2-oauth2
+-   app-react-default
+-   app-jwt
 -   uaa
--   webflux-mongodb
+-   app-mysql
+-   app-ng2-default-sample
+-   app-ng2-gradle-jwt-psql
+-   app-ng2-psql-es-noi18n
 
 ## Entity configurations
 
diff --git a/test/spring-controller.spec.js b/test/spring-controller.spec.js
index 063eeb19f6..5d3550e9a1 100644
--- a/test/spring-controller.spec.js
+++ b/test/spring-controller.spec.js
@@ -25,7 +25,7 @@ describe('JHipster generator spring-controller', () => {
         it('creates controller files', () => {
             assert.file([`${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/FooResource.java`]);
 
-            assert.file([`${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIT.java`]);
+            assert.file([`${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIntTest.java`]);
         });
     });
 
@@ -44,7 +44,7 @@ describe('JHipster generator spring-controller', () => {
         it('creates controller files', () => {
             assert.file([`${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/FooResource.java`]);
 
-            assert.file([`${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIT.java`]);
+            assert.file([`${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIntTest.java`]);
         });
     });
 });
diff --git a/test/utils/expected-files.js b/test/utils/expected-files.js
index 00f4407926..5448fbc527 100644
--- a/test/utils/expected-files.js
+++ b/test/utils/expected-files.js
@@ -125,7 +125,7 @@ const expectedFiles = {
             `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/FooRepository.java`,
             `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/FooResource.java`,
             // SERVER_MAIN_RES_DIR + 'config/liquibase/changelog/20160120213555_added_entity_Foo.xml',
-            `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIT.java`
+            `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/FooResourceIntTest.java`
         ],
         gatling: [`${TEST_DIR}gatling/user-files/simulations/FooGatlingTest.scala`]
     },
@@ -198,19 +198,20 @@ const expectedFiles = {
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/errors/LoginAlreadyUsedException.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/package-info.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/LoggerVM.java`,
+        `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/util/PaginationUtil.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/package-info.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/LogsResource.java`,
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/security/SecurityUtilsUnitTest.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/LogsResourceIT.java`,
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/LogsResourceIntTest.java`,
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/TestUtil.java`,
         `${SERVER_TEST_RES_DIR}config/application.yml`,
         `${SERVER_TEST_RES_DIR}logback.xml`
     ],
 
     userManagementServer: [
-        `${SERVER_MAIN_RES_DIR}config/liquibase/data/authority.csv`,
-        `${SERVER_MAIN_RES_DIR}config/liquibase/data/user.csv`,
-        `${SERVER_MAIN_RES_DIR}config/liquibase/data/user_authority.csv`,
+        `${SERVER_MAIN_RES_DIR}config/liquibase/authorities.csv`,
+        `${SERVER_MAIN_RES_DIR}config/liquibase/users.csv`,
+        `${SERVER_MAIN_RES_DIR}config/liquibase/users_authorities.csv`,
         `${SERVER_MAIN_RES_DIR}templates/mail/activationEmail.html`,
         `${SERVER_MAIN_RES_DIR}templates/mail/passwordResetEmail.html`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/domain/Authority.java`,
@@ -234,10 +235,10 @@ const expectedFiles = {
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/UserResource.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/KeyAndPasswordVM.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/web/rest/vm/ManagedUserVM.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/AccountResourceIT.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/AuditResourceIT.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/UserResourceIT.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/service/UserServiceIT.java`
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/AccountResourceIntTest.java`,
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/AuditResourceIntTest.java`,
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/web/rest/UserResourceIntTest.java`,
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/service/UserServiceIntTest.java`
     ],
 
     infinispan: [`${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/config/CacheFactoryConfiguration.java`],
@@ -643,7 +644,7 @@ const expectedFiles = {
     couchbase: [
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/N1qlCouchbaseRepository.java`,
         `${SERVER_MAIN_SRC_DIR}com/mycompany/myapp/repository/CustomN1qlCouchbaseRepository.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/config/DatabaseConfigurationIT.java`,
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/config/DatabaseTestConfiguration.java`,
         `${SERVER_MAIN_RES_DIR}config/couchmove/changelog/V0__create_indexes.n1ql`,
         `${SERVER_MAIN_RES_DIR}config/couchmove/changelog/V0.1__initial_setup/ROLE_ADMIN.json`,
         `${SERVER_MAIN_RES_DIR}config/couchmove/changelog/V0.1__initial_setup/ROLE_USER.json`,
@@ -683,7 +684,7 @@ const expectedFiles = {
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/cucumber/CucumberContextConfiguration.java`,
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/cucumber/stepdefs/UserStepDefs.java`,
         `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/cucumber/stepdefs/StepDefs.java`,
-        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/cucumber/CucumberIT.java`
+        `${SERVER_TEST_SRC_DIR}com/mycompany/myapp/cucumber/CucumberTest.java`
     ],
 
     eureka: [