• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

gcivil-nyu-org / team1-wed-fall25 / 237

03 Dec 2025 05:33PM UTC coverage: 81.852% (-4.0%) from 85.871%
237

cron

travis-pro

web-flow
Merge pull request #138 from gcivil-nyu-org/develop

Merge latest changes into main

431 of 696 new or added lines in 17 files covered. (61.93%)

3 existing lines in 2 files now uncovered.

2413 of 2948 relevant lines covered (81.85%)

0.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

76.47
/chatbot/admin.py
1
from django.contrib import admin
1✔
2
from .models import ChatSession, ChatMessage
1✔
3

4

5
@admin.register(ChatSession)
1✔
6
class ChatSessionAdmin(admin.ModelAdmin):
1✔
7
    list_display = ["user", "session_id", "created_at", "updated_at", "message_count"]
1✔
8
    list_filter = ["created_at", "updated_at"]
1✔
9
    search_fields = ["user__username", "session_id"]
1✔
10
    readonly_fields = ["session_id", "created_at", "updated_at"]
1✔
11

12
    def message_count(self, obj):
1✔
NEW
13
        return obj.messages.count()
×
14

15
    message_count.short_description = "Messages"
1✔
16

17

18
@admin.register(ChatMessage)
1✔
19
class ChatMessageAdmin(admin.ModelAdmin):
1✔
20
    list_display = [
1✔
21
        "id",
22
        "session_user",
23
        "sender",
24
        "message_preview",
25
        "created_at",
26
        "has_metadata",
27
    ]
28
    list_filter = ["sender", "created_at"]
1✔
29
    search_fields = ["message", "session__user__username"]
1✔
30
    readonly_fields = ["created_at", "formatted_metadata"]
1✔
31

32
    fieldsets = (
1✔
33
        ("Message Info", {"fields": ("session", "sender", "message", "created_at")}),
34
        ("Metadata", {"fields": ("formatted_metadata",), "classes": ("collapse",)}),
35
    )
36

37
    def session_user(self, obj):
1✔
NEW
38
        return obj.session.user.username
×
39

40
    session_user.short_description = "User"
1✔
41

42
    def message_preview(self, obj):
1✔
NEW
43
        return obj.message[:50] + "..." if len(obj.message) > 50 else obj.message
×
44

45
    message_preview.short_description = "Message"
1✔
46

47
    def has_metadata(self, obj):
1✔
NEW
48
        return bool(obj.metadata)
×
49

50
    has_metadata.boolean = True
1✔
51
    has_metadata.short_description = "Has Metadata"
1✔
52

53
    def formatted_metadata(self, obj):
1✔
NEW
54
        if obj.metadata:
×
NEW
55
            import json
×
56

NEW
57
            return json.dumps(obj.metadata, indent=2)
×
NEW
58
        return "No metadata"
×
59

60
    formatted_metadata.short_description = "Metadata (JSON)"
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc