diff --git a/frontend/src/components/Message/Message.spec.js b/frontend/src/components/Message/Message.spec.js
new file mode 100644
index 000000000..9d65e792c
--- /dev/null
+++ b/frontend/src/components/Message/Message.spec.js
@@ -0,0 +1,101 @@
+import { mount } from '@vue/test-utils'
+import Thx from './Message'
+
+const localVue = global.localVue
+
+const createMockObject = (comingFrom) => {
+ return {
+ $t: jest.fn((t) => t),
+ $route: {
+ params: {
+ comingFrom,
+ },
+ },
+ }
+}
+
+describe('Message', () => {
+ let wrapper
+
+ const Wrapper = (mocks) => {
+ return mount(Thx, { localVue, mocks })
+ }
+
+ describe('mount', () => {
+ beforeEach(() => {
+ wrapper = Wrapper(createMockObject('forgotPassword'))
+ })
+
+ it('renders the thx page', () => {
+ expect(wrapper.find('div.header').exists()).toBeTruthy()
+ })
+
+ it('renders the title', () => {
+ expect(wrapper.find('p.h1').text()).toBe('site.thx.title')
+ })
+ })
+
+ describe('coming from /forgot-password', () => {
+ beforeEach(() => {
+ wrapper = Wrapper(createMockObject('forgotPassword'))
+ })
+
+ it('renders the thanks text', () => {
+ expect(wrapper.find('p.h4').text()).toBe('site.thx.email')
+ })
+
+ it('renders the thanks redirect button', () => {
+ expect(wrapper.find('a.btn').text()).toBe('login')
+ })
+
+ it('links the redirect button to /login', () => {
+ expect(wrapper.find('a.btn').attributes('href')).toBe('/login')
+ })
+ })
+
+ describe('coming from /reset-password', () => {
+ beforeEach(() => {
+ wrapper = Wrapper(createMockObject('resetPassword'))
+ })
+
+ it('renders the thanks text', () => {
+ expect(wrapper.find('p.h4').text()).toBe('site.thx.reset')
+ })
+
+ it('renders the thanks redirect button', () => {
+ expect(wrapper.find('a.btn').text()).toBe('login')
+ })
+
+ it('links the redirect button to /login', () => {
+ expect(wrapper.find('a.btn').attributes('href')).toBe('/login')
+ })
+ })
+
+ describe('coming from /register', () => {
+ beforeEach(() => {
+ wrapper = Wrapper(createMockObject('register'))
+ })
+
+ it('renders the thanks text', () => {
+ expect(wrapper.find('p.h4').text()).toBe('site.thx.register')
+ })
+ })
+
+ describe('coming from /login', () => {
+ beforeEach(() => {
+ wrapper = Wrapper(createMockObject('login'))
+ })
+
+ it('renders the thanks text', () => {
+ expect(wrapper.find('p.h4').text()).toBe('site.thx.activateEmail')
+ })
+
+ it('renders the thanks redirect button', () => {
+ expect(wrapper.find('a.btn').text()).toBe('settings.password.reset')
+ })
+
+ it('links the redirect button to /forgot-password', () => {
+ expect(wrapper.find('a.btn').attributes('href')).toBe('/forgot-password')
+ })
+ })
+})
diff --git a/frontend/src/components/Message/Message.vue b/frontend/src/components/Message/Message.vue
new file mode 100644
index 000000000..26468f9e3
--- /dev/null
+++ b/frontend/src/components/Message/Message.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/pages/ForgotPassword.vue b/frontend/src/pages/ForgotPassword.vue
index 580a0ed97..e357652c8 100644
--- a/frontend/src/pages/ForgotPassword.vue
+++ b/frontend/src/pages/ForgotPassword.vue
@@ -36,16 +36,21 @@
{{ $t('back') }}
+
+
+