def test_can_validate_css_requests_empty_html(self): page = PageFactory.create() reviewer = Reviewer( api_url='http://localhost:2368', page_uuid=page.uuid, page_url=page.url, page_score=0.0, config=Config(), validators=[], cache=self.sync_cache ) reviewer.violation_definitions = { 'total.requests.css': {'default_value': 1}, 'total.size.css': {'default_value': 0.0}, } result = { 'url': page.url, 'status': 200, 'content': None, 'html': None } reviewer.responses[page.url] = result reviewer.get_response = Mock(return_value=result) validator = CSSRequestsValidator(reviewer) validator.add_violation = Mock() validator.validate() expect(validator.add_violation.called).to_be_false()
def test_can_validate_css_requests_zero_requests(self): config = Config() page = PageFactory.create() reviewer = Reviewer( api_url='http://localhost:2368', page_uuid=page.uuid, page_url=page.url, page_score=0.0, config=config, validators=[] ) content = "<html></html>" result = { 'url': page.url, 'status': 200, 'content': content, 'html': lxml.html.fromstring(content) } reviewer.responses[page.url] = result reviewer.get_response = Mock(return_value=result) validator = CSSRequestsValidator(reviewer) validator.add_violation = Mock() validator.validate() expect(validator.add_violation.called).to_be_false()
def test_get_css_requests(self): reviewer = Mock() validator = CSSRequestsValidator(reviewer) css1 = Mock() css2 = Mock() validator.review.data = { 'page.css': [css1, css2] } css_requests = validator.get_css_requests() expect(css_requests).to_equal([css1, css2])
def test_can_validate_css_requests_on_globo_html(self): page = PageFactory.create() reviewer = Reviewer( api_url='http://localhost:2368', page_uuid=page.uuid, page_url=page.url, page_score=0.0, config=Config(), validators=[], cache=self.sync_cache ) reviewer.violation_definitions = { 'total.requests.css': {'default_value': 1}, 'total.size.css': {'default_value': 0.0}, } content = self.get_file('globo.html') result = { 'url': page.url, 'status': 200, 'content': content, 'html': lxml.html.fromstring(content) } reviewer.responses[page.url] = result reviewer.get_response = Mock(return_value=result) validator = CSSRequestsValidator(reviewer) css = { 'url': 'some_style.css', 'status': 200, 'content': '#id{display:none}', 'html': None } validator.get_response = Mock(return_value=css) validator.add_violation = Mock() validator.review.data = { 'total.requests.css': 7, 'total.size.css.gzipped': 0.05 } validator.validate() expect(validator.add_violation.call_args_list).to_include( call( key='total.requests.css', value={'over_limit': 6, 'total_css_files': 7}, points=30 )) expect(validator.add_violation.call_args_list).to_include( call( key='total.size.css', value=0.05, points=0 ))
def test_can_get_violation_definitions(self): reviewer = Mock() validator = CSSRequestsValidator(reviewer) definitions = validator.get_violation_definitions() total_size_message = definitions['total.size.css']['description'] % (0.05) expect(total_size_message).to_equal( 'There\'s 0.05kb of CSS in this page and that adds up to more ' 'download time slowing down the page rendering to the user.' ) requests_css_message = definitions['total.requests.css']['description'] % ({ 'total_css_files': 7, 'over_limit': 6 }) expect(requests_css_message).to_equal( 'This page has 7 CSS request (6 over limit). Having too many ' 'requests impose a tax in the browser due to handshakes.' ) expect(definitions).to_length(2) expect('total.size.css' in definitions).to_be_true() expect('total.requests.css' in definitions).to_be_true()
def test_can_get_default_violations_values(self): config = Config() config.MAX_CSS_KB_PER_PAGE_AFTER_GZIP = 70 config.MAX_CSS_REQUESTS_PER_PAGE = 5 page = PageFactory.create() reviewer = Reviewer( api_url='http://localhost:2368', page_uuid=page.uuid, page_url=page.url, page_score=0.0, config=config, validators=[] ) validator = CSSRequestsValidator(reviewer) violations_values = validator.get_default_violations_values(config) expect(violations_values).to_include('total.size.css') expect(violations_values['total.size.css']).to_length(2) expect(violations_values['total.size.css']).to_be_like({ 'value': config.MAX_CSS_KB_PER_PAGE_AFTER_GZIP, 'description': config.get_description('MAX_CSS_KB_PER_PAGE_AFTER_GZIP') }) expect(violations_values).to_include('total.requests.css') expect(violations_values['total.requests.css']).to_length(2) expect(violations_values['total.requests.css']).to_be_like({ 'value': config.MAX_CSS_REQUESTS_PER_PAGE, 'description': config.get_description('MAX_CSS_REQUESTS_PER_PAGE') })