Switch to side-by-side view

--- 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)