Skip to content

Commit 805d2d4

Browse files
committed
Show public battles on recent-battle view
1 parent bc27169 commit 805d2d4

3 files changed

Lines changed: 34 additions & 16 deletions

File tree

templates/warriors/recent_battles.html

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,7 @@
1010
</ul>
1111
</nav>
1212

13-
{% if request.user.is_authenticated %}
14-
<h1>Your recent battles</h1>
15-
{% else %}
16-
<h1>Recent battles</h1>
17-
{% endif %}
13+
<h1>Recent battles</h1>
1814
<table>
1915
<thead>
2016
<tr>

warriors/tests/test_views.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,25 @@ def test_recent_battles_no_duplicates(user, user_client, battle, default_arena):
257257
response = user_client.get(reverse('recent_battles'))
258258
assert response.status_code == 200
259259
assert len(response.context['battles']) == 1
260+
261+
262+
@pytest.mark.django_db
263+
@pytest.mark.parametrize('public_battle_results,expected_visible', [
264+
(True, True),
265+
(False, False),
266+
])
267+
def test_recent_battles_public_battle_results(
268+
client, battle, default_arena,
269+
public_battle_results, expected_visible,
270+
):
271+
"""Test that battles are visible based on warrior's public_battle_results setting."""
272+
battle.warrior_1.public_battle_results = public_battle_results
273+
battle.warrior_1.save(update_fields=['public_battle_results'])
274+
275+
response = client.get(reverse('recent_battles'))
276+
assert response.status_code == 200
277+
278+
if expected_visible:
279+
assert battle in response.context['battles']
280+
else:
281+
assert battle not in response.context['battles']

warriors/views.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -309,19 +309,19 @@ class RecentBattlesView(ArenaViewMixin, ListView):
309309
context_object_name = 'battles'
310310

311311
def get_queryset(self):
312+
# Show battles where results are viewable:
313+
# - user owns one of the warriors, OR
314+
# - one of the warriors has public_battle_results=True, OR
315+
# - user has authorized access via session
316+
q = Q(warrior_1__public_battle_results=True) | Q(warrior_2__public_battle_results=True)
317+
if self.request.user.is_authenticated:
318+
q |= Q(warrior_1__users=self.request.user) | Q(warrior_2__users=self.request.user)
319+
authorized_warriors = self.request.session.get('authorized_warriors', [])
320+
if authorized_warriors:
321+
q |= Q(warrior_1__id__in=authorized_warriors) | Q(warrior_2__id__in=authorized_warriors)
312322
qs = Battle.objects.filter(
313323
llm=self.arena.llm,
314-
)
315-
if self.request.user.is_authenticated:
316-
qs = qs.for_user(self.request.user)
317-
else:
318-
authorized_warriors = self.request.session.get('authorized_warriors', [])
319-
qs = qs.filter(Q(
320-
warrior_1__id__in=authorized_warriors,
321-
) | Q(
322-
warrior_2__id__in=authorized_warriors,
323-
)).distinct()
324-
qs = qs.order_by('-scheduled_at')
324+
).filter(q).distinct().order_by('-scheduled_at')
325325
battles = list(qs[:100])
326326
prefetch_warriors(battles)
327327
prefetch_warrior_arenas(self.arena, battles)

0 commit comments

Comments
 (0)