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,280 @@
Feature: conversation/group-participants
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
And group "group1" exists
And group "group2" exists
And group "rename-group" exists
And user "participant2" is member of group "group1"
Scenario: Owner invites a group
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
And user "participant1" adds group "group1" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
Scenario: Owner start a chat with a group
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
Scenario: User is added to a group which is a member of a chat
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant3" is member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| users | participant3 | 3 |
Scenario: User is removed from a group which is a member of a chat
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant2" is not member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
Scenario: User is removed from a group which is a member of a chat but has a second group
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant2" is member of group "group2"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant1" adds group "group2" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| groups | group2 | 3 |
And user "participant2" is not member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| groups | group2 | 3 |
Scenario: User is not removed from a chat when one group is removed but has a second group
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant2" is member of group "group2"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant1" adds group "group2" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| groups | group2 | 3 |
And user "participant1" removes group "group1" from room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 3 |
| groups | group2 | 3 |
Scenario: User is removed from when their last group which is a member of a chat is removed
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant1" removes group "group1" from room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
Scenario: Moderator is removed from a group which is a member of a chat but stays in the chat
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 2 |
And user "participant2" is not member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 2 |
Scenario: Group of a moderator is removed from a chat but moderator stays in the chat
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 2 |
And user "participant1" removes group "group1" from room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 2 |
Scenario: User that was already a member has their group added to a chat
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 3 |
And user "participant1" adds group "group1" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 3 |
| groups | group1 | 3 |
Scenario: User that was self-joined has their group added to a chat
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant2" joins room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 5 |
And user "participant1" adds group "group1" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 3 |
| groups | group1 | 3 |
Scenario: User that was already a member is added to a group which is a member of a chat
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| source | group |
| invite |group1 |
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| users | participant3 | 3 |
And user "participant3" is member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| users | participant3 | 3 |
Scenario: User that was self-joined is added to a group which is a member of a chat
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds group "group1" to room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| users | participant3 | 5 |
And user "participant3" is member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
| users | participant2 | 3 |
| users | participant3 | 3 |
Scenario: User that was already a member is removed from a group which is a member of a chat
# This might not be what most people desire but fixing this would mean we
# need to keep multiple records per user whether they were added manually before etc.
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" adds group "group1" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 3 |
| groups | group1 | 3 |
And user "participant2" is not member of group "group1"
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| groups | group1 | 3 |
Scenario: Renaming a group reflects in the participant list
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds group "rename-group" to room "room" with 200 (v4)
And user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType | displayName |
| users | participant1 | 1 | participant1-displayname |
| groups | rename-group | 3 | rename-group |
When set display name of group "rename-group" to "rename-group-displayname"
Then user "participant1" sees the following attendees in room "room" with 200 (v4)
| actorType | actorId | participantType | displayName |
| users | participant1 | 1 | participant1-displayname |
| groups | rename-group | 3 | rename-group-displayname |
@@ -0,0 +1,24 @@
Feature: conversation/invite-email
Background:
Given user "participant1" exists
Scenario: Resend email invites
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
When user "participant1" adds email "test@example.tld" to room "room" with 200 (v4)
# Adding the same email again should not error to help the Calendar integration
# Ref https://github.com/nextcloud/calendar/pull/5380
When user "participant1" adds email "test@example.tld" to room "room" with 200 (v4)
Then user "participant1" sees the following attendees in room "room" with 200 (v4)
| participantType | inCall | actorType | actorId | invitedActorId |
| 4 | 0 | emails | SHA256(test@example.tld) | test@example.tld |
| 1 | 0 | users | participant1 | ABSENT |
# Reinvite all emails
When user "participant1" resends invite for room "room" with 200 (v4)
# Reinvite only one
When user "participant1" resends invite for room "room" with 200 (v4)
| attendeeId | test@example.tld |
# Reinvite failure
When user "participant1" resends invite for room "room" with 404 (v4)
| attendeeId | not-found@example.tld |
@@ -0,0 +1,118 @@
Feature: conversation/join-leave
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Scenario: join a one-to-one room
Given user "participant1" creates room "room" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
When user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 404 (v4)
And user "guest" joins room "room" with 404 (v4)
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
And user "participant3" is not participant of room "room" (v4)
And user "guest" is not participant of room "room" (v4)
Scenario: leave a one-to-one room
Given user "participant1" creates room "room" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
When user "participant1" leaves room "room" with 200 (v4)
And user "participant2" leaves room "room" with 200 (v4)
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
Scenario: join a group room
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
When user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 404 (v4)
And user "guest" joins room "room" with 404 (v4)
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
And user "participant3" is not participant of room "room" (v4)
And user "guest" is not participant of room "room" (v4)
Scenario: leave a group room
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
When user "participant1" leaves room "room" with 200 (v4)
And user "participant2" leaves room "room" with 200 (v4)
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
Scenario: join a public room
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
When user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
And user "participant3" is participant of room "room" (v4)
And user "guest" is participant of room "room" (v4)
Scenario: leave a public room
Given signaling server is started
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And reset signaling server requests
And user "participant1" joins room "room" with 200 (v4) session name "old"
And user "participant1" joins room "room" with 200 (v4) session name "new"
# Rejoining the same room disinvites the previous session
Then signaling server received the following requests
| token | data |
| room | {"type":"disinvite","disinvite":{"sessionids":["SESSION(participant1#old)"],"alluserids":["participant1","participant2"],"properties":{"name":"Private conversation","type":3,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"participant-list":"refresh"}}} |
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And reset signaling server requests
When user "participant1" leaves room "room" with 200 (v4)
# No signaling message when a normal user leaves
Then signaling server received the following requests
And user "participant2" leaves room "room" with 200 (v4)
And reset signaling server requests
And user "participant3" leaves room "room" with 200 (v4)
# Signaling message when a self-joined user leaves
Then signaling server received the following requests
| token | data |
| room | {"type":"disinvite","disinvite":{"userids":["participant3"],"alluserids":["participant1","participant2"],"properties":{"name":"Private conversation","type":3,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"participant-list":"refresh"}}} |
And reset signaling server requests
And user "guest" leaves room "room" with 200 (v4)
# Signaling message when a guest leaves
Then signaling server received the following requests
| token | data |
| room | {"type":"disinvite","disinvite":{"sessionids":["SESSION(guest)"],"alluserids":["participant1","participant2"],"properties":{"name":"Private conversation","type":3,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"participant-list":"refresh"}}} |
Then user "participant1" is participant of room "room" (v4)
And user "participant2" is participant of room "room" (v4)
And user "participant3" is not participant of room "room" (v4)
And user "guest" is not participant of room "room" (v4)
@@ -0,0 +1,35 @@
Feature: conversation/limit-creation
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Given group "group1" exists
Scenario: User can not create group conversations
Given the following "spreed" app config is set
| start_conversations | ["group1"] |
Then user "participant1" creates room "room" with 403 (v4)
| roomType | 2 |
| roomName | room |
Given user "participant1" is member of group "group1"
Then user "participant1" creates room "room" with 201 (v4)
| roomType | 2 |
| roomName | room |
Scenario: User can not create public conversations
Given the following "spreed" app config is set
| start_conversations | ["group1"] |
Then user "participant1" creates room "room" with 403 (v4)
| roomType | 3 |
| roomName | room |
Given user "participant1" is member of group "group1"
Then user "participant1" creates room "room" with 201 (v4)
| roomType | 3 |
| roomName | room |
Scenario: User can still do one-to-one conversations
Given the following "spreed" app config is set
| start_conversations | ["group1"] |
Then user "participant1" creates room "room" with 201 (v4)
| roomType | 1 |
| invite | participant2 |
@@ -0,0 +1,292 @@
Feature: conversation/lobby
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Given user "participant4" exists
Scenario: set lobby state in group room
Given signaling server is started
Given user "participant1" creates room "room" (v4)
| roomType | 2 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And reset signaling server requests
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then signaling server received the following requests
| token | data |
| room | {"type":"message","message":{"data":{"type":"chat","chat":{"refresh":true}}}} |
| room | {"type":"update","update":{"userids":["participant1","participant2","participant3"],"properties":{"name":"Private conversation","type":2,"lobby-state":1,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
And reset signaling server requests
And user "participant1" sets lobby state for room "room" to "no lobby" with 200 (v4)
Then signaling server received the following requests
| token | data |
| room | {"type":"message","message":{"data":{"type":"chat","chat":{"refresh":true}}}} |
| room | {"type":"update","update":{"userids":["participant1","participant2","participant3"],"properties":{"name":"Private conversation","type":2,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
And user "participant2" sets lobby state for room "room" to "non moderators" with 200 (v4)
And user "participant2" sets lobby state for room "room" to "no lobby" with 200 (v4)
And user "participant3" sets lobby state for room "room" to "non moderators" with 403 (v4)
And user "participant3" sets lobby state for room "room" to "no lobby" with 403 (v4)
Scenario: set lobby state in public room
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
And user "participant1" sets lobby state for room "room" to "no lobby" with 200 (v4)
And user "participant2" sets lobby state for room "room" to "non moderators" with 200 (v4)
And user "participant2" sets lobby state for room "room" to "no lobby" with 200 (v4)
And user "participant3" sets lobby state for room "room" to "non moderators" with 403 (v4)
And user "participant3" sets lobby state for room "room" to "no lobby" with 403 (v4)
And user "participant4" sets lobby state for room "room" to "non moderators" with 403 (v4)
And user "participant4" sets lobby state for room "room" to "no lobby" with 403 (v4)
And user "guest" sets lobby state for room "room" to "non moderators" with 401 (v4)
And user "guest" sets lobby state for room "room" to "no lobby" with 401 (v4)
And user "guest2" sets lobby state for room "room" to "non moderators" with 401 (v4)
And user "guest2" sets lobby state for room "room" to "no lobby" with 401 (v4)
Scenario: set lobby state in one-to-one room
Given user "participant1" creates room "room" (v4)
| roomType | 1 |
| invite | participant2 |
When user "participant1" sets lobby state for room "room" to "non moderators" with 400 (v4)
And user "participant1" sets lobby state for room "room" to "no lobby" with 400 (v4)
Given user "participant2" creates room "room" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant2" sets lobby state for room "room" to "non moderators" with 400 (v4)
And user "participant2" sets lobby state for room "room" to "no lobby" with 400 (v4)
Scenario: set lobby state in file room
Given user "participant1" shares "welcome.txt" with user "participant2" with OCS 100
And user "participant2" accepts last share
And user "participant1" gets the room for path "welcome.txt" with 200 (v1)
And user "participant2" gets the room for path "welcome (2).txt" with 200 (v1)
And user "participant1" joins room "file welcome.txt room" with 200 (v4)
And user "participant2" joins room "file welcome (2).txt room" with 200 (v4)
When user "participant1" sets lobby state for room "file welcome.txt room" to "non moderators" with 403 (v4)
And user "participant1" sets lobby state for room "file welcome.txt room" to "no lobby" with 403 (v4)
And user "participant2" sets lobby state for room "file welcome (2).txt room" to "non moderators" with 403 (v4)
And user "participant2" sets lobby state for room "file welcome (2).txt room" to "no lobby" with 403 (v4)
Scenario: set lobby state of a room not joined to
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
When user "participant2" sets lobby state for room "room" to "non moderators" with 404 (v4)
And user "participant2" sets lobby state for room "room" to "no lobby" with 404 (v4)
Scenario: participants can join the room when the lobby is active
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
Scenario: participants can join a password protected room when the lobby is active
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" sets password "foobar" for room "room" with 200 (v4)
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
| password | foobar |
And user "guest" joins room "room" with 200 (v4)
| password | foobar |
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
| password | foobar |
Scenario: lobby prevents chats for non moderators
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" sends message "Message 1" to room "room" with 201
And user "participant2" sends message "Message 2" to room "room" with 201
And user "participant3" sends message "Message 3" to room "room" with 412
And user "participant4" sends message "Message 4" to room "room" with 412
And user "guest" sends message "Message 5" to room "room" with 201
And user "guest2" sends message "Message 6" to room "room" with 412
And user "participant1" sees the following messages in room "room" with 200
| room | actorType | actorId | actorDisplayName | message | messageParameters |
| room | guests | guest | | Message 5 | [] |
| room | users | participant2 | participant2-displayname | Message 2 | [] |
| room | users | participant1 | participant1-displayname | Message 1 | [] |
And user "participant2" sees the following messages in room "room" with 200
| room | actorType | actorId | actorDisplayName | message | messageParameters |
| room | guests | guest | | Message 5 | [] |
| room | users | participant2 | participant2-displayname | Message 2 | [] |
| room | users | participant1 | participant1-displayname | Message 1 | [] |
And user "participant3" sees the following messages in room "room" with 412
And user "participant4" sees the following messages in room "room" with 412
And user "guest" sees the following messages in room "room" with 200
| room | actorType | actorId | actorDisplayName | message | messageParameters |
| room | guests | guest | | Message 5 | [] |
| room | users | participant2 | participant2-displayname | Message 2 | [] |
| room | users | participant1 | participant1-displayname | Message 1 | [] |
And user "guest2" sees the following messages in room "room" with 412
Scenario: lobby prevents calls for non moderators
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" joins call "room" with 200 (v4)
And user "participant2" joins call "room" with 200 (v4)
And user "participant3" joins call "room" with 412 (v4)
And user "participant4" joins call "room" with 412 (v4)
And user "guest" joins call "room" with 200 (v4)
And user "guest2" joins call "room" with 412 (v4)
And user "participant1" sees 3 peers in call "room" with 200 (v4)
And user "participant2" sees 3 peers in call "room" with 200 (v4)
And user "participant3" sees 0 peers in call "room" with 412 (v4)
And user "participant4" sees 0 peers in call "room" with 412 (v4)
And user "guest" sees 3 peers in call "room" with 200 (v4)
And user "guest2" sees 0 peers in call "room" with 412 (v4)
And user "participant1" leaves call "room" with 200 (v4)
And user "participant2" leaves call "room" with 200 (v4)
And user "guest" leaves call "room" with 200 (v4)
Scenario: lobby prevents some room actions for non moderators
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" leaves room "room" with 200 (v4)
And user "participant2" leaves room "room" with 200 (v4)
And user "participant3" leaves room "room" with 200 (v4)
And user "participant4" leaves room "room" with 200 (v4)
And user "guest" leaves room "room" with 200 (v4)
And user "guest2" leaves room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
And user "participant2" removes themselves from room "room" with 200 (v4)
And user "participant3" removes themselves from room "room" with 200 (v4)
# Not all the values are checked in the test, only the most relevant ones
Scenario: participants can get some room information when the lobby is active
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
And user "participant1" adds user "participant3" to room "room" with 200 (v4)
And user "participant1" joins room "room" with 200 (v4)
And user "participant2" joins room "room" with 200 (v4)
And user "participant3" joins room "room" with 200 (v4)
And user "participant4" joins room "room" with 200 (v4)
And user "guest" joins room "room" with 200 (v4)
And user "participant1" promotes "guest" in room "room" with 200 (v4)
And user "guest2" joins room "room" with 200 (v4)
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
And user "participant1" sends message "Message 1" to room "room" with 201
And user "participant1" sees the following system messages in room "room" with 200
| room | actorType | actorId | systemMessage |
| room | users | participant1 | lobby_non_moderators |
| room | users | participant1 | guest_moderator_promoted |
| room | users | participant1 | user_added |
| room | users | participant1 | moderator_promoted |
| room | users | participant1 | user_added |
| room | users | participant1 | conversation_created |
And user "participant1" sets description for room "room" to "the description" with 200 (v4)
Then user "participant1" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 1 | You set the description | Message 1 |
And user "participant2" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 2 | {actor} set the description | conversation_created |
And user "participant3" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 3 | UNSET | moderator_promoted |
And user "participant4" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 5 | UNSET | user_added |
And user "guest" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 6 | {actor} set the description | user_added |
And user "guest2" is participant of room "room" (v4)
| name | description | type | participantType | lastMessage | lastReadMessage |
| room | the description | 3 | 4 | UNSET | guest_moderator_promoted |
# Not all the values are checked in the test, only the most relevant ones
Scenario: Make sure resetting the lobby timer works on the room list
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
Then user "participant1" is participant of room "room" (v4)
| name | lobbyState |
| room | 0 |
When user "participant1" sets lobby state for room "room" to "non moderators" with 200 (v4)
Then user "participant1" is participant of room "room" (v4)
| name | lobbyState |
| room | 1 |
When user "participant1" sets lobby state for room "room" to "non moderators" for 5 seconds with 200 (v4)
When wait for 10 second
Then user "participant1" is participant of room "room" (v4)
| name | lobbyState |
| room | 0 |
@@ -0,0 +1,254 @@
Feature: conversation-2/one-to-one
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Scenario: User has no rooms
Then user "participant1" is participant of the following rooms (v4)
Then user "participant2" is participant of the following rooms (v4)
Then user "participant3" is participant of the following rooms (v4)
Scenario: User1 invites themself to a one2one room
When user "participant1" tries to create room with 403 (v4)
| roomType | 1 |
| invite | participant1 |
Scenario: User1 invites user2 to a one2one room and user3 is not part of it
When user "participant1" creates room "room1" (v4)
| roomType | 1 |
| invite | participant2 |
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room1 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
And user "participant3" is participant of the following rooms (v4)
And user "participant1" is participant of room "room1" (v4)
And user "participant2" is not participant of room "room1" (v4)
And user "participant3" is not participant of room "room1" (v4)
Given user "participant2" creates room "room1" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant2" is participant of room "room1" (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room1 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
| id | type | participantType |
| room1 | 1 | 1 |
Scenario: User1 invites user2 to a one2one room and leaves it
Given user "participant1" creates room "room2" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room2" (v4)
And user "participant2" is not participant of room "room2" (v4)
When user "participant1" removes themselves from room "room2" with 200 (v4)
Then user "participant1" is not participant of room "room2" (v4)
And user "participant1" is participant of the following rooms (v4)
And user "participant2" is not participant of room "room2" (v4)
And user "participant2" is participant of the following rooms (v4)
Scenario: User1 invites user2 to a one2one room and tries to delete it
Given user "participant1" creates room "room3" (v4)
| roomType | 1 |
| invite | participant2 |
Then user "participant1" is participant of room "room3" (v4)
And user "participant2" is not participant of room "room3" (v4)
When user "participant1" deletes room "room3" with 400 (v4)
Then user "participant1" is participant of room "room3" (v4)
And user "participant2" is not participant of room "room3" (v4)
Scenario: User1 invites user2 to a one2one room and tries to remove user2
Given user "participant1" creates room "room4" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room4" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Then user "participant1" is participant of room "room4" (v4)
And user "participant2" is participant of room "room4" (v4)
And user "participant1" loads attendees attendee ids in room "room4" (v4)
When user "participant1" removes "participant2" from room "room4" with 400 (v4)
Then user "participant1" is participant of room "room4" (v4)
And user "participant2" is participant of room "room4" (v4)
Scenario: User1 invites user2 to a one2one room and tries to rename it
Given user "participant1" creates room "room5" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room5" (v4)
When user "participant1" renames room "room5" to "new name" with 400 (v4)
Scenario: User1 invites user2 to a one2one room and tries to make it public
Given user "participant1" creates room "room6" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room6" (v4)
When user "participant1" makes room "room6" public with 400 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room6 | 1 | 1 |
Scenario: User1 invites user2 to a one2one room and tries to invite user3
Given user "participant1" creates room "room7" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room7" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant1" is participant of room "room7" (v4)
And user "participant2" is participant of room "room7" (v4)
And user "participant3" is not participant of room "room7" (v4)
When user "participant1" adds user "participant3" to room "room7" with 400 (v4)
And user "participant3" is not participant of room "room7" (v4)
And user "participant1" sees the following attendees in room "room7" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 1 |
Scenario: User1 invites user2 to a one2one room and promote user2 to moderator
Given user "participant1" creates room "room8" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room8" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant1" is participant of room "room8" (v4)
And user "participant2" is participant of room "room8" (v4)
And user "participant1" loads attendees attendee ids in room "room8" (v4)
When user "participant1" promotes "participant2" in room "room8" with 400 (v4)
Scenario: User1 invites user2 to a one2one room and demote user2 to moderator
Given user "participant1" creates room "room9" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room9" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant1" is participant of room "room9" (v4)
And user "participant2" is participant of room "room9" (v4)
And user "participant1" loads attendees attendee ids in room "room9" (v4)
When user "participant1" demotes "participant2" in room "room9" with 400 (v4)
Scenario: User1 invites user2 to a one2one room and promote non-invited user
Given user "participant1" creates room "room10" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room10" (v4)
And user "participant3" is not participant of room "room10" (v4)
And user "participant1" loads attendees attendee ids in room "room10" (v4)
When user "participant1" promotes "stranger" in room "room10" with 404 (v4)
Scenario: User1 invites user2 to a one2one room and demote non-invited user
Given user "participant1" creates room "room11" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room11" (v4)
And user "participant3" is not participant of room "room11" (v4)
And user "participant1" loads attendees attendee ids in room "room11" (v4)
When user "participant1" demotes "stranger" in room "room11" with 404 (v4)
Scenario: User1 invites user2 to a one2one room twice, it's the same room
Given user "participant1" creates room "room12" (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room12" (v4)
And user "participant2" is not participant of room "room12" (v4)
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room12 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
When user "participant1" creates room "room13" with 200 (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room12" (v4)
And user "participant2" is not participant of room "room12" (v4)
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room12 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
Scenario: User1 invites user2 to a one2one room, leaves and does it again, it's the same room
Given user "participant1" creates room "room14" (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room14" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
And user "participant1" is participant of room "room14" (v4)
And user "participant2" is participant of room "room14" (v4)
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room14 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
| id | type | participantType |
| room14 | 1 | 1 |
When user "participant1" removes themselves from room "room14" with 200 (v4)
Then user "participant1" is not participant of room "room14" (v4)
And user "participant1" is participant of the following rooms (v4)
And user "participant2" is participant of room "room14" (v4)
And user "participant2" is participant of the following rooms (v4)
| id | type | participantType |
| room14 | 1 | 1 |
And user "participant2" sees the following attendees in room "room14" with 200 (v4)
| actorType | actorId | participantType |
| users | participant2 | 1 |
When user "participant1" creates room "room15" with 200 (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" is participant of room "room14" (v4)
And user "participant2" is participant of room "room14" (v4)
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room14 | 1 | 1 |
And user "participant2" is participant of the following rooms (v4)
| id | type | participantType |
| room14 | 1 | 1 |
And user "participant2" sees the following attendees in room "room14" with 200 (v4)
| actorType | actorId | participantType |
| users | participant1 | 1 |
| users | participant2 | 1 |
Scenario: Check share restrictions on one to one conversation
Given the following "core" app config is set
| shareapi_restrict_user_enumeration_full_match | no |
| shareapi_allow_share_dialog_user_enumeration | yes |
| shareapi_restrict_user_enumeration_to_group | yes |
| shareapi_restrict_user_enumeration_to_phone | yes |
And user "participant1" creates room "room15" with 403 (v4)
| roomType | 1 |
| invite | participant2 |
Scenario: Remove self from one-to-one conversations when deletable config is set deletes it
Given user "participant1" creates room "room" with 201 (v4)
| roomType | 1 |
| invite | participant2 |
Given user "participant2" creates room "room" with 200 (v4)
| roomType | 1 |
| invite | participant1 |
Then user "participant1" removes themselves from room "room" with 200 (v4)
And user "participant1" is participant of the following rooms (v4)
And user "participant2" is participant of the following rooms (v4)
| id | type | participantType |
| room | 1 | 1 |
When user "participant1" creates room "room" with 200 (v4)
| roomType | 1 |
| invite | participant2 |
And the following "spreed" app config is set
| delete_one_to_one_conversations | 1 |
Then user "participant1" removes themselves from room "room" with 200 (v4)
And user "participant1" is participant of the following rooms (v4)
And user "participant2" is participant of the following rooms (v4)
Scenario: Deleting one-to-one conversations is possible when deletable config is set
Given user "participant1" creates room "room" with 201 (v4)
| roomType | 1 |
| invite | participant2 |
And user "participant1" sends message "Message" to room "room" with 201
Then user "participant1" deletes room "room" with 400 (v4)
When the following "spreed" app config is set
| delete_one_to_one_conversations | 1 |
Then user "participant1" deletes room "room" with 200 (v4)
And user "participant1" is participant of the following rooms (v4)
And user "participant2" is participant of the following rooms (v4)
@@ -0,0 +1,91 @@
Feature: conversation-2/public-private
Background:
Given user "participant1" exists
Given user "participant2" exists
Given user "participant3" exists
Scenario: Owner makes room private/public
Given signaling server is started
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
And reset signaling server requests
When user "participant1" makes room "room" private with 200 (v4)
Then signaling server received the following requests
| token | data |
| room | {"type":"message","message":{"data":{"type":"chat","chat":{"refresh":true}}}} |
| room | {"type":"update","update":{"userids":["participant1"],"properties":{"name":"Private conversation","type":2,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |
And reset signaling server requests
When user "participant1" makes room "room" public with 200 (v4)
Then signaling server received the following requests
| token | data |
| room | {"type":"message","message":{"data":{"type":"chat","chat":{"refresh":true}}}} |
| room | {"type":"update","update":{"userids":["participant1"],"properties":{"name":"Private conversation","type":3,"lobby-state":0,"lobby-timer":null,"read-only":0,"listable":0,"active-since":null,"sip-enabled":0,"description":""}}} |
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
Scenario: Moderator makes room private/public
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
And user "participant1" promotes "participant2" in room "room" with 200 (v4)
When user "participant2" makes room "room" private with 200 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |
When user "participant2" makes room "room" public with 200 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
Scenario: User makes room private/public
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
And user "participant1" adds user "participant2" to room "room" with 200 (v4)
When user "participant2" makes room "room" private with 403 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
When user "participant1" makes room "room" private with 200 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |
When user "participant2" makes room "room" public with 403 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |
Scenario: Stranger makes room private/public
Given user "participant1" creates room "room" (v4)
| roomType | 3 |
| roomName | room |
And user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
When user "participant2" makes room "room" private with 404 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 3 | 1 |
When user "participant1" makes room "room" private with 200 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |
When user "participant2" makes room "room" public with 404 (v4)
Then user "participant1" is participant of the following rooms (v4)
| id | type | participantType |
| room | 2 | 1 |