Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions assets/js/pairing.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,22 @@ function populateTabCards() {
success(result) {
Object.entries(result).forEach(([teamId, stats]) => {
const tabCardElement = $(`.tabcard[team-id=${teamId}]`);
const text = [
const statsText = [
stats.wins,
stats.total_speaks.toFixed(2),
stats.govs,
stats.opps,
stats.seed,
].join(" / ");
const debatersText = stats.debaters || "";
tabCardElement.attr("title", "Wins / Speaks / Govs / Opps / Seed");
tabCardElement.attr("href", `/team/card/${teamId}`);
tabCardElement.text(`${text}`);
tabCardElement.empty();
if (debatersText) {
tabCardElement.append(document.createTextNode(debatersText));
tabCardElement.append("<br>");
}
tabCardElement.append(document.createTextNode(statsText));
});
},
});
Expand Down
3 changes: 3 additions & 0 deletions mittab/apps/tab/views/pairing_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -686,6 +686,9 @@ def stats_for_team(team):
stats["total_speaks"] = tab_logic.tot_speaks(team)
stats["govs"] = tab_logic.num_govs(team)
stats["opps"] = tab_logic.num_opps(team)
stats["debaters"] = ", ".join(
debater.name for debater in team.debaters.all()
)

if hasattr(team, "breaking_team"):
stats["outround_seed"] = team.breaking_team.seed
Expand Down
34 changes: 29 additions & 5 deletions mittab/libs/tests/views/test_api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,15 +91,23 @@ def test_render(self):
f"Expected key '{item_key}' in {json_key}")

stats_views = [
(reverse("team_stats", args=[round_obj.round_number]), dict, "seed"),
(
reverse("team_stats", args=[round_obj.round_number]),
dict,
("seed", "debaters"),
),
]

if outround:
stats_views.append(
(reverse("outround_team_stats", args=[outround.pk]), dict, "seed")
(
reverse("outround_team_stats", args=[outround.pk]),
dict,
("seed", "debaters"),
)
)

for url, expected_type, item_key in stats_views:
for url, expected_type, item_keys in stats_views:
response = self.client.get(url)
self.assertEqual(response.status_code, 200,
f"Failed to render stats API {url}, got status {response.status_code}")
Expand All @@ -112,8 +120,24 @@ def test_render(self):
first_team_id = list(data.keys())[0]
self.assertIsInstance(data[first_team_id], dict,
f"Expected team data to be dict in {url}")
self.assertIn(item_key, data[first_team_id],
f"Expected key '{item_key}' in team stats")
for item_key in item_keys:
self.assertIn(item_key, data[first_team_id],
f"Expected key '{item_key}' in team stats")

def test_team_stats_debaters_ignore_public_setting(self):
round_obj = Round.objects.filter(round_number=1).first()
TabSettings.set("debaters_public", 0)

response = self.client.get(reverse("team_stats", args=[round_obj.round_number]))
self.assertEqual(response.status_code, 200)
data = response.json()

for team in (round_obj.gov_team, round_obj.opp_team):
expected_debaters = ", ".join(
debater.name for debater in team.debaters.all()
)
self.assertIn(str(team.id), data)
self.assertEqual(data[str(team.id)]["debaters"], expected_debaters)

def test_debater_counts_supports_control_board(self):
response = self.client.get(reverse("debater_counts_api"))
Expand Down