class RoadExposureReportMixinTest(unittest.TestCase):
    """Test the ReportMixin.

    .. versionadded:: 3.2
    """

    # noinspection PyPep8Naming
    def setUp(self):
        """Fixture run before all tests."""
        self.road_mixin_blank = RoadExposureReportMixin()
        self.road_mixin = RoadExposureReportMixin()
        self.road_mixin.road_lengths = OrderedDict([
            ('Main', 133.3),
            ('Side', 10),
            ('Bike', 1.2)])
        self.road_mixin.affected_road_lengths = OrderedDict([
            ('Flooded', {
                'Main': 2,
                'Side': 5.5,
                'Bike': 1.2})
        ])
        self.road_mixin.affected_road_categories = ['Flooded']

    def tearDown(self):
        """Run after each test."""
        del self.road_mixin_blank
        del self.road_mixin

    def test_0001_generate_report(self):
        """Generate a blank report."""
        blank_report = self.road_mixin_blank.generate_report().to_text()
        # self.assertListEqual(blank_report, expected_blank_report, message)
        self.assertIn('**Road Type**', blank_report)
        self.assertIn('**Total (m)**', blank_report)

    def test_0002_road_breakdown(self):
        """Test the buildings breakdown."""
        roads_breakdown = self.road_mixin.roads_breakdown().to_text()

        self.assertIn('**Breakdown by road type**', roads_breakdown)
        self.assertIn('Main', roads_breakdown)
        self.assertIn('133', roads_breakdown)
        self.assertIn('Side', roads_breakdown)
        self.assertIn('10', roads_breakdown)
        self.assertIn('Bike', roads_breakdown)
        self.assertIn('1', roads_breakdown)

    def test_0003_total(self):
        """Test general methods."""
        default_length = self.road_mixin_blank.total_road_length
        length = self.road_mixin.total_road_length
        message = 'Default length is not as expected.'
        self.assertEqual(default_length, 0, message)
        message = 'Real length is not as expected.'
        self.assertEqual(length, 144.5, message)
class RoadExposureReportMixinTest(unittest.TestCase):
    """Test the ReportMixin.

    .. versionadded:: 3.2
    """

    # noinspection PyPep8Naming
    def setUp(self):
        """Fixture run before all tests."""
        self.road_mixin_blank = RoadExposureReportMixin()
        self.road_mixin = RoadExposureReportMixin()
        self.road_mixin.road_lengths = OrderedDict([
            ('Main', 133.3),
            ('Side', 10),
            ('Bike', 1.2)])
        self.road_mixin.affected_road_lengths = OrderedDict([
            ('Flooded', {
                'Main': 2,
                'Side': 5.5,
                'Bike': 1.2})
        ])
        self.road_mixin.affected_road_categories = ['Flooded']

    def tearDown(self):
        """Run after each test."""
        del self.road_mixin_blank
        del self.road_mixin

    def test_0001_generate_blank_data(self):
        """Generate a blank data."""
        blank_data = self.road_mixin_blank.generate_data()
        expected = {
            'action check list': {
                'fields': [
                    'Which roads can be used to evacuate people or to '
                    'distribute logistics?',
                    'What type of vehicles can use the unaffected roads?',
                    'What sort of equipment will be needed to reopen roads & '
                    'where will we get it?',
                    'Which government department is responsible for '
                    'supplying equipment ?'
                ],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['Unaffected', 'Total'],
                'fields': [[0, 0]]},
            'impact table': {
                'attributes': [
                    'Road Type', 'Unaffected', 'Total'],
                'fields': []
            },
            'notes': {'fields': [], 'title': 'Notes'},
            'question': ''}
        self.assertEquals(expected, blank_data)

    def test_0002_road_breakdown(self):
        """Test the buildings breakdown."""
        roads_breakdown = self.road_mixin.roads_breakdown()['fields']

        expected = [
            ['Main', 2, 131.3, 133.3],
            ['Side', 5.5, 4.5, 10],
            ['Bike', 1.2, 0.0, 1.2]
        ]

        self.assertEquals(roads_breakdown, expected)

    def test_0003_total(self):
        """Test general methods."""
        default_length = self.road_mixin_blank.total_road_length
        message = 'Default length is not as expected.'
        self.assertEqual(default_length, 0, message)

        message = 'Real length is not as expected.'
        length = self.road_mixin.total_road_length
        self.assertEqual(length, 144.5, message)

    def test_0004_generate_data(self):
        """Test generating data."""
        self.maxDiff = None
        data = self.road_mixin.generate_data()
        expected = {
            'action check list': {
                'fields': [
                    'Which roads can be used to evacuate people or to '
                    'distribute logistics?',
                    'What type of vehicles can use the unaffected roads?',
                    'What sort of equipment will be needed to reopen roads & '
                    'where will we get it?',
                    'Which government department is responsible for '
                    'supplying equipment ?'
                ],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['Flooded', 'Unaffected', 'Total'],
                'fields': [[8.7, 135.8, 144.5]]
            },
            'impact table': {
                'attributes': [
                    'Road Type', 'Flooded', 'Unaffected', 'Total'
                ],
                'fields': [
                    ['Main', 2, 131.3, 133.3],
                    ['Side', 5.5, 4.5, 10],
                    ['Bike', 1.2, 0.0, 1.2]
                ]
            },
            'notes': {
                'fields': [],
                'title': 'Notes'
            },
            'question': ''
        }
        self.assertEquals(data, expected)
class RoadExposureReportMixinTest(unittest.TestCase):
    """Test the ReportMixin.

    .. versionadded:: 3.2
    """

    # noinspection PyPep8Naming
    def setUp(self):
        """Fixture run before all tests."""
        self.road_mixin_blank = RoadExposureReportMixin()
        self.road_mixin = RoadExposureReportMixin()
        self.road_mixin.road_lengths = OrderedDict([
            ('Main', 133.3),
            ('Side', 10),
            ('Bike', 1.2)])
        self.road_mixin.affected_road_lengths = OrderedDict([
            ('Flooded', {
                'Main': 2,
                'Side': 5.5,
                'Bike': 1.2})
        ])

    def tearDown(self):
        """Run after each test."""
        del self.road_mixin_blank
        del self.road_mixin

    def test_0001_generate_report(self):
        """Generate a blank report."""
        blank_report = self.road_mixin_blank.generate_report()
        expected_blank_report = [
            {'content': ''},
            {'content': ''},
            {'content': [u'Road Type', u'Total (m)'], 'header': True},
            {'content': [u'All', '0']},
            {'content': ''},
            {'content': u'Breakdown by road type', 'header': True},
            {'content': ''},
            {'content': ''}]
        message = 'Blank report is not as expected.'
        self.assertListEqual(blank_report, expected_blank_report, message)

    def test_0002_road_breakdown(self):
        """Test the buildings breakdown."""
        roads_breakdown = self.road_mixin.roads_breakdown()
        expected_roads_breakdown = [
            {'content': u'Breakdown by road type', 'header': True},
            {'content': ['Main', '133']},
            {'content': ['Side', '10']},
            {'content': ['Bike', '1']}]
        message = 'roads breakdown is not as expected.'
        self.assertListEqual(
            roads_breakdown,
            expected_roads_breakdown,
            message)

    def test_0003_total(self):
        """Test general methods."""
        default_length = self.road_mixin_blank.total_road_length
        length = self.road_mixin.total_road_length
        message = 'Default length is not as expected.'
        self.assertEqual(default_length, 0, message)
        message = 'Real length is not as expected.'
        self.assertEqual(length, 144.5, message)