Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions database/migrations/functions/common/get_event_full.sql
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ returns json as $$
'meeting_join_url', coalesce(m_event.join_url, e.meeting_join_url),
'meeting_password', m_event.password,
'meeting_provider', e.meeting_provider_id,
'meeting_recording_requested', e.meeting_recording_requested,
'meeting_recording_url', coalesce(e.meeting_recording_url, m_event.recording_url),
'meeting_requested', e.meeting_requested,
'meetup_url', e.meetup_url,
Expand Down
2 changes: 2 additions & 0 deletions database/migrations/functions/dashboard-group/add_event.sql
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ begin
meeting_join_instructions,
meeting_join_url,
meeting_provider_id,
meeting_recording_requested,
meeting_recording_url,
meeting_requested,
meetup_url,
Expand Down Expand Up @@ -171,6 +172,7 @@ begin
nullif(p_event->>'meeting_join_instructions', ''),
nullif(p_event->>'meeting_join_url', ''),
nullif(p_event->>'meeting_provider_id', ''),
coalesce((p_event->>'meeting_recording_requested')::boolean, true),
nullif(p_event->>'meeting_recording_url', ''),
(p_event->>'meeting_requested')::boolean,
nullif(p_event->>'meetup_url', ''),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ declare
v_before_host_ids uuid[];
v_before_meeting_hosts text[] := case when p_before_event->'meeting_hosts' is not null then array(select jsonb_array_elements_text(p_before_event->'meeting_hosts')) else null end;
v_before_meeting_provider_id text := p_before_event->>'meeting_provider_id';
v_before_meeting_recording_requested boolean := coalesce((p_before_event->>'meeting_recording_requested')::boolean, true);
v_before_meeting_requested boolean := coalesce((p_before_event->>'meeting_requested')::boolean, false);
v_before_name text := p_before_event->>'name';
v_before_speaker_ids uuid[];
Expand All @@ -19,6 +20,7 @@ declare
v_after_host_ids uuid[];
v_after_meeting_hosts text[] := case when p_after_event->'meeting_hosts' is not null then array(select jsonb_array_elements_text(p_after_event->'meeting_hosts')) else null end;
v_after_meeting_provider_id text := p_after_event->>'meeting_provider_id';
v_after_meeting_recording_requested boolean := coalesce((p_after_event->>'meeting_recording_requested')::boolean, true);
v_after_meeting_requested boolean := (p_after_event->>'meeting_requested')::boolean;
v_after_name text := p_after_event->>'name';
v_after_speaker_ids uuid[];
Expand Down Expand Up @@ -63,6 +65,7 @@ begin
and v_before_host_ids is not distinct from v_after_host_ids
and v_before_meeting_hosts is not distinct from v_after_meeting_hosts
and v_before_meeting_provider_id is not distinct from v_after_meeting_provider_id
and v_before_meeting_recording_requested = v_after_meeting_recording_requested
and v_before_name = v_after_name
and v_before_speaker_ids is not distinct from v_after_speaker_ids
and v_before_starts_at is not distinct from v_after_starts_at
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ returns boolean as $$
declare
v_after_ends_at timestamptz;
v_after_event_host_ids uuid[];
v_after_event_meeting_recording_requested boolean := coalesce((p_after_event->>'meeting_recording_requested')::boolean, true);
v_after_meeting_hosts text[] := case when p_after_session->'meeting_hosts' is not null then array(select jsonb_array_elements_text(p_after_session->'meeting_hosts')) else null end;
v_after_meeting_provider_id text := p_after_session->>'meeting_provider_id';
v_after_meeting_requested boolean := (p_after_session->>'meeting_requested')::boolean;
Expand All @@ -20,6 +21,7 @@ declare

v_before_ends_at timestamptz := to_timestamp((p_before_session->>'ends_at')::double precision);
v_before_event_host_ids uuid[];
v_before_event_meeting_recording_requested boolean := coalesce((p_before_event->>'meeting_recording_requested')::boolean, true);
v_before_meeting_hosts text[] := case when p_before_session->'meeting_hosts' is not null then array(select jsonb_array_elements_text(p_before_session->'meeting_hosts')) else null end;
v_before_meeting_provider_id text := p_before_session->>'meeting_provider_id';
v_before_meeting_requested boolean := coalesce((p_before_session->>'meeting_requested')::boolean, false);
Expand Down Expand Up @@ -70,6 +72,7 @@ begin
v_in_sync := v_before_meeting_requested = true
and v_before_ends_at is not distinct from v_after_ends_at
and v_before_event_host_ids is not distinct from v_after_event_host_ids
and v_before_event_meeting_recording_requested = v_after_event_meeting_recording_requested
and v_before_meeting_hosts is not distinct from v_after_meeting_hosts
and v_before_meeting_provider_id is not distinct from v_after_meeting_provider_id
and v_before_name = v_after_name
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,7 @@ begin
meeting_join_instructions = nullif(p_event->>'meeting_join_instructions', ''),
meeting_join_url = nullif(p_event->>'meeting_join_url', ''),
meeting_provider_id = p_event->>'meeting_provider_id',
meeting_recording_requested = coalesce((p_event->>'meeting_recording_requested')::boolean, true),
meeting_recording_url = nullif(p_event->>'meeting_recording_url', ''),
meeting_requested = (p_event->>'meeting_requested')::boolean,
meetup_url = nullif(p_event->>'meetup_url', ''),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ begin
'join_url', m.join_url,
'meeting_id', m.meeting_id,
'meeting_provider_id', e.meeting_provider_id,
'meeting_recording_requested', e.meeting_recording_requested,
'password', m.password,
'provider_host_user_id', e.meeting_provider_host_user,
'provider_meeting_id', m.provider_meeting_id,
Expand Down Expand Up @@ -112,6 +113,7 @@ begin
'join_url', m.join_url,
'meeting_id', m.meeting_id,
'meeting_provider_id', s.meeting_provider_id,
'meeting_recording_requested', e.meeting_recording_requested,
'password', m.password,
'provider_host_user_id', s.meeting_provider_host_user,
'provider_meeting_id', m.provider_meeting_id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ create or replace function get_event_meeting_sync_state_hash(
from unnest(e.meeting_hosts) as meeting_host(email)
),
'meeting_provider_id', e.meeting_provider_id,
'meeting_recording_requested', e.meeting_recording_requested,
'meeting_requested', e.meeting_requested,
'name', e.name,
'published', e.published,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ create or replace function get_session_meeting_sync_state_hash(
where eh.event_id = e.event_id
),
'event_published', e.published,
'event_meeting_recording_requested', e.meeting_recording_requested,
'event_timezone', e.timezone,
'ends_at', s.ends_at,
'meeting_hosts', (
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
-- Add organizer control for automatic event meeting recordings.

alter table event
add column meeting_recording_requested boolean default true not null;
1 change: 1 addition & 0 deletions database/tests/functions/common/get_event_full.sql
Original file line number Diff line number Diff line change
Expand Up @@ -820,6 +820,7 @@ select is(
"meeting_password": "event-secret",
"meeting_requested": false,
"meeting_join_url": "https://meeting.example.com/event",
"meeting_recording_requested": true,
"meeting_recording_url": "https://meeting.example.com/event-recording",
"meetup_url": "https://meetup.com/event123",
"photos_urls": ["https://example.com/photo1.jpg", "https://example.com/photo2.jpg"],
Expand Down
31 changes: 30 additions & 1 deletion database/tests/functions/dashboard-group/add_event.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- ============================================================================

begin;
select plan(32);
select plan(33);

-- ============================================================================
-- VARIABLES
Expand Down Expand Up @@ -114,6 +114,7 @@ select ok(
"sessions": {},
"timezone": "America/New_York",
"attendee_approval_required": false,
"meeting_recording_requested": true,
"waitlist_count": 0,
"waitlist_enabled": false
}'::jsonb,
Expand Down Expand Up @@ -274,6 +275,7 @@ select ok(
"meeting_hosts": ["host1@example.com", "host2@example.com"],
"meeting_join_instructions": "Use the waiting room display name from your ticket.",
"meeting_join_url": "https://youtube.com/live",
"meeting_recording_requested": true,
"meeting_recording_url": "https://youtube.com/recording",
"meetup_url": "https://meetup.com/event",
"photos_urls": ["https://example.com/photo1.jpg", "https://example.com/photo2.jpg"],
Expand Down Expand Up @@ -467,6 +469,7 @@ select is(
select jsonb_build_object(
'event', jsonb_build_object(
'meeting_hosts', meeting_hosts,
'meeting_recording_requested', meeting_recording_requested,
'meeting_requested', meeting_requested,
'meeting_in_sync', meeting_in_sync
),
Expand All @@ -486,6 +489,7 @@ select is(
'{
"event": {
"meeting_hosts": ["event-alt-host@example.com"],
"meeting_recording_requested": true,
"meeting_requested": true,
"meeting_in_sync": false
},
Expand All @@ -498,6 +502,31 @@ select is(
'Should set meeting flags and hosts for event and session when requested'
);

-- Should persist explicit event meeting recording preference
select add_event(
null::uuid,
:'groupID'::uuid,
'{
"name": "Meeting Recording Disabled Event",
"description": "Event requesting meeting support without recording",
"timezone": "UTC",
"category_id": "00000000-0000-0000-0000-000000000011",
"kind_id": "virtual",
"capacity": 100,
"starts_at": "2030-03-02T10:00:00",
"ends_at": "2030-03-02T11:30:00",
"meeting_provider_id": "zoom",
"meeting_recording_requested": false,
"meeting_requested": true
}'::jsonb
) as "recordingDisabledEventID" \gset

select is(
(select meeting_recording_requested from event where event_id = :'recordingDisabledEventID'::uuid),
false,
'Should persist event meeting recording preference when disabled'
);

-- Should throw error when capacity exceeds max_participants with meeting_requested
select throws_ok(
$$select add_event(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- ============================================================================

begin;
select plan(14);
select plan(15);

-- ============================================================================
-- TESTS
Expand Down Expand Up @@ -176,6 +176,32 @@ select is(
'Event timezone change desyncs meeting'
);

-- Recording preference change desyncs meeting
select is(
is_event_meeting_in_sync(
'{
"name": "Sync Event",
"timezone": "America/New_York",
"kind": "virtual",
"starts_at": 1748786400,
"ends_at": 1748790000,
"meeting_recording_requested": true,
"meeting_requested": true
}'::jsonb,
'{
"name": "Sync Event",
"timezone": "America/New_York",
"kind_id": "virtual",
"starts_at": "2025-06-01T10:00:00",
"ends_at": "2025-06-01T11:00:00",
"meeting_recording_requested": false,
"meeting_requested": true
}'::jsonb
),
false,
'Event recording preference change desyncs meeting'
);

-- meeting_hosts unchanged keeps sync
select is(
is_event_meeting_in_sync(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- ============================================================================

begin;
select plan(16);
select plan(17);

-- ============================================================================
-- TESTS
Expand Down Expand Up @@ -176,6 +176,36 @@ select is(
'Event timezone change desyncs session meeting'
);

-- Parent event recording preference change desyncs session meeting
select is(
is_session_meeting_in_sync(
'{
"name": "Session One",
"session_kind_id": "virtual",
"starts_at": 1748787300,
"ends_at": 1748789100,
"meeting_requested": true
}'::jsonb,
'{
"name": "Session One",
"kind": "virtual",
"starts_at": "2025-06-01T10:15:00",
"ends_at": "2025-06-01T10:45:00",
"meeting_requested": true
}'::jsonb,
'{
"timezone": "America/New_York",
"meeting_recording_requested": true
}'::jsonb,
'{
"timezone": "America/New_York",
"meeting_recording_requested": false
}'::jsonb
),
false,
'Parent event recording preference change desyncs session meeting'
);

-- Kind change from hybrid to in-person desyncs meeting
select is(
is_session_meeting_in_sync(
Expand Down
10 changes: 9 additions & 1 deletion database/tests/functions/dashboard-group/update_event.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
-- ============================================================================

begin;
select plan(100);
select plan(101);

-- ============================================================================
-- VARIABLES
Expand Down Expand Up @@ -1119,6 +1119,7 @@ select is(
"has_ticket_purchases": false,
"meeting_in_sync": false,
"meeting_provider": "zoom",
"meeting_recording_requested": true,
"meeting_requested": true,
"sessions": {},
"starts_at": 1896213600,
Expand Down Expand Up @@ -1735,6 +1736,7 @@ select is(
"logo_url": "https://example.com/new-logo.png",
"meeting_join_instructions": "Use the event ticket name when joining.",
"meeting_join_url": "https://youtube.com/new-live",
"meeting_recording_requested": true,
"meeting_recording_url": "https://youtube.com/new-recording",
"meetup_url": "https://meetup.com/new-event",
"photos_urls": ["https://example.com/new-photo1.jpg", "https://example.com/new-photo2.jpg"],
Expand Down Expand Up @@ -2007,6 +2009,7 @@ select lives_ok(
"capacity": 100,
"kind_id": "virtual",
"meeting_provider_id": "zoom",
"meeting_recording_requested": false,
"meeting_recording_url": "https://youtube.com/watch?v=event-override",
"meeting_requested": true,
"starts_at": "2030-03-01T10:00:00",
Expand All @@ -2020,6 +2023,11 @@ select is(
'https://youtube.com/watch?v=event-override',
'Should persist event recording override for automatic meetings'
);
select is(
(select meeting_recording_requested from event where event_id = :'event5ID'::uuid),
false,
'Should persist event meeting recording preference when disabled'
);

-- Should clear event recording override and fall back to synced meeting recording
select lives_ok(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ select is(
"event_id": "00000000-0000-0000-0000-000000001512",
"hosts": ["eventhost@example.com", "eventspeaker@example.com", "explicit@example.com"],
"meeting_provider_id": "zoom",
"meeting_recording_requested": true,
"timezone": "UTC",
"topic": "Event Create Test"
}'::jsonb,
Expand All @@ -677,6 +678,7 @@ select is(
"join_url": "https://zoom.us/j/event-update",
"meeting_id": "00000000-0000-0000-0000-000000001533",
"meeting_provider_id": "zoom",
"meeting_recording_requested": true,
"password": "eventpass",
"provider_meeting_id": "event-update",
"timezone": "UTC",
Expand All @@ -698,6 +700,7 @@ select is(
"duration_secs": 1800,
"hosts": ["eventhost@example.com", "sessionhost@example.com", "sessionspeaker@example.com"],
"meeting_provider_id": "zoom",
"meeting_recording_requested": true,
"session_id": "00000000-0000-0000-0000-000000001523",
"timezone": "UTC",
"topic": "Session Create Test"
Expand All @@ -719,6 +722,7 @@ select is(
"join_url": "https://zoom.us/j/session-update",
"meeting_id": "00000000-0000-0000-0000-000000001534",
"meeting_provider_id": "zoom",
"meeting_recording_requested": true,
"password": "sessionpass",
"provider_meeting_id": "session-update",
"session_id": "00000000-0000-0000-0000-000000001524",
Expand Down Expand Up @@ -1075,6 +1079,7 @@ select is(
"duration_secs": 3600,
"event_id": "00000000-0000-0000-0000-000000001517",
"meeting_provider_id": "zoom",
"meeting_recording_requested": true,
"timezone": "UTC",
"topic": "Event Unpublished Test"
}'::jsonb,
Expand Down
Loading
Loading