From b0578f5eda8ff0dbd3276c856fef45a3fbd75c00 Mon Sep 17 00:00:00 2001 From: kekskurse Date: Sun, 16 Mar 2025 01:16:06 +0100 Subject: [PATCH] chore: test --- pkg/userstore/migrations/schema.sql | 25 ++++++++++--- pkg/web/web.go | 1 + playwright/screenshot.png | Bin 4851 -> 47630 bytes playwright/tests/example.spec.js | 53 ++++++++++++++++++++++++++-- templates/register.html | 14 ++++---- 5 files changed, 80 insertions(+), 13 deletions(-) diff --git a/pkg/userstore/migrations/schema.sql b/pkg/userstore/migrations/schema.sql index 23e064b..a4b5a31 100644 --- a/pkg/userstore/migrations/schema.sql +++ b/pkg/userstore/migrations/schema.sql @@ -1,9 +1,26 @@ -- --- LibSQL SQL Schema dump automatic generated by geni +-- Sqlite SQL Schema dump automatic generated by geni -- -CREATE TABLE schema_migrations (id VARCHAR(255) NOT NULL PRIMARY KEY); -CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL); +CREATE TABLE schema_migrations (id VARCHAR(255) PRIMARY KEY); +CREATE TABLE users ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + username TEXT NOT NULL UNIQUE, + password TEXT NOT NULL +); CREATE TABLE sqlite_sequence(name,seq); -CREATE TABLE mail (id INTEGER PRIMARY KEY AUTOINCREMENT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, user_id INTEGER NOT NULL, mail TEXT NOT NULL UNIQUE, validation_code TEXT NOT NULL UNIQUE, is_validated BOOLEAN NOT NULL DEFAULT 0, is_primary BOOLEAN NOT NULL DEFAULT 0, FOREIGN KEY (user_id) REFERENCES users (id)); \ No newline at end of file +CREATE TABLE mail ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + created_at DATETIME DEFAULT CURRENT_TIMESTAMP, + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP, + user_id INTEGER NOT NULL, + mail TEXT NOT NULL UNIQUE, + validation_code TEXT NOT NULL UNIQUE, + is_validated BOOLEAN NOT NULL DEFAULT 0, + is_primary BOOLEAN NOT NULL DEFAULT 0, + + FOREIGN KEY(user_id) REFERENCES users(id) +); \ No newline at end of file diff --git a/pkg/web/web.go b/pkg/web/web.go index c49529b..45352e3 100644 --- a/pkg/web/web.go +++ b/pkg/web/web.go @@ -45,6 +45,7 @@ func (w Web) PostRegisterPage(c *gin.Context) { if c.PostForm("password") != c.PostForm("confirm_password") { c.HTML(http.StatusOK, "register.html", gin.H{"msg": "Passworts dont match"}) + return } err := w.ma.RegisterUser(c.PostForm("username"), c.PostForm("email"), c.PostForm("password")) diff --git a/playwright/screenshot.png b/playwright/screenshot.png index 6ab948ed3ff18ec2c1959fdb0d99c746aff23857..c83dbfedb648ad9c5800626282f0f863bb7f5d0c 100644 GIT binary patch literal 47630 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 bb}yq^Lg2Z+ddHe!;NST(7QYu6JKg_pWXgV$ literal 4851 zcmeAS@N?(olHy`uVBq!ia0y~yUA6ik51)_2&FHQJQ$dLq$kZva`oUNmqne-i^6 z1A~Gi15kQ`LIcn(9s&n|N>n%!fTR!+%6~lfx7)w(-L%)wGk5N@eB+-i^*C+Yy>;o^ zlY0vPe%o}@X8y5~y?wu*mVN%3C-wMk=El0(h&y{^&p)o3yDxA4wC|TCl6y`UZoenH z{<2BlzB9}JzB9RPm;c;+{?92u7d-j<@!!9Hlh^B=|NQ&;&4(X;81xp_-qtm{{4TY$ z+;WXr`_Ve{-IB?3_*Xwo{J3ehZ?a7I_uK8$r(gYRa_)Th*DqV*@AMSb#jRO4`|qnd zsmEXT%&@hUiIabC|5Fp_*Au@BxWAmO*<1I+?$}(pu+_I8f3#V5{BP>cnSUi7+&j0u z`}4maf0KS~il~|Y>z>^m-{+?#l4JVXGk?C1{BXA@^%FM(!-4#di45`Qr=PBm_c7l; z2k42||C>)dE!z3-mn|@Y56u7eQ88lq@~__tcE#u~f1LOA(}r38$+L9x=9wRt_pP?e z`L@0L=K1g$&sMij|N5?CU)=fp^ZmQG@Bi@+=)MR4KRvWQaQgV|v)A)?|GoY7S>nE^ z+P@no|NND^|K^@K$0V*7et#^m=5yli82i|?+s~ID{k#2d(#MKfZ{y11^Y_co+FETj z=h)wxpC596|0;bi3yM>_+s7IA?5w_5YjE#x>G7|Ra`(pH|2s7s^13Hm;_dg%IbLEOZ>zW8f?W!%?x0u( z(Ci<-f1J_10Azf)O?3JpF}aN@r&7Kh4am`eB( { test('see register page', async ({page}) => { await page.goto('/web/register'); - await expect(page.getByRole('heading', { name: 'Registrieren'})).toBeVisible(); - await expect(page.getByRole('button', { name: 'Registrieren' })).toBeVisible(); + await expect(page.getByRole('heading', { name: 'Register'})).toBeVisible(); + await expect(page.getByRole('button', { name: 'Register' })).toBeVisible(); +}) + +test('invalide username at register page', async ({page}) => { + await page.goto('/web/register'); + await page.getByLabel('Username').fill('abc'); + await page.getByLabel('E-mail Address').fill('error@error.error'); + await page.getByLabel('Password', {name: 'password', exact: true}).fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%%n3T7rKw'); + await page.getByLabel('Repeat Password').fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%%n3T7rKw'); + await page.getByRole('button', { name: 'Register' }).click(); + + await expect(page.getByText('username has invalide chars: username has invalide chars ')).toBeVisible(); + + await page.screenshot({ path: 'screenshot.png' }); +}) + +test('invalide mail at register page', async ({page, browserName}) => { + await page.goto('/web/register'); + await page.getByLabel('Username').fill('kekskursefail'); + await page.getByLabel('E-mail Address').fill('error@error.error'); + await page.getByLabel('Password', {name: 'password', exact: true}).fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%%n3T7rKw'); + await page.getByLabel('Repeat Password').fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%%n3T7rKw'); + await page.getByRole('button', { name: 'Register' }).click(); + + await page.screenshot({ path: 'screenshot.png' }); + await expect(page.getByText('cant send mail: cant send mail to error mail')).toBeVisible(); +}) + +test('different passwords', async ({page}) => { + await page.goto('/web/register'); + await page.getByLabel('Username').fill('kekskurse'); + await page.getByLabel('E-mail Address').fill('error@error.error'); + await page.getByLabel('Password', {name: 'password', exact: true}).fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%'); + await page.getByLabel('Repeat Password').fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%%n3T7rKw'); + await page.getByRole('button', { name: 'Register' }).click(); + + await page.screenshot({ path: 'screenshot.png' }); + await expect(page.getByText('Passworts dont match')).toBeVisible(); +}) + +test('register currect', async ({page, browserName}) => { + await page.goto('/web/register'); + await page.getByLabel('Username').fill('kekskurse'+browserName); + await page.getByLabel('E-mail Address').fill('hello'+browserName+'@example.com'); + await page.getByLabel('Password', {name: 'password', exact: true}).fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%'); + await page.getByLabel('Repeat Password').fill('7Jw^zNhk!NU3a8qfVp%a*VV!&Won1gD9zVHr&pgNairR5U6^h^$D%TxyJ2qHp%'); + await page.getByRole('button', { name: 'Register' }).click(); + + await page.screenshot({ path: 'screenshot.png' }); + await expect(page.getByText('Your account was created, you can login now')).toBeVisible(); }) diff --git a/templates/register.html b/templates/register.html index e2b3e97..c497926 100644 --- a/templates/register.html +++ b/templates/register.html @@ -8,7 +8,7 @@
-

Registrieren

+

Register

{{ if .msg }}
{{ .msg }} @@ -16,28 +16,28 @@ {{ end }}
- +
- +
- +
- +
@@ -60,7 +60,7 @@
!--> -

Bereits ein Konto? Anmelden

+

Already have an account?? Login