Skip to content

Commit

Permalink
Fix bug and add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ldeluigi committed Aug 27, 2024
1 parent 613d7de commit 8273545
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
2 changes: 1 addition & 1 deletion backend/spellbook/parsers/variants_query_grammar.lark
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ RPAREN: ")"

NEGATION_OPERATOR: "-"

LONG_LITERAL.10: /"(?:[^"\\]|\\")+"/
LONG_LITERAL.10: /"(?:[^"\\]|\\\")+"/

SHORT_LITERAL.-1: /[a-zA-Z0-9\u00C0-\u00FF_\-',+!\.]+/

Expand Down
12 changes: 12 additions & 0 deletions backend/spellbook/tests/test_views/test_variant_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ def test_variants_detail_view(self):
self.variant_assertions(result)

def test_variants_list_view_query_by_card_name(self):
a_card = Card.objects.first()
assert a_card is not None
for card, search in ((c, name) for c in Card.objects.all() for name in (c.name, c.name_unaccented, c.name_unaccented.replace('-', ''), c.name_unaccented.replace('-', ' '))):
prefix_without_spaces = search.partition(' ')[0]
search_without_underscores = search.replace('_', '').strip()
Expand Down Expand Up @@ -161,6 +163,16 @@ def test_variants_list_view_query_by_card_name(self):
self.assertSetEqual({v.id for v in result.results}, {v.id for v in variants})
for v in result.results:
self.variant_assertions(v)
qq = f'{q} card:"{a_card.name}"'
with self.subTest(f'query by card name: {search} with additional card {a_card} and query {q}'):
response = self.client.get('/variants', data={'q': qq}, follow=True)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.get('Content-Type'), 'application/json')
result = json.loads(response.content, object_hook=json_to_python_lambda)
variants = self.public_variants.filter(uses__id=card.id).filter(uses__id=a_card.id).distinct()
self.assertSetEqual({v.id for v in result.results}, {v.id for v in variants})
for v in result.results:
self.variant_assertions(v)

def test_variants_list_view_query_by_card_count(self):
min_cards, max_cards = self.public_variants.aggregate(min_cards=models.Min('cards_count'), max_cards=models.Max('cards_count')).values()
Expand Down
4 changes: 2 additions & 2 deletions backend/spellbook/transformers/variants_query_transformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,11 @@ def variants_query_parser(base: QuerySet[Variant], query_string: str) -> QuerySe
filtered_variants = filtered_variants.exclude(filter.q) if filter.negated else filtered_variants.filter(filter.q)
for filter in filters.cards_filters:
filtered_cards = CardInVariant.objects.filter(filter.q)
q = Q(pk__in=filtered_cards.values('variant').distinct())
q = Q(pk__in=filtered_cards.values('variant_id').distinct())
filtered_variants = filtered_variants.exclude(q) if filter.negated else filtered_variants.filter(q)
for filter in filters.results_filters:
filtered_produces = FeatureProducedByVariant.objects.filter(filter.q)
q = Q(pk__in=filtered_produces.values('variant').distinct())
q = Q(pk__in=filtered_produces.values('variant_id').distinct())
filtered_variants = filtered_variants.exclude(q) if filter.negated else filtered_variants.filter(q)
return filtered_variants
except UnexpectedToken as e:
Expand Down

0 comments on commit 8273545

Please sign in to comment.