mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge branch '309-Transaction-details-design' of https://github.com/gradido/gradido into 309-Transaction-details-design
This commit is contained in:
commit
1d029deb7a
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@ -206,7 +206,7 @@ jobs:
|
||||
report_name: Coverage Frontend
|
||||
type: lcov
|
||||
result_path: ./coverage/lcov.info
|
||||
min_coverage: 32
|
||||
min_coverage: 46
|
||||
token: ${{ github.token }}
|
||||
|
||||
##############################################################################
|
||||
|
||||
Binary file not shown.
@ -7,409 +7,505 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-28 10:50+0200\n"
|
||||
"PO-Revision-Date: 2020-05-28 10:54+0200\n"
|
||||
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
|
||||
"PO-Revision-Date: 2021-06-21 13:38+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.3.1\n"
|
||||
"X-Generator: Poedit 3.0\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
|
||||
msgid "Login"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
#: build/http_pages/LoginPage.cpp:196
|
||||
msgid "E-Mail or password isn't right, please try again!"
|
||||
msgstr ""
|
||||
"E-Mail und Passwort Kombination stimmen nicht, bitte versuche es erneut. "
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
#, fuzzy
|
||||
#| msgid "Password"
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid "Passwort"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid ""
|
||||
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "E-Mail Address not checked, do you already get one?"
|
||||
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
"E-Mail Adresse wurde noch nicht überprüft. Hast du schon in deine E-Mails "
|
||||
"geschaut? Bitte schau auch in dein Spam-Verzeichnis nach."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
#: build/http_pages/LoginPage.cpp:208
|
||||
msgid "Error in saved data, the server admin will look at it."
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/LoginPage.cpp:211
|
||||
msgid "Benutzer ist deaktiviert, kein Login möglich!"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/LoginPage.cpp:275
|
||||
msgid "Username and password are needed!"
|
||||
msgstr "E-Mail und Passwort werden benötigt!"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:175
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
#: model/Session.cpp:163 model/Session.cpp:170 model/Session.cpp:209
|
||||
#: model/Session.cpp:234
|
||||
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
|
||||
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:178
|
||||
#: build/http_pages/LoginPage.cpp:381
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:603
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:609
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:614
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:619
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:624
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:629
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:180
|
||||
#: build/http_pages/LoginPage.cpp:384
|
||||
msgid " Login "
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:182
|
||||
#: build/http_pages/LoginPage.cpp:391
|
||||
msgid "You haven't any account yet? Please follow the link to create one."
|
||||
msgstr "Du hast noch kein Gradido-Konto?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:183
|
||||
#: build/http_pages/LoginPage.cpp:395
|
||||
msgid "Create New Account"
|
||||
msgstr "Neues Konto erstellen"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:186
|
||||
#: build/http_pages/LoginPage.cpp:403
|
||||
msgid "Passwort vergessen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:97
|
||||
msgid "Bitte gebe deinen E-Mail Verification Code ein:"
|
||||
#: build/http_pages/CheckEmailPage.cpp:155
|
||||
msgid "E-Mail verifizieren"
|
||||
msgstr "E-Mail überprüfen"
|
||||
|
||||
#: build/http_pages/CheckEmailPage.cpp:165
|
||||
msgid ""
|
||||
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:98
|
||||
#: model/Session.cpp:186
|
||||
#, fuzzy
|
||||
#| msgid "E-Mail Verification"
|
||||
#: build/http_pages/CheckEmailPage.cpp:170
|
||||
msgid "Zur Startseite"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/CheckEmailPage.cpp:175
|
||||
msgid "Bitte gib deinen E-Mail Verification Code ein:"
|
||||
msgstr "Bitte gib deinen E-Mail Verification Code ein:"
|
||||
|
||||
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
|
||||
msgid "Email Verification Code"
|
||||
msgstr "E-Mail Überprüfung"
|
||||
msgstr "Email Verification Code"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:100
|
||||
#: build/http_pages/CheckEmailPage.cpp:185
|
||||
msgid "Überprüfe Code"
|
||||
msgstr ""
|
||||
msgstr "Überprüfe Code"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:104
|
||||
#: build/http_pages/CheckEmailPage.cpp:190
|
||||
msgid "Du hast bisher keinen Code erhalten?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:105
|
||||
#: build/http_pages/CheckEmailPage.cpp:193
|
||||
msgid "E-Mail erneut zuschicken (in Arbeit)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:108
|
||||
#: build/http_pages/CheckEmailPage.cpp:198
|
||||
msgid "Funktioniert dein E-Mail Verification Code nicht?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:109
|
||||
#: build/http_pages/CheckEmailPage.cpp:201
|
||||
msgid "Schicke uns eine E-Mail und wir kümmern uns darum: "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:110
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:133
|
||||
#: build/http_pages/CheckEmailPage.cpp:208
|
||||
#: build/http_pages/ResetPasswordPage.cpp:273
|
||||
msgid "E-Mail an Support schicken"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
msgid "E-Mail Adresse konnte nicht gefunden werden oder ist nicht aktiviert."
|
||||
#: build/http_pages/ResetPasswordPage.cpp:174
|
||||
#: build/http_pages/ResetPasswordPage.cpp:217
|
||||
msgid "Gib bitte hier deine E-Mail Adresse an:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
msgid "E-Mail Adresse nicht angegeben."
|
||||
#: build/http_pages/ResetPasswordPage.cpp:183
|
||||
msgid "Bestätigen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:26
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: model/Session.cpp:495 model/Session.cpp:507 model/Session.cpp:515
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
msgid "Bitte wähle eine Option aus."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
msgid "Ungültige Option"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:107
|
||||
msgid "Gebe bitte hier deine E-Mail Adresse an:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:109
|
||||
#: build/http_pages/ResetPasswordPage.cpp:225
|
||||
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:113
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:196
|
||||
#: build/http_pages/ResetPasswordPage.cpp:234
|
||||
#: build/http_pages/PassphrasePage.cpp:373
|
||||
msgid "Ja"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:118
|
||||
#: build/http_pages/ResetPasswordPage.cpp:241
|
||||
msgid "Nein"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:123
|
||||
#: build/http_pages/ResetPasswordPage.cpp:247
|
||||
msgid "Absenden"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:127
|
||||
#: build/http_pages/ResetPasswordPage.cpp:255
|
||||
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:129
|
||||
#: build/http_pages/ResetPasswordPage.cpp:260
|
||||
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:131
|
||||
#: build/http_pages/ResetPasswordPage.cpp:265
|
||||
msgid ""
|
||||
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
|
||||
"Verzeichnis nach. "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:132
|
||||
#: build/http_pages/ResetPasswordPage.cpp:268
|
||||
msgid ""
|
||||
"Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten "
|
||||
"gewartet?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:256
|
||||
#: build/http_pages/PassphrasePage.cpp:41
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
|
||||
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:42
|
||||
#: build/http_pages/PassphrasePage.cpp:451
|
||||
msgid "Neues Konto anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
|
||||
#: build/http_pages/PassphrasePage.cpp:43
|
||||
msgid "2/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
msgid ""
|
||||
"Diese Passphrase ist ungültig, bitte überprüfen oder neu "
|
||||
"generieren (lassen)."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: build/http_pages/PassphrasePage.cpp:132
|
||||
msgid "intern error please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
|
||||
#: build/http_pages/PassphrasePage.cpp:147
|
||||
msgid "3/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
|
||||
#: build/http_pages/PassphrasePage.cpp:150
|
||||
#: build/http_pages/PassphrasePage.cpp:153
|
||||
msgid "1/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
|
||||
#: build/http_pages/PassphrasePage.cpp:152
|
||||
msgid "Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:153
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:188
|
||||
msgid "Was zu tun ist:"
|
||||
#: build/http_pages/PassphrasePage.cpp:270
|
||||
msgid "Passphrase abschreiben"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:154
|
||||
msgid ""
|
||||
"Schreibe dir deine Passphrase auf und packe sie gut weg. Du brauchst sie um "
|
||||
"deine Adresse wiederherzustellen. Wenn du sie verlierst, sind auch deine "
|
||||
"Gradidos verloren."
|
||||
msgstr ""
|
||||
"Schreibe dir deine Passphrase auf oder drucke sie aus und bewahre sie <b>in "
|
||||
"Papier-Form</b> an einem sicheren Ort auf (speichere sie nicht auf deinem "
|
||||
"Rechner oder Mobilgerät)! Du brauchst deine Passphrase um dein Konto "
|
||||
"wiederherzustellen, wenn du mal dein Passort vergessen haben solltest. "
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:157
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
|
||||
#: build/http_pages/PassphrasePage.cpp:287
|
||||
msgid "Was ist eine Passphrase?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:162
|
||||
msgid ""
|
||||
"Die Passphrase kommt aus dem Crypto-Bereich und ist ein Weg einen "
|
||||
"komplizierte kryptografischen Schlüssel in einer lesbaren Form darzustellen."
|
||||
#: build/http_pages/PassphrasePage.cpp:290
|
||||
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:163
|
||||
msgid ""
|
||||
"Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
"Bitcoin) um maximale Sicherheit zu erreichen."
|
||||
#: build/http_pages/PassphrasePage.cpp:293
|
||||
msgid "Sie dient deiner Sicherheit."
|
||||
msgstr ""
|
||||
"Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
"Bitcoin) um für dich die maximale Sicherheit zu gewährleisten."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:165
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:275
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:280
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:293
|
||||
#: build/http_pages/PassphrasePage.cpp:296
|
||||
msgid ""
|
||||
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
|
||||
"dein Passwort vergessen haben solltest."
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:300
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:309
|
||||
#: build/http_pages/PassphrasePage.cpp:352
|
||||
msgid "Was zu tun ist:"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:312
|
||||
msgid ""
|
||||
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
|
||||
"Papier!"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:315
|
||||
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:318
|
||||
msgid "Bewahre sie an einem sicheren Ort auf!"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:322
|
||||
#: build/http_pages/PassphrasePage.cpp:478
|
||||
#: build/http_pages/PassphrasePage.cpp:487
|
||||
#: build/http_pages/PassphrasePage.cpp:511
|
||||
msgid "Weiter"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:189
|
||||
#: build/http_pages/PassphrasePage.cpp:355
|
||||
msgid "Hast du dir deine Passphrase gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:190
|
||||
#: build/http_pages/PassphrasePage.cpp:358
|
||||
msgid ""
|
||||
"Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in "
|
||||
"anderer Reihenfolge."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:191
|
||||
#: build/http_pages/PassphrasePage.cpp:361
|
||||
msgid "Klicke sie an um sie einzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
|
||||
#: build/http_pages/PassphrasePage.cpp:364
|
||||
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
|
||||
msgstr ""
|
||||
|
||||
#: build/http_pages/PassphrasePage.cpp:370
|
||||
msgid ""
|
||||
"Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine "
|
||||
"Passphrase gemerkt oder aufgeschrieben?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:242
|
||||
#: build/http_pages/PassphrasePage.cpp:429
|
||||
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:246
|
||||
#: build/http_pages/PassphrasePage.cpp:437
|
||||
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:247
|
||||
#: build/http_pages/PassphrasePage.cpp:440
|
||||
msgid ""
|
||||
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
|
||||
"wiederherstellen?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
|
||||
#: build/http_pages/PassphrasePage.cpp:460
|
||||
msgid "Bestehendes Konto wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
|
||||
#: build/http_pages/PassphrasePage.cpp:469
|
||||
msgid ""
|
||||
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
|
||||
"Passphrase ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:288
|
||||
#: build/http_pages/PassphrasePage.cpp:497
|
||||
msgid "Konto wiederherstellen / Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:289
|
||||
#: build/http_pages/PassphrasePage.cpp:501
|
||||
msgid ""
|
||||
"Um dein Konto wiederherzustellen, dir ein Neues Passwort auswählen zu "
|
||||
"Um dein Konto wiederherzustellen und dir ein Neues Passwort auswählen zu "
|
||||
"können, tippe hier bitte die Wörter deiner Passphrase in der richtigen "
|
||||
"Reihenfolge ein, welche du dir aufgeschrieben hast."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
|
||||
#: build/http_pages/PassphrasePage.cpp:524
|
||||
msgid "Fehler"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:304
|
||||
#: build/http_pages/PassphrasePage.cpp:527
|
||||
msgid ""
|
||||
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
|
||||
"dich an den Server-Admin."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:149 model/Session.cpp:180 model/Session.cpp:700
|
||||
#: model/Session.cpp:706 model/Session.cpp:1005
|
||||
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
|
||||
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
|
||||
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
|
||||
msgid "Benutzer"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:149
|
||||
#: src/cpp/model/Session.cpp:147
|
||||
msgid "Eingeloggter Benutzer ist kein Admin"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:201
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
|
||||
msgid "Vorname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:159 model/Session.cpp:201
|
||||
#: model/Session.cpp:205
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
|
||||
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
|
||||
msgid ""
|
||||
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
|
||||
"<>&;"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:159 model/Session.cpp:205
|
||||
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
|
||||
msgid "Nachname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:163 model/Session.cpp:209
|
||||
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
|
||||
msgid "Bitte gebe eine gültige E-Mail Adresse an."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:170 model/Session.cpp:234
|
||||
#: src/cpp/model/Session.cpp:168
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits einen Account"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:180 model/Session.cpp:186
|
||||
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
|
||||
msgid "Fehler beim speichern!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:379 model/Session.cpp:438 model/Session.cpp:881
|
||||
#: model/Session.cpp:889
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits ein Konto"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
|
||||
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
|
||||
msgid "E-Mail Verification"
|
||||
msgstr "E-Mail Überprüfung"
|
||||
|
||||
#: model/Session.cpp:379
|
||||
#: src/cpp/model/Session.cpp:350
|
||||
msgid "Du hast dein Konto bereits aktiviert!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:438
|
||||
#: src/cpp/model/Session.cpp:390
|
||||
msgid "Falscher Code für aktiven Login"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:495
|
||||
#: src/cpp/model/Session.cpp:465
|
||||
msgid "Deine Passphrase ist ungütig"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:507
|
||||
#: src/cpp/model/Session.cpp:477
|
||||
msgid "Ein Fehler trat auf, bitte versuche es erneut"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:515
|
||||
#: src/cpp/model/Session.cpp:491
|
||||
msgid "Das ist nicht die richtige Passphrase."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:700
|
||||
#: src/cpp/model/Session.cpp:645
|
||||
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:706
|
||||
#: src/cpp/model/Session.cpp:651
|
||||
msgid ""
|
||||
"Fehler beim Löschen des Accounts. Bitte logge dich erneut ein und "
|
||||
"versuche es nochmal."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:881
|
||||
#: src/cpp/model/Session.cpp:832
|
||||
msgid "Konnte kein passendes Konto finden."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:889
|
||||
#: src/cpp/model/Session.cpp:841
|
||||
msgid "Fehler beim laden des Benutzers."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1005
|
||||
#: src/cpp/model/Session.cpp:937
|
||||
msgid "Kein gültiger Benutzer, bitte logge dich erneut ein."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Gradido: E-Mail Verification"
|
||||
#~ msgstr "Gradido: E-Mail Überprüfung"
|
||||
#: src/cpp/model/Session.cpp:953
|
||||
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:174
|
||||
msgid "Default Email Subject"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:180
|
||||
msgid "Error from Gradido Login Server"
|
||||
msgstr "Fehler auf dem Gradido Login Server"
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:200
|
||||
msgid "Gradido: E-Mail Verification"
|
||||
msgstr "Gradido: E-Mail Überprüfung"
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:246
|
||||
msgid "Gradido: Reset Password"
|
||||
msgstr "Gradido: Passwort zurücksetzen"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:604
|
||||
msgid ""
|
||||
"Please enter a valid password with at least 8 characters, upper and lower "
|
||||
"case letters, at least one number and one special character (@$!%*?&+-_)!"
|
||||
msgstr ""
|
||||
"Bitte gebe ein gültiges Password ein mit mindestens 8 Zeichen, Groß- und "
|
||||
"Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen (@$!%*?&+-_) "
|
||||
"ein!"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:610
|
||||
msgid "Your password is to short!"
|
||||
msgstr "Dein Passwort ist zu kurz!"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:615
|
||||
msgid "Your password does not contain lowercase letters!"
|
||||
msgstr "Dein Passwort enthält keine Kleinbuchstaben!"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:620
|
||||
msgid "Your password does not contain any capital letters!"
|
||||
msgstr " Dein Passwort enthält keine Großbuchstaben!"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:625
|
||||
msgid "Your password does not contain any number!"
|
||||
msgstr "Dein Passwort enthält keine Zahlen!"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:630
|
||||
msgid "Your password does not contain special characters (@$!%*?&+-)!"
|
||||
msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
|
||||
|
||||
#~ msgid "Account"
|
||||
#~ msgstr "Konto"
|
||||
|
||||
#~ msgid "E-Mail Address not checked, do you already get one?"
|
||||
#~ msgstr ""
|
||||
#~ "E-Mail Adresse wurde noch nicht überprüft. Hast du schon in deine E-Mails "
|
||||
#~ "geschaut? Bitte schau auch in dein Spam-Verzeichnis nach."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Schreibe dir deine Passphrase auf und packe sie gut weg. Du brauchst sie "
|
||||
#~ "um deine Adresse wiederherzustellen. Wenn du sie verlierst, sind auch "
|
||||
#~ "deine Gradidos verloren."
|
||||
#~ msgstr ""
|
||||
#~ "Schreibe dir deine Passphrase auf oder drucke sie aus und bewahre sie "
|
||||
#~ "<b>in Papier-Form</b> an einem sicheren Ort auf (speichere sie nicht auf "
|
||||
#~ "deinem Rechner oder Mobilgerät)! Du brauchst deine Passphrase um dein "
|
||||
#~ "Konto wiederherzustellen, wenn du mal dein Passort vergessen haben "
|
||||
#~ "solltest. "
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
#~ "Bitcoin) um maximale Sicherheit zu erreichen."
|
||||
#~ msgstr ""
|
||||
#~ "Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
#~ "Bitcoin) um für dich die maximale Sicherheit zu gewährleisten."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Der Code stimmt nicht, bitte überprüfe ihn nochmal oder "
|
||||
|
||||
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-10 13:01+0100\n"
|
||||
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -17,415 +17,461 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:108
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:156
|
||||
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:108
|
||||
#: build/http_pages/LoginPage.cpp:196
|
||||
msgid "E-Mail or password isn't right, please try again!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:116
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid "Passwort"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:116
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid ""
|
||||
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:119
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:122
|
||||
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:119
|
||||
#: build/http_pages/LoginPage.cpp:208
|
||||
msgid "Error in saved data, the server admin will look at it."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:122
|
||||
#: build/http_pages/LoginPage.cpp:211
|
||||
msgid "Benutzer ist deaktiviert, kein Login möglich!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:156
|
||||
#: build/http_pages/LoginPage.cpp:275
|
||||
msgid "Username and password are needed!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:178
|
||||
#: model/Session.cpp:210 model/Session.cpp:217 model/Session.cpp:259
|
||||
#: model/Session.cpp:284 model/Session.cpp:383 model/Session.cpp:393
|
||||
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
|
||||
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:179
|
||||
#: build/http_pages/LoginPage.cpp:381
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:603
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:609
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:614
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:619
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:624
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:629
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:180
|
||||
#: build/http_pages/LoginPage.cpp:384
|
||||
msgid " Login "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:185
|
||||
#: build/http_pages/LoginPage.cpp:391
|
||||
msgid "You haven't any account yet? Please follow the link to create one."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:187
|
||||
#: build/http_pages/LoginPage.cpp:395
|
||||
msgid "Create New Account"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:191
|
||||
#: build/http_pages/LoginPage.cpp:403
|
||||
msgid "Passwort vergessen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:72
|
||||
#: build/http_pages/CheckEmailPage.cpp:155
|
||||
msgid "E-Mail verifizieren"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:77
|
||||
#: build/http_pages/CheckEmailPage.cpp:165
|
||||
msgid ""
|
||||
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:78
|
||||
#: build/http_pages/CheckEmailPage.cpp:170
|
||||
msgid "Zur Startseite"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:80
|
||||
#: build/http_pages/CheckEmailPage.cpp:175
|
||||
msgid "Bitte gib deinen E-Mail Verification Code ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:81
|
||||
#: model/Session.cpp:233
|
||||
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
|
||||
msgid "Email Verification Code"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:82
|
||||
#: build/http_pages/CheckEmailPage.cpp:185
|
||||
msgid "Überprüfe Code"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:85
|
||||
#: build/http_pages/CheckEmailPage.cpp:190
|
||||
msgid "Du hast bisher keinen Code erhalten?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:86
|
||||
#: build/http_pages/CheckEmailPage.cpp:193
|
||||
msgid "E-Mail erneut zuschicken (in Arbeit)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:89
|
||||
#: build/http_pages/CheckEmailPage.cpp:198
|
||||
msgid "Funktioniert dein E-Mail Verification Code nicht?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:90
|
||||
#: build/http_pages/CheckEmailPage.cpp:201
|
||||
msgid "Schicke uns eine E-Mail und wir kümmern uns darum: "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:91
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:151
|
||||
#: build/http_pages/CheckEmailPage.cpp:208
|
||||
#: build/http_pages/ResetPasswordPage.cpp:273
|
||||
msgid "E-Mail an Support schicken"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:113
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:124
|
||||
#: build/http_pages/ResetPasswordPage.cpp:174
|
||||
#: build/http_pages/ResetPasswordPage.cpp:217
|
||||
msgid "Gib bitte hier deine E-Mail Adresse an:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:116
|
||||
#: build/http_pages/ResetPasswordPage.cpp:183
|
||||
msgid "Bestätigen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:126
|
||||
#: build/http_pages/ResetPasswordPage.cpp:225
|
||||
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:131
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:203
|
||||
#: build/http_pages/ResetPasswordPage.cpp:234
|
||||
#: build/http_pages/PassphrasePage.cpp:373
|
||||
msgid "Ja"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:136
|
||||
#: build/http_pages/ResetPasswordPage.cpp:241
|
||||
msgid "Nein"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:140
|
||||
#: build/http_pages/ResetPasswordPage.cpp:247
|
||||
msgid "Absenden"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:145
|
||||
#: build/http_pages/ResetPasswordPage.cpp:255
|
||||
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:147
|
||||
#: build/http_pages/ResetPasswordPage.cpp:260
|
||||
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:149
|
||||
#: build/http_pages/ResetPasswordPage.cpp:265
|
||||
msgid ""
|
||||
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
|
||||
"Verzeichnis nach. "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:150
|
||||
#: build/http_pages/ResetPasswordPage.cpp:268
|
||||
msgid ""
|
||||
"Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten "
|
||||
"gewartet?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:26
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: model/Session.cpp:638 model/Session.cpp:650 model/Session.cpp:658
|
||||
#: build/http_pages/PassphrasePage.cpp:41
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
|
||||
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
|
||||
#: build/http_pages/PassphrasePage.cpp:42
|
||||
#: build/http_pages/PassphrasePage.cpp:451
|
||||
msgid "Neues Konto anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
|
||||
#: build/http_pages/PassphrasePage.cpp:43
|
||||
msgid "2/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
msgid ""
|
||||
"Diese Passphrase ist ungültig, bitte überprüfen oder neu "
|
||||
"generieren (lassen)."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: build/http_pages/PassphrasePage.cpp:132
|
||||
msgid "intern error please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
|
||||
#: build/http_pages/PassphrasePage.cpp:147
|
||||
msgid "3/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
|
||||
#: build/http_pages/PassphrasePage.cpp:150
|
||||
#: build/http_pages/PassphrasePage.cpp:153
|
||||
msgid "1/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
|
||||
#: build/http_pages/PassphrasePage.cpp:152
|
||||
msgid "Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:145
|
||||
#: build/http_pages/PassphrasePage.cpp:270
|
||||
msgid "Passphrase abschreiben"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:156
|
||||
#: build/http_pages/PassphrasePage.cpp:287
|
||||
msgid "Was ist eine Passphrase?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:157
|
||||
#: build/http_pages/PassphrasePage.cpp:290
|
||||
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:158
|
||||
#: build/http_pages/PassphrasePage.cpp:293
|
||||
msgid "Sie dient deiner Sicherheit."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:159
|
||||
#: build/http_pages/PassphrasePage.cpp:296
|
||||
msgid ""
|
||||
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
|
||||
"dein Passwort vergessen haben solltest."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
|
||||
#: build/http_pages/PassphrasePage.cpp:300
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:166
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:194
|
||||
#: build/http_pages/PassphrasePage.cpp:309
|
||||
#: build/http_pages/PassphrasePage.cpp:352
|
||||
msgid "Was zu tun ist:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:167
|
||||
#: build/http_pages/PassphrasePage.cpp:312
|
||||
msgid ""
|
||||
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
|
||||
"Papier!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:168
|
||||
#: build/http_pages/PassphrasePage.cpp:315
|
||||
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:169
|
||||
#: build/http_pages/PassphrasePage.cpp:318
|
||||
msgid "Bewahre sie an einem sicheren Ort auf!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:171
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:282
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:287
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:300
|
||||
#: build/http_pages/PassphrasePage.cpp:322
|
||||
#: build/http_pages/PassphrasePage.cpp:478
|
||||
#: build/http_pages/PassphrasePage.cpp:487
|
||||
#: build/http_pages/PassphrasePage.cpp:511
|
||||
msgid "Weiter"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
|
||||
#: build/http_pages/PassphrasePage.cpp:355
|
||||
msgid "Hast du dir deine Passphrase gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:196
|
||||
#: build/http_pages/PassphrasePage.cpp:358
|
||||
msgid ""
|
||||
"Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in "
|
||||
"anderer Reihenfolge."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:197
|
||||
#: build/http_pages/PassphrasePage.cpp:361
|
||||
msgid "Klicke sie an um sie einzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:198
|
||||
#: build/http_pages/PassphrasePage.cpp:364
|
||||
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:202
|
||||
#: build/http_pages/PassphrasePage.cpp:370
|
||||
msgid ""
|
||||
"Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine "
|
||||
"Passphrase gemerkt oder aufgeschrieben?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:249
|
||||
#: build/http_pages/PassphrasePage.cpp:429
|
||||
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:253
|
||||
#: build/http_pages/PassphrasePage.cpp:437
|
||||
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:254
|
||||
#: build/http_pages/PassphrasePage.cpp:440
|
||||
msgid ""
|
||||
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
|
||||
"wiederherstellen?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
|
||||
#: build/http_pages/PassphrasePage.cpp:460
|
||||
msgid "Bestehendes Konto wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:277
|
||||
#: build/http_pages/PassphrasePage.cpp:469
|
||||
msgid ""
|
||||
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
|
||||
"Passphrase ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:294
|
||||
#: build/http_pages/PassphrasePage.cpp:497
|
||||
msgid "Konto wiederherstellen / Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:296
|
||||
#: build/http_pages/PassphrasePage.cpp:501
|
||||
msgid ""
|
||||
"Um dein Konto wiederherzustellen und dir ein Neues Passwort auswählen zu "
|
||||
"können, tippe hier bitte die Wörter deiner Passphrase in der richtigen "
|
||||
"Reihenfolge ein, welche du dir aufgeschrieben hast."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:310
|
||||
#: build/http_pages/PassphrasePage.cpp:524
|
||||
msgid "Fehler"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:311
|
||||
#: build/http_pages/PassphrasePage.cpp:527
|
||||
msgid ""
|
||||
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
|
||||
"dich an den Server-Admin."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:196 model/Session.cpp:227 model/Session.cpp:935
|
||||
#: model/Session.cpp:941 model/Session.cpp:1226 model/Session.cpp:1242
|
||||
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
|
||||
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
|
||||
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
|
||||
msgid "Benutzer"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:196
|
||||
#: src/cpp/model/Session.cpp:147
|
||||
msgid "Eingeloggter Benutzer ist kein Admin"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:202 model/Session.cpp:251 model/Session.cpp:375
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
|
||||
msgid "Vorname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:202 model/Session.cpp:206 model/Session.cpp:251
|
||||
#: model/Session.cpp:255 model/Session.cpp:375 model/Session.cpp:379
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
|
||||
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
|
||||
msgid ""
|
||||
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
|
||||
"<>&;"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:206 model/Session.cpp:255 model/Session.cpp:379
|
||||
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
|
||||
msgid "Nachname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:210 model/Session.cpp:259 model/Session.cpp:383
|
||||
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
|
||||
msgid "Bitte gebe eine gültige E-Mail Adresse an."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:217 model/Session.cpp:284
|
||||
#: src/cpp/model/Session.cpp:168
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits einen Account"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:227 model/Session.cpp:233
|
||||
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
|
||||
msgid "Fehler beim speichern!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:393
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits ein Konto"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:411
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:411
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:505 model/Session.cpp:567 model/Session.cpp:1116
|
||||
#: model/Session.cpp:1125
|
||||
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
|
||||
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
|
||||
msgid "E-Mail Verification"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:505
|
||||
#: src/cpp/model/Session.cpp:350
|
||||
msgid "Du hast dein Konto bereits aktiviert!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:567
|
||||
#: src/cpp/model/Session.cpp:390
|
||||
msgid "Falscher Code für aktiven Login"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:638
|
||||
#: src/cpp/model/Session.cpp:465
|
||||
msgid "Deine Passphrase ist ungütig"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:650
|
||||
#: src/cpp/model/Session.cpp:477
|
||||
msgid "Ein Fehler trat auf, bitte versuche es erneut"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:658
|
||||
#: src/cpp/model/Session.cpp:491
|
||||
msgid "Das ist nicht die richtige Passphrase."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:935
|
||||
#: src/cpp/model/Session.cpp:645
|
||||
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:941
|
||||
#: src/cpp/model/Session.cpp:651
|
||||
msgid ""
|
||||
"Fehler beim Löschen des Accounts. Bitte logge dich erneut ein und "
|
||||
"versuche es nochmal."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1116
|
||||
#: src/cpp/model/Session.cpp:832
|
||||
msgid "Konnte kein passendes Konto finden."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1125
|
||||
#: src/cpp/model/Session.cpp:841
|
||||
msgid "Fehler beim laden des Benutzers."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1226
|
||||
#: src/cpp/model/Session.cpp:937
|
||||
msgid "Kein gültiger Benutzer, bitte logge dich erneut ein."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1242
|
||||
#: src/cpp/model/Session.cpp:953
|
||||
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:174
|
||||
msgid "Default Email Subject"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:180
|
||||
msgid "Error from Gradido Login Server"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:200
|
||||
msgid "Gradido: E-Mail Verification"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:246
|
||||
msgid "Gradido: Reset Password"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:604
|
||||
msgid ""
|
||||
"Please enter a valid password with at least 8 characters, upper and lower "
|
||||
"case letters, at least one number and one special character (@$!%*?&+-_)!"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:610
|
||||
msgid "Your password is to short!"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:615
|
||||
msgid "Your password does not contain lowercase letters!"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:620
|
||||
msgid "Your password does not contain any capital letters!"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:625
|
||||
msgid "Your password does not contain any number!"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:630
|
||||
msgid "Your password does not contain special characters (@$!%*?&+-)!"
|
||||
msgstr ""
|
||||
|
||||
@ -26,7 +26,7 @@ services:
|
||||
#########################################################
|
||||
login-server:
|
||||
build:
|
||||
dockerfile: Dockerfiles/alpine/Dockerfile.debug
|
||||
dockerfile: Dockerfiles/ubuntu/Dockerfile.debug
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
cap_add:
|
||||
@ -37,7 +37,7 @@ services:
|
||||
- ./login_server/dependencies:/code/dependencies
|
||||
- ./login_server/scripts:/code/scripts
|
||||
- ./configs/login_server:/etc/grd_login
|
||||
- login_build_3.1:/code/build
|
||||
- login_build_ubuntu_3.1:/code/build
|
||||
|
||||
|
||||
#########################################################
|
||||
@ -99,4 +99,4 @@ services:
|
||||
|
||||
volumes:
|
||||
frontend_node_modules:
|
||||
login_build_3.1:
|
||||
login_build_ubuntu_3.1:
|
||||
|
||||
@ -93,7 +93,7 @@ const loginAPI = {
|
||||
update: {
|
||||
'User.first_name': data.firstName,
|
||||
'User.last_name': data.lastName,
|
||||
'User.description': data.description,
|
||||
// 'User.description': data.description,
|
||||
},
|
||||
}
|
||||
return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload)
|
||||
|
||||
71
frontend/src/components/Inputs/InputEmail.spec.js
Normal file
71
frontend/src/components/Inputs/InputEmail.spec.js
Normal file
@ -0,0 +1,71 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
|
||||
import InputEmail from './InputEmail'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
describe('InputEmail', () => {
|
||||
let wrapper
|
||||
|
||||
const propsData = {
|
||||
name: 'input-field-name',
|
||||
label: 'input-field-label',
|
||||
placeholder: 'input-field-placeholder',
|
||||
value: '',
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(InputEmail, { localVue, propsData })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('has an input field', () => {
|
||||
expect(wrapper.find('input').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
describe('properties', () => {
|
||||
it('has the name "input-field-name"', () => {
|
||||
expect(wrapper.find('input').attributes('name')).toEqual('input-field-name')
|
||||
})
|
||||
|
||||
it('has the id "input-field-name-input-field"', () => {
|
||||
expect(wrapper.find('input').attributes('id')).toEqual('input-field-name-input-field')
|
||||
})
|
||||
|
||||
it('has the placeholder "input-field-placeholder"', () => {
|
||||
expect(wrapper.find('input').attributes('placeholder')).toEqual('input-field-placeholder')
|
||||
})
|
||||
|
||||
it('has the value ""', () => {
|
||||
expect(wrapper.vm.currentValue).toEqual('')
|
||||
})
|
||||
|
||||
it('has the label "input-field-label"', () => {
|
||||
expect(wrapper.find('label').text()).toEqual('input-field-label')
|
||||
})
|
||||
|
||||
it('has the label for "input-field-name-input-field"', () => {
|
||||
expect(wrapper.find('label').attributes('for')).toEqual('input-field-name-input-field')
|
||||
})
|
||||
})
|
||||
|
||||
describe('input value changes', () => {
|
||||
it('emits input with new value', async () => {
|
||||
await wrapper.find('input').setValue('12')
|
||||
expect(wrapper.emitted('input')).toBeTruthy()
|
||||
expect(wrapper.emitted('input')).toEqual([['12']])
|
||||
})
|
||||
})
|
||||
|
||||
describe('value property changes', () => {
|
||||
it('updates data model', async () => {
|
||||
await wrapper.setProps({ value: 'user@example.org' })
|
||||
expect(wrapper.vm.currentValue).toEqual('user@example.org')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
73
frontend/src/components/Inputs/InputEmail.vue
Normal file
73
frontend/src/components/Inputs/InputEmail.vue
Normal file
@ -0,0 +1,73 @@
|
||||
<template>
|
||||
<validation-provider
|
||||
tag="div"
|
||||
:rules="rules"
|
||||
:name="name"
|
||||
v-slot="{ errors, valid, validated, ariaInput, ariaMsg }"
|
||||
>
|
||||
<b-form-group :label="label" :label-for="labelFor">
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
v-model="currentValue"
|
||||
v-bind="ariaInput"
|
||||
:id="labelFor"
|
||||
:name="name"
|
||||
:placeholder="placeholder"
|
||||
type="email"
|
||||
:state="validated ? valid : false"
|
||||
trim
|
||||
class="email-form-input"
|
||||
></b-form-input>
|
||||
<b-form-invalid-feedback v-bind="ariaMsg">
|
||||
{{ errors[0] }}
|
||||
</b-form-invalid-feedback>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'InputEmail',
|
||||
props: {
|
||||
rules: {
|
||||
default: () => {
|
||||
return {
|
||||
required: true,
|
||||
email: true,
|
||||
}
|
||||
},
|
||||
},
|
||||
name: { type: String, default: 'Email' },
|
||||
label: { type: String, default: 'Email' },
|
||||
placeholder: { type: String, default: 'Email' },
|
||||
value: { required: true, type: String },
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentValue: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
labelFor() {
|
||||
return this.name + '-input-field'
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
currentValue() {
|
||||
this.$emit('input', this.currentValue)
|
||||
},
|
||||
value() {
|
||||
if (this.value !== this.currentValue) this.currentValue = this.value
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style>
|
||||
.email-form-input {
|
||||
border-right-style: solid !important;
|
||||
border-right-width: 1px !important;
|
||||
padding-right: 12px !important;
|
||||
border-top-right-radius: 6px !important;
|
||||
border-bottom-right-radius: 6px !important;
|
||||
}
|
||||
</style>
|
||||
98
frontend/src/components/Inputs/InputPassword.spec.js
Normal file
98
frontend/src/components/Inputs/InputPassword.spec.js
Normal file
@ -0,0 +1,98 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
|
||||
import InputPassword from './InputPassword'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
describe('InputPassword', () => {
|
||||
let wrapper
|
||||
|
||||
const propsData = {
|
||||
name: 'input-field-name',
|
||||
label: 'input-field-label',
|
||||
placeholder: 'input-field-placeholder',
|
||||
value: '',
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(InputPassword, { localVue, propsData })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('has an input field', () => {
|
||||
expect(wrapper.find('input').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
describe('properties', () => {
|
||||
it('has the name "input-field-name"', () => {
|
||||
expect(wrapper.find('input').attributes('name')).toEqual('input-field-name')
|
||||
})
|
||||
|
||||
it('has the id "input-field-name-input-field"', () => {
|
||||
expect(wrapper.find('input').attributes('id')).toEqual('input-field-name-input-field')
|
||||
})
|
||||
|
||||
it('has the placeholder "input-field-placeholder"', () => {
|
||||
expect(wrapper.find('input').attributes('placeholder')).toEqual('input-field-placeholder')
|
||||
})
|
||||
|
||||
it('has the value ""', () => {
|
||||
expect(wrapper.vm.currentValue).toEqual('')
|
||||
})
|
||||
|
||||
it('has the label "input-field-label"', () => {
|
||||
expect(wrapper.find('label').text()).toEqual('input-field-label')
|
||||
})
|
||||
|
||||
it('has the label for "input-field-name-input-field"', () => {
|
||||
expect(wrapper.find('label').attributes('for')).toEqual('input-field-name-input-field')
|
||||
})
|
||||
})
|
||||
|
||||
describe('input value changes', () => {
|
||||
it('emits input with new value', async () => {
|
||||
await wrapper.find('input').setValue('12')
|
||||
expect(wrapper.emitted('input')).toBeTruthy()
|
||||
expect(wrapper.emitted('input')).toEqual([['12']])
|
||||
})
|
||||
})
|
||||
|
||||
describe('password visibilty', () => {
|
||||
it('has type password by default', () => {
|
||||
expect(wrapper.find('input').attributes('type')).toEqual('password')
|
||||
})
|
||||
|
||||
it('changes to type text when icon is clicked', async () => {
|
||||
await wrapper.find('button').trigger('click')
|
||||
expect(wrapper.find('input').attributes('type')).toEqual('text')
|
||||
})
|
||||
|
||||
it('changes back to type password when icon is clicked twice', async () => {
|
||||
await wrapper.find('button').trigger('click')
|
||||
await wrapper.find('button').trigger('click')
|
||||
expect(wrapper.find('input').attributes('type')).toEqual('password')
|
||||
})
|
||||
})
|
||||
|
||||
describe('password visibilty icon', () => {
|
||||
it('is by default bi-eye-slash', () => {
|
||||
expect(wrapper.find('svg').classes('bi-eye-slash')).toBe(true)
|
||||
})
|
||||
|
||||
it('changes to bi-eye when clicked', async () => {
|
||||
await wrapper.find('button').trigger('click')
|
||||
expect(wrapper.find('svg').classes('bi-eye')).toBe(true)
|
||||
})
|
||||
|
||||
it('changes back to bi-eye-slash when clicked twice', async () => {
|
||||
await wrapper.find('button').trigger('click')
|
||||
await wrapper.find('button').trigger('click')
|
||||
expect(wrapper.find('svg').classes('bi-eye-slash')).toBe(true)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
81
frontend/src/components/Inputs/InputPassword.vue
Normal file
81
frontend/src/components/Inputs/InputPassword.vue
Normal file
@ -0,0 +1,81 @@
|
||||
<template>
|
||||
<validation-provider
|
||||
tag="div"
|
||||
:rules="rules"
|
||||
:name="name"
|
||||
:bails="!showAllErrors"
|
||||
:immediate="immediate"
|
||||
v-slot="{ errors, valid, validated, ariaInput, ariaMsg }"
|
||||
>
|
||||
<b-form-group :label="label" :label-for="labelFor">
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
v-model="currentValue"
|
||||
v-bind="ariaInput"
|
||||
:id="labelFor"
|
||||
:name="name"
|
||||
:placeholder="placeholder"
|
||||
:type="showPassword ? 'text' : 'password'"
|
||||
:state="validated ? valid : false"
|
||||
></b-form-input>
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="toggleShowPassword">
|
||||
<b-icon :icon="showPassword ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
<b-form-invalid-feedback v-bind="ariaMsg">
|
||||
<div v-if="showAllErrors">
|
||||
<span v-for="error in errors" :key="error">
|
||||
{{ error }}
|
||||
<br />
|
||||
</span>
|
||||
</div>
|
||||
<div v-else>
|
||||
{{ errors[0] }}
|
||||
</div>
|
||||
</b-form-invalid-feedback>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
name: 'InputPassword',
|
||||
props: {
|
||||
rules: {
|
||||
default: () => {
|
||||
return {
|
||||
required: true,
|
||||
}
|
||||
},
|
||||
},
|
||||
name: { type: String, default: 'password' },
|
||||
label: { type: String, default: 'Password' },
|
||||
placeholder: { type: String, default: 'Password' },
|
||||
value: { required: true, type: String },
|
||||
showAllErrors: { type: Boolean, default: false },
|
||||
immediate: { type: Boolean, default: false },
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentValue: '',
|
||||
showPassword: false,
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
labelFor() {
|
||||
return this.name + '-input-field'
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
toggleShowPassword() {
|
||||
this.showPassword = !this.showPassword
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
currentValue() {
|
||||
this.$emit('input', this.currentValue)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@ -0,0 +1,64 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
|
||||
import InputPasswordConfirmation from './InputPasswordConfirmation'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
// validation is tested in src/views/Pages/UserProfile/UserCard_FormUserPasswort.spec.js
|
||||
|
||||
describe('InputPasswordConfirmation', () => {
|
||||
let wrapper
|
||||
|
||||
const propsData = {
|
||||
value: {
|
||||
password: '',
|
||||
passwordRepeat: '',
|
||||
},
|
||||
}
|
||||
|
||||
const mocks = {
|
||||
$t: jest.fn((t) => t),
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(InputPasswordConfirmation, { localVue, propsData, mocks })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('has two input fields', () => {
|
||||
expect(wrapper.findAll('input')).toHaveLength(2)
|
||||
})
|
||||
|
||||
describe('input values ', () => {
|
||||
it('emits input with new value for first input field', async () => {
|
||||
await wrapper.findAll('input').at(0).setValue('1234')
|
||||
expect(wrapper.emitted('input')).toBeTruthy()
|
||||
expect(wrapper.emitted('input')).toEqual([
|
||||
[
|
||||
{
|
||||
password: '1234',
|
||||
passwordRepeat: '',
|
||||
},
|
||||
],
|
||||
])
|
||||
})
|
||||
|
||||
it('emits input with new value for second input field', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('1234')
|
||||
expect(wrapper.emitted('input')).toBeTruthy()
|
||||
expect(wrapper.emitted('input')).toEqual([
|
||||
[
|
||||
{
|
||||
password: '',
|
||||
passwordRepeat: '1234',
|
||||
},
|
||||
],
|
||||
])
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
68
frontend/src/components/Inputs/InputPasswordConfirmation.vue
Normal file
68
frontend/src/components/Inputs/InputPasswordConfirmation.vue
Normal file
@ -0,0 +1,68 @@
|
||||
<template>
|
||||
<div>
|
||||
<b-row class="mb-2">
|
||||
<b-col>
|
||||
<input-password
|
||||
:rules="{
|
||||
required: true,
|
||||
containsLowercaseCharacter: true,
|
||||
containsUppercaseCharacter: true,
|
||||
containsNumericCharacter: true,
|
||||
atLeastEightCharactera: true,
|
||||
}"
|
||||
:label="$t('form.password_new')"
|
||||
:showAllErrors="true"
|
||||
:immediate="true"
|
||||
:name="$t('form.password_new')"
|
||||
:placeholder="$t('form.password_new')"
|
||||
v-model="password"
|
||||
></input-password>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row class="mb-2">
|
||||
<b-col>
|
||||
<input-password
|
||||
:rules="{ samePassword: value.password }"
|
||||
:label="$t('form.password_new_repeat')"
|
||||
:placeholder="$t('form.password_new_repeat')"
|
||||
v-model="passwordRepeat"
|
||||
></input-password>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import InputPassword from './InputPassword'
|
||||
|
||||
export default {
|
||||
name: 'InputPasswordConfirm',
|
||||
components: {
|
||||
InputPassword,
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
password: '',
|
||||
passwordRepeat: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
passwordObject() {
|
||||
return { password: this.password, passwordRepeat: this.passwordRepeat }
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
password() {
|
||||
this.$emit('input', this.passwordObject)
|
||||
},
|
||||
passwordRepeat() {
|
||||
this.$emit('input', this.passwordObject)
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
@ -6,7 +6,7 @@
|
||||
<b-icon icon="chevron-left" variant="primary"></b-icon>
|
||||
</b-button>
|
||||
</b-col>
|
||||
<b-col cols="2">
|
||||
<b-col cols="3">
|
||||
<p class="text-center pt-2">{{ currentPage }} / {{ totalPages }}</p>
|
||||
</b-col>
|
||||
<b-col>
|
||||
|
||||
@ -84,6 +84,7 @@
|
||||
},
|
||||
"error": {
|
||||
"error":"Fehler",
|
||||
"no-account": "Leider konnten wir keinen Account finden mit diesen Daten!",
|
||||
"change-password": "Fehler beim Ändern des Passworts"
|
||||
},
|
||||
"transaction":{
|
||||
@ -158,6 +159,7 @@
|
||||
},
|
||||
"reset-password": {
|
||||
"title": "Passwort zurücksetzen",
|
||||
"text": "Jetzt kannst du ein neues Passwort speichern, mit dem du dich zukünftig in der Gradido-App anmelden kannst."
|
||||
"text": "Jetzt kannst du ein neues Passwort speichern, mit dem du dich zukünftig in der Gradido-App anmelden kannst.",
|
||||
"not-authenticated": "Leider konnten wir dich nicht authentifizieren. Bitte wende dich an den Support."
|
||||
}
|
||||
}
|
||||
|
||||
@ -84,6 +84,7 @@
|
||||
},
|
||||
"error": {
|
||||
"error":"Error",
|
||||
"no-account": "Unfortunately we could not find an account to the given data!",
|
||||
"change-password": "Error while changing password"
|
||||
},
|
||||
"transaction":{
|
||||
@ -159,6 +160,7 @@
|
||||
},
|
||||
"reset-password": {
|
||||
"title": "Reset Password",
|
||||
"text": "Now you can save a new password to login to the Gradido-App in the future."
|
||||
"text": "Now you can save a new password to login to the Gradido-App in the future.",
|
||||
"not-authenticated": "Unfortunately we could not authenticate you. Please contact the support."
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,22 +2,18 @@ import Vue from 'vue'
|
||||
import DashboardPlugin from './plugins/dashboard-plugin'
|
||||
import App from './App.vue'
|
||||
import i18n from './i18n.js'
|
||||
import { configure, extend } from 'vee-validate'
|
||||
// eslint-disable-next-line camelcase
|
||||
import { required, email, min, max, is_not } from 'vee-validate/dist/rules'
|
||||
import { loadAllRules } from './validation-rules'
|
||||
|
||||
// store
|
||||
import { store } from './store/store'
|
||||
|
||||
import loginAPI from './apis/loginAPI'
|
||||
|
||||
// router setup
|
||||
import router from './routes/router'
|
||||
|
||||
// plugin setup
|
||||
Vue.use(DashboardPlugin)
|
||||
Vue.config.productionTip = false
|
||||
|
||||
loadAllRules(i18n)
|
||||
|
||||
router.beforeEach((to, from, next) => {
|
||||
if (to.meta.requiresAuth && !store.state.sessionId) {
|
||||
next({ path: '/login' })
|
||||
@ -26,68 +22,6 @@ router.beforeEach((to, from, next) => {
|
||||
}
|
||||
})
|
||||
|
||||
configure({
|
||||
defaultMessage: (field, values) => {
|
||||
values._field_ = i18n.t(`fields.${field}`)
|
||||
return i18n.t(`validations.messages.${values._rule_}`, values)
|
||||
},
|
||||
})
|
||||
|
||||
extend('email', {
|
||||
...email,
|
||||
message: (_, values) => i18n.t('validations.messages.email', values),
|
||||
})
|
||||
|
||||
extend('required', {
|
||||
...required,
|
||||
message: (_, values) => i18n.t('validations.messages.required', values),
|
||||
})
|
||||
|
||||
extend('min', {
|
||||
...min,
|
||||
message: (_, values) => i18n.t('validations.messages.min', values),
|
||||
})
|
||||
|
||||
extend('max', {
|
||||
...max,
|
||||
message: (_, values) => i18n.t('validations.messages.max', values),
|
||||
})
|
||||
|
||||
extend('gddSendAmount', {
|
||||
validate(value, { min, max }) {
|
||||
value = value.replace(',', '.')
|
||||
return value.match(/^[0-9]+(\.[0-9]{0,2})?$/) && Number(value) >= min && Number(value) <= max
|
||||
},
|
||||
params: ['min', 'max'],
|
||||
message: (_, values) => {
|
||||
values.min = i18n.n(values.min, 'ungroupedDecimal')
|
||||
values.max = i18n.n(values.max, 'ungroupedDecimal')
|
||||
return i18n.t('form.validation.gddSendAmount', values)
|
||||
},
|
||||
})
|
||||
|
||||
extend('gddUsernameUnique', {
|
||||
async validate(value) {
|
||||
const result = await loginAPI.checkUsername(value)
|
||||
return result.result.data.state === 'success'
|
||||
},
|
||||
message: (_, values) => i18n.t('form.validation.usernmae-unique', values),
|
||||
})
|
||||
|
||||
extend('gddUsernameRgex', {
|
||||
validate(value) {
|
||||
return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/)
|
||||
},
|
||||
message: (_, values) => i18n.t('form.validation.usernmae-regex', values),
|
||||
})
|
||||
|
||||
// eslint-disable-next-line camelcase
|
||||
extend('is_not', {
|
||||
// eslint-disable-next-line camelcase
|
||||
...is_not,
|
||||
message: (_, values) => i18n.t('form.validation.is-not', values),
|
||||
})
|
||||
|
||||
/* eslint-disable no-new */
|
||||
new Vue({
|
||||
el: '#app',
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
import '@/polyfills'
|
||||
import { configure, extend } from 'vee-validate'
|
||||
import GlobalComponents from './globalComponents'
|
||||
import GlobalDirectives from './globalDirectives'
|
||||
import SideBar from '@/components/SidebarPlugin'
|
||||
@ -14,8 +13,6 @@ import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
|
||||
// asset imports
|
||||
import '@/assets/scss/argon.scss'
|
||||
import '@/assets/vendor/nucleo/css/nucleo.css'
|
||||
import * as rules from 'vee-validate/dist/rules'
|
||||
import { messages } from 'vee-validate/dist/locale/en.json'
|
||||
|
||||
import VueQrcodeReader from 'vue-qrcode-reader'
|
||||
import VueQrcode from 'vue-qrcode'
|
||||
@ -28,13 +25,6 @@ import VueMoment from 'vue-moment'
|
||||
import Loading from 'vue-loading-overlay'
|
||||
import 'vue-loading-overlay/dist/vue-loading.css'
|
||||
|
||||
Object.keys(rules).forEach((rule) => {
|
||||
extend(rule, {
|
||||
...rules[rule], // copies rule configuration
|
||||
message: messages[rule], // assign message
|
||||
})
|
||||
})
|
||||
|
||||
export default {
|
||||
install(Vue) {
|
||||
Vue.use(GlobalComponents)
|
||||
@ -49,12 +39,5 @@ export default {
|
||||
Vue.use(VueQrcode)
|
||||
Vue.use(FlatPickr)
|
||||
Vue.use(Loading)
|
||||
configure({
|
||||
classes: {
|
||||
valid: 'is-valid',
|
||||
invalid: 'is-invalid',
|
||||
dirty: ['is-dirty', 'is-dirty'], // multiple classes per flag!
|
||||
},
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { mutations, actions } from './store'
|
||||
|
||||
const { language, email, sessionId } = mutations
|
||||
const { language, email, sessionId, username, firstName, lastName, description } = mutations
|
||||
const { login, logout } = actions
|
||||
|
||||
describe('Vuex store', () => {
|
||||
@ -28,51 +28,102 @@ describe('Vuex store', () => {
|
||||
expect(state.sessionId).toEqual('1234')
|
||||
})
|
||||
})
|
||||
|
||||
describe('username', () => {
|
||||
it('sets the state of username', () => {
|
||||
const state = { username: null }
|
||||
username(state, 'user')
|
||||
expect(state.username).toEqual('user')
|
||||
})
|
||||
})
|
||||
|
||||
describe('firstName', () => {
|
||||
it('sets the state of firstName', () => {
|
||||
const state = { firstName: null }
|
||||
firstName(state, 'Peter')
|
||||
expect(state.firstName).toEqual('Peter')
|
||||
})
|
||||
})
|
||||
|
||||
describe('lastName', () => {
|
||||
it('sets the state of lastName', () => {
|
||||
const state = { lastName: null }
|
||||
lastName(state, 'Lustig')
|
||||
expect(state.lastName).toEqual('Lustig')
|
||||
})
|
||||
})
|
||||
|
||||
describe('description', () => {
|
||||
it('sets the state of description', () => {
|
||||
const state = { description: null }
|
||||
description(state, 'Nickelbrille')
|
||||
expect(state.description).toEqual('Nickelbrille')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('actions', () => {
|
||||
describe('login', () => {
|
||||
const commit = jest.fn()
|
||||
const state = {}
|
||||
const commitedData = {
|
||||
sessionId: 1234,
|
||||
user: {
|
||||
email: 'someone@there.is',
|
||||
language: 'en',
|
||||
username: 'user',
|
||||
first_name: 'Peter',
|
||||
last_name: 'Lustig',
|
||||
description: 'Nickelbrille',
|
||||
},
|
||||
}
|
||||
|
||||
it('calls three commits', () => {
|
||||
login(
|
||||
{ commit, state },
|
||||
{ sessionId: 1234, user: { email: 'someone@there.is', language: 'en' } },
|
||||
)
|
||||
it('calls seven commits', () => {
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenCalledTimes(7)
|
||||
})
|
||||
|
||||
it('commits sessionId', () => {
|
||||
login(
|
||||
{ commit, state },
|
||||
{ sessionId: 1234, user: { email: 'someone@there.is', language: 'en' } },
|
||||
)
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(1, 'sessionId', 1234)
|
||||
})
|
||||
|
||||
it('commits email', () => {
|
||||
login(
|
||||
{ commit, state },
|
||||
{ sessionId: 1234, user: { email: 'someone@there.is', language: 'en' } },
|
||||
)
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(2, 'email', 'someone@there.is')
|
||||
})
|
||||
|
||||
it('commits language', () => {
|
||||
login(
|
||||
{ commit, state },
|
||||
{ sessionId: 1234, user: { email: 'someone@there.is', language: 'en' } },
|
||||
)
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(3, 'language', 'en')
|
||||
})
|
||||
|
||||
it('commits username', () => {
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(4, 'username', 'user')
|
||||
})
|
||||
|
||||
it('commits firstName', () => {
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(5, 'firstName', 'Peter')
|
||||
})
|
||||
|
||||
it('commits lastName', () => {
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(6, 'lastName', 'Lustig')
|
||||
})
|
||||
|
||||
it('commits description', () => {
|
||||
login({ commit, state }, commitedData)
|
||||
expect(commit).toHaveBeenNthCalledWith(7, 'description', 'Nickelbrille')
|
||||
})
|
||||
})
|
||||
|
||||
describe('logout', () => {
|
||||
const commit = jest.fn()
|
||||
const state = {}
|
||||
|
||||
it('calls two commits', () => {
|
||||
it('calls six commits', () => {
|
||||
logout({ commit, state })
|
||||
expect(commit).toHaveBeenCalledTimes(6)
|
||||
})
|
||||
@ -87,11 +138,36 @@ describe('Vuex store', () => {
|
||||
expect(commit).toHaveBeenNthCalledWith(2, 'email', null)
|
||||
})
|
||||
|
||||
// how can I get this working?
|
||||
it.skip('calls sessionStorage.clear()', () => {
|
||||
it('commits username', () => {
|
||||
logout({ commit, state })
|
||||
const spy = jest.spyOn(sessionStorage, 'clear')
|
||||
expect(spy).toHaveBeenCalledTimes(1)
|
||||
expect(commit).toHaveBeenNthCalledWith(3, 'username', '')
|
||||
})
|
||||
|
||||
it('commits firstName', () => {
|
||||
logout({ commit, state })
|
||||
expect(commit).toHaveBeenNthCalledWith(4, 'firstName', '')
|
||||
})
|
||||
|
||||
it('commits lastName', () => {
|
||||
logout({ commit, state })
|
||||
expect(commit).toHaveBeenNthCalledWith(5, 'lastName', '')
|
||||
})
|
||||
|
||||
it('commits description', () => {
|
||||
logout({ commit, state })
|
||||
expect(commit).toHaveBeenNthCalledWith(6, 'description', '')
|
||||
})
|
||||
|
||||
// how to get this working?
|
||||
it.skip('calls sessionStorage.clear()', () => {
|
||||
const clearStorageMock = jest.fn()
|
||||
global.sessionStorage = jest.fn(() => {
|
||||
return {
|
||||
clear: clearStorageMock,
|
||||
}
|
||||
})
|
||||
logout({ commit, state })
|
||||
expect(clearStorageMock).toBeCalled()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
110
frontend/src/validation-rules.js
Normal file
110
frontend/src/validation-rules.js
Normal file
@ -0,0 +1,110 @@
|
||||
import { configure, extend } from 'vee-validate'
|
||||
// eslint-disable-next-line camelcase
|
||||
import { required, email, min, max, is_not } from 'vee-validate/dist/rules'
|
||||
import loginAPI from './apis/loginAPI'
|
||||
|
||||
export const loadAllRules = (i18nCallback) => {
|
||||
configure({
|
||||
defaultMessage: (field, values) => {
|
||||
values._field_ = i18nCallback.t(`fields.${field}`)
|
||||
return i18nCallback.t(`validations.messages.${values._rule_}`, values)
|
||||
},
|
||||
classes: {
|
||||
valid: 'is-valid',
|
||||
invalid: 'is-invalid',
|
||||
dirty: ['is-dirty', 'is-dirty'], // multiple classes per flag!
|
||||
},
|
||||
})
|
||||
|
||||
extend('email', {
|
||||
...email,
|
||||
message: (_, values) => i18nCallback.t('validations.messages.email', values),
|
||||
})
|
||||
|
||||
extend('required', {
|
||||
...required,
|
||||
message: (_, values) => i18nCallback.t('validations.messages.required', values),
|
||||
})
|
||||
|
||||
extend('min', {
|
||||
...min,
|
||||
message: (_, values) => i18nCallback.t('validations.messages.min', values),
|
||||
})
|
||||
|
||||
extend('max', {
|
||||
...max,
|
||||
message: (_, values) => i18nCallback.t('validations.messages.max', values),
|
||||
})
|
||||
|
||||
extend('gddSendAmount', {
|
||||
validate(value, { min, max }) {
|
||||
value = value.replace(',', '.')
|
||||
return value.match(/^[0-9]+(\.[0-9]{0,2})?$/) && Number(value) >= min && Number(value) <= max
|
||||
},
|
||||
params: ['min', 'max'],
|
||||
message: (_, values) => {
|
||||
values.min = i18nCallback.n(values.min, 'ungroupedDecimal')
|
||||
values.max = i18nCallback.n(values.max, 'ungroupedDecimal')
|
||||
return i18nCallback.t('form.validation.gddSendAmount', values)
|
||||
},
|
||||
})
|
||||
|
||||
extend('gddUsernameUnique', {
|
||||
async validate(value) {
|
||||
const result = await loginAPI.checkUsername(value)
|
||||
return result.result.data.state === 'success'
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('form.validation.usernmae-unique', values),
|
||||
})
|
||||
|
||||
extend('gddUsernameRgex', {
|
||||
validate(value) {
|
||||
return !!value.match(/^[a-zA-Z][-_a-zA-Z0-9]{2,}$/)
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('form.validation.usernmae-regex', values),
|
||||
})
|
||||
|
||||
// eslint-disable-next-line camelcase
|
||||
extend('is_not', {
|
||||
// eslint-disable-next-line camelcase
|
||||
...is_not,
|
||||
message: (_, values) => i18nCallback.t('form.validation.is-not', values),
|
||||
})
|
||||
|
||||
// Password validation
|
||||
|
||||
extend('containsLowercaseCharacter', {
|
||||
validate(value) {
|
||||
return !!value.match(/[a-z]+/)
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('site.signup.lowercase', values),
|
||||
})
|
||||
|
||||
extend('containsUppercaseCharacter', {
|
||||
validate(value) {
|
||||
return !!value.match(/[A-Z]+/)
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('site.signup.uppercase', values),
|
||||
})
|
||||
|
||||
extend('containsNumericCharacter', {
|
||||
validate(value) {
|
||||
return !!value.match(/[0-9]+/)
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('site.signup.one_number', values),
|
||||
})
|
||||
|
||||
extend('atLeastEightCharactera', {
|
||||
validate(value) {
|
||||
return !!value.match(/.{8,}/)
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('site.signup.minimum', values),
|
||||
})
|
||||
|
||||
extend('samePassword', {
|
||||
validate(value, [pwd]) {
|
||||
return value === pwd
|
||||
},
|
||||
message: (_, values) => i18nCallback.t('site.signup.dont_match', values),
|
||||
})
|
||||
}
|
||||
@ -1,34 +1,127 @@
|
||||
import { shallowMount } from '@vue/test-utils'
|
||||
import { mount } from '@vue/test-utils'
|
||||
import AccountOverview from './AccountOverview'
|
||||
import communityAPI from '../../apis/communityAPI.js'
|
||||
|
||||
jest.mock('../../apis/communityAPI.js')
|
||||
|
||||
const sendMock = jest.fn()
|
||||
sendMock.mockReturnValue({ success: true })
|
||||
|
||||
communityAPI.send = sendMock
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
describe('AccountOverview', () => {
|
||||
let wrapper
|
||||
|
||||
const propsData = {
|
||||
balance: 123.45,
|
||||
transactionCount: 1,
|
||||
}
|
||||
|
||||
const mocks = {
|
||||
$t: jest.fn((t) => t),
|
||||
$store: {
|
||||
state: {
|
||||
sessionId: 1,
|
||||
},
|
||||
},
|
||||
$n: jest.fn((n) => String(n)),
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return shallowMount(AccountOverview, { localVue, mocks })
|
||||
return mount(AccountOverview, { localVue, mocks, propsData })
|
||||
}
|
||||
|
||||
describe('shallow Mount', () => {
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('has a status line', () => {
|
||||
expect(wrapper.find('gdd-status-stub').exists()).toBeTruthy()
|
||||
expect(wrapper.find('div.gdd-status').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has a send field', () => {
|
||||
expect(wrapper.find('gdd-send-stub').exists()).toBeTruthy()
|
||||
expect(wrapper.find('div.gdd-send').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has a transactions table', () => {
|
||||
expect(wrapper.find('gdd-transaction-list-stub').exists()).toBeTruthy()
|
||||
expect(wrapper.find('div.gdd-transaction-list').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
describe('transaction form', () => {
|
||||
it('steps forward in the dialog', async () => {
|
||||
await wrapper.findComponent({ name: 'TransactionForm' }).vm.$emit('set-transaction', {
|
||||
email: 'user@example.org',
|
||||
amount: 23.45,
|
||||
memo: 'Make the best of it!',
|
||||
})
|
||||
expect(wrapper.findComponent({ name: 'TransactionConfirmation' }).exists()).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('confirm transaction', () => {
|
||||
beforeEach(() => {
|
||||
wrapper.setData({
|
||||
currentTransactionStep: 1,
|
||||
transactionData: {
|
||||
email: 'user@example.org',
|
||||
amount: 23.45,
|
||||
memo: 'Make the best of it!',
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('resets the transaction process when on-reset is emitted', async () => {
|
||||
await wrapper.findComponent({ name: 'TransactionConfirmation' }).vm.$emit('on-reset')
|
||||
expect(wrapper.findComponent({ name: 'TransactionForm' }).exists()).toBeTruthy()
|
||||
expect(wrapper.vm.transactionData).toEqual({
|
||||
email: '',
|
||||
amount: 0,
|
||||
memo: '',
|
||||
})
|
||||
})
|
||||
|
||||
describe('transaction is confirmed and server response is success', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
await wrapper
|
||||
.findComponent({ name: 'TransactionConfirmation' })
|
||||
.vm.$emit('send-transaction')
|
||||
})
|
||||
|
||||
it('calls the API when send-transaction is emitted', async () => {
|
||||
expect(sendMock).toBeCalledWith(1, {
|
||||
email: 'user@example.org',
|
||||
amount: 23.45,
|
||||
memo: 'Make the best of it!',
|
||||
})
|
||||
})
|
||||
|
||||
it('emits update-balance', () => {
|
||||
expect(wrapper.emitted('update-balance')).toBeTruthy()
|
||||
expect(wrapper.emitted('update-balance')).toEqual([[23.45]])
|
||||
})
|
||||
|
||||
it('shows the succes page', () => {
|
||||
expect(wrapper.find('div.card-body').text()).toContain('form.send_transaction_success')
|
||||
})
|
||||
})
|
||||
|
||||
describe('transaction is confirmed and server response is error', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
sendMock.mockReturnValue({ success: false })
|
||||
await wrapper
|
||||
.findComponent({ name: 'TransactionConfirmation' })
|
||||
.vm.$emit('send-transaction')
|
||||
})
|
||||
|
||||
it('shows the error page', () => {
|
||||
expect(wrapper.find('div.card-body').text()).toContain('form.send_transaction_error')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -69,7 +69,7 @@ export default {
|
||||
data() {
|
||||
return {
|
||||
timestamp: Date.now(),
|
||||
transactionData: EMPTY_TRANSACTION_DATA,
|
||||
transactionData: { ...EMPTY_TRANSACTION_DATA },
|
||||
error: false,
|
||||
currentTransactionStep: 0,
|
||||
loading: false,
|
||||
@ -94,7 +94,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
setTransaction(data) {
|
||||
this.transactionData = data
|
||||
this.transactionData = { ...data }
|
||||
this.currentTransactionStep = 1
|
||||
},
|
||||
async sendTransaction() {
|
||||
@ -110,7 +110,7 @@ export default {
|
||||
this.loading = false
|
||||
},
|
||||
onReset() {
|
||||
this.transactionData = EMPTY_TRANSACTION_DATA
|
||||
this.transactionData = { ...EMPTY_TRANSACTION_DATA }
|
||||
this.currentTransactionStep = 0
|
||||
},
|
||||
updateTransactions(pagination) {
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import TransactionForm from './TransactionForm'
|
||||
import flushPromises from 'flush-promises'
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
@ -19,8 +20,12 @@ describe('GddSend', () => {
|
||||
},
|
||||
}
|
||||
|
||||
const propsData = {
|
||||
balance: 100.0,
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(TransactionForm, { localVue, mocks })
|
||||
return mount(TransactionForm, { localVue, mocks, propsData })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
@ -53,6 +58,18 @@ describe('GddSend', () => {
|
||||
'E-Mail',
|
||||
)
|
||||
})
|
||||
|
||||
it('flushes an error message when no valid email is given', async () => {
|
||||
await wrapper.find('#input-group-1').find('input').setValue('a')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').text()).toBe('validations.messages.email')
|
||||
})
|
||||
|
||||
it('trims the email after blur', async () => {
|
||||
await wrapper.find('#input-group-1').find('input').setValue(' valid@email.com ')
|
||||
await flushPromises()
|
||||
expect(wrapper.vm.form.email).toBe('valid@email.com')
|
||||
})
|
||||
})
|
||||
|
||||
describe('ammount field', () => {
|
||||
@ -73,6 +90,24 @@ describe('GddSend', () => {
|
||||
'0.01',
|
||||
)
|
||||
})
|
||||
|
||||
it('flushes an error message when no valid amount is given', async () => {
|
||||
await wrapper.find('#input-group-2').find('input').setValue('a')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').text()).toBe('form.validation.gddSendAmount')
|
||||
})
|
||||
|
||||
it('flushes an error message when amount is too high', async () => {
|
||||
await wrapper.find('#input-group-2').find('input').setValue('123.34')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').text()).toBe('form.validation.gddSendAmount')
|
||||
})
|
||||
|
||||
it('flushes no errors when amount is valid', async () => {
|
||||
await wrapper.find('#input-group-2').find('input').setValue('87.34')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').exists()).toBeFalsy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('message text box', () => {
|
||||
@ -89,6 +124,18 @@ describe('GddSend', () => {
|
||||
it('has a label form.memo', () => {
|
||||
expect(wrapper.find('label.input-3').text()).toBe('form.memo')
|
||||
})
|
||||
|
||||
it('flushes an error message when memo is less than 5 characters', async () => {
|
||||
await wrapper.find('#input-group-3').find('textarea').setValue('a')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').text()).toBe('validations.messages.min')
|
||||
})
|
||||
|
||||
it('flushes no error message when memo is valid', async () => {
|
||||
await wrapper.find('#input-group-3').find('textarea').setValue('Long enough')
|
||||
await flushPromises()
|
||||
expect(wrapper.find('span.errors').exists()).toBeFalsy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('cancel button', () => {
|
||||
@ -100,11 +147,42 @@ describe('GddSend', () => {
|
||||
expect(wrapper.find('button[type="reset"]').text()).toBe('form.reset')
|
||||
})
|
||||
|
||||
it.skip('clears the email field on click', async () => {
|
||||
wrapper.find('#input-group-1').find('input').setValue('someone@watches.tv')
|
||||
wrapper.find('button[type="reset"]').trigger('click')
|
||||
await wrapper.vm.$nextTick()
|
||||
expect(wrapper.vm.form.email).toBeNull()
|
||||
it('clears all fields on click', async () => {
|
||||
await wrapper.find('#input-group-1').find('input').setValue('someone@watches.tv')
|
||||
await wrapper.find('#input-group-2').find('input').setValue('87.23')
|
||||
await wrapper.find('#input-group-3').find('textarea').setValue('Long enugh')
|
||||
await flushPromises()
|
||||
expect(wrapper.vm.form.email).toBe('someone@watches.tv')
|
||||
expect(wrapper.vm.form.amount).toBe('87.23')
|
||||
expect(wrapper.vm.form.memo).toBe('Long enugh')
|
||||
await wrapper.find('button[type="reset"]').trigger('click')
|
||||
await flushPromises()
|
||||
expect(wrapper.vm.form.email).toBe('')
|
||||
expect(wrapper.vm.form.amount).toBe('')
|
||||
expect(wrapper.vm.form.memo).toBe('')
|
||||
})
|
||||
})
|
||||
|
||||
describe('submit', () => {
|
||||
beforeEach(async () => {
|
||||
await wrapper.find('#input-group-1').find('input').setValue('someone@watches.tv')
|
||||
await wrapper.find('#input-group-2').find('input').setValue('87.23')
|
||||
await wrapper.find('#input-group-3').find('textarea').setValue('Long enugh')
|
||||
await wrapper.find('form').trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('emits set-transaction', async () => {
|
||||
expect(wrapper.emitted('set-transaction')).toBeTruthy()
|
||||
expect(wrapper.emitted('set-transaction')).toEqual([
|
||||
[
|
||||
{
|
||||
email: 'someone@watches.tv',
|
||||
amount: 87.23,
|
||||
memo: 'Long enugh',
|
||||
},
|
||||
],
|
||||
])
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -168,7 +168,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
onSubmit() {
|
||||
this.normalizeAmount()
|
||||
this.normalizeAmount(true)
|
||||
this.$emit('set-transaction', {
|
||||
email: this.form.email,
|
||||
amount: this.form.amountValue,
|
||||
@ -181,10 +181,11 @@ export default {
|
||||
this.form.amount = ''
|
||||
this.form.memo = ''
|
||||
},
|
||||
setTransaction(data) {
|
||||
this.form.email = data.email
|
||||
this.form.amount = data.amount
|
||||
},
|
||||
/*
|
||||
setTransaction(data) {
|
||||
this.form.email = data.email
|
||||
this.form.amount = data.amount
|
||||
}, */
|
||||
normalizeAmount(isValid) {
|
||||
this.amountFocused = false
|
||||
if (!isValid) return
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div>
|
||||
<div class="gdd-status">
|
||||
<b-row>
|
||||
<b-col class="p-0">
|
||||
<b-card class="p-0" style="background-color: #ebebeba3 !important">
|
||||
|
||||
@ -168,10 +168,12 @@ export default {
|
||||
showNext() {
|
||||
this.currentPage++
|
||||
this.updateTransactions()
|
||||
window.scrollTo(0, 0)
|
||||
},
|
||||
showPrevious() {
|
||||
this.currentPage--
|
||||
this.updateTransactions()
|
||||
window.scrollTo(0, 0)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@ -83,9 +83,7 @@ describe('ForgotPassword', () => {
|
||||
})
|
||||
|
||||
it('displays an error', () => {
|
||||
expect(form.find('#reset-pwd--live-feedback').text()).toEqual(
|
||||
'The Email field must be a valid email',
|
||||
)
|
||||
expect(form.find('div.invalid-feedback').text()).toEqual('validations.messages.email')
|
||||
})
|
||||
|
||||
it('does not call the API', () => {
|
||||
@ -96,8 +94,7 @@ describe('ForgotPassword', () => {
|
||||
describe('valid Email', () => {
|
||||
beforeEach(async () => {
|
||||
await form.find('input').setValue('user@example.org')
|
||||
form.trigger('submit')
|
||||
await wrapper.vm.$nextTick()
|
||||
await form.trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
|
||||
@ -19,27 +19,7 @@
|
||||
<b-card-body class="p-4">
|
||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
||||
<validation-provider
|
||||
name="Email"
|
||||
:rules="{ required: true, email: true }"
|
||||
v-slot="validationContext"
|
||||
>
|
||||
<b-form-group class="mb-3" label="Email" label-for="input-reset-pwd">
|
||||
<b-form-input
|
||||
id="input-reset-pwd"
|
||||
name="input-reset-pwd"
|
||||
v-model="form.email"
|
||||
placeholder="Email"
|
||||
:state="getValidationState(validationContext)"
|
||||
aria-describedby="reset-pwd--live-feedback"
|
||||
></b-form-input>
|
||||
|
||||
<b-form-invalid-feedback id="reset-pwd--live-feedback">
|
||||
{{ validationContext.errors[0] }}
|
||||
</b-form-invalid-feedback>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
|
||||
<input-email v-model="form.email"></input-email>
|
||||
<div class="text-center">
|
||||
<b-button type="submit" variant="primary">
|
||||
{{ $t('site.password.reset_now') }}
|
||||
@ -59,9 +39,13 @@
|
||||
</template>
|
||||
<script>
|
||||
import loginAPI from '../../apis/loginAPI.js'
|
||||
import InputEmail from '../../components/Inputs/InputEmail'
|
||||
|
||||
export default {
|
||||
name: 'password',
|
||||
components: {
|
||||
InputEmail,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
disable: 'disabled',
|
||||
@ -71,9 +55,6 @@ export default {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getValidationState({ dirty, validated, valid = null }) {
|
||||
return dirty || validated ? valid : null
|
||||
},
|
||||
async onSubmit() {
|
||||
await loginAPI.sendEmail(this.form.email)
|
||||
// always give success to avoid email spying
|
||||
|
||||
@ -1,10 +1,37 @@
|
||||
import { mount, RouterLinkStub } from '@vue/test-utils'
|
||||
import flushPromises from 'flush-promises'
|
||||
|
||||
import loginAPI from '../../apis/loginAPI'
|
||||
import Login from './Login'
|
||||
|
||||
jest.mock('../../apis/loginAPI')
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
const mockLoginCall = jest.fn()
|
||||
mockLoginCall.mockReturnValue({
|
||||
success: true,
|
||||
result: {
|
||||
data: {
|
||||
session_id: 1,
|
||||
user: {
|
||||
name: 'Peter Lustig',
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
loginAPI.login = mockLoginCall
|
||||
|
||||
const toastErrorMock = jest.fn()
|
||||
const mockStoreDispach = jest.fn()
|
||||
const mockRouterPush = jest.fn()
|
||||
const spinnerHideMock = jest.fn()
|
||||
const spinnerMock = jest.fn(() => {
|
||||
return {
|
||||
hide: spinnerHideMock,
|
||||
}
|
||||
})
|
||||
|
||||
describe('Login', () => {
|
||||
let wrapper
|
||||
|
||||
@ -13,6 +40,18 @@ describe('Login', () => {
|
||||
locale: 'en',
|
||||
},
|
||||
$t: jest.fn((t) => t),
|
||||
$store: {
|
||||
dispatch: mockStoreDispach,
|
||||
},
|
||||
$loading: {
|
||||
show: spinnerMock,
|
||||
},
|
||||
$router: {
|
||||
push: mockRouterPush,
|
||||
},
|
||||
$toast: {
|
||||
error: toastErrorMock,
|
||||
},
|
||||
}
|
||||
|
||||
const stubs = {
|
||||
@ -76,16 +115,76 @@ describe('Login', () => {
|
||||
it('has a Submit button', () => {
|
||||
expect(wrapper.find('button[type="submit"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('shows a warning when no valid Email is entered', async () => {
|
||||
wrapper.find('input[placeholder="Email"]').setValue('no_valid@Email')
|
||||
await flushPromises()
|
||||
await expect(wrapper.find('.invalid-feedback').text()).toEqual(
|
||||
'The Email field must be a valid email',
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
// to do: test submit button
|
||||
describe('submit', () => {
|
||||
describe('no data', () => {
|
||||
it('displays a message that Email is required', async () => {
|
||||
await wrapper.find('form').trigger('submit')
|
||||
await flushPromises()
|
||||
expect(wrapper.findAll('div.invalid-feedback').at(0).text()).toBe(
|
||||
'validations.messages.required',
|
||||
)
|
||||
})
|
||||
|
||||
it('displays a message that password is required', async () => {
|
||||
await wrapper.find('form').trigger('submit')
|
||||
await flushPromises()
|
||||
expect(wrapper.findAll('div.invalid-feedback').at(1).text()).toBe(
|
||||
'validations.messages.required',
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
describe('valid data', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
await wrapper.find('input[placeholder="Email"]').setValue('user@example.org')
|
||||
await wrapper.find('input[placeholder="form.password"]').setValue('1234')
|
||||
await flushPromises()
|
||||
await wrapper.find('form').trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('calls the API with the given data', () => {
|
||||
expect(mockLoginCall).toBeCalledWith('user@example.org', '1234')
|
||||
})
|
||||
|
||||
it('creates a spinner', () => {
|
||||
expect(spinnerMock).toBeCalled()
|
||||
})
|
||||
|
||||
describe('login success', () => {
|
||||
it('dispatches server response to store', () => {
|
||||
expect(mockStoreDispach).toBeCalledWith('login', {
|
||||
sessionId: 1,
|
||||
user: { name: 'Peter Lustig' },
|
||||
})
|
||||
})
|
||||
|
||||
it('redirects to overview page', () => {
|
||||
expect(mockRouterPush).toBeCalledWith('/overview')
|
||||
})
|
||||
|
||||
it('hides the spinner', () => {
|
||||
expect(spinnerHideMock).toBeCalled()
|
||||
})
|
||||
})
|
||||
|
||||
describe('login fails', () => {
|
||||
beforeEach(() => {
|
||||
mockLoginCall.mockReturnValue({ success: false })
|
||||
})
|
||||
|
||||
it('hides the spinner', () => {
|
||||
expect(spinnerHideMock).toBeCalled()
|
||||
})
|
||||
|
||||
it('toasts an error message', () => {
|
||||
expect(toastErrorMock).toBeCalledWith('error.no-account')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -13,7 +13,6 @@
|
||||
</div>
|
||||
</b-container>
|
||||
</div>
|
||||
<!-- Page content -->
|
||||
<b-container class="mt--8">
|
||||
<b-row class="justify-content-center">
|
||||
<b-col lg="5" md="7">
|
||||
@ -22,76 +21,16 @@
|
||||
<div class="text-center text-muted mb-4">
|
||||
<small>{{ $t('login') }}</small>
|
||||
</div>
|
||||
|
||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||
<b-form @submit.stop.prevent="handleSubmit(onSubmit)">
|
||||
<validation-provider
|
||||
name="Email"
|
||||
:rules="{ required: true, email: true }"
|
||||
v-slot="validationContext"
|
||||
>
|
||||
<b-form-group class="mb-3" label="Email" label-for="login-email">
|
||||
<b-form-input
|
||||
id="login-email"
|
||||
name="example-input-1"
|
||||
v-model="form.email"
|
||||
placeholder="Email"
|
||||
:state="getValidationState(validationContext)"
|
||||
aria-describedby="login-email-live-feedback"
|
||||
></b-form-input>
|
||||
|
||||
<b-form-invalid-feedback id="login-email-live-feedback">
|
||||
{{ validationContext.errors[0] }}
|
||||
</b-form-invalid-feedback>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
|
||||
<validation-provider
|
||||
<input-email v-model="form.email"></input-email>
|
||||
<input-password
|
||||
:label="$t('form.password')"
|
||||
:placeholder="$t('form.password')"
|
||||
:name="$t('form.password')"
|
||||
:rules="{ required: true }"
|
||||
v-slot="validationContext"
|
||||
>
|
||||
<b-form-group
|
||||
class="mb-5"
|
||||
id="example-input-group-1"
|
||||
:label="$t('form.password')"
|
||||
label-for="example-input-1"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="input-pwd"
|
||||
name="input-pwd"
|
||||
v-model="form.password"
|
||||
:placeholder="$t('form.password')"
|
||||
:type="passwordVisible ? 'text' : 'password'"
|
||||
:state="getValidationState(validationContext)"
|
||||
aria-describedby="input-2-live-feedback"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordVisibility">
|
||||
<b-icon :icon="passwordVisible ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<b-form-invalid-feedback id="input-2-live-feedback">
|
||||
{{ validationContext.errors[0] }}
|
||||
</b-form-invalid-feedback>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
|
||||
<b-alert v-show="loginfail" show dismissible variant="warning">
|
||||
<span class="alert-text bv-example-row">
|
||||
<b-row>
|
||||
<b-col class="col-9 text-left text-dark">
|
||||
<strong>
|
||||
Leider konnten wir keinen Account finden mit diesen Daten!
|
||||
</strong>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</span>
|
||||
</b-alert>
|
||||
<div class="text-center">
|
||||
v-model="form.password"
|
||||
></input-password>
|
||||
<div class="text-center mt-4">
|
||||
<b-button type="submit" variant="primary">{{ $t('login') }}</b-button>
|
||||
</div>
|
||||
</b-form>
|
||||
@ -118,32 +57,27 @@
|
||||
<script>
|
||||
import loginAPI from '../../apis/loginAPI'
|
||||
import CONFIG from '../../config'
|
||||
import InputPassword from '../../components/Inputs/InputPassword'
|
||||
import InputEmail from '../../components/Inputs/InputEmail'
|
||||
|
||||
export default {
|
||||
name: 'login',
|
||||
components: {
|
||||
InputPassword,
|
||||
InputEmail,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
email: '',
|
||||
password: '',
|
||||
// rememberMe: false
|
||||
},
|
||||
loginfail: false,
|
||||
allowRegister: CONFIG.ALLOW_REGISTER,
|
||||
passwordVisible: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getValidationState({ dirty, validated, valid = null }) {
|
||||
return dirty || validated ? valid : null
|
||||
},
|
||||
|
||||
togglePasswordVisibility() {
|
||||
this.passwordVisible = !this.passwordVisible
|
||||
},
|
||||
async onSubmit() {
|
||||
// error info ausschalten
|
||||
this.loginfail = false
|
||||
const loader = this.$loading.show({
|
||||
container: this.$refs.submitButton,
|
||||
})
|
||||
@ -157,7 +91,7 @@ export default {
|
||||
loader.hide()
|
||||
} else {
|
||||
loader.hide()
|
||||
this.loginfail = true
|
||||
this.$toast.error(this.$t('error.no-account'))
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@ -84,7 +84,7 @@ describe('Register', () => {
|
||||
wrapper.find('#registerEmail').setValue('no_valid@Email')
|
||||
await flushPromises()
|
||||
await expect(wrapper.find('#registerEmailLiveFeedback').text()).toEqual(
|
||||
'The Email field must be a valid email',
|
||||
'validations.messages.email',
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@ -3,6 +3,8 @@ import loginAPI from '../../apis/loginAPI'
|
||||
import ResetPassword from './ResetPassword'
|
||||
import flushPromises from 'flush-promises'
|
||||
|
||||
// validation is tested in src/views/Pages/UserProfile/UserCard_FormUserPasswort.spec.js
|
||||
|
||||
jest.mock('../../apis/loginAPI')
|
||||
|
||||
const localVue = global.localVue
|
||||
@ -28,6 +30,7 @@ emailVerificationMock
|
||||
.mockReturnValueOnce({ success: false, result: { message: 'error' } })
|
||||
.mockReturnValueOnce({ success: false, result: { message: 'error' } })
|
||||
.mockReturnValueOnce({ success: false, result: { message: 'error' } })
|
||||
.mockReturnValueOnce({ success: false, result: { message: 'error' } })
|
||||
.mockReturnValue(successResponseObject)
|
||||
|
||||
changePasswordMock
|
||||
@ -81,36 +84,39 @@ describe('ResetPassword', () => {
|
||||
})
|
||||
|
||||
it('does not render the Reset Password form when not authenticated', () => {
|
||||
expect(wrapper.find('div.resetpwd-form').exists()).toBeFalsy()
|
||||
expect(wrapper.find('form').exists()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('toasts an error when no valid optin is given', () => {
|
||||
expect(toasterMock).toHaveBeenCalledWith('error')
|
||||
})
|
||||
|
||||
it('has a message suggesting to contact the support', () => {
|
||||
expect(wrapper.find('div.header').text()).toContain('reset-password.title')
|
||||
expect(wrapper.find('div.header').text()).toContain('reset-password.not-authenticated')
|
||||
})
|
||||
|
||||
it('renders the Reset Password form when authenticated', async () => {
|
||||
wrapper.setData({ authenticated: true })
|
||||
await wrapper.vm.$nextTick()
|
||||
await wrapper.setData({ authenticated: true })
|
||||
expect(wrapper.find('div.resetpwd-form').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
describe('Register header', () => {
|
||||
it('has a welcome message', () => {
|
||||
expect(wrapper.find('div.header').text()).toBe('reset-password.title reset-password.text')
|
||||
expect(wrapper.find('div.header').text()).toContain('reset-password.title')
|
||||
expect(wrapper.find('div.header').text()).toContain('reset-password.text')
|
||||
})
|
||||
})
|
||||
|
||||
/* there is no back button, why?
|
||||
describe('links', () => {
|
||||
it('has a link "Back"', () => {
|
||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).text()).toEqual('back')
|
||||
})
|
||||
|
||||
it('links to /login when clicking "Back"', () => {
|
||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/login')
|
||||
expect(wrapper.findAllComponents(RouterLinkStub).at(0).props().to).toBe('/Login')
|
||||
})
|
||||
})
|
||||
*/
|
||||
|
||||
describe('reset password form', () => {
|
||||
it('has a register form', () => {
|
||||
@ -121,10 +127,6 @@ describe('ResetPassword', () => {
|
||||
expect(wrapper.findAll('input[type="password"]').length).toBe(2)
|
||||
})
|
||||
|
||||
it('has no submit button when not completely filled', () => {
|
||||
expect(wrapper.find('button[type="submit"]').exists()).toBe(false)
|
||||
})
|
||||
|
||||
it('toggles the first input field to text when eye icon is clicked', async () => {
|
||||
wrapper.findAll('button').at(0).trigger('click')
|
||||
await wrapper.vm.$nextTick()
|
||||
@ -140,23 +142,20 @@ describe('ResetPassword', () => {
|
||||
|
||||
describe('submit form', () => {
|
||||
beforeEach(async () => {
|
||||
wrapper.findAll('input').at(0).setValue('Aa123456')
|
||||
wrapper.findAll('input').at(1).setValue('Aa123456')
|
||||
await wrapper.vm.$nextTick()
|
||||
await wrapper.findAll('input').at(0).setValue('Aa123456')
|
||||
await wrapper.findAll('input').at(1).setValue('Aa123456')
|
||||
await flushPromises()
|
||||
wrapper.find('form').trigger('submit')
|
||||
await wrapper.find('form').trigger('submit')
|
||||
})
|
||||
|
||||
describe('server response with error', () => {
|
||||
it('toasts an error message', async () => {
|
||||
it('toasts an error message', () => {
|
||||
expect(toasterMock).toHaveBeenCalledWith('error')
|
||||
})
|
||||
})
|
||||
|
||||
describe('server response with success', () => {
|
||||
it('calls the API', async () => {
|
||||
await wrapper.vm.$nextTick()
|
||||
await flushPromises()
|
||||
it('calls the API', () => {
|
||||
expect(changePasswordMock).toHaveBeenCalledWith(1, 'user@example.org', 'Aa123456')
|
||||
})
|
||||
|
||||
|
||||
@ -1,102 +1,34 @@
|
||||
<template>
|
||||
<div class="resetpwd-form" v-if="authenticated">
|
||||
<!-- Header -->
|
||||
<div class="header p-4">
|
||||
<b-container class="container">
|
||||
<div class="resetpwd-form">
|
||||
<b-container>
|
||||
<div class="header p-4" ref="header">
|
||||
<div class="header-body text-center mb-7">
|
||||
<b-row class="justify-content-center">
|
||||
<b-col xl="5" lg="6" md="8" class="px-2">
|
||||
<h1>{{ $t('reset-password.title') }}</h1>
|
||||
<div class="pb-4">{{ $t('reset-password.text') }}</div>
|
||||
<div class="pb-4" v-if="!pending">
|
||||
<span v-if="authenticated">
|
||||
{{ $t('reset-password.text') }}
|
||||
</span>
|
||||
<span v-else>
|
||||
{{ $t('reset-password.not-authenticated') }}
|
||||
</span>
|
||||
</div>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</b-container>
|
||||
</div>
|
||||
<!-- Page content -->
|
||||
</div>
|
||||
</b-container>
|
||||
<b-container class="mt--8 p-1">
|
||||
<!-- Table -->
|
||||
<b-row class="justify-content-center">
|
||||
<b-row class="justify-content-center" v-if="authenticated">
|
||||
<b-col lg="6" md="8">
|
||||
<b-card no-body class="border-0" style="background-color: #ebebeba3 !important">
|
||||
<b-card-body class="p-4">
|
||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)">
|
||||
<validation-provider
|
||||
:name="$t('form.password')"
|
||||
:rules="{ required: true }"
|
||||
v-slot="validationContext"
|
||||
>
|
||||
<b-form-group
|
||||
class="mb-5"
|
||||
:label="$t('form.password')"
|
||||
label-for="resetPassword"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="resetPassword"
|
||||
:name="$t('form.password')"
|
||||
v-model="form.password"
|
||||
:placeholder="$t('form.password')"
|
||||
:type="passwordVisible ? 'text' : 'password'"
|
||||
:state="getValidationState(validationContext)"
|
||||
aria-describedby="resetPasswordLiveFeedback"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordVisibility">
|
||||
<b-icon :icon="passwordVisible ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
<b-form-invalid-feedback id="resetPasswordLiveFeedback">
|
||||
{{ validationContext.errors[0] }}
|
||||
</b-form-invalid-feedback>
|
||||
</b-form-group>
|
||||
</validation-provider>
|
||||
|
||||
<b-form-group
|
||||
class="mb-5"
|
||||
:label="$t('form.passwordRepeat')"
|
||||
label-for="resetPasswordRepeat"
|
||||
>
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
id="resetPasswordRepeat"
|
||||
:name="$t('form.passwordRepeat')"
|
||||
v-model.lazy="form.passwordRepeat"
|
||||
:placeholder="$t('form.passwordRepeat')"
|
||||
:type="passwordVisibleRepeat ? 'text' : 'password'"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordRepeatVisibility">
|
||||
<b-icon :icon="passwordVisibleRepeat ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</b-form-group>
|
||||
|
||||
<transition name="hint" appear>
|
||||
<div v-if="passwordValidation.errors.length > 0 && !submitted" class="hints">
|
||||
<ul>
|
||||
<li v-for="error in passwordValidation.errors" :key="error">
|
||||
<small>{{ error }}</small>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="matches" v-else-if="!samePasswords">
|
||||
<p>
|
||||
{{ $t('site.signup.dont_match') }}
|
||||
<i class="ni ni-active-40" color="danger"></i>
|
||||
</p>
|
||||
</div>
|
||||
</transition>
|
||||
<div
|
||||
class="text-center"
|
||||
v-if="passwordsFilled && samePasswords && passwordValidation.valid"
|
||||
>
|
||||
<b-button type="submit" variant="secondary" class="mt-4">
|
||||
<input-password-confirmation v-model="form" />
|
||||
<div class="text-center">
|
||||
<b-button type="submit" variant="primary" class="mt-4">
|
||||
{{ $t('reset') }}
|
||||
</b-button>
|
||||
</div>
|
||||
@ -106,38 +38,36 @@
|
||||
</b-card>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col class="text-center py-lg-4">
|
||||
<router-link to="/Login" class="mt-3">{{ $t('back') }}</router-link>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-container>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import loginAPI from '../../apis/loginAPI'
|
||||
import InputPasswordConfirmation from '../../components/Inputs/InputPasswordConfirmation'
|
||||
|
||||
export default {
|
||||
name: 'reset',
|
||||
name: 'ResetPassword',
|
||||
components: {
|
||||
InputPasswordConfirmation,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
form: {
|
||||
password: '',
|
||||
passwordRepeat: '',
|
||||
},
|
||||
password: '',
|
||||
passwordVisible: false,
|
||||
passwordVisibleRepeat: false,
|
||||
submitted: false,
|
||||
authenticated: false,
|
||||
sessionId: null,
|
||||
email: null,
|
||||
pending: true,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getValidationState({ dirty, validated, valid = null }) {
|
||||
return dirty || validated ? valid : null
|
||||
},
|
||||
togglePasswordVisibility() {
|
||||
this.passwordVisible = !this.passwordVisible
|
||||
},
|
||||
togglePasswordRepeatVisibility() {
|
||||
this.passwordVisibleRepeat = !this.passwordVisibleRepeat
|
||||
},
|
||||
async onSubmit() {
|
||||
const result = await loginAPI.changePassword(this.sessionId, this.email, this.form.password)
|
||||
if (result.success) {
|
||||
@ -155,7 +85,7 @@ export default {
|
||||
},
|
||||
async authenticate() {
|
||||
const loader = this.$loading.show({
|
||||
container: this.$refs.submitButton,
|
||||
container: this.$refs.header,
|
||||
})
|
||||
const optin = this.$route.params.optin
|
||||
const result = await loginAPI.loginViaEmailVerificationCode(optin)
|
||||
@ -167,37 +97,10 @@ export default {
|
||||
this.$toast.error(result.result.message)
|
||||
}
|
||||
loader.hide()
|
||||
this.pending = false
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
samePasswords() {
|
||||
return this.form.password === this.form.passwordRepeat
|
||||
},
|
||||
passwordsFilled() {
|
||||
return this.form.password !== '' && this.form.passwordRepeat !== ''
|
||||
},
|
||||
rules() {
|
||||
return [
|
||||
{ message: this.$t('site.signup.lowercase'), regex: /[a-z]+/ },
|
||||
{ message: this.$t('site.signup.uppercase'), regex: /[A-Z]+/ },
|
||||
{ message: this.$t('site.signup.minimum'), regex: /.{8,}/ },
|
||||
{ message: this.$t('site.signup.one_number'), regex: /[0-9]+/ },
|
||||
]
|
||||
},
|
||||
passwordValidation() {
|
||||
const errors = []
|
||||
for (const condition of this.rules) {
|
||||
if (!condition.regex.test(this.form.password)) {
|
||||
errors.push(condition.message)
|
||||
}
|
||||
}
|
||||
if (errors.length === 0) {
|
||||
return { valid: true, errors }
|
||||
}
|
||||
return { valid: false, errors }
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
mounted() {
|
||||
this.authenticate()
|
||||
},
|
||||
}
|
||||
|
||||
@ -0,0 +1,169 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import UserCardFormUserData from './UserCard_FormUserData'
|
||||
import loginAPI from '../../../apis/loginAPI'
|
||||
import flushPromises from 'flush-promises'
|
||||
|
||||
jest.mock('../../../apis/loginAPI')
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
const mockAPIcall = jest.fn((args) => {
|
||||
return { success: true }
|
||||
})
|
||||
|
||||
const toastErrorMock = jest.fn()
|
||||
const toastSuccessMock = jest.fn()
|
||||
const storeCommitMock = jest.fn()
|
||||
|
||||
loginAPI.updateUserInfos = mockAPIcall
|
||||
|
||||
describe('UserCard_FormUsername', () => {
|
||||
let wrapper
|
||||
|
||||
const mocks = {
|
||||
$t: jest.fn((t) => t),
|
||||
$store: {
|
||||
state: {
|
||||
sessionId: 1,
|
||||
email: 'user@example.org',
|
||||
firstName: 'Peter',
|
||||
lastName: 'Lustig',
|
||||
description: '',
|
||||
},
|
||||
commit: storeCommitMock,
|
||||
},
|
||||
$toast: {
|
||||
success: toastSuccessMock,
|
||||
error: toastErrorMock,
|
||||
},
|
||||
}
|
||||
|
||||
const Wrapper = () => {
|
||||
return mount(UserCardFormUserData, { localVue, mocks })
|
||||
}
|
||||
|
||||
describe('mount', () => {
|
||||
beforeEach(() => {
|
||||
wrapper = Wrapper()
|
||||
})
|
||||
|
||||
it('renders the component', () => {
|
||||
expect(wrapper.find('div#userdata_form').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('has an edit icon', () => {
|
||||
expect(wrapper.find('svg.bi-pencil').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('renders the first name', () => {
|
||||
expect(wrapper.findAll('div.col').at(2).text()).toBe('Peter')
|
||||
})
|
||||
|
||||
it('renders the last name', () => {
|
||||
expect(wrapper.findAll('div.col').at(4).text()).toBe('Lustig')
|
||||
})
|
||||
|
||||
it('renders the description', () => {
|
||||
expect(wrapper.findAll('div.col').at(6).text()).toBe('')
|
||||
})
|
||||
|
||||
describe('edit user data', () => {
|
||||
beforeEach(async () => {
|
||||
await wrapper.find('svg.bi-pencil').trigger('click')
|
||||
})
|
||||
|
||||
it('shows an cancel icon', () => {
|
||||
expect(wrapper.find('svg.bi-x-circle').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('closes the input when cancel icon is clicked', async () => {
|
||||
await wrapper.find('svg.bi-x-circle').trigger('click')
|
||||
expect(wrapper.find('input').exists()).toBeFalsy()
|
||||
})
|
||||
|
||||
it('does not change the userdate when cancel is clicked', async () => {
|
||||
await wrapper.findAll('input').at(0).setValue('Petra')
|
||||
await wrapper.findAll('input').at(1).setValue('Lustiger')
|
||||
await wrapper.find('textarea').setValue('Keine Nickelbrille')
|
||||
await wrapper.find('svg.bi-x-circle').trigger('click')
|
||||
expect(wrapper.findAll('div.col').at(2).text()).toBe('Peter')
|
||||
expect(wrapper.findAll('div.col').at(4).text()).toBe('Lustig')
|
||||
expect(wrapper.findAll('div.col').at(6).text()).toBe('')
|
||||
})
|
||||
|
||||
it('has a submit button', () => {
|
||||
expect(wrapper.find('button[type="submit"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('does not enable submit button when data is not changed', async () => {
|
||||
await wrapper.find('form').trigger('keyup')
|
||||
expect(wrapper.find('button[type="submit"]').attributes('disabled')).toBe('disabled')
|
||||
})
|
||||
|
||||
describe('successfull submit', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
await wrapper.findAll('input').at(0).setValue('Petra')
|
||||
await wrapper.findAll('input').at(1).setValue('Lustiger')
|
||||
await wrapper.find('textarea').setValue('Keine Nickelbrille')
|
||||
await wrapper.find('form').trigger('keyup')
|
||||
await wrapper.find('button[type="submit"]').trigger('click')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('calls the loginAPI', () => {
|
||||
expect(mockAPIcall).toBeCalledWith(1, 'user@example.org', {
|
||||
firstName: 'Petra',
|
||||
lastName: 'Lustiger',
|
||||
description: 'Keine Nickelbrille',
|
||||
})
|
||||
})
|
||||
|
||||
it('commits firstname to store', () => {
|
||||
expect(storeCommitMock).toBeCalledWith('firstName', 'Petra')
|
||||
})
|
||||
|
||||
it('commits lastname to store', () => {
|
||||
expect(storeCommitMock).toBeCalledWith('lastName', 'Lustiger')
|
||||
})
|
||||
|
||||
it('commits description to store', () => {
|
||||
expect(storeCommitMock).toBeCalledWith('description', 'Keine Nickelbrille')
|
||||
})
|
||||
|
||||
it('toasts a success message', () => {
|
||||
expect(toastSuccessMock).toBeCalledWith('site.profil.user-data.change-success')
|
||||
})
|
||||
|
||||
it('has an edit button again', () => {
|
||||
expect(wrapper.find('svg.bi-pencil').exists()).toBeTruthy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('submit results in server error', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
mockAPIcall.mockReturnValue({ success: false, result: { message: 'Error' } })
|
||||
await wrapper.findAll('input').at(0).setValue('Petra')
|
||||
await wrapper.findAll('input').at(1).setValue('Lustiger')
|
||||
await wrapper.find('textarea').setValue('Keine Nickelbrille')
|
||||
await wrapper.find('form').trigger('keyup')
|
||||
await wrapper.find('button[type="submit"]').trigger('click')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('calls the loginAPI', () => {
|
||||
expect(mockAPIcall).toBeCalledWith(1, 'user@example.org', {
|
||||
firstName: 'Petra',
|
||||
lastName: 'Lustiger',
|
||||
description: 'Keine Nickelbrille',
|
||||
})
|
||||
})
|
||||
|
||||
it('toasts an error message', () => {
|
||||
expect(toastErrorMock).toBeCalledWith('Error')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@ -1,13 +1,15 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import UserCardFormPasswort from './UserCard_FormUserPasswort'
|
||||
import loginAPI from '../../../apis/loginAPI'
|
||||
// import flushPromises from 'flush-promises'
|
||||
import flushPromises from 'flush-promises'
|
||||
|
||||
jest.mock('../../../apis/loginAPI')
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
const changePasswordProfileMock = jest.fn()
|
||||
changePasswordProfileMock.mockReturnValue({ success: true })
|
||||
|
||||
loginAPI.changePasswordProfile = changePasswordProfileMock
|
||||
|
||||
const toastSuccessMock = jest.fn()
|
||||
@ -59,8 +61,8 @@ describe('UserCardFormUserPasswort', () => {
|
||||
let form
|
||||
|
||||
beforeEach(async () => {
|
||||
wrapper.find('a').trigger('click')
|
||||
await wrapper.vm.$nextTick()
|
||||
await wrapper.find('a').trigger('click')
|
||||
await flushPromises()
|
||||
form = wrapper.find('form')
|
||||
})
|
||||
|
||||
@ -69,12 +71,11 @@ describe('UserCardFormUserPasswort', () => {
|
||||
})
|
||||
|
||||
it('has a cancel button', () => {
|
||||
expect(form.find('svg.bi-x-circle').exists()).toBeTruthy()
|
||||
expect(wrapper.find('svg.bi-x-circle').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
it('closes the form when cancel button is clicked', async () => {
|
||||
form.find('svg.bi-x-circle').trigger('click')
|
||||
await wrapper.vm.$nextTick()
|
||||
await wrapper.find('svg.bi-x-circle').trigger('click')
|
||||
expect(wrapper.find('input').exists()).toBeFalsy()
|
||||
})
|
||||
|
||||
@ -104,24 +105,103 @@ describe('UserCardFormUserPasswort', () => {
|
||||
expect(form.find('button[type="submit"]').exists()).toBeTruthy()
|
||||
})
|
||||
|
||||
/*
|
||||
describe('submit', () => {
|
||||
beforeEach(async () => {
|
||||
await form.findAll('input').at(0).setValue('1234')
|
||||
await form.findAll('input').at(1).setValue('Aa123456')
|
||||
await form.findAll('input').at(2).setValue('Aa123456')
|
||||
form.trigger('submit')
|
||||
await wrapper.vm.$nextTick()
|
||||
await flushPromises()
|
||||
describe('validation', () => {
|
||||
it('displays all password requirements', () => {
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(5)
|
||||
expect(feedbackArray.at(0).text()).toBe('validations.messages.required')
|
||||
expect(feedbackArray.at(1).text()).toBe('site.signup.lowercase')
|
||||
expect(feedbackArray.at(2).text()).toBe('site.signup.uppercase')
|
||||
expect(feedbackArray.at(3).text()).toBe('site.signup.one_number')
|
||||
expect(feedbackArray.at(4).text()).toBe('site.signup.minimum')
|
||||
})
|
||||
|
||||
it('calls the API', async () => {
|
||||
await wrapper.vm.$nextTick()
|
||||
it('removes first message when a character is given', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('@')
|
||||
await flushPromises()
|
||||
expect(changePasswordProfileMock).toHaveBeenCalledWith(1, 'user@example.org', '1234', 'Aa123456')
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(4)
|
||||
expect(feedbackArray.at(0).text()).toBe('site.signup.lowercase')
|
||||
})
|
||||
|
||||
it('removes first and second message when a lowercase character is given', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('a')
|
||||
await flushPromises()
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(3)
|
||||
expect(feedbackArray.at(0).text()).toBe('site.signup.uppercase')
|
||||
})
|
||||
|
||||
it('removes the first three messages when a lowercase and uppercase characters are given', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('Aa')
|
||||
await flushPromises()
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(2)
|
||||
expect(feedbackArray.at(0).text()).toBe('site.signup.one_number')
|
||||
})
|
||||
|
||||
it('removes the first four messages when a lowercase, uppercase and numeric characters are given', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('Aa1')
|
||||
await flushPromises()
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(1)
|
||||
expect(feedbackArray.at(0).text()).toBe('site.signup.minimum')
|
||||
})
|
||||
|
||||
it('removes all messages when all rules are fulfilled', async () => {
|
||||
await wrapper.findAll('input').at(1).setValue('Aa123456')
|
||||
await flushPromises()
|
||||
const feedbackArray = wrapper.findAll('div.invalid-feedback').at(1).findAll('span')
|
||||
expect(feedbackArray).toHaveLength(0)
|
||||
})
|
||||
})
|
||||
|
||||
describe('submit', () => {
|
||||
describe('valid data', () => {
|
||||
beforeEach(async () => {
|
||||
await form.findAll('input').at(0).setValue('1234')
|
||||
await form.findAll('input').at(1).setValue('Aa123456')
|
||||
await form.findAll('input').at(2).setValue('Aa123456')
|
||||
await form.trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('calls the API', () => {
|
||||
expect(changePasswordProfileMock).toHaveBeenCalledWith(
|
||||
1,
|
||||
'user@example.org',
|
||||
'1234',
|
||||
'Aa123456',
|
||||
)
|
||||
})
|
||||
|
||||
it('toasts a success message', () => {
|
||||
expect(toastSuccessMock).toBeCalledWith('site.thx.reset')
|
||||
})
|
||||
|
||||
it('cancels the edit process', () => {
|
||||
expect(wrapper.find('input').exists()).toBeFalsy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('server response is error', () => {
|
||||
beforeEach(async () => {
|
||||
changePasswordProfileMock.mockReturnValue({
|
||||
success: false,
|
||||
result: { message: 'error' },
|
||||
})
|
||||
await form.findAll('input').at(0).setValue('1234')
|
||||
await form.findAll('input').at(1).setValue('Aa123456')
|
||||
await form.findAll('input').at(2).setValue('Aa123456')
|
||||
await form.trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('toasts an error message', () => {
|
||||
expect(toastErrorMock).toBeCalledWith('error')
|
||||
})
|
||||
})
|
||||
})
|
||||
*/
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -1,183 +1,86 @@
|
||||
<template>
|
||||
<b-card id="change_pwd" class="bg-transparent" style="background-color: #ebebeba3 !important">
|
||||
<b-container>
|
||||
<b-form @keyup.prevent="loadSubmitButton">
|
||||
<div v-if="!editPassword">
|
||||
<b-row class="mb-4 text-right">
|
||||
<b-col class="text-right">
|
||||
<a href="#change_pwd" v-if="!editPassword" @click="editPassword = !editPassword">
|
||||
<a href="#change_pwd" @click="editPassword = !editPassword">
|
||||
<span>{{ $t('form.change-password') }}</span>
|
||||
<b-icon class="pointer ml-3" icon="pencil" />
|
||||
</a>
|
||||
|
||||
<b-icon
|
||||
v-else
|
||||
@click="cancelEdit()"
|
||||
class="pointer"
|
||||
icon="x-circle"
|
||||
variant="danger"
|
||||
></b-icon>
|
||||
</b-col>
|
||||
</b-row>
|
||||
|
||||
<div v-if="editPassword">
|
||||
<b-row class="mb-5">
|
||||
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
|
||||
<small>{{ $t('form.password_old') }}</small>
|
||||
</b-col>
|
||||
<b-col class="col-md-9 col-sm-10">
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
class="mb-0"
|
||||
v-model="password"
|
||||
name="Password"
|
||||
:type="passwordVisibleOldPwd ? 'text' : 'password'"
|
||||
prepend-icon="ni ni-lock-circle-open"
|
||||
</div>
|
||||
<div v-if="editPassword">
|
||||
<b-row class="mb-4 text-right">
|
||||
<b-col class="text-right">
|
||||
<b-icon @click="cancelEdit()" class="pointer" icon="x-circle" variant="danger"></b-icon>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<validation-observer ref="observer" v-slot="{ handleSubmit }">
|
||||
<b-form @submit.stop.prevent="handleSubmit(onSubmit)">
|
||||
<b-row class="mb-2">
|
||||
<b-col>
|
||||
<input-password
|
||||
:label="$t('form.password_old')"
|
||||
:placeholder="$t('form.password_old')"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordVisibilityOldPwd">
|
||||
<b-icon :icon="passwordVisibleOldPwd ? 'eye' : 'eye-slash'" />
|
||||
v-model="form.password"
|
||||
></input-password>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<input-password-confirmation v-model="form.newPassword" />
|
||||
<b-row class="text-right">
|
||||
<b-col>
|
||||
<div class="text-right">
|
||||
<b-button type="submit" variant="primary" class="mt-4">
|
||||
{{ $t('form.save') }}
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
|
||||
<b-row class="mb-3">
|
||||
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
|
||||
<small>{{ $t('form.password_new') }}</small>
|
||||
</b-col>
|
||||
<b-col class="col-md-9 col-sm-10">
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
class="mb-0"
|
||||
v-model="passwordNew"
|
||||
name="Password"
|
||||
:type="passwordVisibleNewPwd ? 'text' : 'password'"
|
||||
prepend-icon="ni ni-lock-circle-open"
|
||||
:placeholder="$t('form.password_new')"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordVisibilityNewPwd">
|
||||
<b-icon :icon="passwordVisibleNewPwd ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row class="mb-3">
|
||||
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
|
||||
<small>{{ $t('form.password_new_repeat') }}</small>
|
||||
</b-col>
|
||||
<b-col class="col-md-9 col-sm-10">
|
||||
<b-input-group>
|
||||
<b-form-input
|
||||
class="mb-0"
|
||||
v-model="passwordNewRepeat"
|
||||
name="Password"
|
||||
:type="passwordVisibleNewPwdRepeat ? 'text' : 'password'"
|
||||
prepend-icon="ni ni-lock-circle-open"
|
||||
:placeholder="$t('form.password_new_repeat')"
|
||||
></b-form-input>
|
||||
|
||||
<b-input-group-append>
|
||||
<b-button variant="outline-primary" @click="togglePasswordVisibilityNewPwdRepeat">
|
||||
<b-icon :icon="passwordVisibleNewPwdRepeat ? 'eye' : 'eye-slash'" />
|
||||
</b-button>
|
||||
</b-input-group-append>
|
||||
</b-input-group>
|
||||
</b-col>
|
||||
</b-row>
|
||||
<b-row>
|
||||
<b-col></b-col>
|
||||
<b-col class="col-12">
|
||||
<transition name="hint" appear>
|
||||
<div v-if="passwordValidation.errors.length > 0" class="hints">
|
||||
<ul>
|
||||
<li v-for="error in passwordValidation.errors" :key="error">
|
||||
<small>{{ error }}</small>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</transition>
|
||||
</b-col>
|
||||
</b-row>
|
||||
|
||||
<b-row class="text-right" v-if="editPassword">
|
||||
<b-col>
|
||||
<div class="text-right" ref="submitButton">
|
||||
<b-button
|
||||
:variant="loading ? 'default' : 'success'"
|
||||
@click="onSubmit"
|
||||
type="submit"
|
||||
class="mt-4"
|
||||
:disabled="loading"
|
||||
>
|
||||
{{ $t('form.save') }}
|
||||
</b-button>
|
||||
</div>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</div>
|
||||
</b-form>
|
||||
</b-col>
|
||||
</b-row>
|
||||
</b-form>
|
||||
</validation-observer>
|
||||
</div>
|
||||
</b-container>
|
||||
</b-card>
|
||||
</template>
|
||||
<script>
|
||||
import loginAPI from '../../../apis/loginAPI'
|
||||
import InputPassword from '../../../components/Inputs/InputPassword'
|
||||
import InputPasswordConfirmation from '../../../components/Inputs/InputPasswordConfirmation'
|
||||
|
||||
export default {
|
||||
name: 'FormUserPasswort',
|
||||
components: {
|
||||
InputPassword,
|
||||
InputPasswordConfirmation,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
editPassword: false,
|
||||
email: null,
|
||||
password: '',
|
||||
passwordNew: '',
|
||||
passwordNewRepeat: '',
|
||||
passwordVisibleOldPwd: false,
|
||||
passwordVisibleNewPwd: false,
|
||||
passwordVisibleNewPwdRepeat: false,
|
||||
loading: true,
|
||||
form: {
|
||||
password: '',
|
||||
newPassword: {
|
||||
password: '',
|
||||
passwordRepeat: '',
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancelEdit() {
|
||||
this.editPassword = false
|
||||
this.password = ''
|
||||
this.passwordNew = ''
|
||||
this.passwordNewRepeat = ''
|
||||
this.form.password = ''
|
||||
this.form.passwordNew = ''
|
||||
this.form.passwordNewRepeat = ''
|
||||
},
|
||||
togglePasswordVisibilityNewPwd() {
|
||||
this.passwordVisibleNewPwd = !this.passwordVisibleNewPwd
|
||||
},
|
||||
togglePasswordVisibilityNewPwdRepeat() {
|
||||
this.passwordVisibleNewPwdRepeat = !this.passwordVisibleNewPwdRepeat
|
||||
},
|
||||
togglePasswordVisibilityOldPwd() {
|
||||
this.passwordVisibleOldPwd = !this.passwordVisibleOldPwd
|
||||
},
|
||||
loadSubmitButton() {
|
||||
if (
|
||||
this.password !== '' &&
|
||||
this.passwordNew !== '' &&
|
||||
this.passwordNewRepeat !== '' &&
|
||||
this.passwordNew === this.passwordNewRepeat
|
||||
) {
|
||||
this.loading = false
|
||||
} else {
|
||||
this.loading = true
|
||||
}
|
||||
},
|
||||
async onSubmit(event) {
|
||||
event.preventDefault()
|
||||
async onSubmit() {
|
||||
const result = await loginAPI.changePasswordProfile(
|
||||
this.$store.state.sessionId,
|
||||
this.$store.state.email,
|
||||
this.password,
|
||||
this.passwordNew,
|
||||
this.form.password,
|
||||
this.form.newPassword.password,
|
||||
)
|
||||
if (result.success) {
|
||||
this.$toast.success(this.$t('site.thx.reset'))
|
||||
@ -187,31 +90,5 @@ export default {
|
||||
}
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
samePasswords() {
|
||||
return this.password === this.passwordNew
|
||||
},
|
||||
rules() {
|
||||
return [
|
||||
{ message: this.$t('site.signup.lowercase'), regex: /[a-z]+/ },
|
||||
{ message: this.$t('site.signup.uppercase'), regex: /[A-Z]+/ },
|
||||
{ message: this.$t('site.signup.minimum'), regex: /.{8,}/ },
|
||||
{ message: this.$t('site.signup.one_number'), regex: /[0-9]+/ },
|
||||
]
|
||||
},
|
||||
passwordValidation() {
|
||||
const errors = []
|
||||
for (const condition of this.rules) {
|
||||
if (!condition.regex.test(this.passwordNew)) {
|
||||
errors.push(condition.message)
|
||||
}
|
||||
}
|
||||
if (errors.length === 0) {
|
||||
return { valid: true, errors }
|
||||
}
|
||||
return { valid: false, errors }
|
||||
},
|
||||
},
|
||||
}
|
||||
</script>
|
||||
<style></style>
|
||||
|
||||
@ -1,29 +1,28 @@
|
||||
import { mount } from '@vue/test-utils'
|
||||
import { extend } from 'vee-validate'
|
||||
import UserCardFormUsername from './UserCard_FormUsername'
|
||||
import loginAPI from '../../../apis/loginAPI'
|
||||
import flushPromises from 'flush-promises'
|
||||
import { extend } from 'vee-validate'
|
||||
|
||||
jest.mock('../../../apis/loginAPI')
|
||||
|
||||
extend('gddUsernameRgex', {
|
||||
validate(value) {
|
||||
return true
|
||||
},
|
||||
})
|
||||
|
||||
extend('gddUsernameUnique', {
|
||||
validate(value) {
|
||||
return true
|
||||
},
|
||||
})
|
||||
|
||||
const localVue = global.localVue
|
||||
|
||||
const mockAPIcall = jest.fn((args) => {
|
||||
return { success: true }
|
||||
})
|
||||
|
||||
// override this rule to avoid API call
|
||||
extend('gddUsernameUnique', {
|
||||
validate(value) {
|
||||
return true
|
||||
},
|
||||
})
|
||||
|
||||
const toastErrorMock = jest.fn()
|
||||
const toastSuccessMock = jest.fn()
|
||||
const storeCommitMock = jest.fn()
|
||||
|
||||
loginAPI.changeUsernameProfile = mockAPIcall
|
||||
|
||||
describe('UserCard_FormUsername', () => {
|
||||
@ -37,10 +36,11 @@ describe('UserCard_FormUsername', () => {
|
||||
email: 'user@example.org',
|
||||
username: '',
|
||||
},
|
||||
commit: jest.fn(),
|
||||
commit: storeCommitMock,
|
||||
},
|
||||
$toast: {
|
||||
success: jest.fn(),
|
||||
success: toastSuccessMock,
|
||||
error: toastErrorMock,
|
||||
},
|
||||
}
|
||||
|
||||
@ -111,10 +111,43 @@ describe('UserCard_FormUsername', () => {
|
||||
expect(wrapper.find('div.display-username').text()).toEqual('@username')
|
||||
})
|
||||
|
||||
it('commits the username to the store', () => {
|
||||
expect(storeCommitMock).toBeCalledWith('username', 'username')
|
||||
})
|
||||
|
||||
it('toasts an success message', () => {
|
||||
expect(toastSuccessMock).toBeCalledWith('site.profil.user-data.change-success')
|
||||
})
|
||||
|
||||
it('has no edit button anymore', () => {
|
||||
expect(wrapper.find('svg.bi-pencil').exists()).toBeFalsy()
|
||||
})
|
||||
})
|
||||
|
||||
describe('submit retruns error', () => {
|
||||
beforeEach(async () => {
|
||||
jest.clearAllMocks()
|
||||
mockAPIcall.mockReturnValue({
|
||||
success: false,
|
||||
result: { message: 'Error' },
|
||||
})
|
||||
await wrapper.find('input[placeholder="Username"]').setValue('username')
|
||||
await wrapper.find('form').trigger('submit')
|
||||
await flushPromises()
|
||||
})
|
||||
|
||||
it('calls the loginAPI', () => {
|
||||
expect(mockAPIcall).toHaveBeenCalledWith(1, 'user@example.org', 'username')
|
||||
})
|
||||
|
||||
it('toasts an error message', () => {
|
||||
expect(toastErrorMock).toBeCalledWith('Error')
|
||||
})
|
||||
|
||||
it('renders an empty username', () => {
|
||||
expect(wrapper.find('div.display-username').text()).toEqual('@')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -1,10 +1,11 @@
|
||||
import { createLocalVue } from '@vue/test-utils'
|
||||
import { BootstrapVue, IconsPlugin } from 'bootstrap-vue'
|
||||
import Vuex from 'vuex'
|
||||
|
||||
import { ValidationProvider, ValidationObserver, extend } from 'vee-validate'
|
||||
import * as rules from 'vee-validate/dist/rules'
|
||||
|
||||
import { messages } from 'vee-validate/dist/locale/en.json'
|
||||
|
||||
import RegeneratorRuntime from 'regenerator-runtime'
|
||||
import SideBar from '@/components/SidebarPlugin'
|
||||
import VueQrcode from 'vue-qrcode'
|
||||
@ -14,7 +15,7 @@ import VueMoment from 'vue-moment'
|
||||
import clickOutside from '@/directives/click-ouside.js'
|
||||
import { focus } from 'vue-focus'
|
||||
|
||||
global.localVue = createLocalVue()
|
||||
import { loadAllRules } from '../src/validation-rules'
|
||||
|
||||
Object.keys(rules).forEach((rule) => {
|
||||
extend(rule, {
|
||||
@ -23,6 +24,15 @@ Object.keys(rules).forEach((rule) => {
|
||||
})
|
||||
})
|
||||
|
||||
const i18nMock = {
|
||||
t: (identifier, values) => identifier,
|
||||
n: (value, format) => value,
|
||||
}
|
||||
|
||||
loadAllRules(i18nMock)
|
||||
|
||||
global.localVue = createLocalVue()
|
||||
|
||||
global.localVue.use(BootstrapVue)
|
||||
global.localVue.use(Vuex)
|
||||
global.localVue.use(IconsPlugin)
|
||||
|
||||
@ -12,7 +12,6 @@ RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig
|
||||
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
|
||||
RUN ln -s /usr/local/googletest ./googletest
|
||||
COPY ./src ./src
|
||||
COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake
|
||||
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
|
||||
COPY ./dependencies/spirit-po ./dependencies/spirit-po
|
||||
COPY ./dependencies/tinf ./dependencies/tinf
|
||||
@ -35,5 +34,5 @@ RUN cd scripts && \
|
||||
chmod +x compile_pot.sh && \
|
||||
./compile_pot.sh
|
||||
|
||||
CMD cd build && cmake .. && make -j$(nproc) Gradido_LoginServer && ./bin/Gradido_LoginServer
|
||||
CMD cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug && make -j$(nproc) Gradido_LoginServer && ./bin/Gradido_LoginServer
|
||||
|
||||
|
||||
Binary file not shown.
@ -7,438 +7,452 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-05-18 12:17+0200\n"
|
||||
"PO-Revision-Date: 2021-05-18 12:21+0200\n"
|
||||
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
|
||||
"PO-Revision-Date: 2021-06-21 13:38+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.4.3\n"
|
||||
"X-Generator: Poedit 3.0\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:181
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:260
|
||||
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
|
||||
msgid "Login"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:181
|
||||
#: build/http_pages/LoginPage.cpp:196
|
||||
msgid "E-Mail or password isn't right, please try again!"
|
||||
msgstr ""
|
||||
"E-Mail und Passwort Kombination stimmen nicht, bitte versuche es erneut. "
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:190
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid "Passwort"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:190
|
||||
#: build/http_pages/LoginPage.cpp:205
|
||||
msgid ""
|
||||
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:193
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:196
|
||||
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
|
||||
msgid "User"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:193
|
||||
#: build/http_pages/LoginPage.cpp:208
|
||||
msgid "Error in saved data, the server admin will look at it."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:196
|
||||
#: build/http_pages/LoginPage.cpp:211
|
||||
msgid "Benutzer ist deaktiviert, kein Login möglich!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:260
|
||||
#: build/http_pages/LoginPage.cpp:275
|
||||
msgid "Username and password are needed!"
|
||||
msgstr "E-Mail und Passwort werden benötigt!"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:290
|
||||
#: model/Session.cpp:164 model/Session.cpp:171 model/Session.cpp:223
|
||||
#: model/Session.cpp:234
|
||||
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
|
||||
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:291
|
||||
#: SingletonManager/SessionManager.cpp:608
|
||||
#: SingletonManager/SessionManager.cpp:614
|
||||
#: SingletonManager/SessionManager.cpp:620
|
||||
#: SingletonManager/SessionManager.cpp:626
|
||||
#: SingletonManager/SessionManager.cpp:632
|
||||
#: SingletonManager/SessionManager.cpp:638
|
||||
#: build/http_pages/LoginPage.cpp:381
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:603
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:609
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:614
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:619
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:624
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:629
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:292
|
||||
#: build/http_pages/LoginPage.cpp:384
|
||||
msgid " Login "
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:297
|
||||
#: build/http_pages/LoginPage.cpp:391
|
||||
msgid "You haven't any account yet? Please follow the link to create one."
|
||||
msgstr "Du hast noch kein Gradido-Konto?"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:299
|
||||
#: build/http_pages/LoginPage.cpp:395
|
||||
msgid "Create New Account"
|
||||
msgstr "Neues Konto erstellen"
|
||||
|
||||
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:303
|
||||
#: build/http_pages/LoginPage.cpp:403
|
||||
msgid "Passwort vergessen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:73
|
||||
#: build/http_pages/CheckEmailPage.cpp:155
|
||||
msgid "E-Mail verifizieren"
|
||||
msgstr "E-Mail überprüfen"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:78
|
||||
#: build/http_pages/CheckEmailPage.cpp:165
|
||||
msgid ""
|
||||
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:79
|
||||
#: build/http_pages/CheckEmailPage.cpp:170
|
||||
msgid "Zur Startseite"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:81
|
||||
#: build/http_pages/CheckEmailPage.cpp:175
|
||||
msgid "Bitte gib deinen E-Mail Verification Code ein:"
|
||||
msgstr "Bitte gib deinen E-Mail Verification Code ein:"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:82
|
||||
#: model/Session.cpp:187
|
||||
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
|
||||
msgid "Email Verification Code"
|
||||
msgstr "Email Verification Code"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:83
|
||||
#: build/http_pages/CheckEmailPage.cpp:185
|
||||
msgid "Überprüfe Code"
|
||||
msgstr "Überprüfe Code"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:86
|
||||
#: build/http_pages/CheckEmailPage.cpp:190
|
||||
msgid "Du hast bisher keinen Code erhalten?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:87
|
||||
#: build/http_pages/CheckEmailPage.cpp:193
|
||||
msgid "E-Mail erneut zuschicken (in Arbeit)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:90
|
||||
#: build/http_pages/CheckEmailPage.cpp:198
|
||||
msgid "Funktioniert dein E-Mail Verification Code nicht?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:91
|
||||
#: build/http_pages/CheckEmailPage.cpp:201
|
||||
msgid "Schicke uns eine E-Mail und wir kümmern uns darum: "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:92
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:151
|
||||
#: build/http_pages/CheckEmailPage.cpp:208
|
||||
#: build/http_pages/ResetPasswordPage.cpp:273
|
||||
msgid "E-Mail an Support schicken"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:113
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:124
|
||||
#: build/http_pages/ResetPasswordPage.cpp:174
|
||||
#: build/http_pages/ResetPasswordPage.cpp:217
|
||||
msgid "Gib bitte hier deine E-Mail Adresse an:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:116
|
||||
#: build/http_pages/ResetPasswordPage.cpp:183
|
||||
msgid "Bestätigen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:126
|
||||
#: build/http_pages/ResetPasswordPage.cpp:225
|
||||
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:131
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:206
|
||||
#: build/http_pages/ResetPasswordPage.cpp:234
|
||||
#: build/http_pages/PassphrasePage.cpp:373
|
||||
msgid "Ja"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:136
|
||||
#: build/http_pages/ResetPasswordPage.cpp:241
|
||||
msgid "Nein"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:140
|
||||
#: build/http_pages/ResetPasswordPage.cpp:247
|
||||
msgid "Absenden"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:145
|
||||
#: build/http_pages/ResetPasswordPage.cpp:255
|
||||
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:147
|
||||
#: build/http_pages/ResetPasswordPage.cpp:260
|
||||
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:149
|
||||
#: build/http_pages/ResetPasswordPage.cpp:265
|
||||
msgid ""
|
||||
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
|
||||
"Verzeichnis nach. "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:150
|
||||
#: build/http_pages/ResetPasswordPage.cpp:268
|
||||
msgid ""
|
||||
"Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten "
|
||||
"gewartet?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:26
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:96
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:117
|
||||
#: model/Session.cpp:468 model/Session.cpp:480 model/Session.cpp:494
|
||||
#: build/http_pages/PassphrasePage.cpp:41
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
|
||||
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:266
|
||||
#: build/http_pages/PassphrasePage.cpp:42
|
||||
#: build/http_pages/PassphrasePage.cpp:451
|
||||
msgid "Neues Konto anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
|
||||
#: build/http_pages/PassphrasePage.cpp:43
|
||||
msgid "2/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:96
|
||||
#: build/http_pages/PassphrasePage.cpp:111
|
||||
msgid ""
|
||||
"Diese Passphrase ist ungültig, bitte überprüfen oder neu "
|
||||
"generieren (lassen)."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:117
|
||||
#: build/http_pages/PassphrasePage.cpp:132
|
||||
msgid "intern error please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
|
||||
#: build/http_pages/PassphrasePage.cpp:147
|
||||
msgid "3/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:138
|
||||
#: build/http_pages/PassphrasePage.cpp:150
|
||||
#: build/http_pages/PassphrasePage.cpp:153
|
||||
msgid "1/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:137
|
||||
#: build/http_pages/PassphrasePage.cpp:152
|
||||
msgid "Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:148
|
||||
#: build/http_pages/PassphrasePage.cpp:270
|
||||
msgid "Passphrase abschreiben"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:159
|
||||
#: build/http_pages/PassphrasePage.cpp:287
|
||||
msgid "Was ist eine Passphrase?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:160
|
||||
#: build/http_pages/PassphrasePage.cpp:290
|
||||
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
|
||||
#: build/http_pages/PassphrasePage.cpp:293
|
||||
msgid "Sie dient deiner Sicherheit."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:162
|
||||
#: build/http_pages/PassphrasePage.cpp:296
|
||||
msgid ""
|
||||
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
|
||||
"dein Passwort vergessen haben solltest."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:164
|
||||
#: build/http_pages/PassphrasePage.cpp:300
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:169
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:197
|
||||
#: build/http_pages/PassphrasePage.cpp:309
|
||||
#: build/http_pages/PassphrasePage.cpp:352
|
||||
msgid "Was zu tun ist:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:170
|
||||
#: build/http_pages/PassphrasePage.cpp:312
|
||||
msgid ""
|
||||
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
|
||||
"Papier!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:171
|
||||
#: build/http_pages/PassphrasePage.cpp:315
|
||||
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:172
|
||||
#: build/http_pages/PassphrasePage.cpp:318
|
||||
msgid "Bewahre sie an einem sicheren Ort auf!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:174
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:285
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:290
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
|
||||
#: build/http_pages/PassphrasePage.cpp:322
|
||||
#: build/http_pages/PassphrasePage.cpp:478
|
||||
#: build/http_pages/PassphrasePage.cpp:487
|
||||
#: build/http_pages/PassphrasePage.cpp:511
|
||||
msgid "Weiter"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:198
|
||||
#: build/http_pages/PassphrasePage.cpp:355
|
||||
msgid "Hast du dir deine Passphrase gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:199
|
||||
#: build/http_pages/PassphrasePage.cpp:358
|
||||
msgid ""
|
||||
"Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in "
|
||||
"anderer Reihenfolge."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:200
|
||||
#: build/http_pages/PassphrasePage.cpp:361
|
||||
msgid "Klicke sie an um sie einzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:201
|
||||
#: build/http_pages/PassphrasePage.cpp:364
|
||||
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:205
|
||||
#: build/http_pages/PassphrasePage.cpp:370
|
||||
msgid ""
|
||||
"Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine "
|
||||
"Passphrase gemerkt oder aufgeschrieben?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:252
|
||||
#: build/http_pages/PassphrasePage.cpp:429
|
||||
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:256
|
||||
#: build/http_pages/PassphrasePage.cpp:437
|
||||
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:257
|
||||
#: build/http_pages/PassphrasePage.cpp:440
|
||||
msgid ""
|
||||
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
|
||||
"wiederherstellen?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:273
|
||||
#: build/http_pages/PassphrasePage.cpp:460
|
||||
msgid "Bestehendes Konto wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:280
|
||||
#: build/http_pages/PassphrasePage.cpp:469
|
||||
msgid ""
|
||||
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
|
||||
"Passphrase ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:297
|
||||
#: build/http_pages/PassphrasePage.cpp:497
|
||||
msgid "Konto wiederherstellen / Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:299
|
||||
#: build/http_pages/PassphrasePage.cpp:501
|
||||
msgid ""
|
||||
"Um dein Konto wiederherzustellen und dir ein Neues Passwort auswählen zu "
|
||||
"können, tippe hier bitte die Wörter deiner Passphrase in der richtigen "
|
||||
"Reihenfolge ein, welche du dir aufgeschrieben hast."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:313
|
||||
#: build/http_pages/PassphrasePage.cpp:524
|
||||
msgid "Fehler"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:314
|
||||
#: build/http_pages/PassphrasePage.cpp:527
|
||||
msgid ""
|
||||
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
|
||||
"dich an den Server-Admin."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:150 model/Session.cpp:180 model/Session.cpp:779
|
||||
#: model/Session.cpp:785 model/Session.cpp:1061 model/Session.cpp:1077
|
||||
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
|
||||
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
|
||||
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
|
||||
msgid "Benutzer"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:150
|
||||
#: src/cpp/model/Session.cpp:147
|
||||
msgid "Eingeloggter Benutzer ist kein Admin"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:156 model/Session.cpp:215
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
|
||||
msgid "Vorname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:156 model/Session.cpp:160 model/Session.cpp:215
|
||||
#: model/Session.cpp:219
|
||||
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
|
||||
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
|
||||
msgid ""
|
||||
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
|
||||
"<>&;"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:160 model/Session.cpp:219
|
||||
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
|
||||
msgid "Nachname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:164 model/Session.cpp:223
|
||||
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
|
||||
msgid "Bitte gebe eine gültige E-Mail Adresse an."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:171
|
||||
#: src/cpp/model/Session.cpp:168
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits einen Account"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:180 model/Session.cpp:187
|
||||
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
|
||||
msgid "Fehler beim speichern!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:234
|
||||
#: src/cpp/model/Session.cpp:231
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits ein Konto"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:258
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:258
|
||||
#: src/cpp/model/Session.cpp:255
|
||||
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:353 model/Session.cpp:393 model/Session.cpp:966
|
||||
#: model/Session.cpp:975
|
||||
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
|
||||
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
|
||||
msgid "E-Mail Verification"
|
||||
msgstr "E-Mail Überprüfung"
|
||||
|
||||
#: model/Session.cpp:353
|
||||
#: src/cpp/model/Session.cpp:350
|
||||
msgid "Du hast dein Konto bereits aktiviert!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:393
|
||||
#: src/cpp/model/Session.cpp:390
|
||||
msgid "Falscher Code für aktiven Login"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:468
|
||||
#: src/cpp/model/Session.cpp:465
|
||||
msgid "Deine Passphrase ist ungütig"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:480
|
||||
#: src/cpp/model/Session.cpp:477
|
||||
msgid "Ein Fehler trat auf, bitte versuche es erneut"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:494
|
||||
#: src/cpp/model/Session.cpp:491
|
||||
msgid "Das ist nicht die richtige Passphrase."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:779
|
||||
#: src/cpp/model/Session.cpp:645
|
||||
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:785
|
||||
#: src/cpp/model/Session.cpp:651
|
||||
msgid ""
|
||||
"Fehler beim Löschen des Accounts. Bitte logge dich erneut ein und "
|
||||
"versuche es nochmal."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:966
|
||||
#: src/cpp/model/Session.cpp:832
|
||||
msgid "Konnte kein passendes Konto finden."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:975
|
||||
#: src/cpp/model/Session.cpp:841
|
||||
msgid "Fehler beim laden des Benutzers."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1061
|
||||
#: src/cpp/model/Session.cpp:937
|
||||
msgid "Kein gültiger Benutzer, bitte logge dich erneut ein."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1077
|
||||
#: src/cpp/model/Session.cpp:953
|
||||
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
|
||||
msgstr ""
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:609
|
||||
#: src/cpp/model/email/Email.cpp:174
|
||||
msgid "Default Email Subject"
|
||||
msgstr ""
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:180
|
||||
msgid "Error from Gradido Login Server"
|
||||
msgstr "Fehler auf dem Gradido Login Server"
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:200
|
||||
msgid "Gradido: E-Mail Verification"
|
||||
msgstr "Gradido: E-Mail Überprüfung"
|
||||
|
||||
#: src/cpp/model/email/Email.cpp:246
|
||||
msgid "Gradido: Reset Password"
|
||||
msgstr "Gradido: Passwort zurücksetzen"
|
||||
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:604
|
||||
msgid ""
|
||||
"Please enter a valid password with at least 8 characters, upper and lower "
|
||||
"case letters, at least one number and one special character (@$!%*?&+-_)!"
|
||||
@ -447,23 +461,23 @@ msgstr ""
|
||||
"Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen (@$!%*?&+-_) "
|
||||
"ein!"
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:615
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:610
|
||||
msgid "Your password is to short!"
|
||||
msgstr "Dein Passwort ist zu kurz!"
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:621
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:615
|
||||
msgid "Your password does not contain lowercase letters!"
|
||||
msgstr "Dein Passwort enthält keine Kleinbuchstaben!"
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:627
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:620
|
||||
msgid "Your password does not contain any capital letters!"
|
||||
msgstr " Dein Passwort enthält keine Großbuchstaben!"
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:633
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:625
|
||||
msgid "Your password does not contain any number!"
|
||||
msgstr "Dein Passwort enthält keine Zahlen!"
|
||||
|
||||
#: SingletonManager/SessionManager.cpp:639
|
||||
#: src/cpp/SingletonManager/SessionManager.cpp:630
|
||||
msgid "Your password does not contain special characters (@$!%*?&+-)!"
|
||||
msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
|
||||
|
||||
@ -493,9 +507,6 @@ msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
|
||||
#~ "Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
#~ "Bitcoin) um für dich die maximale Sicherheit zu gewährleisten."
|
||||
|
||||
#~ msgid "Gradido: E-Mail Verification"
|
||||
#~ msgstr "Gradido: E-Mail Überprüfung"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Der Code stimmt nicht, bitte überprüfe ihn nochmal oder "
|
||||
#~ "registriere dich erneut oder wende dich an den Server-Admin"
|
||||
|
||||
@ -123,13 +123,18 @@ Poco::JSON::Object* JsonUpdateUserInfos::handle(Poco::Dynamic::Var params)
|
||||
}
|
||||
}
|
||||
else if ("User.description" == name) {
|
||||
std::string str_val = validateString(value, "User.description", jsonErrorsArray);
|
||||
std::string errorMessage = "User.description";
|
||||
|
||||
if (str_val.size() > 0 && str_val != user_model->getDescription()) {
|
||||
if (!value.isString()) {
|
||||
errorMessage += " isn't a string";
|
||||
jsonErrorsArray.add(errorMessage);
|
||||
}
|
||||
std::string str_val = value.toString();
|
||||
|
||||
if (str_val != user_model->getDescription()) {
|
||||
user_model->setDescription(str_val);
|
||||
extractet_values++;
|
||||
}
|
||||
|
||||
}
|
||||
else if ("User.disabled" == name) {
|
||||
bool disabled;
|
||||
|
||||
@ -171,13 +171,13 @@ Gradido Login-Server\n\
|
||||
switch (mType) {
|
||||
case EMAIL_DEFAULT:
|
||||
mailMessage->addRecipient(adminRecipient);
|
||||
mailMessage->setSubject(langCatalog->gettext_str("Default Email Subject"));
|
||||
mailMessage->setSubject(langCatalog->gettext("Default Email Subject"));
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(langCatalog->gettext_str("Empty Email Content"), mt.toString()));
|
||||
break;
|
||||
|
||||
case EMAIL_ERROR:
|
||||
mailMessage->addRecipient(adminRecipient);
|
||||
mailMessage->setSubject(langCatalog->gettext_str("Error from Gradido Login Server"));
|
||||
mailMessage->setSubject(langCatalog->gettext("Error from Gradido Login Server"));
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(mErrorHtml, mt.toString()));
|
||||
break;
|
||||
|
||||
@ -197,7 +197,7 @@ Gradido Login-Server\n\
|
||||
return false;
|
||||
}
|
||||
mailMessage->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mUser->getModel()->getEmail()));
|
||||
mailMessage->setSubject(langCatalog->gettext_str("Gradido: E-Mail Verification"));
|
||||
mailMessage->setSubject(langCatalog->gettext("Gradido: E-Mail Verification"));
|
||||
|
||||
messageTemplate = EmailText_emailVerification;
|
||||
if (EMAIL_USER_VERIFICATION_CODE_RESEND == mType) {
|
||||
@ -243,7 +243,7 @@ Gradido Login-Server\n\
|
||||
return false;
|
||||
}
|
||||
mailMessage->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mUser->getModel()->getEmail()));
|
||||
mailMessage->setSubject(langCatalog->gettext_str(u8"Gradido: Passwort zurücksetzen"));
|
||||
mailMessage->setSubject(langCatalog->gettext("Gradido: Reset Password"));
|
||||
|
||||
mailMessage->addContent(
|
||||
new Poco::Net::StringPartSource(replaceUserNamesAndLink(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user