def test_search_finds_in_name(self): q1 = query_factory.create(name=u"Testing seåřċħ") q2 = query_factory.create(name=u"Testing seåřċħing") q3 = query_factory.create(name=u"Testing seå řċħ") queries = models.Query.search(u"seåřċħ") self.assertIn(q1, queries) self.assertIn(q2, queries) self.assertNotIn(q3, queries)
def test_search_by_id_returns_query(self): q1 = query_factory.create(description="Testing search") q2 = query_factory.create(description="Testing searching") q3 = query_factory.create(description="Testing sea rch") queries = models.Query.search(str(q3.id)) self.assertIn(q3, queries) self.assertNotIn(q1, queries) self.assertNotIn(q2, queries)
def test_search_finds_in_description(self): q1 = query_factory.create(description=u"Testing seåřċħ") q2 = query_factory.create(description=u"Testing seåřċħing") q3 = query_factory.create(description=u"Testing seå řċħ") queries = models.Query.search(u"seåřċħ") self.assertIn(q1, queries) self.assertIn(q2, queries) self.assertNotIn(q3, queries)
def test_search_finds_in_name(self): q1 = query_factory.create(name="Testing search") q2 = query_factory.create(name="Testing searching") q3 = query_factory.create(name="Testing sea rch") queries = models.Query.search("search") self.assertIn(q1, queries) self.assertIn(q2, queries) self.assertNotIn(q3, queries)
def test_search_finds_in_description(self): q1 = query_factory.create(description="Testing search") q2 = query_factory.create(description="Testing searching") q3 = query_factory.create(description="Testing sea rch") queries = models.Query.search("search") self.assertIn(q1, queries) self.assertIn(q2, queries) self.assertNotIn(q3, queries)
def test_doesnt_update_queries_with_different_data_source(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=data_source_factory.create()) query_result = models.QueryResult.store_result(self.data_source.id, self.query_hash, self.query, self.data, self.runtime, self.utcnow) self.assertEqual(models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result.id) self.assertEqual(models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result.id) self.assertNotEqual(models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result.id)
def test_updates_existing_queries(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=self.data_source) query_result = models.QueryResult.store_result(self.data_source.id, self.query_hash, self.query, self.data, self.runtime, self.utcnow) self.assertEqual(models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result.id) self.assertEqual(models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result.id) self.assertEqual(models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result.id)
def test_doesnt_update_queries_with_different_data_source(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=data_source_factory.create()) query_result, _ = models.QueryResult.store_result(self.data_source.id, self.query_hash, self.query, self.data, self.runtime, self.utcnow) self.assertEqual(models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result.id) self.assertEqual(models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result.id) self.assertNotEqual(models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result.id)
def test_removes_scheduling(self): query = query_factory.create(ttl=1) query.archive() query = models.Query.get_by_id(query.id) self.assertEqual(-1, query.ttl)
def test_save_updates_updated_at_field(self): # This should be a test of ModelTimestampsMixin, but it's easier to test in context of existing model... :-\ one_day_ago = datetime.datetime.today() - datetime.timedelta(days=1) q = query_factory.create(created_at=one_day_ago, updated_at=one_day_ago) q.save() self.assertNotEqual(q.updated_at, one_day_ago)
def test_removes_scheduling(self): query = query_factory.create(schedule="1") query.archive() query = models.Query.get_by_id(query.id) self.assertEqual(None, query.schedule)
def test_returns_only_unused_query_results(self): two_weeks_ago = datetime.datetime.now() - datetime.timedelta(days=14) qr = query_result_factory.create() query = query_factory.create(latest_query_data=qr) unused_qr = query_result_factory.create(retrieved_at=two_weeks_ago) self.assertIn(unused_qr, models.QueryResult.unused()) self.assertNotIn(qr, models.QueryResult.unused())
def test_outdated_queries_works_with_specific_time_schedule(self): half_an_hour_ago = utcnow() - datetime.timedelta(minutes=30) query = query_factory.create(schedule=half_an_hour_ago.strftime('%H:%M')) query_result = query_result_factory.create(query=query, retrieved_at=half_an_hour_ago-datetime.timedelta(days=1)) query.latest_query_data = query_result query.save() queries = models.Query.outdated_queries() self.assertIn(query, queries)
def test_outdated_queries_works_with_ttl_based_schedule(self): two_hours_ago = datetime.datetime.now() - datetime.timedelta(hours=2) query = query_factory.create(schedule="3600") query_result = query_result_factory.create(query=query, retrieved_at=two_hours_ago) query.latest_query_data = query_result query.save() queries = models.Query.outdated_queries() self.assertIn(query, queries)
def test_skips_fresh_queries(self): half_an_hour_ago = datetime.datetime.now() - datetime.timedelta(minutes=30) query = query_factory.create(schedule="3600") query_result = query_result_factory.create(query=query, retrieved_at=half_an_hour_ago) query.latest_query_data = query_result query.save() queries = models.Query.outdated_queries() self.assertNotIn(query, queries)
def test_changing_query_text_changes_hash(self): q = query_factory.create() old_hash = q.query_hash models.Query.update_instance(q.id, query="SELECT 2;") q = models.Query.get_by_id(q.id) self.assertNotEquals(old_hash, q.query_hash)
def test_updates_existing_queries(self): query1 = query_factory.create(query=self.query, data_source=self.data_source) query2 = query_factory.create(query=self.query, data_source=self.data_source) query3 = query_factory.create(query=self.query, data_source=self.data_source) query_result = models.QueryResult.store_result(self.data_source.id, self.query_hash, self.query, self.data, self.runtime, self.utcnow) self.assertEqual( models.Query.get_by_id(query1.id)._data['latest_query_data'], query_result.id) self.assertEqual( models.Query.get_by_id(query2.id)._data['latest_query_data'], query_result.id) self.assertEqual( models.Query.get_by_id(query3.id)._data['latest_query_data'], query_result.id)
def test_archived_query_doesnt_return_in_all(self): query = query_factory.create(ttl=1) yesterday = datetime.datetime.now() - datetime.timedelta(days=1) query_result = models.QueryResult.store_result(query.data_source.id, query.query_hash, query.query, "1", 123, yesterday) query.latest_query_data = query_result query.save() self.assertIn(query, models.Query.all_queries()) self.assertIn(query, models.Query.outdated_queries()) query.archive() self.assertNotIn(query, models.Query.all_queries()) self.assertNotIn(query, models.Query.outdated_queries())
def test_archived_query_doesnt_return_in_all(self): query = query_factory.create(schedule="1") yesterday = datetime.datetime.now() - datetime.timedelta(days=1) query_result, _ = models.QueryResult.store_result(query.data_source.id, query.query_hash, query.query, "1", 123, yesterday) query.latest_query_data = query_result query.save() self.assertIn(query, models.Query.all_queries()) self.assertIn(query, models.Query.outdated_queries()) query.archive() self.assertNotIn(query, models.Query.all_queries()) self.assertNotIn(query, models.Query.outdated_queries())
def test_archive_query_sets_flag(self): query = query_factory.create(ttl=1) query.archive() query = models.Query.get_by_id(query.id) self.assertEquals(query.is_archived, True)
def test_outdated_queries_skips_unscheduled_queries(self): query = query_factory.create(schedule=None) queries = models.Query.outdated_queries() self.assertNotIn(query, queries)
def test_save_creates_default_visualization(self): q = query_factory.create() self.assertEquals(q.visualizations.count(), 1)
def test_archive_query_sets_flag(self): query = query_factory.create() query.archive() query = models.Query.get_by_id(query.id) self.assertEquals(query.is_archived, True)