Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for nkdsu.apps.vote.views.tests.test_admin
from bs4 import BeautifulSoup
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from nkdsu.apps.vote.models import Track
User = get_user_model ()
[docs]
class VoteAdminViewTest ( TestCase ):
[docs]
def setUp ( self ) -> None :
user = User . objects . create ( username = 'user' , is_staff = True )
user . set_password ( 'pass' )
user . save ()
self . assertTrue ( self . client . login ( username = 'user' , password = 'pass' ))
[docs]
class BlockTest ( VoteAdminViewTest ):
maxDiff = None
fixtures = [ 'vote.json' ]
[docs]
def test_add_block ( self ) -> None :
reason = 'blocking this track!!!'
def track () -> Track :
return Track . objects . get ( pk = '00555AF6AC71CB70' )
self . assertIsNone ( track () . ineligible ())
resp = self . client . post (
reverse ( 'vote:admin:block' , kwargs = { 'pk' : track () . pk }),
data = { 'reason' : reason },
follow = True ,
)
self . assertEqual ( resp . redirect_chain , [( '/' , 302 )])
self . assertEqual (
[ m . message for m in resp . context [ 'messages' ]],
[ "'Hands Around My Throat' blocked" ],
)
self . assertEqual ( track () . ineligible (), reason )
[docs]
class PostAboutPlayTest ( VoteAdminViewTest ):
[docs]
def test_track_strings_truncated_appropriately ( self ) -> None :
track = Track . objects . create (
id = '123' ,
id3_title = 'a' * 500 ,
id3_artist = 'a' * 2000 ,
added = '2025-01-01T00:00:00Z' ,
hidden = True ,
inudesu = False ,
)
self . assertEqual ( len ( str ( track )), 2505 )
resp = self . client . get (
reverse ( 'vote:admin:post_about_play' , kwargs = { 'pk' : track . pk })
)
self . assertEqual ( resp . status_code , 200 , resp . content )
soup = BeautifulSoup ( resp . content )
( post_about_play ,) = soup . select ( 'dl.post-about-play' )
dts = post_about_play . select ( 'dt' )
dds = post_about_play . select ( 'dd input' )
self . assertEqual (
[( dt . text , len ( dd [ 'value' ])) for dt , dd in zip ( dts , dds )],
[
( 'Twitter:' , 279 ), # ellipsis gets counted different
( 'Bluesky:' , 300 ),
( 'Discord:' , 2000 ),
],
)