Repository: jhipster/generator-jhipster
Pull request #7800 (2018-06-17 19:05:29)

Updated application/entity generation
- Please make sure the below checklist is followed for Pull Requests.

- [ ] [Travis tests](https://travis-ci.org/jhipster/generator-jhipster/pull_requests) are green
- [X] Tests are added where necessary
- [ ] 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

Used provided ways to get the config file (`.yo-rc.json`) content to be read and used by the generators.



Patch:
diff --git a/generators/ci-cd/templates/.gitlab-ci.yml.ejs b/generators/ci-cd/templates/.gitlab-ci.yml.ejs
index c6eea5ae4f..15c0bb9155 100644
--- a/generators/ci-cd/templates/.gitlab-ci.yml.ejs
+++ b/generators/ci-cd/templates/.gitlab-ci.yml.ejs
@@ -77,7 +77,7 @@ gradle-front-test:
         <%_ } _%>
     artifacts:
         paths:
-            - build/test-results/jest/*
+            - build/test-results/karma/*
     <%_ } _%>
 gradle-repackage:
     stage: package
@@ -129,7 +129,7 @@ maven-front-test:
         <%_ } _%>
     artifacts:
         paths:
-            - target/test-results/jest/*
+            - target/test-results/karma/*
     <%_ } _%>
     <%_ if (heroku.includes('gitlab')) { _%>
 maven-deploy:
diff --git a/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs b/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs
index 20728cbcaf..de28425723 100644
--- a/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs
+++ b/generators/ci-cd/templates/jenkins/Jenkinsfile.ejs
@@ -81,7 +81,7 @@ node {
 <%= indent %>        } catch(err) {
 <%= indent %>            throw err
 <%= indent %>        } finally {
-<%= indent %>            junit '**/target/test-results/jest/TESTS-*.xml'
+<%= indent %>            junit '**/target/test-results/karma/TESTS-*.xml'
 <%= indent %>        }
 <%= indent %>    }
 
@@ -135,7 +135,7 @@ node {
 <%= indent %>        } catch(err) {
 <%= indent %>            throw err
 <%= indent %>        } finally {
-<%= indent %>            junit '**/build/test-results/jest/TESTS-*.xml'
+<%= indent %>            junit '**/build/test-results/karma/TESTS-*.xml'
 <%= indent %>        }
 <%= indent %>    }
 
diff --git a/generators/client/files-react.js b/generators/client/files-react.js
index bfa4254a1e..1eb20729f7 100644
--- a/generators/client/files-react.js
+++ b/generators/client/files-react.js
@@ -319,8 +319,6 @@ const files = {
                 'shared/util/entity-utils.ts',
                 // components
                 { 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' },
                 // model
                 'shared/model/user.model.ts'
             ]
@@ -377,8 +375,6 @@ const files = {
                 'spec/app/shared/reducers/authentication.spec.ts',
                 'spec/app/shared/util/entity-utils.spec.ts',
                 'spec/app/shared/auth/private-route.spec.tsx',
-                'spec/app/shared/error/error-boundary.spec.tsx',
-                'spec/app/shared/error/error-boundary-route.spec.tsx',
                 'spec/app/shared/layout/header/header.spec.tsx',
                 'spec/app/shared/layout/header/menus/account.spec.tsx',
                 'spec/app/modules/administration/administration.reducer.spec.ts',
diff --git a/generators/client/templates/angular/package.json.ejs b/generators/client/templates/angular/package.json.ejs
index 83d65eff33..ed735791aa 100644
--- a/generators/client/templates/angular/package.json.ejs
+++ b/generators/client/templates/angular/package.json.ejs
@@ -85,7 +85,6 @@
     "husky": "0.14.3",
     <%_ } _%>
     "jest": "22.4.3",
-    "jest-junit": "5.0.0",
     "jest-preset-angular": "5.2.2",
     <%_ if (protractorTests) { _%>
     "jasmine-reporters": "2.2.1",
diff --git a/generators/client/templates/angular/webpack/webpack.prod.js.ejs b/generators/client/templates/angular/webpack/webpack.prod.js.ejs
index a44a3e554d..448a47a607 100644
--- a/generators/client/templates/angular/webpack/webpack.prod.js.ejs
+++ b/generators/client/templates/angular/webpack/webpack.prod.js.ejs
@@ -68,8 +68,7 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), {
             test: /(vendor\.scss|global\.scss)/,
             use: extractSASS.extract({
                 fallback: 'style-loader',
-                use: ['css-loader', 'postcss-loader', 'sass-loader'],
-                publicPath: '../'
+                use: ['css-loader', 'postcss-loader', 'sass-loader']
             })
         },
         <%_ } _%>
diff --git a/generators/client/templates/react/package.json.ejs b/generators/client/templates/react/package.json.ejs
index 598d723591..2e1bb42035 100644
--- a/generators/client/templates/react/package.json.ejs
+++ b/generators/client/templates/react/package.json.ejs
@@ -103,7 +103,6 @@ limitations under the License.
     <%_ } _%>
     "image-webpack-loader": "4.2.0",
     "jest": "22.4.4",
-    "jest-junit": "5.0.0",
     <%_ if (protractorTests) { _%>
     "chai-as-promised": "7.1.1",
     <%_ } _%>
diff --git a/generators/client/templates/react/src/main/webapp/app/app.css.ejs b/generators/client/templates/react/src/main/webapp/app/app.css.ejs
index d4791eca93..ec664f8b5f 100644
--- a/generators/client/templates/react/src/main/webapp/app/app.css.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/app.css.ejs
@@ -95,10 +95,6 @@ Generic styles
   word-break: break-all;
 }
 
-.preserve-space {
-  white-space: pre-wrap;
-}
-
 .readonly {
   background-color: #eee;
   opacity: 1;
diff --git a/generators/client/templates/react/src/main/webapp/app/app.scss.ejs b/generators/client/templates/react/src/main/webapp/app/app.scss.ejs
index 666576afa6..54b376697d 100644
--- a/generators/client/templates/react/src/main/webapp/app/app.scss.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/app.scss.ejs
@@ -150,10 +150,6 @@ Generic styles
   word-break: keep-all;
 }
 
-.preserve-space {
-  white-space: pre-wrap;
-}
-
 /* padding helpers */
 
 @mixin pad($size, $side) {
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 41c9769f35..c1e3204dd2 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
@@ -33,7 +33,6 @@ import { setLocale } from 'app/shared/reducers/locale';
 import Header from 'app/shared/layout/header/header';
 import Footer from 'app/shared/layout/footer/footer';
 import { hasAnyAuthority } from 'app/shared/auth/private-route';
-import ErrorBoundary from 'app/shared/error/error-boundary';
 import { AUTHORITIES } from 'app/config/constants';
 import AppRoutes from 'app/routes';
 
@@ -51,24 +50,20 @@ export class App extends React.Component<IAppProps> {
       <Router>
         <div className="app-container" style={{ paddingTop }}>
           <ToastContainer position={ toast.POSITION.TOP_LEFT } className="toastify-container" toastClassName="toastify-toast"/>
-          <ErrorBoundary>
-            <Header
-              isAuthenticated={this.props.isAuthenticated}
-              isAdmin={this.props.isAdmin}
-            <%_ if (enableTranslation) { _%>
-              currentLocale={this.props.currentLocale}
-              onLocaleChange={this.props.setLocale}
-            <%_ } _%>
-              ribbonEnv={this.props.ribbonEnv}
-              isInProduction={this.props.isInProduction}
-              isSwaggerEnabled={this.props.isSwaggerEnabled}
-            />
-          </ErrorBoundary>
+          <Header
+            isAuthenticated={this.props.isAuthenticated}
+            isAdmin={this.props.isAdmin}
+          <%_ if (enableTranslation) { _%>
+            currentLocale={this.props.currentLocale}
+            onLocaleChange={this.props.setLocale}
+          <%_ } _%>
+            ribbonEnv={this.props.ribbonEnv}
+            isInProduction={this.props.isInProduction}
+            isSwaggerEnabled={this.props.isSwaggerEnabled}
+          />
           <div className="container-fluid view-container" id="app-view-container">
             <Card className="jh-card">
-              <ErrorBoundary>
-                <AppRoutes/>
-              </ErrorBoundary>
+              <AppRoutes/>
             </Card>
             <Footer/>
           </div>
diff --git a/generators/client/templates/react/src/main/webapp/app/entities/index.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
index ae40d7a440..77bd9c16c3 100644
--- a/generators/client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
@@ -17,10 +17,8 @@
  limitations under the License.
 -%>
 import * as React from 'react';
-import { Switch } from 'react-router-dom';
-
 // tslint:disable-next-line:no-unused-variable
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
+import { Route, Switch } from 'react-router-dom';
 
 /* jhipster-needle-add-route-import - JHipster will add routes here */
 
diff --git a/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs
index e4e32b4aa9..ae61bc324f 100644
--- a/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/index.tsx.ejs
@@ -29,7 +29,6 @@ import { registerLocales } from './config/translation';
 <%_ } _%>
 import setupAxiosInterceptors from './config/axios-interceptor';
 import { clearAuthentication } from './shared/reducers/authentication';
-import ErrorBoundary from './shared/error/error-boundary';
 import AppComponent from './app';
 import { loadIcons } from './config/icon-loader';
 
@@ -49,17 +48,15 @@ const rootEl = document.getElementById('root');
 
 const render = Component =>
   ReactDOM.render(
-    <ErrorBoundary>
-      <AppContainer>
-        <Provider store={store}>
-          <div>
-            {/* If this slows down the app in dev disable it and enable when required  */}
-            {devTools}
-            <Component/>
-          </div>
-        </Provider>
-      </AppContainer>
-    </ErrorBoundary>,
+    <AppContainer>
+      <Provider store={store}>
+        <div>
+          {/* If this slows down the app in dev disable it and enable when required  */}
+          {devTools}
+          <Component/>
+        </div>
+      </Provider>
+    </AppContainer>,
     rootEl
   );
 
diff --git a/generators/client/templates/react/src/main/webapp/app/modules/account/index.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/modules/account/index.tsx.ejs
index a06e519a73..895f778ab8 100644
--- a/generators/client/templates/react/src/main/webapp/app/modules/account/index.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/modules/account/index.tsx.ejs
@@ -17,8 +17,7 @@
  limitations under the License.
 -%>
 import * as React from 'react';
-
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
+import { Route } from 'react-router-dom';
 
 import Settings from './settings/settings';
 import Password from './password/password';
@@ -28,10 +27,10 @@ import Sessions from './sessions/sessions';
 
 const Routes = ({ match }) => (
   <div>
-    <ErrorBoundaryRoute path={`${match.url}/settings`} component={Settings} />
-    <ErrorBoundaryRoute path={`${match.url}/password`} component={Password} />
+    <Route path={`${match.url}/settings`} component={Settings} />
+    <Route path={`${match.url}/password`} component={Password} />
     <%_ if (authenticationType === 'session') { _%>
-    <ErrorBoundaryRoute path={`${match.url}/sessions`} component={Sessions} />
+    <Route path={`${match.url}/sessions`} component={Sessions} />
     <%_ } _%>
   </div>
 );
diff --git a/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs
index 13c9f445b1..5236d726bd 100644
--- a/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/modules/administration/index.tsx.ejs
@@ -17,8 +17,8 @@
  limitations under the License.
 -%>
 import * as React from 'react';
+import { Route } from 'react-router-dom';
 
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
 <%_ if (!skipUserManagement) { _%>
 import UserManagement from './user-management';
 <%_ } _%>
@@ -40,22 +40,22 @@ import Tracker from './tracker/tracker';
 const Routes = ({ match }) => (
   <div>
 <%_ if (!skipUserManagement) { _%>
-    <ErrorBoundaryRoute path={`${match.url}/user-management`} component={UserManagement} />
+    <Route path={`${match.url}/user-management`} component={UserManagement} />
 <%_ } _%>
 <%_ if (websocket === 'spring-websocket') { _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/tracker`} component={Tracker} />
+    <Route exact path={`${match.url}/tracker`} component={Tracker} />
 <%_ } _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/health`} component={Health} />
+    <Route exact path={`${match.url}/health`} component={Health} />
 <%_ if (applicationType === 'gateway') { _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/gateway`} component={Gateway} />
+    <Route exact path={`${match.url}/gateway`} component={Gateway} />
 <%_ } _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/metrics`} component={Metrics} />
-    <ErrorBoundaryRoute exact path={`${match.url}/docs`} component={Docs} />
-    <ErrorBoundaryRoute exact path={`${match.url}/configuration`} component={Configuration} />
+    <Route exact path={`${match.url}/metrics`} component={Metrics} />
+    <Route exact path={`${match.url}/docs`} component={Docs} />
+    <Route exact path={`${match.url}/configuration`} component={Configuration} />
 <%_ if (databaseType !== 'no' && databaseType !== 'cassandra') { _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/audits`} component={Audits} />
+    <Route exact path={`${match.url}/audits`} component={Audits} />
 <%_ } _%>
-    <ErrorBoundaryRoute exact path={`${match.url}/logs`} component={Logs} />
+    <Route exact path={`${match.url}/logs`} component={Logs} />
   </div>
 );
 
diff --git a/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/index.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/index.tsx.ejs
index 36be71936c..471400ab23 100644
--- a/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/index.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/modules/administration/user-management/index.tsx.ejs
@@ -17,9 +17,8 @@
  limitations under the License.
 -%>
 import * as React from 'react';
-import { Switch } from 'react-router-dom';
+import { Route, Switch } from 'react-router-dom';
 
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
 import UserManagement from './user-management';
 import UserManagementDetail from './user-management-detail';
 import UserManagementUpdate from './user-management-update';
@@ -28,12 +27,12 @@ import UserManagementDeleteDialog from './user-management-delete-dialog';
 const Routes = ({ match }) => (
   <>
     <Switch>
-      <ErrorBoundaryRoute exact path={`${match.url}/new`} component={UserManagementUpdate} />
-      <ErrorBoundaryRoute exact path={`${match.url}/:login/edit`} component={UserManagementUpdate} />
-      <ErrorBoundaryRoute exact path={`${match.url}/:login`} component={UserManagementDetail} />
-      <ErrorBoundaryRoute path={match.url} component={UserManagement} />
+      <Route exact path={`${match.url}/new`} component={UserManagementUpdate} />
+      <Route exact path={`${match.url}/:login/edit`} component={UserManagementUpdate} />
+      <Route exact path={`${match.url}/:login`} component={UserManagementDetail} />
+      <Route path={match.url} component={UserManagement} />
     </Switch>
-    <ErrorBoundaryRoute path={`${match.url}/:login/delete`} component={UserManagementDeleteDialog} />
+    <Route path={`${match.url}/:login/delete`} component={UserManagementDeleteDialog} />
   </>
 );
 
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 787561bea4..f624dca8b5 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
@@ -17,7 +17,7 @@
  limitations under the License.
 -%>
 import * as React from 'react';
-import { Switch } from 'react-router-dom';
+import { Route, Switch } from 'react-router-dom';
 
 <%_ if (authenticationType !== 'oauth2') { _%>
 import Login from 'app/modules/login/login';
@@ -32,28 +32,27 @@ import Home from 'app/modules/home/home';
 import Admin from 'app/modules/administration';
 import Entities from 'app/entities';
 import PrivateRoute from 'app/shared/auth/private-route';
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
 import { AUTHORITIES } from 'app/config/constants';
 
 const Routes = () => (
   <div className="view-routes">
     <%_ if (authenticationType !== 'oauth2') { _%>
-    <ErrorBoundaryRoute path="/login" component={Login} />
+    <Route path="/login" component={Login} />
     <%_ } _%>
     <Switch>
-      <ErrorBoundaryRoute path="/logout" component={Logout} />
+      <Route path="/logout" component={Logout} />
     <%_ if (authenticationType !== 'oauth2') { _%>
-      <ErrorBoundaryRoute path="/register" component={Register} />
-      <ErrorBoundaryRoute path="/activate/:key?" component={Activate} />
-      <ErrorBoundaryRoute path="/reset/request" component={PasswordResetInit} />
-      <ErrorBoundaryRoute path="/reset/finish/:key?" component={PasswordResetFinish} />
+      <Route path="/register" component={Register} />
+      <Route path="/activate/:key?" component={Activate} />
+      <Route path="/reset/request" component={PasswordResetInit} />
+      <Route path="/reset/finish/:key?" component={PasswordResetFinish} />
     <%_ } _%>
       <PrivateRoute path="/admin" component={Admin} hasAnyAuthorities={[AUTHORITIES.ADMIN]}/>
     <%_ if (authenticationType !== 'oauth2') { _%>
       <PrivateRoute path="/account" component={Account} hasAnyAuthorities={[AUTHORITIES.ADMIN, AUTHORITIES.USER]}/>
     <%_ } _%>
       <PrivateRoute path="/entity" component={Entities} hasAnyAuthorities={[AUTHORITIES.USER]}/>
-      <ErrorBoundaryRoute path="/" component={Home}/>
+      <Route path="/" component={Home}/>
     </Switch>
   </div>
 );
diff --git a/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.tsx.ejs
index 9fdb9b20f6..cc65aa8571 100644
--- a/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.tsx.ejs
+++ b/generators/client/templates/react/src/main/webapp/app/shared/auth/private-route.tsx.ejs
@@ -3,7 +3,6 @@ import { connect } from 'react-redux';
 import { Route, Redirect, RouteProps } from 'react-router-dom';
 import { Translate } from 'react-jhipster';
 import { IRootState } from 'app/shared/reducers';
-import ErrorBoundary from 'app/shared/error/error-boundary';
 
 interface IOwnProps {
   hasAnyAuthorities?: string[];
@@ -20,9 +19,7 @@ export const PrivateRouteComponent = ({
 }: IPrivateRouteProps) => {
   const checkAuthorities = props =>
     isAuthorized ? (
-      <ErrorBoundary>
-        <Component {...props} />
-      </ErrorBoundary>
+      <Component {...props} />
     ) : (
       <div className="insufficient-authority">
         <div className="alert alert-danger">
diff --git a/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-route.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-route.tsx.ejs
deleted file mode 100644
index 396dabe4d5..0000000000
--- a/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary-route.tsx.ejs
+++ /dev/null
@@ -1,17 +0,0 @@
-import * as React from 'react';
-import { Route, RouteProps } from 'react-router-dom';
-import ErrorBoundary from 'app/shared/error/error-boundary';
-
-export const ErrorBoundaryRoute = ({ component: Component, ...rest }: RouteProps) => {
-  const encloseInErrorBoundary = props => (
-    <ErrorBoundary>
-      <Component {...props} />
-    </ErrorBoundary>
-  );
-
-  if (!Component) throw new Error(`A component needs to be specified for path ${(rest as any).path}`);
-
-  return <Route {...rest} render={encloseInErrorBoundary} />;
-};
-
-export default ErrorBoundaryRoute;
diff --git a/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary.tsx.ejs b/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary.tsx.ejs
deleted file mode 100644
index e62b9cc99c..0000000000
--- a/generators/client/templates/react/src/main/webapp/app/shared/error/error-boundary.tsx.ejs
+++ /dev/null
@@ -1,46 +0,0 @@
-import * as React from 'react';
-
-interface IErrorBoundaryProps {
-  readonly children: JSX.Element | JSX.Element[];
-}
-
-interface IErrorBoundaryState {
-  readonly error: any;
-  readonly errorInfo: any;
-}
-
-class ErrorBoundary extends React.Component<IErrorBoundaryProps, IErrorBoundaryState> {
-  readonly state: IErrorBoundaryState = { error: undefined, errorInfo: undefined };
-
-  componentDidCatch(error, errorInfo) {
-    this.setState({
-      error,
-      errorInfo
-    });
-  }
-
-  render() {
-    const { error, errorInfo } = this.state;
-    if (errorInfo) {
-      const errorDetails =
-        process.env.NODE_ENV === 'development' ? (
-          <details className="preserve-space">
-            {error && error.toString()}
-            <br />
-            {errorInfo.componentStack}
-          </details>
-        ) : (
-          undefined
-        );
-      return (
-        <div>
-          <h2 className="error">An unexpected error has occurred.</h2>
-          {errorDetails}
-        </div>
-      );
-    }
-    return this.props.children;
-  }
-}
-
-export default ErrorBoundary;
diff --git a/generators/client/templates/react/webpack/webpack.prod.js.ejs b/generators/client/templates/react/webpack/webpack.prod.js.ejs
index 8c2ea9d697..2184e3e87e 100644
--- a/generators/client/templates/react/webpack/webpack.prod.js.ejs
+++ b/generators/client/templates/react/webpack/webpack.prod.js.ejs
@@ -56,8 +56,7 @@ module.exports = webpackMerge(commonConfig({ env: ENV }), {
         test: /\.scss$/,
         use: extractSASS.extract({
           fallback: 'style-loader',
-          use: ['css-loader', 'postcss-loader', 'sass-loader'],
-          publicPath: '../'
+          use: ['css-loader', 'postcss-loader', 'sass-loader']
         })
       },
       <%_ } _%>
diff --git a/generators/entity-client/templates/react/src/main/webapp/app/entities/index.tsx.ejs b/generators/entity-client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
index 806bd358fd..36b69d8b6b 100644
--- a/generators/entity-client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
+++ b/generators/entity-client/templates/react/src/main/webapp/app/entities/index.tsx.ejs
@@ -17,9 +17,7 @@
  limitations under the License.
 -%>
 import * as React from 'react';
-import { Switch } from 'react-router-dom';
-
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
+import { Route, Switch } from 'react-router-dom';
 
 import <%= entityReactName %> from './<%= entityFileName %>';
 import <%= entityReactName %>Detail from './<%= entityFileName %>-detail';
@@ -29,12 +27,12 @@ import <%= entityReactName %>DeleteDialog from './<%= entityFileName %>-delete-d
 const Routes = ({ match }) => (
   <>
     <Switch>
-      <ErrorBoundaryRoute exact path={`${match.url}/new`} component={<%= entityReactName %>Update} />
-      <ErrorBoundaryRoute exact path={`${match.url}/:id/edit`} component={<%= entityReactName %>Update} />
-      <ErrorBoundaryRoute exact path={`${match.url}/:id`} component={<%= entityReactName %>Detail}  />
-      <ErrorBoundaryRoute path={match.url} component={<%= entityReactName %>} />
+      <Route exact path={`${match.url}/new`} component={<%= entityReactName %>Update} />
+      <Route exact path={`${match.url}/:id/edit`} component={<%= entityReactName %>Update} />
+      <Route exact path={`${match.url}/:id`} component={<%= entityReactName %>Detail}  />
+      <Route path={match.url} component={<%= entityReactName %>} />
     </Switch>
-    <ErrorBoundaryRoute path={`${match.url}/:id/delete`} component={<%= entityReactName %>DeleteDialog} />
+    <Route path={`${match.url}/:id/delete`} component={<%= entityReactName %>DeleteDialog} />
   </>
 );
 
diff --git a/generators/generator-base-private.js b/generators/generator-base-private.js
index 21960743d4..9a575ab1e2 100644
--- a/generators/generator-base-private.js
+++ b/generators/generator-base-private.js
@@ -21,6 +21,7 @@ const path = require('path');
 const _ = require('lodash');
 const fs = require('fs');
 const Generator = require('yeoman-generator');
+const Storage = require('yeoman-generator/lib/util/storage');
 const chalk = require('chalk');
 const Insight = require('insight');
 const shelljs = require('shelljs');
@@ -44,7 +45,7 @@ const CLIENT_MAIN_SRC_DIR = constants.CLIENT_MAIN_SRC_DIR;
  * This is the Generator base private class.
  * This provides all the private API methods used internally.
  * These methods should not be directly utilized using commonJS require,
- * as these can have breaking changes without a major version bumb
+ * as these can have breaking changes without a major version bump
  *
  * The method signatures in private API can be changed without a major version change.
  */
@@ -54,6 +55,7 @@ module.exports = class extends Generator {
         this.env.options.appPath = this.config.get('appPath') || CLIENT_MAIN_SRC_DIR;
         // expose lodash to templates
         this._ = _;
+        this.createConfigFromNewConfFile();
     }
 
     /* ======================================================================== */
@@ -1186,4 +1188,23 @@ module.exports = class extends Generator {
             ]);
         }
     }
+
+    /**
+     * Creates a new config file and binds it to the passed generator.
+     * @param {any} generator
+     */
+    createConfigFromNewConfFile(generator = this) {
+        const storePath = path.join(generator.destinationRoot(), '.yo-rc.json');
+        if (!jhiCore.FileUtils.doesFileExist(storePath)) {
+            return;
+        }
+        const customFs = this.fs;
+        customFs.readJSON = (filePath) => {
+            if (!jhiCore.FileUtils.doesFileExist(filePath)) {
+                return {};
+            }
+            return JSON.parse(fs.readFileSync(filePath, { encoding: 'utf-8' }));
+        };
+        generator.config = new Storage(generator.rootGeneratorName(), customFs, storePath);
+    }
 };
diff --git a/generators/generator-base.js b/generators/generator-base.js
index 21869f9295..2c9783aa62 100644
--- a/generators/generator-base.js
+++ b/generators/generator-base.js
@@ -273,7 +273,7 @@ module.exports = class extends PrivateBase {
                     file: indexModulePath,
                     needle: 'jhipster-needle-add-route-path',
                     splicable: [
-                        this.stripMargin(`|<ErrorBoundaryRoute path={\`\${match.url}/${entityFileName}\`} component={${entityAngularName}} />`)
+                        this.stripMargin(`|<Route path={\`\${match.url}/${entityFileName}\`} component={${entityAngularName}} />`)
                     ]
                 }, this);
 
diff --git a/generators/generator-constants.js b/generators/generator-constants.js
index 3870788c50..3127134dac 100644
--- a/generators/generator-constants.js
+++ b/generators/generator-constants.js
@@ -21,7 +21,7 @@
 const DOCKER_JHIPSTER_REGISTRY = 'jhipster/jhipster-registry:develop';
 const DOCKER_JAVA_JRE = 'openjdk:8-jre-alpine';
 const DOCKER_MYSQL = 'mysql:5.7.20';
-const DOCKER_MARIADB = 'mariadb:10.3.7';
+const DOCKER_MARIADB = 'mariadb:10.1.17';
 const DOCKER_POSTGRESQL = 'postgres:10.4';
 const DOCKER_MONGODB = 'mongo:3.6.3';
 const DOCKER_COUCHBASE = 'couchbase/server:5.1.0';
diff --git a/generators/import-jdl/index.js b/generators/import-jdl/index.js
index 650a9c7a2d..c27c4d2190 100644
--- a/generators/import-jdl/index.js
+++ b/generators/import-jdl/index.js
@@ -17,7 +17,6 @@
  * limitations under the License.
  */
 const _ = require('lodash');
-const fs = require('fs');
 const path = require('path');
 const shelljs = require('shelljs');
 const chalk = require('chalk');
@@ -25,7 +24,7 @@ const jhiCore = require('jhipster-core');
 const BaseGenerator = require('../generator-base');
 const packagejs = require('../../package.json');
 
-module.exports = class extends BaseGenerator {
+class ImporterGenerator extends BaseGenerator {
     constructor(args, opts) {
         super(args, opts);
         this.argument('jdlFiles', { type: Array, required: true });
@@ -57,11 +56,73 @@ module.exports = class extends BaseGenerator {
             type: Boolean,
             defaults: false
         });
+
+        if (this.config.get('baseName')) {
+            const configuration = this.config.getAll();
+            this.applicationType = configuration.applicationType;
+            this.baseName = configuration.baseName;
+            this.databaseType = configuration.databaseType || this.getDBTypeFromDBValue(this.options.db);
+            this.prodDatabaseType = configuration.prodDatabaseType || this.options.db;
+            this.devDatabaseType = configuration.devDatabaseType || this.options.db;
+            this.skipClient = configuration.skipClient;
+            this.clientFramework = configuration.clientFramework;
+            this.clientFramework = this.clientFramework || 'angularX';
+            this.clientPackageManager = configuration.clientPackageManager;
+            if (!this.clientPackageManager) {
+                if (this.useYarn) {
+                    this.clientPackageManager = 'yarn';
+                } else {
+                    this.clientPackageManager = 'npm';
+                }
+            }
+        }
+
+        this.importState = importJDL.call(this);
+    }
+}
+
+function importJDL() {
+    this.log('The JDL is being parsed.');
+    const jdlImporter = new jhiCore.JDLImporter(this.jdlFiles, {
+        databaseType: this.prodDatabaseType,
+        applicationType: this.applicationType,
+        applicationName: this.baseName,
+        generatorVersion: packagejs.version,
+        forceNoFiltering: this.options.force
+    });
+    let importState = {
+        exportedEntities: [],
+        exportedApplications: []
+    };
+    try {
+        importState = jdlImporter.import();
+        if (importState.exportedEntities.length > 0) {
+            const entityNames = _.uniq(importState.exportedEntities
+                .map(exportedEntity => exportedEntity.name))
+                .join(', ');
+            this.log(`Found entities: ${chalk.yellow(entityNames)}.`);
+        } else {
+            this.log(chalk.yellow('No change in entity configurations, no entities were updated.'));
+        }
+        this.log('The JDL has been successfully parsed');
+    } catch (error) {
+        this.debug('Error:', error);
+        if (error) {
+            const errorName = `${error.name}:` || '';
+            const errorMessage = error.message || '';
+            this.log(chalk.red(`${errorName} ${errorMessage}`));
+        }
+        this.error(`Error while parsing applications and entities from the JDL ${error}`);
+    }
+    return importState;
+}
+
+module.exports = class extends ImporterGenerator {
+    constructor(args, opts) {
+        super(args, opts);
         this.registerClientTransforms();
         this.applicationsLeftToGenerate = [];
         this.entitiesLeftToGenerate = [];
-        this.generated = false;
-        this.generatorConfig = {};
     }
 
     get initializing() {
@@ -77,17 +138,10 @@ module.exports = class extends BaseGenerator {
             },
 
             getConfig() {
-                if (!jhiCore.FileUtils.doesFileExist('.yo-rc.json') && !this.generated) {
-                    // we may have to parse the JDL first
-                    return;
-                }
-                let configuration = this.config.getAll();
-                if (!configuration.baseName && jhiCore.FileUtils.doesFileExist('.yo-rc.json')) {
-                    configuration = JSON.parse(fs.readFileSync('.yo-rc.json', { encoding: 'utf-8' }))['generator-jhipster'];
-                    configuration.getAll = () => configuration;
-                    configuration.get = key => configuration[key];
-                    configuration.set = (key, value) => { configuration[key] = value; };
+                if (!this.config.get('baseName') && jhiCore.FileUtils.doesFileExist('.yo-rc.json')) {
+                    this.createConfigFromNewConfFile(this);
                 }
+                const configuration = this.config.getAll();
                 this.applicationType = configuration.applicationType;
                 this.baseName = configuration.baseName;
                 this.databaseType = configuration.databaseType || this.getDBTypeFromDBValue(this.options.db);
@@ -104,7 +158,6 @@ module.exports = class extends BaseGenerator {
                         this.clientPackageManager = 'npm';
                     }
                 }
-                this.generatorConfig = configuration;
             }
         };
     }
@@ -114,53 +167,12 @@ module.exports = class extends BaseGenerator {
             insight() {
                 const insight = this.insight();
                 insight.trackWithEvent('generator', 'import-jdl');
-            },
-
-            parseJDL() {
-                if (this.generated) {
-                    return;
-                }
-                this.log('The JDL is being parsed.');
-                const jdlImporter = new jhiCore.JDLImporter(this.jdlFiles, {
-                    databaseType: this.prodDatabaseType,
-                    applicationType: this.applicationType,
-                    applicationName: this.baseName,
-                    generatorVersion: packagejs.version,
-                    forceNoFiltering: this.options.force
-                });
-                try {
-                    this.importState = jdlImporter.import();
-                    if (this.importState.exportedEntities.length > 0) {
-                        const entityNames = _.uniq(this.importState.exportedEntities
-                            .map(exportedEntity => exportedEntity.name))
-                            .join(', ');
-                        this.log(`Found entities: ${chalk.yellow(entityNames)}.`);
-                    } else {
-                        this.log(chalk.yellow('No change in entity configurations, no entities were updated.'));
-                    }
-                    this.log('The JDL has been successfully parsed');
-                    this.generated = true;
-                } catch (error) {
-                    this.debug('Error:', error);
-                    if (error) {
-                        const errorName = `${error.name}:` || '';
-                        const errorMessage = error.message || '';
-                        this.log(chalk.red(`${errorName} ${errorMessage}`));
-                    }
-                    this.error(`Error while parsing applications and entities from the JDL ${error}`);
-                }
             }
         };
     }
 
     get writing() {
         return {
-            initializeGeneratorIfNeedBe() {
-                if (!this.baseName) {
-                    this.initializing.getConfig.call(this);
-                }
-            },
-
             generateApplications() {
                 if (!shouldGenerateApplications(this) || this.importState.exportedApplications.length === 0) {
                     return;
@@ -170,7 +182,11 @@ module.exports = class extends BaseGenerator {
                 if (this.importState.exportedApplications.length === 1) {
                     const application = this.importState.exportedApplications[0];
                     try {
-                        generateApplicationFiles(this, application, this.generatorConfig);
+                        generateApplicationFiles({
+                            generator: this,
+                            application,
+                            withEntities: this.importState.exportedEntities.length !== 0
+                        });
                     } catch (error) {
                         this.error(`Error while generating applications from the parsed JDL\n${error}`);
                     }
@@ -182,7 +198,7 @@ module.exports = class extends BaseGenerator {
             },
 
             generateEntities() {
-                if (this.importState.exportedEntities.length === 0) {
+                if (this.importState.exportedEntities.length === 0 || this.importState.exportedApplications.length !== 0) {
                     return;
                 }
                 if (this.options['json-only']) {
@@ -195,7 +211,7 @@ module.exports = class extends BaseGenerator {
                                 || this.importState.exportedApplications.length === 1) {
                             this.log(`Generating ${this.importState.exportedEntities.length} `
                                 + `entit${this.importState.exportedEntities.length === 1 ? 'y' : 'ies'}.`);
-                            generateEntityFiles(this, exportedEntity, this.generatorConfig);
+                            generateEntityFiles(this, exportedEntity);
                         } else {
                             // sub-folder generation, not yet handled
                             this.entitiesLeftToGenerate.push(exportedEntity.name);
@@ -227,19 +243,20 @@ function shouldGenerateApplications(generator) {
     return !generator.options['ignore-application'] && generator.importState.exportedApplications.length !== 0;
 }
 
-function generateApplicationFiles(generator, application, generatorConfig) {
-    callSubGenerator(generator, '..', 'app', {
-        force: generator.options.force,
-        debug: generator.options.debug,
-        'skip-client': generator.options.skipClient,
-        'skip-server': generator.options.skipServer,
-        'skip-install': generator.options['skip-install'],
-        'skip-user-management': application['generator-jhipster'].skipUserManagement,
-        'jhi-prefix': application['generator-jhipster'].jhiPrefix
+function generateApplicationFiles(args) {
+    callSubGenerator(args.generator, '..', 'app', {
+        force: args.generator.options.force,
+        debug: args.generator.options.debug,
+        'skip-client': args.generator.options.skipClient,
+        'skip-server': args.generator.options.skipServer,
+        'skip-install': args.generator.options['skip-install'],
+        'skip-user-management': args.application['generator-jhipster'].skipUserManagement,
+        'jhi-prefix': args.application['generator-jhipster'].jhiPrefix,
+        'with-entities': args.withEntities
     });
 }
 
-function generateEntityFiles(generator, entity, generatorConfig) {
+function generateEntityFiles(generator, entity) {
     callSubGenerator(generator, '..', 'entity', {
         force: generator.options.force,
         debug: generator.options.debug,
diff --git a/generators/kubernetes/templates/db/mariadb.yml.ejs b/generators/kubernetes/templates/db/mariadb.yml.ejs
index 1b7323d779..f9f5075a77 100644
--- a/generators/kubernetes/templates/db/mariadb.yml.ejs
+++ b/generators/kubernetes/templates/db/mariadb.yml.ejs
@@ -45,8 +45,6 @@ spec:
 #        - mysqld
 #        - --lower_case_table_names=1
 #        - --skip-ssl
-#        - --character_set_server=utf8mb4
-#        - --explicit_defaults_for_timestamp
         ports:
         - containerPort: 3306
         volumeMounts:
diff --git a/generators/openshift/templates/db/mariadb.yml.ejs b/generators/openshift/templates/db/mariadb.yml.ejs
index 1edfd7cca8..4bc04d7d09 100644
--- a/generators/openshift/templates/db/mariadb.yml.ejs
+++ b/generators/openshift/templates/db/mariadb.yml.ejs
@@ -175,8 +175,6 @@ objects:
     #        - mysqld
     #        - --lower_case_table_names=1
     #        - --skip-ssl
-    #        - --character_set_server=utf8mb4
-    #        - --explicit_defaults_for_timestamp
             ports:
             - containerPort: 3306
               protocol: TCP
diff --git a/generators/openshift/templates/db/mysql.yml.ejs b/generators/openshift/templates/db/mysql.yml.ejs
index bb75d0aa49..b9d66f7b63 100644
--- a/generators/openshift/templates/db/mysql.yml.ejs
+++ b/generators/openshift/templates/db/mysql.yml.ejs
@@ -175,8 +175,6 @@ objects:
     #        - mysqld
     #        - --lower_case_table_names=1
     #        - --skip-ssl
-    #        - --character_set_server=utf8mb4
-    #        - --explicit_defaults_for_timestamp
             ports:
             - containerPort: 3306
               protocol: TCP
diff --git a/generators/server/templates/src/main/docker/mariadb.yml.ejs b/generators/server/templates/src/main/docker/mariadb.yml.ejs
index d1b956ab5e..3aaafcf5da 100644
--- a/generators/server/templates/src/main/docker/mariadb.yml.ejs
+++ b/generators/server/templates/src/main/docker/mariadb.yml.ejs
@@ -28,4 +28,4 @@ services:
             - MYSQL_DATABASE=<%=baseName.toLowerCase()%>
         ports:
             - 3306:3306
-        command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp
+        command: mysqld --lower_case_table_names=1 --skip-ssl


Test patch:
diff --git a/generators/client/templates/angular/src/test/javascript/jest.conf.js.ejs b/generators/client/templates/angular/src/test/javascript/jest.conf.js.ejs
index af9e368f2d..a994762839 100644
--- a/generators/client/templates/angular/src/test/javascript/jest.conf.js.ejs
+++ b/generators/client/templates/angular/src/test/javascript/jest.conf.js.ejs
@@ -1,7 +1,7 @@
 module.exports = {
     preset: 'jest-preset-angular',
     setupTestFrameworkScriptFile: '<rootDir>/src/test/javascript/jest.ts',
-    coverageDirectory: '<rootDir>/<%= BUILD_DIR %>test-results/',
+    coverageDirectory: '<rootDir>/target/test-results/',
     globals: {
         'ts-jest': {
             tsConfigFile: 'tsconfig.json'
@@ -11,10 +11,6 @@ module.exports = {
     moduleNameMapper: {
         'app/(.*)': '<rootDir>/src/main/webapp/app/$1'
     },
-    reporters: [
-        'default',
-        [ 'jest-junit', { output: './<%= BUILD_DIR %>test-results/jest/TESTS-results.xml' } ]
-    ],
     transformIgnorePatterns: ['node_modules/(?!@angular/common/locales)'],
     testMatch: ['<rootDir>/src/test/javascript/spec/**/+(*.)+(spec.ts)'],
     rootDir: '../../../'
diff --git a/generators/client/templates/react/src/test/javascript/jest.conf.js.ejs b/generators/client/templates/react/src/test/javascript/jest.conf.js.ejs
index 9be90dc805..152a561705 100644
--- a/generators/client/templates/react/src/test/javascript/jest.conf.js.ejs
+++ b/generators/client/templates/react/src/test/javascript/jest.conf.js.ejs
@@ -8,10 +8,6 @@ module.exports = {
   moduleNameMapper: {
     'app/(.*)': '<rootDir>/src/main/webapp/app/$1'
   },
-  reporters: [
-    'default',
-    [ 'jest-junit', { output: './<%= BUILD_DIR %>test-results/jest/TESTS-results.xml' } ]
-  ],
   testPathIgnorePatterns: [
     '<rootDir>/node_modules/',
     '<rootDir>/src/test/javascript/spec/app/modules/account/sessions/sessions.reducer.spec.ts'
diff --git a/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary-route.spec.tsx.ejs b/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary-route.spec.tsx.ejs
deleted file mode 100644
index 9e25ada9f2..0000000000
--- a/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary-route.spec.tsx.ejs
+++ /dev/null
@@ -1,38 +0,0 @@
-import * as React from 'react';
-import { Route } from 'react-router-dom';
-import { shallow, mount } from 'enzyme';
-
-import ErrorBoundaryRoute from 'app/shared/error/error-boundary-route';
-
-const ErrorComp = () => {
-  throw new Error('test');
-};
-
-describe('error-boundary-route component', () => {
-  beforeEach(() => {
-    // ignore console and jsdom errors
-    jest.spyOn(window._virtualConsole, 'emit').mockImplementation(() => false);
-    jest.spyOn(global.console, 'error').mockImplementation(() => false);
-  });
-
-  // All tests will go here
-  it('Should throw error when no component is provided', () => {
-    expect(() => shallow(<ErrorBoundaryRoute />)).toThrow(Error);
-  });
-
-  it('Should render fallback component when an uncaught error is thrown from component', () => {
-    const route = shallow(<ErrorBoundaryRoute component={ErrorComp} path="/" />);
-    const renderedRoute = route.find(Route);
-    expect(renderedRoute.length).toEqual(1);
-    expect(renderedRoute.props().path).toEqual('/');
-    expect(renderedRoute.props().render).toBeDefined();
-    const renderFn: Function = renderedRoute.props().render;
-    const comp = mount(
-      renderFn({
-        location: '/'
-      })
-    );
-    expect(comp.length).toEqual(1);
-    expect(comp.html()).toEqual('<div><h2 class="error">An unexpected error has occurred.</h2></div>');
-  });
-});
diff --git a/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary.spec.tsx.ejs b/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary.spec.tsx.ejs
deleted file mode 100644
index 26885d5b71..0000000000
--- a/generators/client/templates/react/src/test/javascript/spec/app/shared/error/error-boundary.spec.tsx.ejs
+++ /dev/null
@@ -1,32 +0,0 @@
-import * as React from 'react';
-import { shallow, mount } from 'enzyme';
-
-import ErrorBoundary from 'app/shared/error/error-boundary';
-
-const ErrorComp = () => {
-  throw new Error('test');
-};
-
-describe('error component', () => {
-
-  beforeEach(() => {
-
-    // ignore console and jsdom errors
-    jest.spyOn(window._virtualConsole, 'emit').mockImplementation(() => false);
-    jest.spyOn(global.console, 'error').mockImplementation(() => false);
-  });
-
-  it('Should throw an error when componnet is not enclosed in Error Boundary', () => {
-    expect(() => shallow(<ErrorComp />)).toThrow(Error);
-  });
-
-  it('Should call Error Boundary componentDidCatch method', () => {
-    const spy = jest.spyOn(ErrorBoundary.prototype, 'componentDidCatch');
-    mount(
-      <ErrorBoundary>
-        <ErrorComp />
-      </ErrorBoundary>
-    );
-    expect(spy).toHaveBeenCalled();
-  });
-});
diff --git a/test/import-jdl.spec.js b/test/import-jdl.spec.js
index 15862aadc8..0b643fc7b5 100644
--- a/test/import-jdl.spec.js
+++ b/test/import-jdl.spec.js
@@ -70,7 +70,7 @@ describe('JHipster generator import jdl', () => {
             assert.file(entityFiles);
         });
     });
-    describe('imports a JDL app and entities', () => {
+    describe('imports JDL apps and entities', () => {
         before((done) => {
             helpers.run(require.resolve('../generators/import-jdl'))
                 .inTmpDir((dir) => {
@@ -98,6 +98,27 @@ describe('JHipster generator import jdl', () => {
             ]);
         });
     });
+    describe('imports single app and entities', () => {
+        before((done) => {
+            helpers.run(require.resolve('../generators/import-jdl'))
+                .inTmpDir((dir) => {
+                    fse.copySync(path.join(__dirname, '../test/templates/import-jdl'), dir);
+                })
+                .withOptions({ skipInstall: true })
+                .withArguments(['single-app-and-entities.jdl'])
+                .on('end', done);
+        });
+
+        it('creates the application', () => {
+            assert.file(['.yo-rc.json']);
+        });
+        it('creates the entities', () => {
+            assert.file([
+                path.join('.jhipster', 'A.json'),
+                path.join('.jhipster', 'B.json'),
+            ]);
+        });
+    });
     describe('imports a JDL model from multiple files', () => {
         beforeEach((done) => {
             helpers.run(require.resolve('../generators/import-jdl'))
diff --git a/test/templates/compose/07-mariadb/src/main/docker/mariadb.yml b/test/templates/compose/07-mariadb/src/main/docker/mariadb.yml
index 22fae3c0de..70deca4f20 100644
--- a/test/templates/compose/07-mariadb/src/main/docker/mariadb.yml
+++ b/test/templates/compose/07-mariadb/src/main/docker/mariadb.yml
@@ -1,7 +1,7 @@
 version: '2'
 services:
     msmariadb-mariadb:
-        image: mariadb:10.3.7
+        image: mysql:5.7.11
         # volumes:
         #     - ~/volumes/jhipster/msmysql/mysql/:/var/lib/mysql/
         environment:
@@ -10,4 +10,3 @@ services:
             - MYSQL_DATABASE=msmysql
         ports:
             - 3306:3306
-        command: mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8mb4 --explicit_defaults_for_timestamp
diff --git a/test/templates/import-jdl/.yo-rc.json b/test/templates/import-jdl/.yo-rc.json
index e9b8ac67f5..d0ffc77d00 100644
--- a/test/templates/import-jdl/.yo-rc.json
+++ b/test/templates/import-jdl/.yo-rc.json
@@ -16,6 +16,7 @@
         "buildTool": "maven",
         "enableTranslation": true,
         "rememberMeKey": "2bb60a80889aa6e6767e9ccd8714982681152aa5",
+        "languages": ["en", "fr"],
         "testFrameworks": [
             "gatling"
         ]
diff --git a/test/templates/import-jdl/single-app-and-entities.jdl b/test/templates/import-jdl/single-app-and-entities.jdl
new file mode 100644
index 0000000000..41354bf6a9
--- /dev/null
+++ b/test/templates/import-jdl/single-app-and-entities.jdl
@@ -0,0 +1,10 @@
+application {
+  config {
+    baseName jhipsterApp,
+    packageName com.jhipster.myapp
+  }
+  entities A, B
+}
+
+entity A
+entity B