Commit d0ad647c authored by John Davis's avatar John Davis
Browse files

Rewrite, add more unit tests

parent 442ea85f
Loading
Loading
Loading
Loading
+62 −11
Original line number Diff line number Diff line
import pytest

from galaxy import config
from galaxy.security import validate_user_input
from galaxy.security.validate_user_input import (
    extract_domain,
@@ -8,6 +11,11 @@ from galaxy.security.validate_user_input import (
)


@pytest.fixture()
def appconfig():
    return config.GalaxyAppConfiguration(override_tempdir=False)


def test_extract_full_domain():
    assert extract_domain("jack@foo.com") == "foo.com"
    assert extract_domain("jack@foo.bar.com") == "foo.bar.com"
@@ -50,15 +58,58 @@ def test_validate_email_str():
    assert validate_email_str(too_long_email) != ""


def test_is_email_banned(monkeypatch):
class TestIsEmailBanned:

    mock_ban_list = ["ab@foo.com", "ab@gmail.com", "Not.Canonical+email+gmail+address@gmail.com"]
    monkeypatch.setattr(validate_user_input, "_read_email_ban_list", lambda a: mock_ban_list)

    assert is_email_banned("a.b@gmail.com", "_")
    assert is_email_banned("ab@gmail.com", "_")
    assert is_email_banned("a.b+c@gmail.com", "_")
    assert is_email_banned("Ab@foo.com", "_")
    assert is_email_banned("a.b.+c.d@gmail.com", "_")
    assert is_email_banned("not.canonical@gmail.com", "_")
    assert not is_email_banned("ab@not-gmail.com", "_")
    assert not is_email_banned("a.b+c@not-gmail.com", "_")

    def test_default_canonical_rules(self, monkeypatch, appconfig):
        """Rules loaded from schema."""
        monkeypatch.setattr(validate_user_input, "_read_email_ban_list", lambda a: self.mock_ban_list)

        rules = appconfig.canonical_email_rules
        assert is_email_banned("ab@foo.com", "_", rules)
        assert not is_email_banned("Ab@foo.com", "_", rules)
        assert not is_email_banned("a.b@foo.com", "_", rules)
        assert not is_email_banned("ab+bar@foo.com", "_", rules)
        assert not is_email_banned("something-else@foo.com", "_", rules)

        # default rules for gmail are applied:
        assert is_email_banned("ab@googlemail.com", "_", rules)
        assert is_email_banned("Ab@gmail.com", "_", rules)
        assert is_email_banned("a.b@gmail.com", "_", rules)
        assert is_email_banned("ab+bar@gmail.com", "_", rules)
        assert not is_email_banned("ab-bar@gmail.com", "_", rules)  # different sub-addressing delimiter

    def test_no_canonical_rules(self, monkeypatch, appconfig):
        """No rules loaded."""
        monkeypatch.setattr(validate_user_input, "_read_email_ban_list", lambda a: self.mock_ban_list)

        rules = None
        assert is_email_banned("ab@foo.com", "_", rules)
        assert not is_email_banned("Ab@foo.com", "_", rules)
        assert not is_email_banned("a.b@foo.com", "_", rules)
        assert not is_email_banned("ab+bar@foo.com", "_", rules)
        assert not is_email_banned("something-else@foo.com", "_", rules)

        # default rules for gmail are NOT applied:
        assert not is_email_banned("ab@googlemail.com", "_", rules)
        assert not is_email_banned("Ab@gmail.com", "_", rules)
        assert not is_email_banned("a.b@gmail.com", "_", rules)
        assert not is_email_banned("ab+bar@gmail.com", "_", rules)

    def test_custom_canonical_rules(self, monkeypatch, appconfig):
        """No rules loaded."""
        monkeypatch.setattr(validate_user_input, "_read_email_ban_list", lambda a: self.mock_ban_list)

        rules = {"all": {"ignore_case": True}, "foo.com": {"ignore_dots": True}}
        assert is_email_banned("ab@foo.com", "_", rules)
        assert is_email_banned("Ab@foo.com", "_", rules)  # ignore_case for all
        assert is_email_banned("a.b@foo.com", "_", rules)  # ignore_dots for foo.com
        assert not is_email_banned("ab+bar@foo.com", "_", rules)
        assert not is_email_banned("something-else@foo.com", "_", rules)

        # default rules for gmail are NOT applied:
        assert not is_email_banned("ab@googlemail.com", "_", rules)
        assert is_email_banned("Ab@gmail.com", "_", rules)  # ignore_case for all
        assert not is_email_banned("a.b@gmail.com", "_", rules)
        assert not is_email_banned("ab+bar@gmail.com", "_", rules)