diff --git a/tests/integration/features/bootstrap/FeatureContext.php b/tests/integration/features/bootstrap/FeatureContext.php index 91a1c43c1707..dce6171b42aa 100644 --- a/tests/integration/features/bootstrap/FeatureContext.php +++ b/tests/integration/features/bootstrap/FeatureContext.php @@ -67,6 +67,8 @@ class FeatureContext implements Context, SnippetAcceptingContext { protected static array $botNameToId; /** @var array */ protected static array $botNameToHash; + /** @var array */ + protected static array $phoneNumberToActorId; /** @var array|null */ protected static ?array $nextChatRequestParameters = null; @@ -660,6 +662,9 @@ protected function assertAttendeeList(string $identifier, ?TableNode $formData, if (isset($expectedKeys['displayName'])) { $data['displayName'] = (string) $attendee['displayName']; } + if (isset($expectedKeys['phoneNumber'])) { + $data['phoneNumber'] = (string) $attendee['phoneNumber']; + } if (!isset(self::$userToAttendeeId[$identifier][$attendee['actorType']])) { self::$userToAttendeeId[$identifier][$attendee['actorType']] = []; @@ -678,6 +683,14 @@ protected function assertAttendeeList(string $identifier, ?TableNode $formData, $attendee['actorId'] .= '@' . rtrim($this->baseRemoteUrl, '/'); } + if (isset($attendee['actorId'], $attendee['actorType'], $attendee['phoneNumber']) + && $attendee['actorType'] === 'phones' + && $attendee['actorId'] === 'PHONE(' . $actual['phoneNumber'] . ')' + && $attendee['phoneNumber'] === $actual['phoneNumber']) { + $attendee['actorId'] = $actual['actorId']; + self::$phoneNumberToActorId[$attendee['phoneNumber']] = $actual['actorId']; + } + // Breakout room regex if (isset($attendee['actorId']) && strpos($attendee['actorId'], '/') === 0 && preg_match($attendee['actorId'], $actual['actorId'])) { $attendee['actorId'] = $actual['actorId']; @@ -686,6 +699,10 @@ protected function assertAttendeeList(string $identifier, ?TableNode $formData, if (isset($attendee['participantType'])) { $attendee['participantType'] = (string)$this->mapParticipantTypeTestInput($attendee['participantType']); } + + if (isset($attendee['actorType']) && $attendee['actorType'] === 'phones') { + $attendee['participantType'] = (string)$this->mapParticipantTypeTestInput($attendee['participantType']); + } return $attendee; }, $formData->getHash(), $result); @@ -1521,7 +1538,7 @@ public function userChangesListableScopeOfTheRoom(string $user, string $identifi } /** - * @Then /^user "([^"]*)" adds (user|group|email|circle|remote) "([^"]*)" to room "([^"]*)" with (\d+) \((v4)\)$/ + * @Then /^user "([^"]*)" adds (user|group|email|circle|remote|phone) "([^"]*)" to room "([^"]*)" with (\d+) \((v4)\)$/ * * @param string $user * @param string $newType diff --git a/tests/integration/features/conversation-2/sip-dialout.feature b/tests/integration/features/conversation-2/sip-dialout.feature new file mode 100644 index 000000000000..5ad447fe9402 --- /dev/null +++ b/tests/integration/features/conversation-2/sip-dialout.feature @@ -0,0 +1,41 @@ +Feature: conversation-2/sip-dialout + Background: + Given user "participant1" exists + Given user "participant2" exists + Given group "group1" exists + Given user "participant1" is member of group "group1" + + Scenario: SIP admin uses dial out + Given the following "spreed" app config is set + | sip_bridge_dialin_info | +49-1234-567890 | + | sip_bridge_shared_secret | 1234567890abcdef | + | sip_bridge_groups | ["group1"] | + | sip_dialout | yes | + Given user "participant1" creates room "room" (v4) + | roomType | 3 | + | roomName | room | + And user "participant1" is participant of the following rooms (v4) + | id | type | participantType | sipEnabled | + | room | 3 | 1 | 0 | + When user "participant1" adds user "participant2" to room "room" with 200 (v4) + When user "participant1" adds phone "+491601231212" to room "room" with 200 (v4) + Then user "participant1" sees the following attendees in room "room" with 200 (v4) + | participantType | inCall | actorType | actorId | displayName | phoneNumber | + | 3 | 0 | phones | PHONE(+491601231212) | +49160123… | +491601231212 | + | 1 | 0 | users | participant1 | participant1-displayname | | + | 3 | 0 | users | participant2 | participant2-displayname | | + When user "participant2" adds phone "+491601231212" to room "room" with 403 (v4) + + Scenario: Non-SIP admin tries to dial out + Given the following "spreed" app config is set + | sip_bridge_dialin_info | +49-1234-567890 | + | sip_bridge_shared_secret | 1234567890abcdef | + | sip_bridge_groups | ["group1"] | + | sip_dialout | yes | + Given user "participant2" creates room "room" (v4) + | roomType | 3 | + | roomName | room | + When user "participant2" adds phone "+491601231212" to room "room" with 501 (v4) + When user "participant2" adds user "participant1" to room "room" with 200 (v4) + # SIP admin that is not a moderator can also not dial-out + When user "participant1" adds phone "+491601231212" to room "room" with 403 (v4)