Skip to content

Commit

Permalink
tests(sip-dialout): Add integration test for adding phone number to a…
Browse files Browse the repository at this point in the history
… conversation

Signed-off-by: Joas Schilling <coding@schilljs.com>
  • Loading branch information
nickvergessen committed Oct 9, 2023
1 parent 96d0c7d commit 50a3843
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 1 deletion.
19 changes: 18 additions & 1 deletion tests/integration/features/bootstrap/FeatureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ class FeatureContext implements Context, SnippetAcceptingContext {
protected static array $botNameToId;
/** @var array<string, string> */
protected static array $botNameToHash;
/** @var array<string, string> */
protected static array $phoneNumberToActorId;
/** @var array<string, mixed>|null */
protected static ?array $nextChatRequestParameters = null;

Expand Down Expand Up @@ -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']] = [];
Expand All @@ -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'];
Expand All @@ -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);

Expand Down Expand Up @@ -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
Expand Down
41 changes: 41 additions & 0 deletions tests/integration/features/conversation-2/sip-dialout.feature
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 50a3843

Please sign in to comment.