--- a/Allura/allura/tests/unit/test_spam.py
+++ b/Allura/allura/tests/unit/test_spam.py
@@ -15,10 +15,11 @@
self.fake_artifact = mock.Mock(**{'url.return_value': 'artifact url'})
self.fake_user = mock.Mock(display_name='Some User',
email_addresses=['user@domain'])
- self.fake_environ = dict(
- HTTP_X_REMOTE_ADDR='some ip',
- HTTP_USER_AGENT='some browser',
- HTTP_REFERER='some url')
+ self.fake_headers = dict(
+ REMOTE_ADDR='fallback ip',
+ X_FORWARDED_FOR='some ip',
+ USER_AGENT='some browser',
+ REFERER='some url')
self.content = 'spam text'
self.expected_data = dict(
comment_content=self.content,
@@ -30,7 +31,7 @@
@mock.patch('allura.lib.spam.akismetservice.c')
@mock.patch('allura.lib.spam.akismetservice.request')
def test_check(self, request, c):
- request.environ = self.fake_environ
+ request.headers = self.fake_headers
c.user = None
self.akismet.check(self.content)
self.akismet.comment_check.assert_called_once_with(self.content,
@@ -39,7 +40,7 @@
@mock.patch('allura.lib.spam.akismetservice.c')
@mock.patch('allura.lib.spam.akismetservice.request')
def test_check_with_explicit_content_type(self, request, c):
- request.environ = self.fake_environ
+ request.headers = self.fake_headers
c.user = None
self.akismet.check(self.content, content_type='some content type')
self.expected_data['comment_type'] = 'some content type'
@@ -49,7 +50,7 @@
@mock.patch('allura.lib.spam.akismetservice.c')
@mock.patch('allura.lib.spam.akismetservice.request')
def test_check_with_artifact(self, request, c):
- request.environ = self.fake_environ
+ request.headers = self.fake_headers
c.user = None
self.akismet.check(self.content, artifact=self.fake_artifact)
expected_data = self.expected_data
@@ -60,7 +61,7 @@
@mock.patch('allura.lib.spam.akismetservice.c')
@mock.patch('allura.lib.spam.akismetservice.request')
def test_check_with_user(self, request, c):
- request.environ = self.fake_environ
+ request.headers = self.fake_headers
c.user = None
self.akismet.check(self.content, user=self.fake_user)
expected_data = self.expected_data
@@ -72,7 +73,7 @@
@mock.patch('allura.lib.spam.akismetservice.c')
@mock.patch('allura.lib.spam.akismetservice.request')
def test_check_with_implicit_user(self, request, c):
- request.environ = self.fake_environ
+ request.headers = self.fake_headers
c.user = self.fake_user
self.akismet.check(self.content)
expected_data = self.expected_data
@@ -80,3 +81,15 @@
comment_author_email='user@domain')
self.akismet.comment_check.assert_called_once_with(self.content,
data=expected_data, build_data=False)
+
+ @mock.patch('allura.lib.spam.akismetservice.c')
+ @mock.patch('allura.lib.spam.akismetservice.request')
+ def test_check_with_fallback_ip(self, request, c):
+ self.expected_data['user_ip'] = 'fallback ip'
+ self.fake_headers.pop('X_FORWARDED_FOR')
+ request.headers = self.fake_headers
+ request.remote_addr = self.fake_headers['REMOTE_ADDR']
+ c.user = None
+ self.akismet.check(self.content)
+ self.akismet.comment_check.assert_called_once_with(self.content,
+ data=self.expected_data, build_data=False)