File indexing completed on 2026-09-01 09:34:24
0001 from datetime import datetime, timezone
0002 from unittest.mock import patch
0003
0004 from django.template.loader import render_to_string
0005 from django.test import SimpleTestCase
0006
0007 from monitor_app.snapper_providers import _delivery_card
0008
0009
0010 class DeliveryCardTests(SimpleTestCase):
0011 @patch('monitor_app.snapper_providers._pc_cache')
0012 def test_scope_cut_omits_campaign_detail(self, pc_cache):
0013 self.assertIsNone(_delivery_card(
0014 {'campaigns': {'26.08': {}}}, {}, {'params': {}}))
0015 pc_cache.assert_not_called()
0016
0017 @patch('monitor_app.snapper_providers._pc_cache')
0018 def test_day_table_shows_event_completion_as_rightmost_column(
0019 self, pc_cache):
0020 pc_cache.return_value = {
0021 'requestors': {'pc1': ['PWG']},
0022 'keys': {'pc1': 'configuration'},
0023 'categories': {'pc1': 'DIS'},
0024 }
0025 data = {
0026 'campaigns': {
0027 '26.08': {
0028 'totals': {
0029 'arrived_files': 1,
0030 'arrived_events': 10,
0031 'events': 25,
0032 },
0033 'leaves': {
0034 'pc1': {
0035 'arrived_files': 1,
0036 'arrived_events': 10,
0037 'events': 25,
0038 'cum_files': 2,
0039 'expected': 100,
0040 'tier': 'included',
0041 },
0042 },
0043 },
0044 },
0045 }
0046
0047 card = _delivery_card(
0048 data,
0049 {},
0050 {
0051 'params': {'campaign': '26.08', 'lens': 'category'},
0052 'requested_at': datetime(2026, 8, 11, tzinfo=timezone.utc),
0053 },
0054 )
0055
0056 row = card['campaigns'][0]['day_groups'][0]['rows'][0]
0057 self.assertEqual(row['completion'], 25.0)
0058 campaign = card['campaigns'][0]
0059 self.assertTrue(campaign['daily'])
0060 self.assertEqual(campaign['arrivals_detail_key'],
0061 'delivery-arrivals-26_08')
0062 self.assertEqual(campaign['categories_detail_key'],
0063 'delivery-categories-26_08')
0064 self.assertEqual(campaign['category_rows'], [{
0065 'name': 'DIS',
0066 'configurations': 1,
0067 'events': 25,
0068 'files': 2,
0069 'curve': 'dlvc_cat_26_08_dis dlvcf_cat_26_08_dis',
0070 }])
0071 html = render_to_string(
0072 'monitor_app/_snapper_cards.html', {'card': card})
0073 self.assertIn('25.0%', html)
0074 self.assertIn(
0075 'data-snapper-detail-key="delivery-arrivals-26_08"', html)
0076 self.assertIn(
0077 'data-snapper-detail-key="delivery-categories-26_08"', html)
0078 self.assertIn('Cumulative by category ยท 26.08', html)
0079 self.assertLess(
0080 html.index('<th>Target events</th>'),
0081 html.index('<th>% complete</th>'),
0082 )