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
22 changes: 11 additions & 11 deletions routes/streaming.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
from core.responses import handle_http_exception
import json
import traceback
from core.log import logger
from datetime import datetime
import json
from uuid import UUID

from fastapi import APIRouter, Depends, HTTPException, Request
from pytz import timezone
from sqlalchemy.orm import Session

from core.log import logger
from core.mux_service import mux_service
from core.responses import (
BadRequest,
Expand All @@ -17,6 +16,7 @@
Ok,
Unauthorized,
common_response,
handle_http_exception,
)
from core.security import get_user_from_token, oauth2_scheme
from models import get_db_sync
Expand Down Expand Up @@ -70,14 +70,14 @@ async def get_stream_playback(
if stream_asset.schedule.deleted_at:
return common_response(NotFound(message="Stream not found"))

if stream_asset.status not in [
StreamStatus.READY.value,
StreamStatus.STREAMING.value,
StreamStatus.ENDED.value,
]:
return common_response(
BadRequest(message="Stream is not ready for playback")
)
# if stream_asset.status not in [
# StreamStatus.READY.value,
# StreamStatus.STREAMING.value,
# StreamStatus.ENDED.value,
# ]:
# return common_response(
# BadRequest(message="Stream is not ready for playback")
# )

# Use asset playback ID for ended streams (replay/recording)
# Use live stream playback ID for active/streaming streams
Expand Down
110 changes: 55 additions & 55 deletions routes/tests/test_streaming.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import uuid
import alembic.config
from datetime import datetime, timedelta
from unittest import IsolatedAsyncioTestCase
from unittest.mock import patch

import alembic.config
from fastapi.testclient import TestClient

from core.security import generate_token_from_user
from models import engine, db, get_db_sync, get_db_sync_for_test
from models.User import MANAGEMENT_PARTICIPANT, User
from models.Speaker import Speaker
from models.SpeakerType import SpeakerType
from main import app
from models import db, engine, get_db_sync, get_db_sync_for_test
from models.Room import Room
from models.ScheduleType import ScheduleType
from models.Schedule import Schedule
from models.ScheduleType import ScheduleType
from models.Speaker import Speaker
from models.SpeakerType import SpeakerType
from models.Stream import Stream, StreamStatus
from models.User import MANAGEMENT_PARTICIPANT, User
from schemas.user_profile import ParticipantType
from main import app


class TestStreaming(IsolatedAsyncioTestCase):
Expand Down Expand Up @@ -447,54 +447,54 @@ async def test_get_stream_playback_not_found(self):
# Expect
self.assertEqual(response.status_code, 404)

async def test_get_stream_playback_pending_status(self):
# Given
start_time = datetime.now() + timedelta(hours=1)
end_time = start_time + timedelta(hours=1)

schedule = Schedule(
title="Pending Stream",
speaker_id=self.speaker.id,
room_id=self.room.id,
schedule_type_id=self.schedule_type.id,
description="Test description",
presentation_language="English",
slide_language="English",
tags=["python"],
start=start_time,
end=end_time,
)
self.db.add(schedule)
self.db.commit()

stream = Stream(
schedule_id=schedule.id,
is_public=True,
mux_live_stream_id="mux_stream_123",
mux_playback_id="playback_123",
mux_stream_key="stream_key_123",
status=StreamStatus.PENDING,
created_at=datetime.now(),
updated_at=datetime.now(),
)
self.db.add(stream)
self.db.commit()

token, _ = await generate_token_from_user(
db=self.db, user=self.user_participant
)
app.dependency_overrides[get_db_sync] = get_db_sync_for_test(db=self.db)
client = TestClient(app)

# When
response = client.get(
f"/streaming/{stream.id}",
headers={"Authorization": f"Bearer {token}"},
)

# Expect
self.assertEqual(response.status_code, 400)
self.assertIn("not ready for playback", response.json()["message"])
# async def test_get_stream_playback_pending_status(self):
# # Given
# start_time = datetime.now() + timedelta(hours=1)
# end_time = start_time + timedelta(hours=1)

# schedule = Schedule(
# title="Pending Stream",
# speaker_id=self.speaker.id,
# room_id=self.room.id,
# schedule_type_id=self.schedule_type.id,
# description="Test description",
# presentation_language="English",
# slide_language="English",
# tags=["python"],
# start=start_time,
# end=end_time,
# )
# self.db.add(schedule)
# self.db.commit()

# stream = Stream(
# schedule_id=schedule.id,
# is_public=True,
# mux_live_stream_id="mux_stream_123",
# mux_playback_id="playback_123",
# mux_stream_key="stream_key_123",
# status=StreamStatus.PENDING,
# created_at=datetime.now(),
# updated_at=datetime.now(),
# )
# self.db.add(stream)
# self.db.commit()

# token, _ = await generate_token_from_user(
# db=self.db, user=self.user_participant
# )
# app.dependency_overrides[get_db_sync] = get_db_sync_for_test(db=self.db)
# client = TestClient(app)

# # When
# response = client.get(
# f"/streaming/{stream.id}",
# headers={"Authorization": f"Bearer {token}"},
# )

# # Expect
# self.assertEqual(response.status_code, 400)
# self.assertIn("not ready for playback", response.json()["message"])

async def test_get_stream_playback_deleted_schedule(self):
# Given
Expand Down