123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- #-*- coding: utf-8 -*-
- from django.core.urlresolvers import reverse
- from django.test import TestCase
- from django.test.client import RequestFactory
- from django.utils import timezone
- from ..utils import (
- clean_return_path, format_plaintext_for_html, is_referer_local, is_request_to_misago,
- parse_iso8601_string, slugify)
- VALID_PATHS = (
- "/",
- "/threads/",
- )
- INVALID_PATHS = (
- "",
- "somewhere/",
- )
- class IsRequestToMisagoTests(TestCase):
- def test_is_request_to_misago(self):
- """
- is_request_to_misago correctly detects requests directed at Misago
- """
- misago_prefix = reverse('misago:index')
- for path in VALID_PATHS:
- request = RequestFactory().get('/')
- request.path_info = path
- self.assertTrue(
- is_request_to_misago(request),
- '"%s" is not overlapped by "%s"' % (path, misago_prefix))
- for path in INVALID_PATHS:
- request = RequestFactory().get('/')
- request.path_info = path
- self.assertFalse(
- is_request_to_misago(request),
- '"%s" is overlapped by "%s"' % (path, misago_prefix))
- class SlugifyTests(TestCase):
- def test_valid_slugify_output(self):
- """Misago's slugify correctly slugifies string"""
- test_cases = (
- (u'Bob', u'bob'),
- (u'Eric The Fish', u'eric-the-fish'),
- (u'John Snow', u'john-snow'),
- (u'J0n', u'j0n'),
- (u'An###ne', u'anne'),
- (u'S**t', u'st'),
- (u'Łók', u'lok'),
- )
- for original, slug in test_cases:
- self.assertEqual(slugify(original), slug)
- class ParseIso8601StringTests(TestCase):
- def test_valid_input(self):
- """util parses iso 8601 strings"""
- INPUTS = (
- '2016-10-22T20:55:39.185085Z',
- '2016-10-22T20:55:39.185085-01:00',
- '2016-10-22T20:55:39-01:00',
- '2016-10-22T20:55:39.185085+01:00',
- )
- for test_input in INPUTS:
- self.assertTrue(parse_iso8601_string(test_input))
- def test_invalid_input(self):
- """util throws ValueError on invalid input"""
- INPUTS = (
- '',
- '2016-10-22',
- '2016-10-22T30:55:39.185085+11:00',
- '2016-10-22T20:55:39.18SSSSS5085Z',
- )
- for test_input in INPUTS:
- with self.assertRaises(ValueError):
- self.assertTrue(parse_iso8601_string(test_input))
- PLAINTEXT_FORMAT_CASES = (
- (
- u'Lorem ipsum.',
- u'<p>Lorem ipsum.</p>'
- ),
- (
- u'Lorem <b>ipsum</b>.',
- u'<p>Lorem <b>ipsum</b>.</p>'
- ),
- (
- u'Lorem "ipsum" dolor met.',
- u'<p>Lorem "ipsum" dolor met.</p>'
- ),
- (
- u'Lorem ipsum.\nDolor met.',
- u'<p>Lorem ipsum.<br />Dolor met.</p>'
- ),
- (
- u'Lorem ipsum.\n\nDolor met.',
- u'<p>Lorem ipsum.</p>\n\n<p>Dolor met.</p>'
- ),
- (
- u'http://misago-project.org/login/',
- u'<p><a href="http://misago-project.org/login/">http://misago-project.org/login/</a></p>'
- ),
- )
- class FormatPlaintextForHtmlTests(TestCase):
- def test_format_plaintext_for_html(self):
- """format_plaintext_for_html correctly formats plaintext for html"""
- for plaintext, html in PLAINTEXT_FORMAT_CASES:
- output = format_plaintext_for_html(plaintext)
- assertion_message = """
- format_plaintext_for_html failed to produce expected output:
- expected: %s
- return: %s
- """ % (html, output)
- self.assertEqual(output, html, assertion_message)
- class MockRequest(object):
- scheme = 'http'
- def __init__(self, method, meta=None, post=None):
- self.method = method
- self.META = meta or {}
- self.POST = post or {}
- class CleanReturnPathTests(TestCase):
- def test_get_request(self):
- """clean_return_path works for GET requests"""
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://cookies.com',
- 'HTTP_HOST': 'misago-project.org'
- })
- self.assertIsNone(clean_return_path(bad_request))
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'https://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertIsNone(clean_return_path(bad_request))
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'https://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/assadsa/'
- })
- self.assertIsNone(clean_return_path(bad_request))
- ok_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertEqual(clean_return_path(ok_request), '/')
- ok_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/login/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertEqual(clean_return_path(ok_request), '/login/')
- def test_post_request(self):
- """clean_return_path works for POST requests"""
- bad_request = MockRequest('POST', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- }, {'return_path': '/sdasdsa/'})
- self.assertIsNone(clean_return_path(bad_request))
- ok_request = MockRequest('POST', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- }, {'return_path': '/login/'})
- self.assertEqual(clean_return_path(ok_request), '/login/')
- class IsRefererLocalTests(TestCase):
- def test_local_referers(self):
- """local referers return true"""
- ok_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertTrue(is_referer_local(ok_request))
- ok_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertTrue(is_referer_local(ok_request))
- ok_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/login/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertTrue(is_referer_local(ok_request))
- def test_foreign_referers(self):
- """non-local referers return false"""
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://else-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertFalse(is_referer_local(bad_request))
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'https://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/'
- })
- self.assertFalse(is_referer_local(bad_request))
- bad_request = MockRequest('GET', {
- 'HTTP_REFERER': 'http://misago-project.org/',
- 'HTTP_HOST': 'misago-project.org/assadsa/'
- })
- self.assertFalse(is_referer_local(bad_request))
|