mirror of
https://github.com/suitenumerique/meet.git
synced 2026-07-27 04:09:26 +00:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 0fc70d4e92 |
@@ -13,7 +13,7 @@ from django.core.exceptions import SuspiciousOperation
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from django_pydantic_field.rest_framework import SchemaField
|
from django_pydantic_field.rest_framework import SchemaField
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field, ValidationError
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import PermissionDenied
|
from rest_framework.exceptions import PermissionDenied
|
||||||
from timezone_field.rest_framework import TimeZoneSerializerField
|
from timezone_field.rest_framework import TimeZoneSerializerField
|
||||||
@@ -123,6 +123,16 @@ class ListRoomSerializer(serializers.ModelSerializer):
|
|||||||
read_only_fields = ["id", "slug"]
|
read_only_fields = ["id", "slug"]
|
||||||
|
|
||||||
|
|
||||||
|
class RoomConfiguration(BaseModel):
|
||||||
|
"""Wip"""
|
||||||
|
|
||||||
|
can_publish_sources: list[Literal[
|
||||||
|
"microphone", "screen_share", "screen_share_audio", "camera"
|
||||||
|
]] | None = None
|
||||||
|
|
||||||
|
model_config = {"extra": "forbid"}
|
||||||
|
|
||||||
|
|
||||||
class RoomSerializer(serializers.ModelSerializer):
|
class RoomSerializer(serializers.ModelSerializer):
|
||||||
"""Serialize Room model for the API."""
|
"""Serialize Room model for the API."""
|
||||||
|
|
||||||
@@ -131,6 +141,20 @@ class RoomSerializer(serializers.ModelSerializer):
|
|||||||
fields = ["id", "name", "slug", "configuration", "access_level", "pin_code"]
|
fields = ["id", "name", "slug", "configuration", "access_level", "pin_code"]
|
||||||
read_only_fields = ["id", "slug", "pin_code"]
|
read_only_fields = ["id", "slug", "pin_code"]
|
||||||
|
|
||||||
|
def validate_configuration(self, configuration):
|
||||||
|
"""Wip."""
|
||||||
|
|
||||||
|
if configuration is None:
|
||||||
|
return configuration
|
||||||
|
|
||||||
|
try:
|
||||||
|
RoomConfiguration.model_validate(configuration)
|
||||||
|
except ValidationError as e:
|
||||||
|
raise SuspiciousOperation("Wip, invalid room configuration")
|
||||||
|
|
||||||
|
return configuration
|
||||||
|
|
||||||
|
|
||||||
def to_representation(self, instance):
|
def to_representation(self, instance):
|
||||||
"""
|
"""
|
||||||
Add users only for administrator users.
|
Add users only for administrator users.
|
||||||
|
|||||||
@@ -232,7 +232,7 @@ def test_api_rooms_retrieve_authenticated_public(mock_token):
|
|||||||
"""
|
"""
|
||||||
room = RoomFactory(
|
room = RoomFactory(
|
||||||
access_level=RoomAccessLevel.PUBLIC,
|
access_level=RoomAccessLevel.PUBLIC,
|
||||||
configuration={"can_publish_sources": ["mock-source"]},
|
configuration={"can_publish_sources": ["camera"]},
|
||||||
)
|
)
|
||||||
|
|
||||||
user = UserFactory()
|
user = UserFactory()
|
||||||
@@ -264,7 +264,7 @@ def test_api_rooms_retrieve_authenticated_public(mock_token):
|
|||||||
user=user,
|
user=user,
|
||||||
username=None,
|
username=None,
|
||||||
color=None,
|
color=None,
|
||||||
sources=["mock-source"],
|
sources=["camera"],
|
||||||
is_admin_or_owner=False,
|
is_admin_or_owner=False,
|
||||||
participant_id=None,
|
participant_id=None,
|
||||||
)
|
)
|
||||||
@@ -363,7 +363,7 @@ def test_api_rooms_retrieve_members(mock_token, django_assert_num_queries, setti
|
|||||||
other_user = UserFactory()
|
other_user = UserFactory()
|
||||||
|
|
||||||
room = RoomFactory(
|
room = RoomFactory(
|
||||||
configuration={"can_publish_sources": ["mock-source"]},
|
configuration={"can_publish_sources": ["camera"]},
|
||||||
)
|
)
|
||||||
UserResourceAccessFactory(resource=room, user=user, role="member")
|
UserResourceAccessFactory(resource=room, user=user, role="member")
|
||||||
UserResourceAccessFactory(resource=room, user=other_user, role="member")
|
UserResourceAccessFactory(resource=room, user=other_user, role="member")
|
||||||
@@ -401,7 +401,7 @@ def test_api_rooms_retrieve_members(mock_token, django_assert_num_queries, setti
|
|||||||
user=user,
|
user=user,
|
||||||
username=None,
|
username=None,
|
||||||
color=None,
|
color=None,
|
||||||
sources=["mock-source"],
|
sources=["camera"],
|
||||||
is_admin_or_owner=False,
|
is_admin_or_owner=False,
|
||||||
participant_id=None,
|
participant_id=None,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ def test_api_rooms_update_administrators():
|
|||||||
"name": "New name",
|
"name": "New name",
|
||||||
"slug": "should-be-ignored",
|
"slug": "should-be-ignored",
|
||||||
"access_level": RoomAccessLevel.PUBLIC,
|
"access_level": RoomAccessLevel.PUBLIC,
|
||||||
"configuration": {"the_key": "the_value"},
|
"configuration": {"can_publish_sources": ["camera"]},
|
||||||
},
|
},
|
||||||
format="json",
|
format="json",
|
||||||
)
|
)
|
||||||
@@ -104,7 +104,7 @@ def test_api_rooms_update_administrators():
|
|||||||
assert room.name == "New name"
|
assert room.name == "New name"
|
||||||
assert room.slug == "new-name"
|
assert room.slug == "new-name"
|
||||||
assert room.access_level == RoomAccessLevel.PUBLIC
|
assert room.access_level == RoomAccessLevel.PUBLIC
|
||||||
assert room.configuration == {"the_key": "the_value"}
|
assert room.configuration == {"can_publish_sources": ["camera"]}
|
||||||
|
|
||||||
|
|
||||||
def test_api_rooms_update_administrators_of_another():
|
def test_api_rooms_update_administrators_of_another():
|
||||||
|
|||||||
Reference in New Issue
Block a user