Coverage for tests/streamwise_app/test_scene.py: 100%

30 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-09 04:47 +0000

1#!/usr/bin/env python3 

2""" 

3Unit tests for StreamCast. 

4""" 

5import sys 

6import os 

7import json 

8 

9from dataclasses import asdict 

10 

11# Add current path 

12sys.path.append(os.getcwd()) 

13 

14from tests.test_utils import temp_sys_path 

15 

16with temp_sys_path("apps"): 

17 from scene import SceneSegment 

18 

19 

20def test_scene_segment() -> None: 

21 segment = SceneSegment( 

22 scene_id=1, 

23 start_frame=10, 

24 end_frame=30, 

25 start_sec=10.0, 

26 end_sec=35.33 

27 ) 

28 assert segment.duration_sec == 25.33 

29 

30 assert len(segment.frame_image_paths) == 0 

31 segment.add_image_path("path/to/image1.png") 

32 segment.add_image_path("path/to/image2.png") 

33 assert len(segment.frame_image_paths) == 2 

34 

35 assert segment.descriptions == [] 

36 segment.add_description("A sunny beach scene.") 

37 segment.add_description("Waves crashing on the shore.") 

38 assert len(segment.descriptions) == 2 

39 

40 assert segment.get_start() == "00:00:10" 

41 assert segment.get_end() == "00:00:35" 

42 

43 segment.transcript = "Scene transcript" 

44 

45 assert str(segment) is not None 

46 expected_segment_str = \ 

47 "[ 10- 30, 10.0-35.3]: Scene transcript... | " \ 

48 "A sunny beach scene.... | " \ 

49 "Waves crashing on the shore.... | 2 images" 

50 assert str(segment) == expected_segment_str 

51 

52 

53def test_user_json_serialization() -> None: 

54 segment = SceneSegment( 

55 scene_id=2, 

56 start_frame=100, 

57 end_frame=200, 

58 start_sec=100.0, 

59 end_sec=150.33 

60 ) 

61 

62 json_str = json.dumps(asdict(segment)) 

63 data = json.loads(json_str) 

64 

65 assert data == { 

66 "audio_path": None, 

67 "descriptions": [], 

68 "end_frame": 200, 

69 "end_sec": 150.33, 

70 "frame_image_paths": [], 

71 "language": None, 

72 "scene_id": 2, 

73 "start_frame": 100, 

74 "start_sec": 100.0, 

75 "transcript": None, 

76 "translation": None, 

77 }