def test_can_get_violation_definitions(self):
        reviewer = Mock()
        validator = ImageRequestsValidator(reviewer)

        definitions = validator.get_violation_definitions()

        expect(definitions).to_length(4)
        expect('broken.img' in definitions).to_be_true()
        expect('single.size.img' in definitions).to_be_true()
        expect('total.requests.img' in definitions).to_be_true()
        expect('total.size.img' in definitions).to_be_true()

        val = set(['http://globo.com/some_image.jpg'])
        expect(validator.get_broken_images_parsed_values(val)).to_equal({
            'images': ('<a href="http://globo.com/some_image.jpg" '
                       'target="_blank">Link #0</a>')
        })

        single_image_size_parsed_value = validator.get_single_image_size_parsed_value(
            {
                'over_max_size': [('http://a.com', 100), ('http://b.com', 30)],
                'limit': 20
            })
        expect(single_image_size_parsed_value).to_equal({
            'limit':
            20,
            'images':
            ('<a href="http://a.com" target="_blank">a.com</a> (100kb)'
             ', <a href="http://b.com" target="_blank">b.com</a> (30kb)')
        })
    def test_can_get_violation_definitions(self):
        reviewer = Mock()
        validator = ImageRequestsValidator(reviewer)

        definitions = validator.get_violation_definitions()

        expect(definitions).to_length(4)
        expect('broken.img' in definitions).to_be_true()
        expect('single.size.img' in definitions).to_be_true()
        expect('total.requests.img' in definitions).to_be_true()
        expect('total.size.img' in definitions).to_be_true()

        val = set(['http://globo.com/some_image.jpg'])
        expect(validator.get_broken_images_parsed_values(val)).to_equal({
            'images': (
                '<a href="http://globo.com/some_image.jpg" '
                'target="_blank">Link #0</a>')
        })

        single_image_size_parsed_value = validator.get_single_image_size_parsed_value(
            {'over_max_size': [('http://a.com', 100), ('http://b.com', 30)],
             'limit': 20}
        )
        expect(single_image_size_parsed_value).to_equal({
            'limit': 20,
            'images': (
                '<a href="http://a.com" target="_blank">a.com</a> (100kb)'
                ', <a href="http://b.com" target="_blank">b.com</a> (30kb)'
            )
        })
    def test_can_get_violation_definitions(self):
        reviewer = Mock()
        validator = ImageRequestsValidator(reviewer)

        definitions = validator.get_violation_definitions()

        expect(definitions).to_length(4)
        expect('broken.img' in definitions).to_be_true()
        expect('single.size.img' in definitions).to_be_true()
        expect('total.requests.img' in definitions).to_be_true()
        expect('total.size.img' in definitions).to_be_true()

        broken_images_message = validator.get_broken_images_message(
            set(['http://globo.com/some_image.jpg'])
        )
        requests_images_message = validator.get_requests_images_message(
            {'total': 60, 'limit': 10}
        )
        total_size_message = validator.get_total_size_message(60)

        single_image_size_message = validator.get_single_image_size_message(
            {'over_max_size': [('http://a.com', 100), ('http://b.com', 10)],
             'limit': 20}
        )

        expect(broken_images_message).to_equal(
            'The image(s) in "<a href="http://globo.com/some_image.jpg" '
            'target="_blank">Link #0</a>" could not be found or took '
            'more than 10 seconds to load.')

        expect(requests_images_message).to_equal(
            'This page has 60 image requests (10 over limit). Having too many '
            'requests impose a tax in the browser due to handshakes.'
        )

        expect(total_size_message).to_equal(
            'There`s 60.00kb of images in this page and that adds up to more '
            'download time slowing down the page rendering to the user.'
        )

        expect(single_image_size_message).to_equal(
            'Some images are above the expected limit (20kb): '
            '<a href="http://a.com" target="_blank">a.com</a> (80kb above '
            'limit), <a href="http://b.com" target="_blank">b.com</a>'
        )