"""Lambda test module.""" import src.index as index from src.handle_result import podcast from src.handle_result import kafka_producer_with_avro_schema import src.s3 as s3 import pytest def test_scan_clean(mock_update_podcast_adread, mock_scan_clean, mock_s3_get): """Test handler function.""" result = index.handler({ 'detail': { 'requestParameters': { 'bucketName': 'dev-orcd-podcast-output-assets', 'key': 'copies/safe.pdf' } } }, None) assert result == {'has_virus': False} podcast.update_podcast_adread.assert_called_with( 'copies/safe.pdf') def test_scan_has_virus( mock_update_podcast_adread, mock_scan_virus, mock_s3_get, mock_s3_delete): """Test handler has virus.""" result = index.handler({ 'detail': { 'requestParameters': { 'bucketName': 'dev-orcd-podcast-output-assets', 'key': 'copies/eicar.pdf' } }, }, None) assert result == {'has_virus': True} podcast.update_podcast_adread.assert_not_called() s3.delete_object.assert_called_with( bucket='dev-orcd-podcast-output-assets', key='copies/eicar.pdf') def test_scan_has_virus_no_delete( mock_update_podcast_adread, mock_scan_virus, mock_s3_get, mock_s3_delete): """Test will not delete virus if thats passed.""" index.handler({ 'detail': { 'requestParameters': { 'bucketName': 'dev-orcd-podcast-output-assets', 'key': 'copies/eicar.pdf' } }, 'delete': False }, None) s3.delete_object.assert_not_called() def test_scan_eventbridge(mock_kafka_producer_with_avro_schema, mock_scan_clean, mock_s3_get): """Test handler eventbridge event.""" result = index.handler({ 'id': '6c30df95-67c1-459a-fae2-f10c7d37ec73', 'detail-type': 'Object Created', 'source': 'aws.s3', 'detail': { 'version': '0', 'bucket': { 'name': 'qa-neighbouring-rights' }, 'object': { 'key': '4f9056c4-8efb-4c6a-951f-29e667ecebae.csv', 'size': 1414, 'etag': 'f2ecc8d457e951d29b1477d10ecfcf88', 'version-id': 'm6GeQh78N5ADchcyA73yc_hFN_4B9y.e', 'sequencer': '00620E49C868CD31A7' } } }, None) assert result == {'has_virus': False} assert kafka_producer_with_avro_schema.KafkaProducerWithAvroSchema.produce_message.call_count == 1 s3.get_object.assert_called_with( bucket='qa-neighbouring-rights', key='4f9056c4-8efb-4c6a-951f-29e667ecebae.csv' ) def test_scan_random_event(mock_kafka_producer, mock_scan_clean, mock_s3_get): """Test handler unsupported event.""" with pytest.raises(Exception, match='Invalid event. Cannot scan this file.'): index.handler({'dummy': 'event'}, None)