new apps.epic app migrations for token expiration & cooldown; reject token renamed to return token everywhere; new mapps.epic.models & .views for expiration & cooldown; new apps.dash.views to manage stacking of like Token types not just in the kit bag but in the Gameboard's Game Kit applet & in the Dashwallet's Tokens applet; Free Tokens now display correctly in kit bag; apps.lyric.admin now ensures superuser cannot grant Free Tokens without an expiration date; corresponding tests in .tests.integrated.test_admin.TokenAdminFormTest; screendumps occurring for every test, regardless of passfail status, after one fail fixed in FTs.base; FTs.test_gatekeeper.GameKitInsertTest.test_free_token_insert_via_kit_consumed_on_confirm, for test purposes only, ensures starting Free Token deleted before fresh one assigned w. full 7d expiration battery

This commit is contained in:
Disco DeDisco
2026-03-15 16:08:34 -04:00
parent 18ba242647
commit 2e24175ec8
16 changed files with 244 additions and 69 deletions

View File

@@ -1,3 +1,4 @@
from django import forms
from django.contrib import admin
from .models import LoginToken, Token, User
@@ -7,6 +8,23 @@ class UserAdmin(admin.ModelAdmin):
list_display = ["email"]
search_fields = ["email"]
class TokenAdminForm(forms.ModelForm):
class Meta:
model = Token
fields = "__all__"
def clean(self):
cleaned_data = super().clean()
if cleaned_data.get("token_type") == Token.FREE and not cleaned_data.get("expires_at"):
raise forms.ValidationError("Free Tokens must have an expiration date.")
return cleaned_data
class TokenAdmin(admin.ModelAdmin):
form = TokenAdminForm
admin.site.register(User, UserAdmin)
admin.site.register(LoginToken)
admin.site.register(Token)
admin.site.register(Token, TokenAdmin)