"""Lambda test module.""" from unittest.mock import call import pytest from src.app import handler def test_handler_with_new_repos(mock_handler_dependencies, mock_repos): """Test handler when new public repositories are detected and notified.""" mock_handler_dependencies['get_public_repos'].return_value = mock_repos response = handler({}, {}) assert response['status'] == 'OK' assert 'notified about 2 new' in response['message'] mock_handler_dependencies['notify'].assert_called_once() mock_handler_dependencies['datadog'].publish_metric.assert_has_calls([ call('github_public_repo_audit.attempt', 1), call('github_public_repo_audit.public_repos', 2), call('github_public_repo_audit.success', 1) ]) assert mock_handler_dependencies['datadog'].publish_metric.call_count == 3 def test_handler_with_no_new_repos(mock_handler_dependencies): """Test handler when no new public repositories are found.""" mock_handler_dependencies['get_public_repos'].return_value = [] response = handler({}, {}) assert response['status'] == 'OK' assert 'No new public repos found' in response['message'] mock_handler_dependencies['notify'].assert_not_called() mock_handler_dependencies['datadog'].publish_metric.assert_has_calls([ call('github_public_repo_audit.attempt', 1), call('github_public_repo_audit.public_repos', 0), call('github_public_repo_audit.success', 1) ]) assert mock_handler_dependencies['datadog'].publish_metric.call_count == 3 def test_handler_with_exclude_list_set(mocker, mock_handler_dependencies, mock_repos): """Test handler when new public repositories are found and also exclude list is set.""" mock_handler_dependencies['get_public_repos'].return_value = mock_repos mocker.patch('src.app.GITHUB_PUBLIC_REPO_TO_EXCLUDE', ['repo2']) response = handler({}, {}) assert response['status'] == 'OK' assert 'notified about 1 new' in response['message'] mock_handler_dependencies['notify'].assert_called_once() mock_handler_dependencies['datadog'].publish_metric.assert_has_calls([ call('github_public_repo_audit.attempt', 1), call('github_public_repo_audit.public_repos', 1), call('github_public_repo_audit.success', 1) ]) assert mock_handler_dependencies['datadog'].publish_metric.call_count == 3 def test_handler_exception(mock_handler_dependencies): """Test handler raises and logs exception properly.""" mock_handler_dependencies['get_public_repos'].side_effect = Exception('Boom!') with pytest.raises(Exception, match='Boom!'): handler({}, {}) mock_handler_dependencies['logger'].exception.assert_called_once() mock_handler_dependencies['datadog'].publish_metric.assert_has_calls([ call('github_public_repo_audit.attempt', 1), call('github_public_repo_audit.error', 1) ]) assert mock_handler_dependencies['datadog'].publish_metric.call_count == 2