"""Functional tests for ingest S3 logic using the moto server.""" import boto3 from video import config from video.logic import ingest as ingest_logic def test_get_files_to_ingest_filters_mov_only() -> None: """Only .mov files under the ingest prefix are returned.""" s3 = boto3.client("s3") s3.create_bucket(Bucket=config.VIDEO_BUCKET_NAME) for key in [ "ingest/incoming/", "ingest/incoming/video1.mov", "ingest/incoming/video2.mov", "ingest/incoming/clip.mp4", "ingest/incoming/readme.txt", "ingest/incoming/444/", "ingest/incoming/444/video3.mov", ]: s3.put_object(Bucket=config.VIDEO_BUCKET_NAME, Key=key, Body=b"") result = ingest_logic._get_files_to_ingest() assert {frozenset(d.items()) for d in result} == { frozenset( {"path": "ingest/incoming/video1.mov", "filename": "video1.mov"}.items() ), frozenset( {"path": "ingest/incoming/video2.mov", "filename": "video2.mov"}.items() ), frozenset( {"path": "ingest/incoming/444/video3.mov", "filename": "video3.mov"}.items() ), } def test_get_files_to_ingest_empty_bucket() -> None: """Empty bucket returns an empty list without error.""" s3 = boto3.client("s3") s3.create_bucket(Bucket=config.VIDEO_BUCKET_NAME) result = ingest_logic._get_files_to_ingest() assert result == []