Fix two-column badge layout and descriptions

This commit is contained in:
2026-09-15 14:20:34 +02:00
parent 2a803036b5
commit d43a12acf3
4 changed files with 67 additions and 9 deletions
+23 -3
View File
@@ -108,17 +108,32 @@ class TranslationTests(unittest.TestCase):
self.assertIn('My profile', page)
self.assertIn('new message(s) or request(s)', page)
def test_every_patch_has_a_long_description_with_an_english_translation(self):
codes = {definition[0] for definition in main.BADGE_DEFINITIONS}
self.assertEqual(set(main.BADGE_LONG_DESCRIPTIONS), codes)
current_language.set('en')
for description in main.BADGE_LONG_DESCRIPTIONS.values():
with self.subTest(description=description):
self.assertNotEqual(main._(description), description)
def test_every_page_renders_with_populated_content_in_both_languages(self):
from jinja2 import ChainableUndefined
import os
env = main.templates.overlay(undefined=ChainableUndefined)
member = dict(id=1, username='sample', display_name='Nachrichten <test>', email='sample@example.invalid', is_admin=True, notification_count=2, created_at='14.09.2026')
event = dict(id=1, concert_id=1, artist='Nachrichten <test>', title='Nachrichten <test>', venue='Venue', city='Hagen', country='Deutschland', date='14.09.2026', time='20:00', event_type='concert', event_type_label='Konzert', visibility='friends', is_past=True, is_verified=True, concert_count=2, name='Venue', rating=4, favorite_song='Nachrichten <test>', notes='Nachrichten <test>', photos=[dict(id=1, path='/photo.jpg')], bands=[])
badge = dict(code='founder', name='Gründer', description='Von Anfang an dabei und MetalCircle aufgebaut', earned=True, icon='⚔️', image_path='/patch.jpg')
badge = dict(code='founder', name='Gründer', description='Von Anfang an dabei und MetalCircle aufgebaut', long_description=main.BADGE_LONG_DESCRIPTIONS['founder'], earned=True, icon='⚔️', image_path='/patch.jpg')
profile_badges = [badge]
for code in ('alpha_tester', 'beta_tester', 'early_bird'):
name, icon, _threshold, reason, _category = main.BADGE_BY_CODE[code]
profile_badges.append(dict(code=code, name=name, description=reason,
long_description=main.BADGE_LONG_DESCRIPTIONS[code],
earned=True, icon=icon, image_path='/patch.jpg',
awarded_at='14.09.2026', trigger_concert=None))
event['badges'] = [badge]
event['linked_events'] = []
profile = dict(member, attended_concerts=1)
context = dict(user=member, users=[member], managed_user=member, concert=event, profile=profile, filters={}, stats={}, connections=dict(friends=[member], incoming=[member], outgoing=[member], blocked=[member]), badges=[badge], patch_groups=[dict(label='⚔️ Spezial-Patches', patches=[badge])], venues=[event, dict(event, id=2)], entries=[event], upcoming_concerts=[event], past_concerts=[event], events=[event], followed_bands=[dict(name='Nachrichten <test>', key='test')], followed_venues=[event], linkable_events=[event], invitable_users=[member], invited_user_ids=[1], attending_users=[member], maybe_users=[member], ticket_seekers=[member], ticket_offers=[member], attending_count=2, maybe_count=1, ticket_seeker_count=1, ticket_offer_count=1, comments=[dict(member, body='Nachrichten <test>')], is_own_profile=True, can_view_details=True, can_edit_title=True, can_edit_details=True, can_manage_access=True, can_delete=True, can_edit=True, can_manage=True, user_results=[member], friend_requests=[member], event_invitations=[dict(event, invited_by='Nachrichten <test>')], conversations=[dict(member, unread_count=1, last_message='Nachrichten <test>')], messages=[dict(body='Nachrichten <test>')])
profile = dict(member, attended_concerts=1, earned_codes={badge['code'] for badge in profile_badges})
context = dict(user=member, users=[member], managed_user=member, concert=event, profile=profile, filters={}, stats={}, connections=dict(friends=[member], incoming=[member], outgoing=[member], blocked=[member]), badges=profile_badges, patch_groups=[dict(label='⚔️ Spezial-Patches', patches=[badge])], venues=[event, dict(event, id=2)], entries=[event], upcoming_concerts=[event], past_concerts=[event], events=[event], followed_bands=[dict(name='Nachrichten <test>', key='test')], followed_venues=[event], linkable_events=[event], invitable_users=[member], invited_user_ids=[1], attending_users=[member], maybe_users=[member], ticket_seekers=[member], ticket_offers=[member], attending_count=2, maybe_count=1, ticket_seeker_count=1, ticket_offer_count=1, comments=[dict(member, body='Nachrichten <test>')], is_own_profile=True, can_view_details=True, can_edit_title=True, can_edit_details=True, can_manage_access=True, can_delete=True, can_edit=True, can_manage=True, user_results=[member], friend_requests=[member], event_invitations=[dict(event, invited_by='Nachrichten <test>')], conversations=[dict(member, unread_count=1, last_message='Nachrichten <test>')], messages=[dict(body='Nachrichten <test>')])
for language in ('de', 'en'):
current_language.set(language)
for path in Path(main.BASE_DIR, 'templates').glob('*.html'):
@@ -128,6 +143,11 @@ class TranslationTests(unittest.TestCase):
if not path.name.startswith('_'):
self.assertIn(f'<html lang="{language}">', page)
self.assertIn('class="language-switch"', page)
if path.name == 'profile.html':
self.assertIn('grid-template-columns: repeat(2, minmax(0, 1fr))', page)
self.assertIn('This patch recognizes you as part of the first crew' if language == 'en' else 'Dieser Patch würdigt dich als Teil der ersten Crew', page)
self.assertIn('Reason:' if language == 'en' else 'Grund:', page)
self.assertEqual(page.count('class="patch-button"'), len(profile_badges))
if os.environ.get('I18N_RENDER_DIR'):
target = Path(os.environ['I18N_RENDER_DIR'], language)
target.mkdir(parents=True, exist_ok=True)