Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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