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_blank.question = ''
        self.road_mixin.question = ''
        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']
        self.maxDiff = None

    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()
        self.maxDiff = None
        expected = {
            'action check list': {
                # I removed the field list here as in
                # 3.5 the field list is generated by the IF, not
                # the Mixin so it wont be populated as this test
                # does not create an IF
                'fields': [],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['category', 'value'],
                'headings': ['Roads', 'Length'],
                'fields': [['Unaffected (m)', 0], ['Total (m)', 0]]},
            'impact table': {
                'attributes': [
                    'Road Type', 'Unaffected', 'Total'],
                'fields': [['Total (m)', 0, 0]]
            },
            'notes': {'fields': [], 'title': 'Notes and assumptions'},
            'question': ''}
        self.assertDictEqual(expected, blank_data)

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

        expected = [
            ['Main (m)', 2, 131.3, 133.3],
            ['Side (m)', 5.5, 4.5, 10],
            ['Bike (m)', 1.2, 0.0, 1.2],
            ['Total (m)', 8.7, 135.8, 144.5]
        ]

        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': {
                # I removed the field list here as in
                # 3.5 the field list is generated by the IF, not
                # the Mixin so it wont be populated as this test
                # does not create an IF
                'fields': [
                ],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['category', 'value'],
                'headings': ['Roads', 'Length'],
                'fields': [
                    ['Flooded (m)', 8.7],
                    ['Unaffected (m)', 135.8],
                    ['Total (m)', 144.5]
                ]
            },
            'impact table': {
                'attributes': [
                    'Road Type', 'Flooded', 'Unaffected', 'Total'
                ],
                'fields': [
                    ['Main (m)', 2, 131.3, 133.3],
                    ['Side (m)', 5.5, 4.5, 10],
                    ['Bike (m)', 1.2, 0.0, 1.2],
                    ['Total (m)', 8.7, 135.8, 144.5]
                ]
            },
            'notes': {
                'fields': [],
                'title': 'Notes and assumptions'
            },
            'question': ''
        }
        self.assertDictEqual(data, expected)
示例#2
0
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_blank.question = ''
        self.road_mixin.question = ''
        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']
        self.maxDiff = None

    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()
        self.maxDiff = None
        expected = {
            'action check list': {
                # I removed the field list here as in
                # 3.5 the field list is generated by the IF, not
                # the Mixin so it wont be populated as this test
                # does not create an IF
                'fields': [],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['category', 'value'],
                'headings': ['Roads', 'Length'],
                'fields': [['Unaffected (m)', 0], ['Total (m)', 0]]
            },
            'impact table': {
                'attributes': ['Road Type', 'Unaffected', 'Total'],
                'fields': [['Total (m)', 0, 0]]
            },
            'notes': {
                'fields': [],
                'title': 'Notes and assumptions'
            },
            'question': ''
        }
        self.assertDictEqual(expected, blank_data)

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

        expected = [['Main (m)', 2, 131.3, 133.3], ['Side (m)', 5.5, 4.5, 10],
                    ['Bike (m)', 1.2, 0.0, 1.2],
                    ['Total (m)', 8.7, 135.8, 144.5]]

        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': {
                # I removed the field list here as in
                # 3.5 the field list is generated by the IF, not
                # the Mixin so it wont be populated as this test
                # does not create an IF
                'fields': [],
                'title': 'Action checklist'
            },
            'exposure': 'road',
            'impact summary': {
                'attributes': ['category', 'value'],
                'headings': ['Roads', 'Length'],
                'fields': [['Flooded (m)', 8.7], ['Unaffected (m)', 135.8],
                           ['Total (m)', 144.5]]
            },
            'impact table': {
                'attributes': ['Road Type', 'Flooded', 'Unaffected', 'Total'],
                'fields': [['Main (m)', 2, 131.3, 133.3],
                           ['Side (m)', 5.5, 4.5, 10],
                           ['Bike (m)', 1.2, 0.0, 1.2],
                           ['Total (m)', 8.7, 135.8, 144.5]]
            },
            'notes': {
                'fields': [],
                'title': 'Notes and assumptions'
            },
            'question': ''
        }
        self.assertDictEqual(data, expected)