diff --git a/notifications/test/test_notificationevent.py b/notifications/test/test_notificationevent.py index 0ec01bf9c..1e9673cca 100644 --- a/notifications/test/test_notificationevent.py +++ b/notifications/test/test_notificationevent.py @@ -1,10 +1,18 @@ import pytest from notifications.models_interface import Repository -from notifications.notificationevent import NotificationEvent +from notifications.notificationevent import (BuildSuccessEvent, NotificationEvent, + VulnerabilityFoundEvent) +from util.morecollections import AttrDict from test.fixtures import * + +@pytest.mark.parametrize('event_kind', NotificationEvent.event_names()) +def test_create_notifications(event_kind): + assert NotificationEvent.get_event(event_kind) is not None + + @pytest.mark.parametrize('event_name', NotificationEvent.event_names()) def test_build_notification(event_name, initialized_db): # Create the notification event. @@ -19,3 +27,164 @@ def test_build_notification(event_name, initialized_db): found.get_level(sample_data, notification_data) found.get_summary(sample_data, notification_data) found.get_message(sample_data, notification_data) + + +def test_build_emptyjson(): + notification_data = AttrDict({ + 'event_config_dict': None, + }) + + # No build data at all. + assert BuildSuccessEvent().should_perform({}, notification_data) + +def test_build_nofilter(): + notification_data = AttrDict({ + 'event_config_dict': {}, + }) + + # No build data at all. + assert BuildSuccessEvent().should_perform({}, notification_data) + + # With trigger metadata but no ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': {}, + }, notification_data) + + # With trigger metadata and a ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/somebranch', + }, + }, notification_data) + + +def test_build_emptyfilter(): + notification_data = AttrDict({ + 'event_config_dict': {"ref-regex": ""}, + }) + + # No build data at all. + assert BuildSuccessEvent().should_perform({}, notification_data) + + # With trigger metadata but no ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': {}, + }, notification_data) + + # With trigger metadata and a ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/somebranch', + }, + }, notification_data) + + +def test_build_invalidfilter(): + notification_data = AttrDict({ + 'event_config_dict': {"ref-regex": "]["}, + }) + + # No build data at all. + assert not BuildSuccessEvent().should_perform({}, notification_data) + + # With trigger metadata but no ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': {}, + }, notification_data) + + # With trigger metadata and a ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/somebranch', + }, + }, notification_data) + + +def test_build_withfilter(): + notification_data = AttrDict({ + 'event_config_dict': {"ref-regex": "refs/heads/master"}, + }) + + # No build data at all. + assert not BuildSuccessEvent().should_perform({}, notification_data) + + # With trigger metadata but no ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': {}, + }, notification_data) + + # With trigger metadata and a not-matching ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/somebranch', + }, + }, notification_data) + + # With trigger metadata and a matching ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/master', + }, + }, notification_data) + + +def test_build_withwildcardfilter(): + notification_data = AttrDict({ + 'event_config_dict': {"ref-regex": "refs/heads/.+"}, + }) + + # No build data at all. + assert not BuildSuccessEvent().should_perform({}, notification_data) + + # With trigger metadata but no ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': {}, + }, notification_data) + + # With trigger metadata and a not-matching ref. + assert not BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/tags/sometag', + }, + }, notification_data) + + # With trigger metadata and a matching ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/master', + }, + }, notification_data) + + # With trigger metadata and another matching ref. + assert BuildSuccessEvent().should_perform({ + 'trigger_metadata': { + 'ref': 'refs/heads/somebranch', + }, + }, notification_data) + + +def test_vulnerability_notification_nolevel(): + notification_data = AttrDict({ + 'event_config_dict': {}, + }) + + # No level specified. + assert VulnerabilityFoundEvent().should_perform({}, notification_data) + + +def test_vulnerability_notification_nopvulninfo(): + notification_data = AttrDict({ + 'event_config_dict': {"level": 3}, + }) + + # No vuln info. + assert not VulnerabilityFoundEvent().should_perform({}, notification_data) + + +def test_vulnerability_notification_normal(): + notification_data = AttrDict({ + 'event_config_dict': {"level": 3}, + }) + + info = {"vulnerability": {"priority": "Critical"}} + assert VulnerabilityFoundEvent().should_perform(info, notification_data) diff --git a/notifications/test/test_notifications.py b/notifications/test/test_notifications.py deleted file mode 100644 index a075ce30e..000000000 --- a/notifications/test/test_notifications.py +++ /dev/null @@ -1,171 +0,0 @@ -import pytest - -from notifications.notificationevent import (BuildSuccessEvent, NotificationEvent, - VulnerabilityFoundEvent) -from util.morecollections import AttrDict - - -@pytest.mark.parametrize('event_kind', NotificationEvent.event_names()) -def test_create_notifications(event_kind): - assert NotificationEvent.get_event(event_kind) is not None - - -def test_build_emptyjson(): - notification_data = AttrDict({ - 'event_config_dict': None, - }) - - # No build data at all. - assert BuildSuccessEvent().should_perform({}, notification_data) - -def test_build_nofilter(): - notification_data = AttrDict({ - 'event_config_dict': {}, - }) - - # No build data at all. - assert BuildSuccessEvent().should_perform({}, notification_data) - - # With trigger metadata but no ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': {}, - }, notification_data) - - # With trigger metadata and a ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/somebranch', - }, - }, notification_data) - - -def test_build_emptyfilter(): - notification_data = AttrDict({ - 'event_config_dict': {"ref-regex": ""}, - }) - - # No build data at all. - assert BuildSuccessEvent().should_perform({}, notification_data) - - # With trigger metadata but no ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': {}, - }, notification_data) - - # With trigger metadata and a ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/somebranch', - }, - }, notification_data) - - -def test_build_invalidfilter(): - notification_data = AttrDict({ - 'event_config_dict': {"ref-regex": "]["}, - }) - - # No build data at all. - assert not BuildSuccessEvent().should_perform({}, notification_data) - - # With trigger metadata but no ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': {}, - }, notification_data) - - # With trigger metadata and a ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/somebranch', - }, - }, notification_data) - - -def test_build_withfilter(): - notification_data = AttrDict({ - 'event_config_dict': {"ref-regex": "refs/heads/master"}, - }) - - # No build data at all. - assert not BuildSuccessEvent().should_perform({}, notification_data) - - # With trigger metadata but no ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': {}, - }, notification_data) - - # With trigger metadata and a not-matching ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/somebranch', - }, - }, notification_data) - - # With trigger metadata and a matching ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/master', - }, - }, notification_data) - - -def test_build_withwildcardfilter(): - notification_data = AttrDict({ - 'event_config_dict': {"ref-regex": "refs/heads/.+"}, - }) - - # No build data at all. - assert not BuildSuccessEvent().should_perform({}, notification_data) - - # With trigger metadata but no ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': {}, - }, notification_data) - - # With trigger metadata and a not-matching ref. - assert not BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/tags/sometag', - }, - }, notification_data) - - # With trigger metadata and a matching ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/master', - }, - }, notification_data) - - # With trigger metadata and another matching ref. - assert BuildSuccessEvent().should_perform({ - 'trigger_metadata': { - 'ref': 'refs/heads/somebranch', - }, - }, notification_data) - - -def test_vulnerability_notification_nolevel(): - notification_data = AttrDict({ - 'event_config_dict': {}, - }) - - # No level specified. - assert VulnerabilityFoundEvent().should_perform({}, notification_data) - - -def test_vulnerability_notification_nopvulninfo(): - notification_data = AttrDict({ - 'event_config_dict': {"level": 3}, - }) - - # No vuln info. - assert not VulnerabilityFoundEvent().should_perform({}, notification_data) - - -def test_vulnerability_notification_normal(): - notification_data = AttrDict({ - 'event_config_dict': {"level": 3}, - }) - - info = {"vulnerability": {"priority": "Critical"}} - assert VulnerabilityFoundEvent().should_perform(info, notification_data)