From 94836339c993ffc369c8bb98f3ac24ceaa7430e2 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Mon, 8 May 2023 23:38:52 +0200 Subject: [PATCH 1/6] get notification on different languages --- tests/acceptance/config/behat.yml | 12 +- .../features/apiSpaces/notification.feature | 245 +++++++++++------- .../bootstrap/NotificationContext.php | 10 +- ...ignmentContext.php => SettingsContext.php} | 170 +++++++++++- 4 files changed, 330 insertions(+), 107 deletions(-) rename tests/acceptance/features/bootstrap/{RoleAssignmentContext.php => SettingsContext.php} (64%) diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index ff8ff74ccf5..a8db6886c3c 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -13,7 +13,7 @@ default: ldapGroupsOU: TestGroups ldapInitialUserFilePath: /../../config/ldap-users.ldif contexts: - - RoleAssignmentContext: + - SettingsContext: - GraphContext: - SpacesContext: - FeatureContext: &common_feature_context_params @@ -37,7 +37,7 @@ default: - '%paths.base%/../features/apiSpaces' context: *common_ldap_suite_context contexts: - - RoleAssignmentContext: + - SettingsContext: - SpacesContext: - FeatureContext: *common_feature_context_params - CapabilitiesContext: @@ -60,7 +60,7 @@ default: - '%paths.base%/../features/apiSpacesShares' context: *common_ldap_suite_context contexts: - - RoleAssignmentContext: + - SettingsContext: - SpacesContext: - FeatureContext: *common_feature_context_params - CapabilitiesContext: @@ -82,7 +82,7 @@ default: - '%paths.base%/../features/apiContract' context: *common_ldap_suite_context contexts: - - RoleAssignmentContext: + - SettingsContext: - SpacesContext: - FeatureContext: *common_feature_context_params - CapabilitiesContext: @@ -103,7 +103,7 @@ default: - '%paths.base%/../features/apiArchiver' context: *common_ldap_suite_context contexts: - - RoleAssignmentContext: + - SettingsContext: - ArchiverContext: - SpacesContext: - FeatureContext: *common_feature_context_params @@ -122,7 +122,7 @@ default: - '%paths.base%/../features/apiGraph' context: *common_ldap_suite_context contexts: - - RoleAssignmentContext: + - SettingsContext: - GraphContext: - SpacesContext: - FeatureContext: *common_feature_context_params diff --git a/tests/acceptance/features/apiSpaces/notification.feature b/tests/acceptance/features/apiSpaces/notification.feature index b29d3846e2f..488fc3d310d 100644 --- a/tests/acceptance/features/apiSpaces/notification.feature +++ b/tests/acceptance/features/apiSpaces/notification.feature @@ -1,4 +1,4 @@ -@api +@api Feature: Notification As a user I want to be notified of actions related to me @@ -21,108 +21,159 @@ Feature: Notification When user "Brian" lists all notifications Then the HTTP status code should be "200" And the JSON response should contain a notification message with the subject "Space shared" and the message-details should match - """ - { - "type": "object", - "required": [ - "app", - "datetime", - "message", - "messageRich", - "messageRichParameters", - "notification_id", - "object_id", - "object_type", - "subject", - "subjectRich", - "user" - ], - "properties": { - "app": { - "type": "string", - "enum": ["userlog"] - }, - "message": { - "type": "string", - "enum": ["Alice Hansen added you to Space notification checking"] - }, - "messageRich": { - "type": "string", - "enum": ["{user} added you to Space {space}"] - }, - "messageRichParameters": { - "type": "object", - "required": [ - "space", - "user" - ], - "properties": { - "space": { - "type": "object", - "required": [ - "id", - "name" - ], - "properties": { - "id": { - "type": "string", - "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\$[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}![a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" - }, - "name": { - "type": "string", - "enum": ["notification checking"] + """ + { + "type": "object", + "required": [ + "app", + "datetime", + "message", + "messageRich", + "messageRichParameters", + "notification_id", + "object_id", + "object_type", + "subject", + "subjectRich", + "user" + ], + "properties": { + "app": { + "type": "string", + "enum": [ + "userlog" + ] + }, + "message": { + "type": "string", + "enum": [ + "Alice Hansen added you to Space notification checking" + ] + }, + "messageRich": { + "type": "string", + "enum": [ + "{user} added you to Space {space}" + ] + }, + "messageRichParameters": { + "type": "object", + "required": [ + "space", + "user" + ], + "properties": { + "space": { + "type": "object", + "required": [ + "id", + "name" + ], + "properties": { + "id": { + "type": "string", + "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\\$[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}![a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$" + }, + "name": { + "type": "string", + "enum": [ + "notification checking" + ] + } } - } - }, - "user": { - "type": "object", - "required": [ - "displayname", - "id", - "name" - ], - "properties": { - "displayname": { - "type": "string", - "enum": ["Alice Hansen"] - }, - "id": { - "type": "string", - "enim": ["%user_id%"] - }, - "name": { - "type": "string", - "enum": ["Alice"] + }, + "user": { + "type": "object", + "required": [ + "displayname", + "id", + "name" + ], + "properties": { + "displayname": { + "type": "string", + "enum": [ + "Alice Hansen" + ] + }, + "id": { + "type": "string", + "enim": [ + "%user_id%" + ] + }, + "name": { + "type": "string", + "enum": [ + "Alice" + ] + } } } } + }, + "notification_id": { + "type": "string" + }, + "object_id": { + "type": "string" + }, + "object_type": { + "type": "string", + "enum": [ + "storagespace" + ] + }, + "subject": { + "type": "string", + "enum": [ + "Space shared" + ] + }, + "subjectRich": { + "type": "string", + "enum": [ + "Space shared" + ] + }, + "user": { + "type": "string", + "enum": [ + "Alice" + ] } - }, - "notification_id": { - "type": "string" + } + } + """ - }, - "object_id": { - "type": "string" - }, - "object_type": { - "type": "string", - "enum": ["storagespace"] - }, - "subject": { - "type": "string", - "enum": ["Space shared"] - }, - "subjectRich": { - "type": "string", - "enum": ["Space shared"] - }, - "user": { - "type": "string", - "enum": ["Alice"] + Scenario Outline: user gets a notification of space sharing in different languages + Given user "Alice" has created a space "notification checking" with the default quota using the GraphApi + And user "Brian" has switched the system language to "" + And user "Alice" has shared a space "notification checking" with settings: + | shareWith | Brian | + | role | editor | + When user "Brian" lists all notifications + Then the HTTP status code should be "200" + And the JSON response should contain a notification message with the subject "" and the message-details should match + """ + { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "enum": [ + "" + ] + } } } - } - """ - + """ + Examples: + | language | subject | message | + | de | Space freigegeben | Alice Hansen hat Sie zum Space notification checking hinzugefügt | + | en | Space shared | Alice Hansen added you to Space notification checking | + | es | Space compartido | Alice Hansen te añadió al Space notification checking | diff --git a/tests/acceptance/features/bootstrap/NotificationContext.php b/tests/acceptance/features/bootstrap/NotificationContext.php index 59af1f7d681..011faa688cf 100644 --- a/tests/acceptance/features/bootstrap/NotificationContext.php +++ b/tests/acceptance/features/bootstrap/NotificationContext.php @@ -22,9 +22,8 @@ */ class NotificationContext implements Context { private FeatureContext $featureContext; - private SpacesContext $spacesContext; - + private SettingsContext $settingsContext; private string $notificationEndpointPath = '/apps/notifications/api/v1/notifications?format=json'; private array $notificationIds; @@ -78,6 +77,7 @@ public function setUpScenario(BeforeScenarioScope $scope):void { // Get all the contexts you need in this context $this->featureContext = $environment->getContext('FeatureContext'); $this->spacesContext = $environment->getContext('SpacesContext'); + $this->settingsContext = $environment->getContext('SettingsContext'); } /** @@ -89,13 +89,17 @@ public function setUpScenario(BeforeScenarioScope $scope):void { */ public function userListAllNotifications(string $user):void { $this->setUserRecipient($user); + $headers = ["accept-language" => $this->settingsContext->getSettingLanguageValue($user)]; $response = OcsApiHelper::sendRequest( $this->featureContext->getBaseUrl(), $this->featureContext->getActualUsername($user), $this->featureContext->getPasswordForUser($user), 'GET', $this->notificationEndpointPath, - $this->featureContext->getStepLineRef() + $this->featureContext->getStepLineRef(), + [], + 2, + $headers ); $this->featureContext->setResponse($response); } diff --git a/tests/acceptance/features/bootstrap/RoleAssignmentContext.php b/tests/acceptance/features/bootstrap/SettingsContext.php similarity index 64% rename from tests/acceptance/features/bootstrap/RoleAssignmentContext.php rename to tests/acceptance/features/bootstrap/SettingsContext.php index fd90c5f56e4..6771f1b352d 100644 --- a/tests/acceptance/features/bootstrap/RoleAssignmentContext.php +++ b/tests/acceptance/features/bootstrap/SettingsContext.php @@ -1,4 +1,5 @@ featureContext->getJsonDecodedResponse($this->featureContext->getResponse())["assignments"][0]["roleId"]; Assert::assertEquals($this->userGetRoleIdByRoleName($this->featureContext->getAdminUserName(), $role), $assignmentRoleId, "user has no role $role"); } + + /** + * @param string $user + * + * @return void + * + * @throws GuzzleException + * @throws Exception + */ + public function sendRequestGetBundlesList(string $user): void { + $fullUrl = $this->baseUrl . $this->settingsUrl . "bundles-list"; + $this->featureContext->setResponse( + $this->spacesContext->sendPostRequestToUrl($fullUrl, $user, $this->featureContext->getPasswordForUser($user), '{}') + ); + + $this->featureContext->theHTTPStatusCodeShouldBe( + 201, + "Expected response status code should be 201" + ); + } + + /** + * @param string $user + * @param string $bundleName + * + * @return array + * + * @throws GuzzleException + * @throws Exception + */ + public function getBundlesList(string $user, string $bundleName): array { + $this->sendRequestGetBundlesList($user); + $body = json_decode((string)$this->featureContext->getResponse()->getBody(), true, 512, JSON_THROW_ON_ERROR); + foreach ($body["bundles"] as $value) { + if ($value["displayName"] === $bundleName) { + return $value; + break; + } + } + return []; + } + + /** + * @param string $user + * + * @return void + * + * @throws GuzzleException + * @throws Exception + */ + public function sendRequestGetSettingsValuesList(string $user): void { + $fullUrl = $this->baseUrl . $this->settingsUrl . "values-list"; + $body = json_encode(["account_uuid" => "me"], JSON_THROW_ON_ERROR); + $this->featureContext->setResponse( + $this->spacesContext->sendPostRequestToUrl($fullUrl, $user, $this->featureContext->getPasswordForUser($user), $body) + ); + + $this->featureContext->theHTTPStatusCodeShouldBe( + 201, + "Expected response status code should be 201" + ); + } + + /** + * @param string $user + * @param string $valueName + * + * @return array + * + * @throws GuzzleException + * @throws Exception + */ + public function getSettingsValues(string $user, string $valueName): array { + $this->sendRequestGetSettingsValuesList($user); + $body = json_decode((string)$this->featureContext->getResponse()->getBody(), true, 512, JSON_THROW_ON_ERROR); + foreach ($body["values"] as $value) { + if ($value["identifier"]["setting"] === $valueName) { + return $value["value"]; + break; + } + } + return []; + } + + /** + * @param string $user + * + * @return string + * + * @throws GuzzleException + * @throws Exception + */ + public function getSettingLanguageValue(string $user): string { + $languageValue = $this->getSettingsValues($user, "language"); + Assert::assertNotEmpty($languageValue, "settings values are empty"); + + return $languageValue["listValue"]["values"][0]["stringValue"]; + } + + /** + * @param string $user + * @param string $language + * + * @return void + * + * @throws GuzzleException + * @throws Exception + */ + public function sendRequestToSwitchSystemLanguage(string $user, string $language): void { + $profileBundlesList = $this->getBundlesList($user, "Profile"); + Assert::assertNotEmpty($profileBundlesList, "bundles list is empty"); + + $settingId = ''; + foreach ($profileBundlesList["settings"] as $value) { + if ($value["name"] === "language") { + $settingId = $value["id"]; + break; + } + } + Assert::assertNotEmpty($settingId, "settingId is empty"); + + $fullUrl = $this->baseUrl . $this->settingsUrl . "values-save"; + $userId = $this->featureContext->getAttributeOfCreatedUser($user, 'id'); + $body = json_encode( + [ + "value" => [ + "account_uuid" => "me", + "bundleId" => $profileBundlesList["id"], + "id" => $userId, + "listValue" => [ + "values" => [ + [ + "stringValue" => $language + ] + ] + ], + "resource" => [ + "type" => "TYPE_USER" + ], + "settingId" => $settingId + ] + ], + JSON_THROW_ON_ERROR + ); + + $this->featureContext->setResponse( + $this->spacesContext->sendPostRequestToUrl($fullUrl, $user, $this->featureContext->getPasswordForUser($user), $body) + ); + } + + /** + * @Given /^user "([^"]*)" has switched the system language to "([^"]*)"$/ + * + * @param string $user + * @param string $language + * + * @return void + * + * @throws Exception + */ + public function theUserHasSwitchedSysemLanguage(string $user, string $language): void { + $this->sendRequestToSwitchSystemLanguage($user, $language); + $this->featureContext->theHTTPStatusCodeShouldBe( + 201, + "Expected response status code should be 201" + ); + } } From b1da07d39018124c26a58a40954555867bba23a6 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Tue, 9 May 2023 16:32:08 +0200 Subject: [PATCH 2/6] set default english if no configured --- .../examples/ocis_traefik/docker-compose.yml | 7 +++-- .../features/bootstrap/SettingsContext.php | 30 ++++++------------- 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/deployments/examples/ocis_traefik/docker-compose.yml b/deployments/examples/ocis_traefik/docker-compose.yml index 379ba65d2d6..fb6bf98b412 100644 --- a/deployments/examples/ocis_traefik/docker-compose.yml +++ b/deployments/examples/ocis_traefik/docker-compose.yml @@ -46,7 +46,7 @@ services: restart: always ocis: - image: owncloud/ocis:${OCIS_DOCKER_TAG:-latest} + image: owncloud/ocis:3.0.0-rc.3 networks: ocis-net: entrypoint: @@ -63,17 +63,18 @@ services: # INSECURE: needed if oCIS / Traefik is using self generated certificates OCIS_INSECURE: "${INSECURE:-false}" # basic auth (not recommended, but needed for eg. WebDav clients that do not support OpenID Connect) - PROXY_ENABLE_BASIC_AUTH: "${PROXY_ENABLE_BASIC_AUTH:-false}" + PROXY_ENABLE_BASIC_AUTH: "true" # admin user password IDM_ADMIN_PASSWORD: "${ADMIN_PASSWORD:-admin}" # this overrides the admin password from the configuration file # demo users - IDM_CREATE_DEMO_USERS: "${DEMO_USERS:-false}" + IDM_CREATE_DEMO_USERS: "true" # email server (in this case inbucket acts as mail catcher) NOTIFICATIONS_SMTP_HOST: inbucket NOTIFICATIONS_SMTP_PORT: 2500 NOTIFICATIONS_SMTP_SENDER: oCIS notifications NOTIFICATIONS_SMTP_USERNAME: notifications@${OCIS_DOMAIN:-ocis.owncloud.test} NOTIFICATIONS_SMTP_INSECURE: "true" # the mail catcher uses self signed certificates + OCIS_DECOMPOSEDFS_METADATA_BACKEND: "messagepack" volumes: - ocis-config:/etc/ocis - ocis-data:/var/lib/ocis diff --git a/tests/acceptance/features/bootstrap/SettingsContext.php b/tests/acceptance/features/bootstrap/SettingsContext.php index 6771f1b352d..753a92e15bf 100644 --- a/tests/acceptance/features/bootstrap/SettingsContext.php +++ b/tests/acceptance/features/bootstrap/SettingsContext.php @@ -322,38 +322,26 @@ public function sendRequestGetSettingsValuesList(string $user): void { /** * @param string $user - * @param string $valueName * - * @return array + * @return string * * @throws GuzzleException * @throws Exception */ - public function getSettingsValues(string $user, string $valueName): array { + public function getSettingLanguageValue(string $user): string { $this->sendRequestGetSettingsValuesList($user); $body = json_decode((string)$this->featureContext->getResponse()->getBody(), true, 512, JSON_THROW_ON_ERROR); + + // if no language is set, the request body is empty return English as the default language + if (empty($body)) { + return "en"; + } foreach ($body["values"] as $value) { - if ($value["identifier"]["setting"] === $valueName) { - return $value["value"]; + if ($value["identifier"]["setting"] === "language") { + return $value["value"]["listValue"]["values"][0]["stringValue"]; break; } } - return []; - } - - /** - * @param string $user - * - * @return string - * - * @throws GuzzleException - * @throws Exception - */ - public function getSettingLanguageValue(string $user): string { - $languageValue = $this->getSettingsValues($user, "language"); - Assert::assertNotEmpty($languageValue, "settings values are empty"); - - return $languageValue["listValue"]["values"][0]["stringValue"]; } /** From 7ea035051ed3fb0eb7e575a3c5a6d824c6c05947 Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Wed, 10 May 2023 09:47:36 +0200 Subject: [PATCH 3/6] fix --- tests/acceptance/features/apiSpaces/notification.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/acceptance/features/apiSpaces/notification.feature b/tests/acceptance/features/apiSpaces/notification.feature index 488fc3d310d..6d8cb5b961a 100644 --- a/tests/acceptance/features/apiSpaces/notification.feature +++ b/tests/acceptance/features/apiSpaces/notification.feature @@ -174,6 +174,6 @@ Feature: Notification """ Examples: | language | subject | message | - | de | Space freigegeben | Alice Hansen hat Sie zum Space notification checking hinzugefügt | + | de | Space freigegeben | Alice Hansen hat Sie zum Space notification checking hinzugef\u00fcgt | | en | Space shared | Alice Hansen added you to Space notification checking | | es | Space compartido | Alice Hansen te añadió al Space notification checking | From 87e3bccbea02fdca9ea566a636249a4535aba28a Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Wed, 10 May 2023 14:13:34 +0200 Subject: [PATCH 4/6] fix after review --- deployments/examples/ocis_traefik/docker-compose.yml | 7 +++---- tests/acceptance/features/apiSpaces/notification.feature | 6 +++--- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/deployments/examples/ocis_traefik/docker-compose.yml b/deployments/examples/ocis_traefik/docker-compose.yml index fb6bf98b412..379ba65d2d6 100644 --- a/deployments/examples/ocis_traefik/docker-compose.yml +++ b/deployments/examples/ocis_traefik/docker-compose.yml @@ -46,7 +46,7 @@ services: restart: always ocis: - image: owncloud/ocis:3.0.0-rc.3 + image: owncloud/ocis:${OCIS_DOCKER_TAG:-latest} networks: ocis-net: entrypoint: @@ -63,18 +63,17 @@ services: # INSECURE: needed if oCIS / Traefik is using self generated certificates OCIS_INSECURE: "${INSECURE:-false}" # basic auth (not recommended, but needed for eg. WebDav clients that do not support OpenID Connect) - PROXY_ENABLE_BASIC_AUTH: "true" + PROXY_ENABLE_BASIC_AUTH: "${PROXY_ENABLE_BASIC_AUTH:-false}" # admin user password IDM_ADMIN_PASSWORD: "${ADMIN_PASSWORD:-admin}" # this overrides the admin password from the configuration file # demo users - IDM_CREATE_DEMO_USERS: "true" + IDM_CREATE_DEMO_USERS: "${DEMO_USERS:-false}" # email server (in this case inbucket acts as mail catcher) NOTIFICATIONS_SMTP_HOST: inbucket NOTIFICATIONS_SMTP_PORT: 2500 NOTIFICATIONS_SMTP_SENDER: oCIS notifications NOTIFICATIONS_SMTP_USERNAME: notifications@${OCIS_DOMAIN:-ocis.owncloud.test} NOTIFICATIONS_SMTP_INSECURE: "true" # the mail catcher uses self signed certificates - OCIS_DECOMPOSEDFS_METADATA_BACKEND: "messagepack" volumes: - ocis-config:/etc/ocis - ocis-data:/var/lib/ocis diff --git a/tests/acceptance/features/apiSpaces/notification.feature b/tests/acceptance/features/apiSpaces/notification.feature index 6d8cb5b961a..39b7f9e4644 100644 --- a/tests/acceptance/features/apiSpaces/notification.feature +++ b/tests/acceptance/features/apiSpaces/notification.feature @@ -173,7 +173,7 @@ Feature: Notification } """ Examples: - | language | subject | message | + | language | subject | message | | de | Space freigegeben | Alice Hansen hat Sie zum Space notification checking hinzugef\u00fcgt | - | en | Space shared | Alice Hansen added you to Space notification checking | - | es | Space compartido | Alice Hansen te añadió al Space notification checking | + | en | Space shared | Alice Hansen added you to Space notification checking | + | es | Space compartido | Alice Hansen te añadió al Space notification checking | From afdcb5e0984c1e65f307d1585fe1a1c6efb84bba Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Wed, 10 May 2023 22:44:09 +0200 Subject: [PATCH 5/6] fix after rebase --- tests/acceptance/config/behat.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/acceptance/config/behat.yml b/tests/acceptance/config/behat.yml index a8db6886c3c..874db10c58b 100644 --- a/tests/acceptance/config/behat.yml +++ b/tests/acceptance/config/behat.yml @@ -185,7 +185,7 @@ default: - FavoritesContext: - ChecksumContext: - FilesVersionsContext: - - RoleAssignmentContext: + - SettingsContext: extensions: rdx\behatvars\BehatVariablesExtension: ~ From ca9e6c377f7e40b3971337c0fd4c5e2385399f6f Mon Sep 17 00:00:00 2001 From: Viktor Scharf Date: Tue, 16 May 2023 21:59:29 +0200 Subject: [PATCH 6/6] after review --- .../features/apiSpaces/notification.feature | 11 ++++++----- .../acceptance/features/bootstrap/SettingsContext.php | 2 -- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/tests/acceptance/features/apiSpaces/notification.feature b/tests/acceptance/features/apiSpaces/notification.feature index 39b7f9e4644..763f8fe2602 100644 --- a/tests/acceptance/features/apiSpaces/notification.feature +++ b/tests/acceptance/features/apiSpaces/notification.feature @@ -116,7 +116,8 @@ Feature: Notification "type": "string" }, "object_id": { - "type": "string" + "type": "string", + "pattern": "^%space_id_pattern%$" }, "object_type": { "type": "string", @@ -173,7 +174,7 @@ Feature: Notification } """ Examples: - | language | subject | message | - | de | Space freigegeben | Alice Hansen hat Sie zum Space notification checking hinzugef\u00fcgt | - | en | Space shared | Alice Hansen added you to Space notification checking | - | es | Space compartido | Alice Hansen te añadió al Space notification checking | + | language | subject | message | + | de | Space freigegeben | Alice Hansen hat Sie zu Space notification checking hinzugefügt | + | en | Space shared | Alice Hansen added you to Space notification checking | + | es | Space compartido | Alice Hansen te añadió al Space notification checking | diff --git a/tests/acceptance/features/bootstrap/SettingsContext.php b/tests/acceptance/features/bootstrap/SettingsContext.php index 753a92e15bf..4801eb09bd9 100644 --- a/tests/acceptance/features/bootstrap/SettingsContext.php +++ b/tests/acceptance/features/bootstrap/SettingsContext.php @@ -293,7 +293,6 @@ public function getBundlesList(string $user, string $bundleName): array { foreach ($body["bundles"] as $value) { if ($value["displayName"] === $bundleName) { return $value; - break; } } return []; @@ -339,7 +338,6 @@ public function getSettingLanguageValue(string $user): string { foreach ($body["values"] as $value) { if ($value["identifier"]["setting"] === "language") { return $value["value"]["listValue"]["values"][0]["stringValue"]; - break; } } }