UPSTREAM BASELINE: nextcloud/spreed v22.0.12 (без изменений)
Type checking / changes (push) Has been cancelled
Type checking / test (push) Has been cancelled
Type checking / typescript-summary (push) Has been cancelled
Node tests / changes (push) Has been cancelled
Node tests / test (push) Has been cancelled
Node tests / test-summary (push) Has been cancelled

Источник: https://github.com/nextcloud/spreed/archive/refs/tags/v22.0.12.tar.gz
С этого коммита ветка официального Nextcloud Talk отрезана (решение владельца 2026-07-06).
Все дальнейшие изменения — только наши; версии релизов: 22.0.12-f7.N.
This commit is contained in:
2026-07-06 14:07:50 +00:00
commit 01acfa3b40
1716 changed files with 613013 additions and 0 deletions
@@ -0,0 +1,42 @@
Feature: command/active-calls
Background:
Given user "participant1" exists
Scenario: No call in progress
Given invoking occ with "talk:active-calls"
Then the command was successful
And the command output contains the text "No calls in progress"
Scenario: Users only chatting
When user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
Then user "participant1" joins room "room" with 200 (v4)
Given invoking occ with "talk:active-calls"
Then the command was successful
And the command output contains the text "No calls in progress"
Then user "participant1" leaves room "room" with 200 (v4)
Scenario: Call in progress
When user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
Then user "participant1" joins room "room" with 200 (v4)
And user "participant1" joins call "room" with 200 (v4)
Given invoking occ with "talk:active-calls"
# It didn't really fail, it just has an exit code that is not 0
Then the command failed with exit code 1
And the command output contains the text "There are currently 1 calls in progress with 1 participants"
Then user "participant1" leaves call "room" with 200 (v4)
And user "participant1" leaves room "room" with 200 (v4)
Given invoking occ with "talk:active-calls"
Then the command was successful
And the command output contains the text "No calls in progress"
File diff suppressed because one or more lines are too long
@@ -0,0 +1,64 @@
Feature: command/monitor-calls
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Scenario: No call in progress
Given invoking occ with "talk:monitor:calls"
Then the command was successful
And the command output contains the text "No calls in progress"
Scenario: Users only chatting
When user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
Then user "participant1" joins room "room" with 200 (v4)
Given invoking occ with "talk:monitor:calls"
Then the command was successful
And the command output contains the text "No calls in progress"
Then user "participant1" leaves room "room" with 200 (v4)
Scenario: Calls in progress
When user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
Then user "participant1" joins room "room" with 200 (v4)
And user "participant1" joins call "room" with 200 (v4)
Given invoking occ with "talk:monitor:calls"
Then the command was successful
And the command output contains the text "There are currently 1 calls in progress with 1 participants"
And the command output contains the list entry '"ROOM(room)"' with value '1'
When user "participant3" creates room "room2" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room2" with 200 (v4)
| roomType | 1 |
| invite | participant3 |
And user "participant2" gets room "room2" with 200 (v4)
And user "participant2" joins room "room2" with 200 (v4)
And user "participant3" joins room "room2" with 200 (v4)
And user "participant2" joins call "room2" with 200 (v4)
And user "participant3" joins call "room2" with 200 (v4)
Given invoking occ with "talk:monitor:calls"
Then the command was successful
And the command output contains the text "There are currently 2 calls in progress with 3 participants"
And the command output contains the list entry '"ROOM(room)"' with value '1'
And the command output contains the list entry '"ROOM(room2)"' with value '2'
Then user "participant1" leaves call "room" with 200 (v4)
And user "participant1" leaves room "room" with 200 (v4)
Given invoking occ with "talk:monitor:calls"
Then the command was successful
And the command output contains the text "There are currently 1 calls in progress with 2 participants"
And the command output contains the list entry '"ROOM(room2)"' with value '2'
@@ -0,0 +1,37 @@
Feature: command/monitor-room
Background:
Given user "participant1" exists
Given user "participant2" exists
Scenario: No call in progress
Given invoking occ with "talk:monitor:room abcdef"
Then the command failed with exit code 1
And the command output contains the text "Room with token abcdef not found"
Scenario: From nothing to calling
When user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant2" gets room "room" with 200 (v4)
Given invoking occ with "talk:monitor:room room-name:room"
Then the command was successful
And the command output contains the text "The conversation has 2 attendees with 0 sessions of which 0 are in the call."
Given user "participant1" joins room "room" with 200 (v4)
And invoking occ with "talk:monitor:room room-name:room"
Then the command was successful
And the command output contains the text "The conversation has 2 attendees with 1 sessions of which 0 are in the call."
Given user "participant1" joins call "room" with 200 (v4)
And invoking occ with "talk:monitor:room room-name:room"
Then the command was successful
And the command output contains the text "The conversation has 2 attendees with 1 sessions of which 1 are in the call."
Given user "participant2" joins room "room" with 200 (v4)
And user "participant2" joins call "room" with 200 (v4)
And invoking occ with "talk:monitor:room room-name:room"
Then the command was successful
And the command output contains the text "The conversation has 2 attendees with 2 sessions of which 2 are in the call."
@@ -0,0 +1,129 @@
Feature: command/phone-number
Background:
Given user "participant1" exists
Given user "participant2" exists
Scenario: Configuring a phone number
Given invoking occ with "talk:phone-number:add abc participant1"
Then the command failed with exit code 1
And the command output contains the text "Not a valid phone number abc. The format is invalid."
Given invoking occ with "talk:phone-number:add +49-160-123-12-12 participant3"
Then the command failed with exit code 1
And the command output contains the text 'Invalid user "participant3" provided'
Given invoking occ with "talk:phone-number:add +49-160-123-12-12 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 491601231212 is now assigned to participant1"
Given invoking occ with "talk:phone-number:find --phone 491601231212"
Then the command failed with exit code 0
And the command output contains the text "Phone number 491601231212 is assigned to participant1"
Given invoking occ with "talk:phone-number:find --phone 49160123121234"
Then the command failed with exit code 1
And the command output contains the text "Phone number 49160123121234 could not be found"
Given invoking occ with "talk:phone-number:find --user participant1"
Then the command failed with exit code 0
And the command output contains the text "participant1 has phone number 491601231212 assigned"
Given invoking occ with "talk:phone-number:find --user participant2"
Then the command failed with exit code 1
And the command output contains the text "No phone number found for participant2"
Given invoking occ with "talk:phone-number:add +49-160-123-1213 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 491601231213 is now assigned to participant1"
Given invoking occ with "talk:phone-number:find --user participant1"
Then the command failed with exit code 0
And the command output contains the text "participant1 has the following phone numbers assigned:"
And the command output contains the text "- 491601231212"
And the command output contains the text "- 491601231213"
Given invoking occ with "talk:phone-number:add +49-160-123-1212 participant2"
Then the command failed with exit code 1
And the command output contains the text "Phone number is already assigned to participant1"
Given invoking occ with "talk:phone-number:add --force '+49-160-123-12-12' participant2"
Then the command failed with exit code 0
And the command output contains the text "Phone number 491601231212 is now assigned to participant2"
And the command output contains the text "Was assigned to participant1"
Given invoking occ with "talk:phone-number:add 23 participant2"
Then the command failed with exit code 0
And the command output contains the text "Phone number 23 is now assigned to participant2"
Given invoking occ with "talk:phone-number:find --user participant2"
Then the command failed with exit code 0
And the command output contains the text "participant2 has the following phone numbers assigned:"
And the command output contains the text "- 491601231212"
And the command output contains the text "- 23"
Given invoking occ with "talk:phone-number:find --user participant1"
Then the command failed with exit code 0
And the command output contains the text "participant1 has phone number 491601231213 assigned"
Given invoking occ with "talk:phone-number:remove 491601231213"
Then the command failed with exit code 0
Given invoking occ with "talk:phone-number:find --user participant1"
Then the command failed with exit code 1
And the command output contains the text "No phone number found for participant1"
Given invoking occ with "talk:phone-number:remove-user participant2"
Then the command failed with exit code 0
Given invoking occ with "talk:phone-number:find --user participant2"
Then the command failed with exit code 1
And the command output contains the text "No phone number found for participant2"
Scenario: Phone number validation
Given invoking occ with "config:system:set default_phone_region --value DE"
# Invalid phone number with +
Given invoking occ with "talk:phone-number:add +4911223344 participant1"
Then the command failed with exit code 1
And the command output contains the text "Not a valid phone number +4911223344. The format is invalid."
# Valid German number
Given invoking occ with "talk:phone-number:add 004971112347 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 4971112347 is now assigned to participant1"
Given invoking occ with "talk:phone-number:add +4971112346 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 4971112346 is now assigned to participant1"
Given invoking occ with "talk:phone-number:add 4971112345 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 4971112345 is now assigned to participant1"
Given invoking occ with "talk:phone-number:add 071112348 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 4971112348 is now assigned to participant1"
# 01122 is not a valid prefix in Germany
Given invoking occ with "talk:phone-number:add 011223344 participant1"
Then the command failed with exit code 1
And the command output contains the text "Not a valid phone number 011223344. The format is invalid."
# Local PBX
Given invoking occ with "talk:phone-number:add 3001 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 3001 is now assigned to participant1"
# Local number 030 Berlin, but 01 is too short
Given invoking occ with "talk:phone-number:add 03001 participant1"
Then the command failed with exit code 1
And the command output contains the text "Not a valid phone number 03001. The format is invalid."
# Invalid German number but seen as local PBX
Given invoking occ with "talk:phone-number:add 4911223344 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 4911223344 is now assigned to participant1"
# Valid US number
Given invoking occ with "talk:phone-number:add 00112345678901 participant1"
Then the command failed with exit code 0
And the command output contains the text "Phone number 12345678901 is now assigned to participant1"
@@ -0,0 +1,24 @@
Feature: command/update
Background:
Given user "participant1" exists
Scenario: Create a public room with message expiration time and update removing the expiration time
Given invoking occ with "talk:room:create room1 --user participant1 --owner participant1 --public --message-expiration=3"
And user "participant1" is participant of the following rooms (v4)
| name | messageExpiration |
| room1 | 3 |
And the command output contains the text "Room successfully created"
And the command was successful
And invoking occ with "talk:room:update room-name:room1 --message-expiration=0"
And the command output contains the text "Room successfully updated"
And the command was successful
And user "participant1" is participant of the following rooms (v4)
| name | messageExpiration |
| room1 | 0 |
And invoking occ with "talk:room:update room-name:room1 --message-expiration=4"
And the command output contains the text "Room successfully updated"
And the command was successful
And user "participant1" is participant of the following rooms (v4)
| name | messageExpiration |
| room1 | 4 |
@@ -0,0 +1,108 @@
Feature: command/user-remove
Background:
Given user "participant1" exists
Given user "participant2" exists
Scenario: Remove a user from all their rooms
Given user "participant1" creates room "one-to-one" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Given user "participant1" creates room "public room" (v4)
| roomType | 3 |
| roomName | public room |
And user "participant1" adds user "participant2" to room "public room" with 200 (v4)
Given user "participant1" creates room "private room" (v4)
| roomType | 2 |
| roomName | private room |
And user "participant1" adds user "participant2" to room "private room" with 200 (v4)
Given user "participant1" creates room "listable room" (v4)
| roomType | 2 |
| roomName | listable room |
And user "participant1" allows listing room "listable room" for "users" with 200 (v4)
And user "participant1" adds user "participant2" to room "listable room" with 200 (v4)
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType | readOnly |
| one-to-one | participant1 | 1 | 1 | 0 |
| public room | public room | 3 | 3 | 0 |
| private room | private room | 2 | 3 | 0 |
| listable room | listable room | 2 | 3 | 0 |
And user "participant1" is participant of the following unordered rooms (v4)
| id | name | type | participantType | readOnly |
| one-to-one | participant2 | 1 | 1 | 0 |
| public room | public room | 3 | 1 | 0 |
| private room | private room | 2 | 1 | 0 |
| listable room | listable room | 2 | 1 | 0 |
And invoking occ with "talk:user:remove --user participant2 --private-only"
And the command output contains the text "Users successfully removed from all rooms"
Then the command was successful
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType | readOnly |
| one-to-one | participant1 | 1 | 1 | 0 |
| public room | public room | 3 | 3 | 0 |
| listable room | listable room | 2 | 3 | 0 |
And user "participant1" is participant of the following unordered rooms (v4)
| id | name | type | participantType | readOnly |
| one-to-one | participant2 | 1 | 1 | 0 |
| public room | public room | 3 | 1 | 0 |
| private room | private room | 2 | 1 | 0 |
| listable room | listable room | 2 | 1 | 0 |
And invoking occ with "talk:user:remove --user participant2"
And the command output contains the text "Users successfully removed from all rooms"
Then the command was successful
And user "participant2" is participant of the following rooms (v4)
And user "participant2" is participant of the following unordered rooms (v4)
And user "participant1" is participant of the following unordered rooms (v4)
| id | name | type | participantType | readOnly |
| one-to-one | participant2-displayname | 5 | 1 | 1 |
| public room | public room | 3 | 1 | 0 |
| private room | private room | 2 | 1 | 0 |
| listable room | listable room | 2 | 1 | 0 |
And user "participant1" sees the following attendees in room "one-to-one" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
Scenario: Remove a user after there was a missed call
Given signaling server is started
Given user "participant1" creates room "room" (v4)
| roomType | 1 |
| invite | participant2 |
When user "participant1" joins room "room" with 200 (v4)
And user "participant1" joins call "room" with 200 (v4)
And wait for 1 second
And user "participant1" leaves call "room" with 200 (v4)
And user "participant1" leaves room "room" with 200 (v4)
Then user "participant1" sees the following system messages in room "room" with 200
| room | actorType | actorId | systemMessage | message | messageParameters |
| room | users | participant1 | call_tried | Unanswered call | {"user":{"type":"user","id":"participant2","name":"participant2-displayname","mention-id":"participant2"}} |
| room | users | participant1 | call_left | You left the call | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
| room | users | participant1 | call_started | Outgoing call | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
| room | users | participant1 | conversation_created | You created the conversation | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
When reset signaling server requests
And invoking occ with "talk:user:remove --user participant2"
Then signaling server received the following requests
| token | data |
| room | {"type":"disinvite","disinvite":{"userids":["participant2"],"alluserids":["participant1"],"properties":{"name":"Private conversation","type":1,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"participant-list":"refresh"}}} |
# Type changed
| room | {"type":"update","update":{"userids":["participant1"],"properties":{"name":"Private conversation","type":5,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
# Name changed
| room | {"type":"update","update":{"userids":["participant1"],"properties":{"name":"Private conversation","type":5,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
| room | {"type":"message","message":{"data":{"type":"chat","chat":{"refresh":true}}}} |
# Read only changed
| room | {"type":"update","update":{"userids":["participant1"],"properties":{"name":"Private conversation","type":5,"lobby-state":0,"lobby-timer":null,"read-only":1,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
And the command output contains the text "Users successfully removed from all rooms"
Then the command was successful
And user "participant2" is participant of the following rooms (v4)
And user "participant1" is participant of the following rooms (v4)
| id | name | type | participantType |
| room | participant2-displayname | 5 | 1 |
Then user "participant1" sees the following system messages in room "room" with 200
| room | actorType | actorId | systemMessage | message | messageParameters |
| room | guests | cli | read_only | An administrator locked the conversation | {"actor":{"type":"guest","id":"guest\/cli","name":"Administration","mention-id":"guest\/cli"}} |
| room | users | participant1 | call_tried | Unanswered call | {"user":{"type":"highlight","id":"deleted_users","name":"participant2-displayname"}} |
| room | users | participant1 | call_left | You left the call | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
| room | users | participant1 | call_started | Outgoing call | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
| room | users | participant1 | conversation_created | You created the conversation | {"actor":{"type":"user","id":"participant1","name":"participant1-displayname","mention-id":"participant1"}} |
@@ -0,0 +1,199 @@
Feature: command/user-transfer-ownership
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Given user "participant4" exists
Scenario: Only transfer when moderator permissions
Given user "participant1" creates room "one-to-one" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Given user "participant4" creates room "one-to-one former" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one former" with 200 (v4)
| roomType | 1 |
| invite | participant4 |
Given user "participant1" creates room "user" (v4)
| roomType | 3 |
| roomName | user |
And user "participant1" adds user "participant2" to room "user" with 200 (v4)
Given user "participant1" creates room "moderator" (v4)
| roomType | 2 |
| roomName | moderator |
And user "participant1" adds user "participant2" to room "moderator" with 200 (v4)
And user "participant1" promotes "participant2" in room "moderator" with 200 (v4)
Given user "participant2" creates room "owner" (v4)
| roomType | 2 |
| roomName | owner |
Given user "participant1" creates room "self-joined" (v4)
| roomType | 3 |
| roomName | self-joined |
And user "participant2" joins room "self-joined" with 200 (v4)
And invoking occ with "talk:user:remove --user participant4"
And invoking occ with "talk:user:transfer-ownership participant2 participant3"
And the command output contains the text "Added or promoted user participant3 in 2 rooms."
Then the command was successful
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| one-to-one | participant1 | 1 | 1 |
| one-to-one former | participant4-displayname | 5 | 1 |
| user | user | 3 | 3 |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
| self-joined | self-joined | 3 | 5 |
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
Scenario: Also transfer without moderator permissions
Given user "participant1" creates room "one-to-one" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Given user "participant4" creates room "one-to-one former" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one former" with 200 (v4)
| roomType | 1 |
| invite | participant4 |
Given user "participant1" creates room "user" (v4)
| roomType | 3 |
| roomName | user |
And user "participant1" adds user "participant2" to room "user" with 200 (v4)
Given user "participant1" creates room "moderator" (v4)
| roomType | 2 |
| roomName | moderator |
And user "participant1" adds user "participant2" to room "moderator" with 200 (v4)
And user "participant1" promotes "participant2" in room "moderator" with 200 (v4)
Given user "participant2" creates room "owner" (v4)
| roomType | 2 |
| roomName | owner |
Given user "participant1" creates room "self-joined" (v4)
| roomType | 3 |
| roomName | self-joined |
And user "participant2" joins room "self-joined" with 200 (v4)
And invoking occ with "talk:user:remove --user participant4"
And invoking occ with "talk:user:transfer-ownership --include-non-moderator participant2 participant3"
And the command output contains the text "Added or promoted user participant3 in 3 rooms."
Then the command was successful
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| one-to-one | participant1 | 1 | 1 |
| one-to-one former | participant4-displayname | 5 | 1 |
| user | user | 3 | 3 |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
| self-joined | self-joined | 3 | 5 |
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| user | user | 3 | 3 |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
Scenario: Remove source user on successful transfer
Given user "participant1" creates room "one-to-one" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Given user "participant4" creates room "one-to-one former" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "one-to-one former" with 200 (v4)
| roomType | 1 |
| invite | participant4 |
Given user "participant1" creates room "user" (v4)
| roomType | 3 |
| roomName | user |
And user "participant1" adds user "participant2" to room "user" with 200 (v4)
Given user "participant1" creates room "moderator" (v4)
| roomType | 2 |
| roomName | moderator |
And user "participant1" adds user "participant2" to room "moderator" with 200 (v4)
And user "participant1" promotes "participant2" in room "moderator" with 200 (v4)
Given user "participant2" creates room "owner" (v4)
| roomType | 2 |
| roomName | owner |
Given user "participant1" creates room "self-joined" (v4)
| roomType | 3 |
| roomName | self-joined |
And user "participant2" joins room "self-joined" with 200 (v4)
And invoking occ with "talk:user:remove --user participant4"
And invoking occ with "talk:user:transfer-ownership --remove-source-user participant2 participant3"
And the command output contains the text "Added or promoted user participant3 in 2 rooms."
Then the command was successful
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| one-to-one | participant1 | 1 | 1 |
| one-to-one former | participant4-displayname | 5 | 1 |
| user | user | 3 | 3 |
| self-joined | self-joined | 3 | 5 |
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
Scenario: Promote user if source had privileges
Given user "participant1" creates room "moderator" (v4)
| roomType | 2 |
| roomName | moderator |
And user "participant1" adds user "participant2" to room "moderator" with 200 (v4)
And user "participant1" promotes "participant2" in room "moderator" with 200 (v4)
Given user "participant2" creates room "owner" (v4)
| roomType | 2 |
| roomName | owner |
Given user "participant2" creates room "moderator to owner" (v4)
| roomType | 2 |
| roomName | moderator to owner |
And user "participant2" adds user "participant3" to room "moderator to owner" with 200 (v4)
And user "participant2" promotes "participant3" in room "moderator to owner" with 200 (v4)
Given user "participant1" creates room "from self-joined to moderator" (v4)
| roomType | 3 |
| roomName | from self-joined to moderator |
And user "participant1" adds user "participant2" to room "from self-joined to moderator" with 200 (v4)
And user "participant1" promotes "participant2" in room "from self-joined to moderator" with 200 (v4)
Given user "participant1" creates room "from self-joined to user" (v4)
| roomType | 3 |
| roomName | from self-joined to user |
And user "participant1" adds user "participant2" to room "from self-joined to user" with 200 (v4)
And user "participant3" is participant of the following rooms (v4)
| id | name | type | participantType |
| moderator to owner | moderator to owner | 2 | 2 |
And user "participant3" joins room "from self-joined to user" with 200 (v4)
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator to owner | moderator to owner | 2 | 2 |
| from self-joined to user | from self-joined to user | 3 | 5 |
And user "participant3" joins room "from self-joined to moderator" with 200 (v4)
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator to owner | moderator to owner | 2 | 2 |
| from self-joined to user | from self-joined to user | 3 | 5 |
| from self-joined to moderator | from self-joined to moderator | 3 | 5 |
And invoking occ with "talk:user:transfer-ownership --include-non-moderator participant2 participant3"
And the command output contains the text "Added or promoted user participant3 in 5 rooms."
Then the command was successful
And user "participant2" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
| moderator to owner | moderator to owner | 2 | 1 |
| from self-joined to moderator | from self-joined to moderator | 3 | 2 |
| from self-joined to user | from self-joined to user | 3 | 3 |
And user "participant3" is participant of the following unordered rooms (v4)
| id | name | type | participantType |
| moderator | moderator | 2 | 2 |
| owner | owner | 2 | 1 |
| moderator to owner | moderator to owner | 2 | 1 |
| from self-joined to moderator | from self-joined to moderator | 3 | 2 |
| from self-joined to user | from self-joined to user | 3 | 3 |