Добавление id к маршруту url в Async-тестировании с помощью Django

Я создал простой чат и теперь хочу написать тест, чтобы проверить, подключается ли он. Следуя руководству в документации Channels, я придумал следующий тест:

class ViewTestCase(TestCase):
@classmethod
def setUp(self):
    user_moderator = User.objects.create_superuser(first_name='tester',
        username='test1', 
        password='123', 
        email='testuser@gmail.com')

    user_player = User.objects.create_user(first_name='player',
    username='player1',
    password='1234',
    email='testplayer@gmail.com')

    pack1 = Pack.objects.create(deckStyle='Fibonacci',deck=['1','2','3'])

    self.room = PokerRoom.objects.create(status='Pending',name='planning',styleCards='Fibonacci',
    user=User.objects.get(username='test1'),
    deck=Pack.objects.get(deckStyle='Fibonacci'),index=1)
    
    user_player = ParticipatingUser.objects.create(name='player',idRoom=PokerRoom.objects.get(name='planning'), status='Pending')

    self.story = Story.objects.create(storyName='testplanning',
    idRoom=PokerRoom.objects.get(name='planning'),
    status='Pending')



    
async def test_consumer(self):
    
    application = URLRouter([
        url(r'ws/chat/(?P<room_name>[A-Za-z0-9_-]+)/participant/(?P<user>\w+)/$', consumers.ChatConsumer.as_asgi()),
    ])
    communicator = WebsocketCommunicator(application,"/ws/chat/room_id/participant/participant_id)/")
    connected, subprotocol = await communicator.connect()
    assert connected    
    await communicator.disconnect()

Моя проблема в том, что мне нужно подставить room_id и participant_id внутри моего WebsocketCommunicator. participant_id - это просто commom id, а room_id - это UUIDField. Я использовал следующий метод для извлечения этих идентификаторов в других моих тестах:

      def test_something(self):
        room_id = PokerRoom.objects.get(name='planning').id
        user_id = User.objects.get(username='tester').id
        ...

Но если я использую тот же метод внутри async def вот так:

async def test_something(self):
        room_id = PokerRoom.objects.get(name='planning').id
        user_id = User.objects.get(username='tester').id
        ...

Я получаю эту ошибку django.core.exceptions.SynchronousOnlyOperation: You cannot call this from an async context - use a thread or sync_to_async.

Как я могу решить эту проблему?

Вернуться на верх