From 70e4bca96cf2fde3e6b3be4127ebd344421a5d33 Mon Sep 17 00:00:00 2001 From: marcospampi Date: Fri, 13 Nov 2026 18:29:16 +0100 Subject: [PATCH 1/5] tests: verify student id --- pages/profile_page.py | 12 ++++++++++++ tests/test_student_id.py | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 pages/profile_page.py create mode 100644 tests/test_student_id.py diff --git a/pages/profile_page.py b/pages/profile_page.py new file mode 100644 index 0000000..b117da7 --- /dev/null +++ b/pages/profile_page.py @@ -0,0 +1,12 @@ +from playwright.sync_api import Page + + +class ProfilePage: + def __init__(self, page: Page) -> None: + self.page = page + self.name = page.get_by_test_id("profile-name") + self.student_id = page.get_by_test_id("profile-student-id") + self.degree_course = page.get_by_test_id("profile-degree") + + def goto(self): + self.page.goto('/profile') \ No newline at end of file diff --git a/tests/test_student_id.py b/tests/test_student_id.py new file mode 100644 index 0000000..b88d818 --- /dev/null +++ b/tests/test_student_id.py @@ -0,0 +1,18 @@ +from playwright.sync_api import Page, expect + +from pages.login_page import LoginPage +from pages.profile_page import ProfilePage + + +def test_student_id(page: Page) -> None: + + login_page = LoginPage(page) + profile_page = ProfilePage(page) + + login_page.goto() + login_page.username.fill("mario") + login_page.username.fill("password123") + login_page.login() + + profile_page.goto() + expect(profile_page.student_id).to_have_text('1000012345') \ No newline at end of file From 6e9298204f4d02d22d6f3bbb9d1e3c5a014634f1 Mon Sep 17 00:00:00 2001 From: marcospampi Date: Fri, 13 Nov 2026 18:34:48 +0100 Subject: [PATCH 2/5] tests: format profile_page.py and test_student_id.py --- pages/profile_page.py | 2 +- tests/test_student_id.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pages/profile_page.py b/pages/profile_page.py index b117da7..c68b80d 100644 --- a/pages/profile_page.py +++ b/pages/profile_page.py @@ -9,4 +9,4 @@ def __init__(self, page: Page) -> None: self.degree_course = page.get_by_test_id("profile-degree") def goto(self): - self.page.goto('/profile') \ No newline at end of file + self.page.goto("/profile") diff --git a/tests/test_student_id.py b/tests/test_student_id.py index b88d818..23fb89c 100644 --- a/tests/test_student_id.py +++ b/tests/test_student_id.py @@ -6,13 +6,13 @@ def test_student_id(page: Page) -> None: - login_page = LoginPage(page) - profile_page = ProfilePage(page) - - login_page.goto() - login_page.username.fill("mario") - login_page.username.fill("password123") - login_page.login() + login_page = LoginPage(page) + profile_page = ProfilePage(page) - profile_page.goto() - expect(profile_page.student_id).to_have_text('1000012345') \ No newline at end of file + login_page.goto() + login_page.username.fill("mario") + login_page.username.fill("password123") + login_page.login() + + profile_page.goto() + expect(profile_page.student_id).to_have_text("1000012345") From 387a7d424edbcf50cd7bbe2aa39881212b2f686f Mon Sep 17 00:00:00 2001 From: marcospampi Date: Fri, 13 Nov 2026 18:39:35 +0100 Subject: [PATCH 3/5] tests: use correct login method --- tests/test_student_id.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/test_student_id.py b/tests/test_student_id.py index 23fb89c..f97d658 100644 --- a/tests/test_student_id.py +++ b/tests/test_student_id.py @@ -5,14 +5,11 @@ def test_student_id(page: Page) -> None: - login_page = LoginPage(page) profile_page = ProfilePage(page) - login_page.goto() - login_page.username.fill("mario") - login_page.username.fill("password123") - login_page.login() + login_page.login("mario", "password123") profile_page.goto() + expect(profile_page.student_id).to_have_text("1000012345") From a5544f892c8e8a8742af63643d221ebf0e661bfb Mon Sep 17 00:00:00 2001 From: marcospampi Date: Sat, 14 Nov 2026 08:39:17 +0100 Subject: [PATCH 4/5] tests: use BDD pattern for test_student_id --- tests/features/student_id.feature | 14 ++++++++++++++ tests/test_student_id.py | 25 +++++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 tests/features/student_id.feature diff --git a/tests/features/student_id.feature b/tests/features/student_id.feature new file mode 100644 index 0000000..76f96c0 --- /dev/null +++ b/tests/features/student_id.feature @@ -0,0 +1,14 @@ +Feature: StudentId + + # Background: + + Scenario: Correct student id + Given I log in as "mario" with password "password123" + When I goto profile page + Then I see the student ID "1000012345" + + Scenario: Wrong student id + Given I log in as "luigi" with password "password123" + When I goto profile page + Then I cannot enter profile page + And I do not see any student ID diff --git a/tests/test_student_id.py b/tests/test_student_id.py index f97d658..9f93540 100644 --- a/tests/test_student_id.py +++ b/tests/test_student_id.py @@ -1,15 +1,32 @@ from playwright.sync_api import Page, expect +from pytest_bdd import given, parsers, scenarios, then, when from pages.login_page import LoginPage from pages.profile_page import ProfilePage +scenarios("features/student_id.feature") -def test_student_id(page: Page) -> None: + +@given(parsers.parse('I log in as "{username}" with password "{password}"')) +def login_as_user(page: Page, username: str, password: str) -> None: login_page = LoginPage(page) + login_page.goto() + login_page.login(username, password) + +@when('I goto profile page', target_fixture='profile_page') +def goto_profile_page(page: Page) -> ProfilePage: profile_page = ProfilePage(page) + profile_page.goto() + return profile_page - login_page.login("mario", "password123") +@then(parsers.parse('I see the student ID "{student_id}"')) +def see_student_id(profile_page: ProfilePage, student_id: str) -> None: + expect(profile_page.student_id).to_have_text(student_id) - profile_page.goto() +@then("I do not see any student ID") +def dont_see_student_id(profile_page: ProfilePage) -> None: + expect(profile_page.student_id).to_have_count(0) - expect(profile_page.student_id).to_have_text("1000012345") +@then("I cannot enter profile page") +def dont_see_student_id(page: Page) -> None: + expect(page).not_to_have_url('/profile') \ No newline at end of file From be45b5daa603354ca3456707ce0794109fc5d91e Mon Sep 17 00:00:00 2001 From: marcospampi Date: Sat, 14 Nov 2026 08:39:39 +0100 Subject: [PATCH 5/5] tests: format --- tests/test_student_id.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/test_student_id.py b/tests/test_student_id.py index 9f93540..1c58135 100644 --- a/tests/test_student_id.py +++ b/tests/test_student_id.py @@ -13,20 +13,24 @@ def login_as_user(page: Page, username: str, password: str) -> None: login_page.goto() login_page.login(username, password) -@when('I goto profile page', target_fixture='profile_page') + +@when("I goto profile page", target_fixture="profile_page") def goto_profile_page(page: Page) -> ProfilePage: profile_page = ProfilePage(page) profile_page.goto() return profile_page + @then(parsers.parse('I see the student ID "{student_id}"')) def see_student_id(profile_page: ProfilePage, student_id: str) -> None: expect(profile_page.student_id).to_have_text(student_id) + @then("I do not see any student ID") def dont_see_student_id(profile_page: ProfilePage) -> None: expect(profile_page.student_id).to_have_count(0) + @then("I cannot enter profile page") def dont_see_student_id(page: Page) -> None: - expect(page).not_to_have_url('/profile') \ No newline at end of file + expect(page).not_to_have_url("/profile")