regulations/tests/views_diff_tests.py
# vim: set fileencoding=utf-8
from unittest import TestCase
from django.test import RequestFactory
from mock import patch
from regulations.views import diff as views_diff
class ChromeSectionDiffViewTests(TestCase):
def test_extract_sections_subparts(self):
sub1 = [{'section_id': '8888-1', 'index': ['8888', '1']},
{'section_id': '8888-3', 'index': ['8888', '3']}]
sub2 = [{'section_id': '8888-7', 'index': ['8888', '7']}]
toc = [
{'section_id': '8888-Subpart-A',
'index': ['8888', 'Subpart', 'A'],
'sub_toc': sub1},
{'section_id': '8888-Subjgrp-IND',
'index': ['8888', 'Subjgrp', 'IND'],
'sub_toc': sub2},
{'section_id': '8888-Interp', 'index': ['8888', 'Interp']},
]
sections = views_diff.extract_sections(toc)
self.assertEqual(['8888', '1'], sections[0]['index'])
self.assertEqual(['8888', '3'], sections[1]['index'])
self.assertEqual(['8888', '7'], sections[2]['index'])
self.assertEqual(['8888', 'Interp'], sections[3]['index'])
def test_extract_sections(self):
toc = [{'section_id': '8888-1', 'index': ['8888', '1']},
{'section_id': '8888-3', 'index': ['8888', '3']}]
sections = views_diff.extract_sections(toc)
self.assertEqual(['8888', '1'], sections[0]['index'])
self.assertEqual(['8888', '3'], sections[1]['index'])
def test_diff_toc(self):
"""Integration test."""
versions = views_diff.Versions('oldold', 'newnew', 'from_ver')
old_toc = [{'section_id': '8888-1', 'index': ['8888', '1'],
'is_section':True},
{'section_id': '8888-3', 'index': ['8888', '3'],
'is_section':True},
{'section_id': '8888-4', 'index': ['8888', '4'],
'is_section':True},
{'section_id': '8888-A', 'index': ['8888', 'A'],
'is_appendix':True},
{'section_id': '8888-B', 'index': ['8888', 'B'],
'is_appendix':True},
{'section_id': '8888-Interp', 'index': ['8888', 'Interp'],
'is_supplement':True}]
diff = {
'8888-2': {'op': 'added',
'node': {'title': u'ยง 8888.2', 'label': ['8888', '2']}},
'8888-C': {'op': 'added',
'node': {'title': 'App C', 'label': ['8888', 'C']}},
'8888-1-a': {'op': 'modified'},
'8888-B': {'op': 'deleted'},
'8888-3-b': {'op': 'deleted'},
'8888-B-1': {'op': 'modified'}
}
result = views_diff.diff_toc(versions, old_toc, diff)
self.assertEqual(8, len(result))
self.assertTrue('8888-1' in result[0]['url'])
self.assertTrue('?from_version=from_ver' in result[0]['url'])
self.assertEqual('8888-1', result[0]['section_id'])
self.assertEqual('modified', result[0]['op'])
self.assertTrue('8888-2' in result[1]['url'])
self.assertTrue('?from_version=from_ver' in result[1]['url'])
self.assertEqual('8888-2', result[1]['section_id'])
self.assertEqual('added', result[1]['op'])
self.assertTrue('8888-3' in result[2]['url'])
self.assertTrue('?from_version=from_ver' in result[2]['url'])
self.assertEqual('8888-3', result[2]['section_id'])
self.assertEqual('modified', result[2]['op'])
self.assertTrue('8888-4' in result[3]['url'])
self.assertTrue('?from_version=from_ver' in result[3]['url'])
self.assertEqual('8888-4', result[3]['section_id'])
self.assertFalse('op' in result[3])
self.assertTrue('8888-A' in result[4]['url'])
self.assertTrue('?from_version=from_ver' in result[4]['url'])
self.assertEqual('8888-A', result[4]['section_id'])
self.assertFalse('op' in result[4])
self.assertTrue('8888-B' in result[5]['url'])
self.assertTrue('?from_version=from_ver' in result[5]['url'])
self.assertEqual('8888-B', result[5]['section_id'])
self.assertEqual('deleted', result[5]['op'])
self.assertTrue('8888-C' in result[6]['url'])
self.assertTrue('?from_version=from_ver' in result[6]['url'])
self.assertEqual('8888-C', result[6]['section_id'])
self.assertEqual('added', result[6]['op'])
self.assertTrue('8888-Interp' in result[7]['url'])
self.assertEqual('8888-Interp', result[7]['section_id'])
self.assertFalse('op' in result[7])
for el in result:
self.assertTrue('oldold', el['url'])
self.assertTrue('newnew', el['url'])
def test_interp_headers(self):
from django.template import loader
t = loader.get_template('regulations/interp-tree.html')
context_dict = {'interp': {
'header': '<ins>My header</ins>', 'section_header': True}}
response = t.render(context_dict)
tags_preserved_header = '<h3 tabindex=\"0\"> <ins>My header</ins></h3>'
self.assertTrue(tags_preserved_header in response)
@patch('regulations.views.diff.fetch_toc')
@patch('regulations.views.diff.SectionUrl')
def test_add_main_content(self, SectionUrl, fetch_toc):
fetch_toc.return_value = [
{'index': ['1111', '222'], 'is_section': True},
{'index': ['1111', 'B'], 'is_appendix': True},
{'index': ['1111', 'Interp'], 'is_supplement': True,
'sub_toc': [
{'index': ['1111', 'Interp', 'h1']},
{'index': ['1111', 'Subpart', 'Interp']},
{'index': ['1111', 'A', 'Interp']}]}]
context = {
'main_content_context': {'newer_version': '1', 'TOC': 'toc'},
'label_id': '111-222',
'version': '2'}
request = RequestFactory().get('?new_version=1')
csdv = views_diff.ChromeSectionDiffView()
csdv.request = request
csdv.add_diff_content(context)
self.assertEqual(context['from_version'], '2')
self.assertEqual(context['left_version'], '2')
self.assertEqual(context['right_version'], '1')
self.assertEqual(context['TOC'], 'toc')
self.assertTrue('first_subterp' in context)
self.assertEqual(['1111', 'Interp', 'h1'],
context['first_subterp']['index'])
self.assertTrue('url' in context['first_subterp'])
class PartialSectionDiffViewTests(TestCase):
def setUp(self):
self.versions = views_diff.Versions('old', 'new', 'from')
self.toc = [{'section_id': '9898-1'}, {'section_id': '9898-5'},
{'section_id': '9898-A'}, {'section_id': '9898-Interp'}]
self.view = views_diff.PartialSectionDiffView()
def assert_url_contains_versions(self, url, section_id):
"""The provided url should contain the appropriate strings for the
old, new, and return_to urls"""
from_version = '?from_version=' + self.versions.return_to
self.assertTrue(self.versions.older in url)
self.assertTrue(self.versions.newer in url)
self.assertTrue(from_version in url)
self.assertTrue(section_id in url)
def assert_correct_nav(self, section_id, prev, following):
"""Verify that the generated nav contains the appropriate url entries
for prev and next"""
nav = self.view.footer_nav(section_id, self.toc, self.versions)
self.assertEqual(nav['page_type'], 'diff')
if prev:
self.assert_url_contains_versions(nav['previous']['url'], prev)
else:
self.assertFalse('previous' in nav)
if following:
self.assert_url_contains_versions(nav['next']['url'], following)
else:
self.assertFalse('next' in nav)
def test_footer_nav(self):
self.assert_correct_nav('9898-2', prev=None, following=None)
self.assert_correct_nav('9898-1', prev=None, following='9898-5')
self.assert_correct_nav('9898-5', prev='9898-1', following='9898-A')
self.assert_correct_nav('9898-A', prev='9898-5',
following='9898-Interp')
self.assert_correct_nav('9898-Interp', prev='9898-A', following=None)