rename: Note→Post/Line (dashboard); Recognition→Note (drama); new-post/my-posts to billboard
- dashboard: Note→Post, Item→Line across models, forms, views, API, urls & tests - new-post (9×3) & my-posts (3×3) applets migrate from dashboard→billboard context; billboard view passes form & recent_posts - drama: Recognition→Note, related_name notes; billboard URL /recognition/→/my-notes/, set-palette at /note/<slug>/set-palette - recognition.js→note.js (module Note, data.note key); recognition-page.js→note-page.js; .recog-*→.note-* - _recognition.scss→_note.scss; BillNotes page header; applet slug billboard-recognition→billboard-notes (My Notes) - NoteSpec.js replaces RecognitionSpec.js; test_recognition.py→test_applet_my_notes.py - 4 migrations applied: dashboard 0004, applets 0011+0012, drama 0005; 683 ITs green Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
24
src/apps/drama/migrations/0005_rename_recognition_to_note.py
Normal file
24
src/apps/drama/migrations/0005_rename_recognition_to_note.py
Normal file
@@ -0,0 +1,24 @@
|
||||
import django.conf
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('drama', '0004_recognition'),
|
||||
migrations.swappable_dependency(django.conf.settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RenameModel('Recognition', 'Note'),
|
||||
migrations.AlterField(
|
||||
model_name='note',
|
||||
name='user',
|
||||
field=models.ForeignKey(
|
||||
django.conf.settings.AUTH_USER_MODEL,
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name='notes',
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -170,10 +170,10 @@ def record(room, verb, actor=None, **data):
|
||||
return GameEvent.objects.create(room=room, actor=actor, verb=verb, data=data)
|
||||
|
||||
|
||||
class Recognition(models.Model):
|
||||
class Note(models.Model):
|
||||
user = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL, on_delete=models.CASCADE,
|
||||
related_name="recognitions",
|
||||
related_name="notes",
|
||||
)
|
||||
slug = models.SlugField(max_length=60)
|
||||
earned_at = models.DateTimeField()
|
||||
|
||||
@@ -2,7 +2,7 @@ from django.test import TestCase
|
||||
from django.db import IntegrityError
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.drama.models import GameEvent, Recognition, ScrollPosition, record
|
||||
from apps.drama.models import GameEvent, Note, ScrollPosition, record
|
||||
from apps.epic.models import Room
|
||||
from apps.lyric.models import User
|
||||
|
||||
@@ -176,44 +176,44 @@ class ScrollPositionModelTest(TestCase):
|
||||
self.assertEqual(ScrollPosition.objects.get(user=self.user, room=self.room).position, 200)
|
||||
|
||||
|
||||
class RecognitionModelTest(TestCase):
|
||||
class NoteModelTest(TestCase):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create(email="earner@test.io")
|
||||
|
||||
def test_can_create_recognition(self):
|
||||
recog = Recognition.objects.create(
|
||||
recog = Note.objects.create(
|
||||
user=self.user, slug="stargazer", earned_at=timezone.now(),
|
||||
)
|
||||
self.assertEqual(Recognition.objects.count(), 1)
|
||||
self.assertEqual(Note.objects.count(), 1)
|
||||
self.assertEqual(recog.slug, "stargazer")
|
||||
self.assertEqual(recog.user, self.user)
|
||||
|
||||
def test_palette_is_null_by_default(self):
|
||||
recog = Recognition.objects.create(
|
||||
recog = Note.objects.create(
|
||||
user=self.user, slug="stargazer", earned_at=timezone.now(),
|
||||
)
|
||||
self.assertIsNone(recog.palette)
|
||||
|
||||
def test_palette_can_be_set(self):
|
||||
recog = Recognition.objects.create(
|
||||
recog = Note.objects.create(
|
||||
user=self.user, slug="stargazer", earned_at=timezone.now(),
|
||||
palette="palette-bardo",
|
||||
)
|
||||
self.assertEqual(recog.palette, "palette-bardo")
|
||||
|
||||
def test_unique_per_user_and_slug(self):
|
||||
Recognition.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
Note.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
with self.assertRaises(IntegrityError):
|
||||
Recognition.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
Note.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
|
||||
def test_different_users_can_share_slug(self):
|
||||
other = User.objects.create(email="other@test.io")
|
||||
Recognition.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
Recognition.objects.create(user=other, slug="stargazer", earned_at=timezone.now())
|
||||
self.assertEqual(Recognition.objects.count(), 2)
|
||||
Note.objects.create(user=self.user, slug="stargazer", earned_at=timezone.now())
|
||||
Note.objects.create(user=other, slug="stargazer", earned_at=timezone.now())
|
||||
self.assertEqual(Note.objects.count(), 2)
|
||||
|
||||
def test_str_includes_slug_and_email(self):
|
||||
recog = Recognition.objects.create(
|
||||
recog = Note.objects.create(
|
||||
user=self.user, slug="stargazer", earned_at=timezone.now(),
|
||||
)
|
||||
s = str(recog)
|
||||
@@ -221,22 +221,22 @@ class RecognitionModelTest(TestCase):
|
||||
self.assertIn("earner@test.io", s)
|
||||
|
||||
def test_grant_if_new_creates_on_first_call(self):
|
||||
recog, created = Recognition.grant_if_new(self.user, "stargazer")
|
||||
recog, created = Note.grant_if_new(self.user, "stargazer")
|
||||
self.assertTrue(created)
|
||||
self.assertEqual(recog.slug, "stargazer")
|
||||
self.assertIsNotNone(recog.earned_at)
|
||||
|
||||
def test_grant_if_new_is_idempotent(self):
|
||||
Recognition.grant_if_new(self.user, "stargazer")
|
||||
recog, created = Recognition.grant_if_new(self.user, "stargazer")
|
||||
Note.grant_if_new(self.user, "stargazer")
|
||||
recog, created = Note.grant_if_new(self.user, "stargazer")
|
||||
self.assertFalse(created)
|
||||
self.assertEqual(Recognition.objects.count(), 1)
|
||||
self.assertEqual(Note.objects.count(), 1)
|
||||
|
||||
def test_grant_if_new_does_not_overwrite_palette(self):
|
||||
Recognition.objects.create(
|
||||
Note.objects.create(
|
||||
user=self.user, slug="stargazer",
|
||||
earned_at=timezone.now(), palette="palette-bardo",
|
||||
)
|
||||
recog, created = Recognition.grant_if_new(self.user, "stargazer")
|
||||
recog, created = Note.grant_if_new(self.user, "stargazer")
|
||||
self.assertFalse(created)
|
||||
self.assertEqual(recog.palette, "palette-bardo")
|
||||
|
||||
Reference in New Issue
Block a user