From c821ab03d095a911b87d32f0ea8734b4b4d25388 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 15 Apr 2024 10:50:59 +0200 Subject: [PATCH 1/3] MOBILE-4470 login: Fix sites list --- .../tests/behat/behat_app.php | 5 ++++- .../tests/behat/behat_app_helper.php | 2 +- src/core/features/login/pages/site/site.html | 2 +- .../login/tests/behat/basic_usage.feature | 21 ++++++++++++++++-- ...age-of-login-in-app-shows-sites-list_8.png | Bin 0 -> 51976 bytes 5 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-shows-sites-list_8.png diff --git a/local_moodleappbehat/tests/behat/behat_app.php b/local_moodleappbehat/tests/behat/behat_app.php index 47ff474bd..c5b4ccfa6 100644 --- a/local_moodleappbehat/tests/behat/behat_app.php +++ b/local_moodleappbehat/tests/behat/behat_app.php @@ -599,7 +599,10 @@ class behat_app extends behat_app_helper { */ public function the_app_has_the_following_config(TableNode $data) { foreach ($data->getRows() as $configrow) { - $this->appconfig[$configrow[0]] = json_decode($configrow[1]); + $name = $configrow[0]; + $value = $this->replace_wwwroot($configrow[1]); + + $this->appconfig[$name] = json_decode($value); } } diff --git a/local_moodleappbehat/tests/behat/behat_app_helper.php b/local_moodleappbehat/tests/behat/behat_app_helper.php index 7270abc27..50a905623 100644 --- a/local_moodleappbehat/tests/behat/behat_app_helper.php +++ b/local_moodleappbehat/tests/behat/behat_app_helper.php @@ -242,7 +242,7 @@ class behat_app_helper extends behat_base { // Assert initial page. $this->spin(function($context) { $page = $context->getSession()->getPage(); - $element = $page->find('xpath', '//page-core-login-site//input[@name="url"]'); + $element = $page->find('xpath', '//page-core-login-site'); if ($element) { // Login screen found. diff --git a/src/core/features/login/pages/site/site.html b/src/core/features/login/pages/site/site.html index b6833401a..186bbc4ce 100644 --- a/src/core/features/login/pages/site/site.html +++ b/src/core/features/login/pages/site/site.html @@ -120,7 +120,7 @@

{{site.title}}

-

{{site.noProtocolUrl}}

+

{{site.noProtocolUrl}}

{{site.location}}

diff --git a/src/core/features/login/tests/behat/basic_usage.feature b/src/core/features/login/tests/behat/basic_usage.feature index b0eb396ad..b1f4c57d6 100755 --- a/src/core/features/login/tests/behat/basic_usage.feature +++ b/src/core/features/login/tests/behat/basic_usage.feature @@ -37,9 +37,8 @@ Feature: Test basic usage of login in app | Username | student1 | | Password | student1 | And I press "Log in" near "Lost password?" in the app - Then I should find "Acceptance test site" in the app + Then the header should be "Acceptance test site" in the app And the UI should match the snapshot - But I should not find "Log in" in the app Scenario: Add a non existing account When I launch the app @@ -160,3 +159,21 @@ Feature: Test basic usage of login in app When I press "OK" in the app And I press "Lost password?" in the app Then I should find "Contact support" in the app + + Scenario: Shows sites list + Given the app has the following config: + | sites | [{"name":"Xavier's School for Gifted Youngsters","alias":"XSGY","imageurl":"https://x-school.campus.edu/logo.png","city":"North Salem","countrycode":"US","url":"https://x-school.campus.edu"},{"name":"Hogwarts", "url":"https://hogwarts.campus.edu"},{"name":"Acceptance test site","url":"$WWWROOT"}] | + When I launch the app + Then I should find "Xavier's School for Gifted Youngsters (XSGY)" in the app + + When I replace "/.*/" within "ion-list ion-item:last-of-type ion-label p:last-of-type" with "campus.example.edu" + Then the UI should match the snapshot + + When I press "Acceptance test site" in the app + Then I should find "Log in" in the app + + When I set the following fields to these values in the app: + | Username | student1 | + | Password | student1 | + And I press "Log in" near "Lost password?" in the app + Then the header should be "Acceptance test site" in the app diff --git a/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-shows-sites-list_8.png b/src/core/features/login/tests/behat/snapshots/test-basic-usage-of-login-in-app-shows-sites-list_8.png new file mode 100644 index 0000000000000000000000000000000000000000..497c8c3336f338db57e06739a637cba190ca80fc GIT binary patch literal 51976 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

7_>zfUXnT&LaaQNAo={2JIiw<`$;^`vW{lkB ztv>KGiUb8DJk{}mC^swQ>Yjl}mxqp&zy5WLxRQL^XzfJgbRO}|;3q5UXzcRaL~>^( z{#8L=ZFotsG1j~KIulJ*%HgAr&2uQ)J8#T!vh-zSx3T7lAQ~bfRTV_XuU<;wK_k1C6W$9lA zEZzXwAk@R65ysk?L_OcMfNtct?n>C6$On)$;Bsj*u{AzyNMfsYp!7B{$m2wy^4lO&`ub5YfhW>NVrp8}AJ`Wx=CSb9 z2HG(rn6xBYlUK}ci0|#wLHnB!EzPIX=beEVolPdeCe?G+s2Ir0ILxCm#vDatYmd8h7Ru#) zc9@YO&=>8=xf*BqVJs~zjS~>L1j0!y84n`7rT~)QAPWvX>75sd4H$u!?@QI0hPeAx zgAP(rKt8118OdvE+|6N3e$6l%dW4$XZ*X?(I#32BR+a1^pD)eo8AE}L5@4TBL>jlB zKU14P$L_SNf5D_^JZ-G-tF_1F7Z!SY2a(2UWsmY~*+NItJ~bZKSa?fdVUsJOu}TOP zaZHzQTCdArLST>;0@4XX7S$^x>MijvyB3YQ`L-QaZ&k~mH%O^H-q#LT4G2gR`#C@3 zk9*a1fR#5pFvXhw_&W%@Sx$SFsU2xf;wNvMIXCnZ-uWdh!kc{FBy8b}_vxt1nn%XC zUJ(a{BnBp5JFr#y9-j0IJAL<^nb2ejAfAv*wXUDDt4?o!R30Rgb#vo$Xx=1&^GxaD zz5*g1>_!A{54p*vodZvm+HFae5VrF0W>&)qMxR+o9}2wFF{;ZeoFHh_EE*K!G-BJeW?>x*GJk@c5THC6K5RgHbkl$w}UOOI4jLSqE-=~26QU3RR z9*wU*Xn(Q1byeA2kxG}lBhFwS0aZyfL+?#u(E5N6Y6~)eohcig(q5~Kob(7f4oJUM z37M*pT{L88;l}&I$@!*FOW!)

$G$oFL;K~&!9RQg~mH9DVnw5EQkk39eBZH(CX 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 Date: Mon, 15 Apr 2024 10:55:40 +0200 Subject: [PATCH 2/3] MOBILE-4470 login: Fix unsupported site message --- src/core/features/login/lang.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/features/login/lang.json b/src/core/features/login/lang.json index a3b4e91e8..2f14dfa99 100644 --- a/src/core/features/login/lang.json +++ b/src/core/features/login/lang.json @@ -120,7 +120,7 @@ "supplyinfo": "More details", "toggleremove": "Edit accounts list", "unsupportedsite": "Site not accessible through the app", - "unsupportedsitemessage": "{{site}} can't be accessed through this app.\nYou can still access it using a web browser", + "unsupportedsitemessage": "{{site}} can't be accessed through this app.

You can still access it using a web browser.", "username": "Username", "usernamelowercase": "Only lowercase letters allowed", "usernameoremail": "Enter either username or email address", From 7471712053f62be23a2236fca4c70818a6e0f531 Mon Sep 17 00:00:00 2001 From: Noel De Martin Date: Mon, 15 Apr 2024 11:14:43 +0200 Subject: [PATCH 3/3] MOBILE-4446 behat: Fix tests for 4.2 --- .../tests/behat/basic-usage-402.feature | 70 +++++++++++++++++++ .../courses/tests/behat/basic_usage.feature | 2 +- 2 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 src/core/features/courses/tests/behat/basic-usage-402.feature diff --git a/src/core/features/courses/tests/behat/basic-usage-402.feature b/src/core/features/courses/tests/behat/basic-usage-402.feature new file mode 100644 index 000000000..935d791bd --- /dev/null +++ b/src/core/features/courses/tests/behat/basic-usage-402.feature @@ -0,0 +1,70 @@ +@core_courses @app @javascript @lms_upto4.2 +Feature: Test basic usage of courses in app + In order to participate in the courses while using the mobile app + As a student + I need basic courses functionality to work + + Background: + Given the Moodle site is compatible with this feature + And the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | teacher | teacher1@example.com | + | student1 | Student | student | student1@example.com | + And the following "courses" exist: + | fullname | shortname | category | visible | + | Course 1 | C1 | 0 | 1 | + | Course 2 | C2 | 0 | 1 | + | Course 3 | C3 | 0 | 1 | + | Course 4 | C4 | 0 | 1 | + | Hidden course | CH | 0 | 0 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + | teacher1 | C2 | editingteacher | + | teacher1 | C3 | editingteacher | + | teacher1 | C4 | editingteacher | + | teacher1 | CH | editingteacher | + | student1 | C1 | student | + | student1 | C2 | student | + | student1 | C3 | student | + | student1 | CH | student | + And the following "activities" exist: + | activity | name | intro | course | idnumber | option | + | choice | Choice course 1 | Test choice description | C1 | choice1 | Option 1, Option 2, Option 3 | + | choice | Choice course 2 | Test choice description | C2 | choice1 | Option 1, Option 2, Option 3 | + | choice | Choice course 3 | Test choice description | C3 | choice1 | Option 1, Option 2, Option 3 | + | choice | Choice course 4 | Test choice description | C4 | choice1 | Option 1, Option 2, Option 3 | + And the following "activities" exist: + | activity | course | idnumber | name | intro | assignsubmission_onlinetext_enabled | duedate | gradingduedate | + | assign | C1 | assign1 | assignment | Test assignment description | 1 | ##tomorrow## | ##tomorrow## | + + @lms_from4.0 + Scenario: See my courses + Given I entered the app as "student1" + When the header should be "Acceptance test site" in the app + And I press "My courses" in the app + And I should find "Course 1" in the app + And I should find "Course 2" in the app + And I should find "Course 3" in the app + + When I press "Course 1" in the app + Then I should find "Choice course 1" in the app + And the header should be "Course 1" in the app + + When I press "Choice course 1" in the app + Then I should find "Test choice description" in the app + And the header should be "Choice course 1" in the app + + When I press the back button in the app + And I press the back button in the app + And I press "Course 2" in the app + Then I should find "Choice course 2" in the app + And the header should be "Course 2" in the app + + When I press the back button in the app + And I press "Course 3" in the app + Then I should find "Choice course 3" in the app + And the header should be "Course 3" in the app + And the following events should have been logged for "student1" in the app: + | name | + | \core\event\mycourses_viewed | diff --git a/src/core/features/courses/tests/behat/basic_usage.feature b/src/core/features/courses/tests/behat/basic_usage.feature index 039cc2081..0cc50f205 100755 --- a/src/core/features/courses/tests/behat/basic_usage.feature +++ b/src/core/features/courses/tests/behat/basic_usage.feature @@ -66,7 +66,7 @@ Feature: Test basic usage of courses in app Then I should not find "Hidden course" in the app And I should not find "Hidden from students" in the app - @lms_from4.0 + @lms_from4.3 Scenario: See my courses Given I entered the app as "student1" When the header should be "Acceptance test site" in the app