def test_can_save_requests(self): self.db.query(Request).delete() domain = DomainFactory.create(name='t.com') page = PageFactory.create(domain=domain, url='http://t.com/a.html') requests = [] for x in range(3): url = 'http://t.com/file%d.html' % x response_mock = Mock( status_code=100 * x, text='OK', request_time=0.1 * x, effective_url=url ) requests.append((url, response_mock)) publish = Mock() Request.save_requests(self.db, publish, page, requests) loaded_requests = self.db.query(Request).all() expect(loaded_requests).to_length(3) for idx, request in enumerate(loaded_requests): expect(request.url).to_equal('http://t.com/file%d.html' % idx) expect(request.status_code).to_equal(100 * idx) expect(request.response_time).to_equal(0.1 * idx) expect(request.domain_name).to_equal('t.com') expect(request.review_url).to_equal('http://t.com/a.html') expect(publish.called).to_be_true() publish.assert_called_once_with( dumps({'url': url, 'type': 'new-request'}) )
def save_review( cls, page_uuid, review_data, db, search_provider, fact_definitions, violation_definitions, cache, publish, config, ): from holmes.models import Page, Request page = Page.by_uuid(page_uuid, db) if page is None: return if review_data["requests"]: Request.save_requests(db, publish, page, review_data["requests"]) last_review = page.last_review review = Review( domain_id=page.domain.id, page_id=page.id, is_active=True, is_complete=False, completed_date=datetime.utcnow(), uuid=uuid4(), ) db.add(review) for fact in review_data["facts"]: name = fact["key"] key = fact_definitions[name]["key"] review.add_fact(key, fact["value"]) for violation in review_data["violations"]: name = violation["key"] key = violation_definitions[name]["key"] review.add_violation(key, violation["value"], violation["points"], page.domain) page.expires = review_data["expires"] page.last_modified = review_data["lastModified"] page.last_review_uuid = review.uuid page.last_review = review page.last_review_date = review.completed_date page.violations_count = len(review_data["violations"]) review.is_complete = True if not last_review: cache.increment_active_review_count(page.domain) else: for violation in last_review.violations: violation.review_is_active = False last_review.is_active = False Review.delete_old_reviews(db, config, page) search_provider.index_review(review) publish(dumps({"type": "new-review", "reviewId": str(review.uuid)}))