diff --git a/webapp/layouts/error.spec.js b/webapp/layouts/error.spec.js
new file mode 100644
index 000000000..95234ec5f
--- /dev/null
+++ b/webapp/layouts/error.spec.js
@@ -0,0 +1,47 @@
+import { config, shallowMount } from '@vue/test-utils'
+import Error from './error.vue'
+
+const localVue = global.localVue
+
+config.stubs['nuxt-link'] = ''
+
+describe('error.vue', () => {
+ let mocks, wrapper
+
+ beforeEach(() => {
+ mocks = {
+ $t: jest.fn(key => key),
+ }
+ })
+
+ const Wrapper = (propsData = {}) => {
+ return shallowMount(Error, { mocks, propsData, localVue })
+ }
+
+ describe('shallowMount', () => {
+ it('renders default error message', () => {
+ wrapper = Wrapper({ error: {} })
+ expect(wrapper.find('.error-message').text()).toBe('error-pages.default')
+ })
+
+ it('renders error message to given statusCode', () => {
+ wrapper = Wrapper({ error: { statusCode: 404 } })
+ expect(wrapper.find('.error-message').text()).toBe('error-pages.404-default')
+ })
+
+ it('renders error message to given custom key', () => {
+ wrapper = Wrapper({ error: { statusCode: 404, key: 'my-custom-key' } })
+ expect(wrapper.find('.error-message').text()).toBe('my-custom-key')
+ })
+
+ it('has a link to index page', () => {
+ wrapper = Wrapper({ error: {} })
+ expect(wrapper.find('span[to="/"]').text()).toBe('error-pages.back-to-index')
+ })
+
+ it('has an image related to the status code', () => {
+ wrapper = Wrapper({ error: { statusCode: 404 } })
+ expect(wrapper.find('.error-image').attributes('src')).toBe('/img/svg/errors/error404.svg')
+ })
+ })
+})
diff --git a/webapp/layouts/error.vue b/webapp/layouts/error.vue
index ab4f5e5bb..4394a5cdb 100644
--- a/webapp/layouts/error.vue
+++ b/webapp/layouts/error.vue
@@ -1,6 +1,6 @@
-
+
{{ $t('error-pages.default') }}
@@ -14,6 +14,20 @@
diff --git a/webapp/locales/de.json b/webapp/locales/de.json
index ae4b5bfc1..6ccaea780 100644
--- a/webapp/locales/de.json
+++ b/webapp/locales/de.json
@@ -804,7 +804,10 @@
"back-to-index": "Zurück zur Startseite",
"post-not-found": "Dieser Beitrag konnte nicht gefunden werden",
"cannot-edit-post": "Dieser Beitrag kann nicht editiert werden",
- "default": "Diese Seite konnte nicht gefunden werden",
- "not-authorized": "Kein Zugang zu dieser Seite"
+ "403-default": "Kein Zugang zu dieser Seite",
+ "404-default": "Diese Seite konnte nicht gefunden werden",
+ "500-default": "Internal Server Error",
+ "503-default": "Dienst steht nicht zur Verfügung",
+ "default": "Ein Fehler ist aufgetreten"
}
}
diff --git a/webapp/locales/en.json b/webapp/locales/en.json
index cb0d3ca07..d8e374033 100644
--- a/webapp/locales/en.json
+++ b/webapp/locales/en.json
@@ -804,8 +804,11 @@
"back-to-index": "Back to index page",
"post-not-found": "This post could not be found",
"cannot-edit-post": "This post cannot be edited",
- "default": "This page could not be found",
- "not-authorized": "Not authorized to this page"
+ "404-default": "This page could not be found",
+ "403-default": "Not authorized to this page",
+ "500-default": "Internal Server Error",
+ "503-default": "Service Unavailable",
+ "default": "An error occurred"
}
}