Getting attribute error in Dango BaseCommand- Check
I am working on a tutorial project. The same code works for the instructor but doesn't work for me.
I have a file for custom commands:
import time
from psycopg2 import OperationalError as Psycopg2OpError
from django.db.utils import OperationalError
from django.core.management.base import BaseCommand, CommandError
class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write('waiting for database...')
db_up = False
while db_up is False:
try:
self.check(databases=['default'])
db_up = True
except(Psycopg2OpError, OperationalError):
self.stdout.write("Database unavailable, waiting 1 second...")
time.sleep(1)
self.stdout.write(self.style.SUCCESS('Database available!'))
And I am writing test case for the same in a file called test_command.py
which is below:
from unittest.mock import patch
from psycopg2 import OperationalError as Psycopg2OpError
from django.core.management import call_command
from django.db.utils import OperationalError
from django.test import SimpleTestCase
@patch('core.management.commands.wait_for_db.Command.Check')
class CommandTests(SimpleTestCase):
def test_wait_for_db_ready(self, patched_check):
"""test waiting for db if db ready"""
patched_check.return_value = True
call_command('wait_for_db')
patched_check.assert_called_once_with(databases=['default'])
@patch('time.sleep')
def test_wait_for_db_delay(self, patched_sleep, patched_check):
"""test waiting for db when getting operational error"""
patched_check.side_effect = [Psycopg2OpError] * 2 + \
[OperationalError] * 3 + [True]
call_command('wait_for_db')
self.assertEqual(patched_check.call_count, 6)
patched_check.assert_called_with(databases=['default'])
When I run the tests, I get an error message:
AttributeError: <class 'core.management.commands.wait_for_db.Command'> does not have the attribute 'Check'
I am unable to resolve the error.
The structure of the files: