Skip to content

Commit fcef698

Browse files
committed
Test clean up.
1 parent a3a53ad commit fcef698

File tree

1 file changed

+81
-70
lines changed

1 file changed

+81
-70
lines changed

tests/queries_/test_search.py

Lines changed: 81 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -72,41 +72,39 @@ class SearchUtilsMixin(TransactionTestCase):
7272
available_apps = []
7373
models_to_clean = [Article]
7474

75-
def tearDown(self):
76-
for model in self.models_to_clean:
77-
collection = self._get_collection(model)
78-
collection.delete_many({})
79-
8075
@classmethod
8176
def setUpClass(cls):
8277
super().setUpClass()
8378
# Register the cleanup to run after all tests in this class
84-
cls.addClassCleanup(cls.drop_search_indexes)
79+
cls.addClassCleanup(cls.drop_search_indexes_and_data)
8580

8681
@staticmethod
8782
def _get_collection(model):
8883
return connection.database.get_collection(model._meta.db_table)
8984

90-
def create_search_index(self, model, index_name, definition, type="search"):
91-
collection = self._get_collection(model)
85+
@classmethod
86+
def create_search_index(cls, model, index_name, definition, type="search"):
87+
collection = cls._get_collection(model)
9288
idx = SearchIndexModel(definition=definition, name=index_name, type=type)
9389
collection.create_search_index(idx)
9490

9591
@classmethod
96-
def drop_search_indexes(cls):
92+
def drop_search_indexes_and_data(cls):
9793
for model in cls.models_to_clean:
9894
collection = cls._get_collection(model)
9995
for search_indexes in collection.list_search_indexes():
10096
collection.drop_search_index(search_indexes["name"])
97+
collection.delete_many({})
10198

10299
wait_for_assertion = _wait_for_assertion(timeout=3)
103100

104101

105102
@skipUnlessDBFeature("supports_atlas_search")
106103
class SearchEqualsTest(SearchUtilsMixin):
107-
def setUp(self):
108-
super().setUp()
109-
self.create_search_index(
104+
@classmethod
105+
def setUpClass(cls):
106+
super().setUpClass()
107+
cls.create_search_index(
110108
Article,
111109
"equals_headline_index",
112110
{
@@ -116,7 +114,7 @@ def setUp(self):
116114
}
117115
},
118116
)
119-
self.article = Article.objects.create(headline="cross", number=1, body="body")
117+
cls.article = Article.objects.create(headline="cross", number=1, body="body")
120118
Article.objects.create(headline="other thing", number=2, body="body")
121119

122120
def test_search_equals(self):
@@ -164,9 +162,10 @@ def test_function_score(self):
164162

165163
@skipUnlessDBFeature("supports_atlas_search")
166164
class SearchAutocompleteTest(SearchUtilsMixin):
167-
def setUp(self):
168-
super().setUp()
169-
self.create_search_index(
165+
@classmethod
166+
def setUpClass(cls):
167+
super().setUpClass()
168+
cls.create_search_index(
170169
Article,
171170
"autocomplete_headline_index",
172171
{
@@ -198,7 +197,7 @@ def setUp(self):
198197
}
199198
},
200199
)
201-
self.article = Article.objects.create(
200+
cls.article = Article.objects.create(
202201
headline="crossing and something",
203202
number=2,
204203
body="river",
@@ -241,14 +240,15 @@ def test_constant_score(self):
241240

242241
@skipUnlessDBFeature("supports_atlas_search")
243242
class SearchExistsTest(SearchUtilsMixin):
244-
def setUp(self):
245-
super().setUp()
246-
self.create_search_index(
243+
@classmethod
244+
def setUpClass(cls):
245+
super().setUpClass()
246+
cls.create_search_index(
247247
Article,
248248
"exists_body_index",
249249
{"mappings": {"dynamic": False, "fields": {"body": {"type": "token"}}}},
250250
)
251-
self.article = Article.objects.create(headline="ignored", number=3, body="something")
251+
cls.article = Article.objects.create(headline="ignored", number=3, body="something")
252252

253253
def test_search_exists(self):
254254
qs = Article.objects.annotate(score=SearchExists(path="body"))
@@ -264,14 +264,15 @@ def test_constant_score(self):
264264

265265
@skipUnlessDBFeature("supports_atlas_search")
266266
class SearchInTest(SearchUtilsMixin):
267-
def setUp(self):
268-
super().setUp()
269-
self.create_search_index(
267+
@classmethod
268+
def setUpClass(cls):
269+
super().setUpClass()
270+
cls.create_search_index(
270271
Article,
271272
"in_headline_index",
272273
{"mappings": {"dynamic": False, "fields": {"headline": {"type": "token"}}}},
273274
)
274-
self.article = Article.objects.create(headline="cross", number=1, body="a")
275+
cls.article = Article.objects.create(headline="cross", number=1, body="a")
275276
Article.objects.create(headline="road", number=2, body="b")
276277

277278
def test_search_in(self):
@@ -290,14 +291,15 @@ def test_constant_score(self):
290291

291292
@skipUnlessDBFeature("supports_atlas_search")
292293
class SearchPhraseTest(SearchUtilsMixin):
293-
def setUp(self):
294-
super().setUp()
295-
self.create_search_index(
294+
@classmethod
295+
def setUpClass(cls):
296+
super().setUpClass()
297+
cls.create_search_index(
296298
Article,
297299
"phrase_body_index",
298300
{"mappings": {"dynamic": False, "fields": {"body": {"type": "string"}}}},
299301
)
300-
self.article = Article.objects.create(
302+
cls.article = Article.objects.create(
301303
headline="irrelevant", number=1, body="the quick brown fox"
302304
)
303305
Article.objects.create(headline="cheetah", number=2, body="fastest animal")
@@ -318,15 +320,16 @@ def test_constant_score(self):
318320

319321
@skipUnlessDBFeature("supports_atlas_search")
320322
class SearchRangeTest(SearchUtilsMixin):
321-
def setUp(self):
322-
super().setUp()
323-
self.create_search_index(
323+
@classmethod
324+
def setUpClass(cls):
325+
super().setUpClass()
326+
cls.create_search_index(
324327
Article,
325328
"range_number_index",
326329
{"mappings": {"dynamic": False, "fields": {"number": {"type": "number"}}}},
327330
)
328331
Article.objects.create(headline="x", number=5, body="z")
329-
self.number20 = Article.objects.create(headline="y", number=20, body="z")
332+
cls.number20 = Article.objects.create(headline="y", number=20, body="z")
330333

331334
def test_search_range(self):
332335
qs = Article.objects.annotate(score=SearchRange(path="number", gte=10, lt=30))
@@ -344,9 +347,10 @@ def test_constant_score(self):
344347

345348
@skipUnlessDBFeature("supports_atlas_search")
346349
class SearchRegexTest(SearchUtilsMixin):
347-
def setUp(self):
348-
super().setUp()
349-
self.create_search_index(
350+
@classmethod
351+
def setUpClass(cls):
352+
super().setUpClass()
353+
cls.create_search_index(
350354
Article,
351355
"regex_headline_index",
352356
{
@@ -356,7 +360,7 @@ def setUp(self):
356360
}
357361
},
358362
)
359-
self.article = Article.objects.create(headline="hello world", number=1, body="abc")
363+
cls.article = Article.objects.create(headline="hello world", number=1, body="abc")
360364
Article.objects.create(headline="hola mundo", number=2, body="abc")
361365

362366
def test_search_regex(self):
@@ -379,14 +383,15 @@ def test_constant_score(self):
379383

380384
@skipUnlessDBFeature("supports_atlas_search")
381385
class SearchTextTest(SearchUtilsMixin):
382-
def setUp(self):
383-
super().setUp()
384-
self.create_search_index(
386+
@classmethod
387+
def setUpClass(cls):
388+
super().setUpClass()
389+
cls.create_search_index(
385390
Article,
386391
"text_body_index",
387392
{"mappings": {"dynamic": False, "fields": {"body": {"type": "string"}}}},
388393
)
389-
self.article = Article.objects.create(
394+
cls.article = Article.objects.create(
390395
headline="ignored", number=1, body="The lazy dog sleeps"
391396
)
392397
Article.objects.create(headline="ignored", number=2, body="The sleepy bear")
@@ -425,9 +430,10 @@ def test_constant_score(self):
425430

426431
@skipUnlessDBFeature("supports_atlas_search")
427432
class SearchWildcardTest(SearchUtilsMixin):
428-
def setUp(self):
429-
super().setUp()
430-
self.create_search_index(
433+
@classmethod
434+
def setUpClass(cls):
435+
super().setUpClass()
436+
cls.create_search_index(
431437
Article,
432438
"wildcard_headline_index",
433439
{
@@ -437,7 +443,7 @@ def setUp(self):
437443
}
438444
},
439445
)
440-
self.article = Article.objects.create(headline="dark-knight", number=1, body="")
446+
cls.article = Article.objects.create(headline="dark-knight", number=1, body="")
441447
Article.objects.create(headline="batman", number=2, body="")
442448

443449
def test_search_wildcard(self):
@@ -456,9 +462,10 @@ def test_constant_score(self):
456462

457463
@skipUnlessDBFeature("supports_atlas_search")
458464
class SearchGeoShapeTest(SearchUtilsMixin):
459-
def setUp(self):
460-
super().setUp()
461-
self.create_search_index(
465+
@classmethod
466+
def setUpClass(cls):
467+
super().setUpClass()
468+
cls.create_search_index(
462469
Article,
463470
"geoshape_location_index",
464471
{
@@ -468,7 +475,7 @@ def setUp(self):
468475
}
469476
},
470477
)
471-
self.article = Article.objects.create(
478+
cls.article = Article.objects.create(
472479
headline="any", number=1, body="", location={"type": "Point", "coordinates": [40, 5]}
473480
)
474481
Article.objects.create(
@@ -503,14 +510,15 @@ def test_constant_score(self):
503510

504511
@skipUnlessDBFeature("supports_atlas_search")
505512
class SearchGeoWithinTest(SearchUtilsMixin):
506-
def setUp(self):
507-
super().setUp()
508-
self.create_search_index(
513+
@classmethod
514+
def setUpClass(cls):
515+
super().setUpClass()
516+
cls.create_search_index(
509517
Article,
510518
"geowithin_location_index",
511519
{"mappings": {"dynamic": False, "fields": {"location": {"type": "geo"}}}},
512520
)
513-
self.article = Article.objects.create(
521+
cls.article = Article.objects.create(
514522
headline="geo", number=2, body="", location={"type": "Point", "coordinates": [40, 5]}
515523
)
516524
Article.objects.create(
@@ -553,9 +561,10 @@ def test_constant_score(self):
553561
@skipUnlessDBFeature("supports_atlas_search")
554562
@unittest.expectedFailure
555563
class SearchMoreLikeThisTest(SearchUtilsMixin):
556-
def setUp(self):
557-
super().setUp()
558-
self.create_search_index(
564+
@classmethod
565+
def setUpClass(cls):
566+
super().setUpClass()
567+
cls.create_search_index(
559568
Article,
560569
"mlt_index",
561570
{
@@ -565,10 +574,10 @@ def setUp(self):
565574
}
566575
},
567576
)
568-
self.article1 = Article.objects.create(
577+
cls.article1 = Article.objects.create(
569578
headline="Space exploration", number=1, body="Webb telescope"
570579
)
571-
self.article2 = Article.objects.create(
580+
cls.article2 = Article.objects.create(
572581
headline="The commodities fall",
573582
number=2,
574583
body="Commodities dropped sharply due to inflation concerns",
@@ -597,9 +606,10 @@ def test_search_more_like_this(self):
597606

598607
@skipUnlessDBFeature("supports_atlas_search")
599608
class CompoundSearchTest(SearchUtilsMixin):
600-
def setUp(self):
601-
super().setUp()
602-
self.create_search_index(
609+
@classmethod
610+
def setUpClass(cls):
611+
super().setUpClass()
612+
cls.create_search_index(
603613
Article,
604614
"compound_index",
605615
{
@@ -613,25 +623,25 @@ def setUp(self):
613623
}
614624
},
615625
)
616-
self.mars_mission = Article.objects.create(
626+
cls.mars_mission = Article.objects.create(
617627
number=1,
618628
headline="space exploration",
619629
body="NASA launches a new mission to Mars, aiming to study surface geology",
620630
)
621631

622-
self.exoplanet = Article.objects.create(
632+
cls.exoplanet = Article.objects.create(
623633
number=2,
624634
headline="space exploration",
625635
body="Astronomers discover exoplanets orbiting distant stars using Webb telescope",
626636
)
627637

628-
self.icy_moons = Article.objects.create(
638+
cls.icy_moons = Article.objects.create(
629639
number=3,
630640
headline="space exploration",
631641
body="ESA prepares a robotic expedition to explore the icy moons of Jupiter",
632642
)
633643

634-
self.comodities_drop = Article.objects.create(
644+
cls.comodities_drop = Article.objects.create(
635645
number=4,
636646
headline="astronomy news",
637647
body="Commodities dropped sharply due to inflation concerns",
@@ -765,9 +775,10 @@ def test_search_and_filter(self):
765775

766776
@skipUnlessDBFeature("supports_atlas_search")
767777
class SearchVectorTest(SearchUtilsMixin):
768-
def setUp(self):
769-
super().setUp()
770-
self.create_search_index(
778+
@classmethod
779+
def setUpClass(cls):
780+
super().setUpClass()
781+
cls.create_search_index(
771782
Article,
772783
"vector_index",
773784
{
@@ -784,13 +795,13 @@ def setUp(self):
784795
type="vectorSearch",
785796
)
786797

787-
self.mars = Article.objects.create(
798+
cls.mars = Article.objects.create(
788799
headline="Mars landing",
789800
number=1,
790801
body="The rover has landed on Mars",
791802
plot_embedding=[0.1, 0.2, 0.3],
792803
)
793-
self.cooking = Article.objects.create(
804+
cls.cooking = Article.objects.create(
794805
headline="Cooking tips",
795806
number=2,
796807
body="This article is about pasta",

0 commit comments

Comments
 (0)