Sorry Vishesh, thanks for the quick answer but I have no idea what you mean.

On Wednesday, May 10, 2023 at 2:00:51 PM UTC+2 Vishesh Mangla wrote:

> False or True check for yourself.
>
> On Wed, 10 May, 2023, 17:29 Vishesh Mangla, <[email protected]> wrote:
>
>> It looks like you are passing a null but null=False is not set
>>
>> On Wed, 10 May, 2023, 17:27 'Bob Aalsma' via Django users, <
>> [email protected]> wrote:
>>
>>> I'm trying to test a django-admin command and don't understand why the 
>>> tests give errors on the code while the code works as expected.
>>>
>>> I'm under the impression that the *raise CommandError* is ignored by 
>>> the test, but don't understand why this would be.
>>>
>>> Please help.
>>>
>>> Running the code shows:
>>>
>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py 
>>> populate_source 0
>>>
>>> *CommandError: Alleen hele getallen > 0 toegestaan*
>>>
>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py 
>>> populate_source 1
>>>
>>> *Teksten zijn gegenereerd voor tekstlengte 1*
>>>
>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py 
>>> populate_source 1
>>>
>>> *CommandError: Teksten voor nummer 1 zijn al eerder gegenereerd*
>>>
>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py 
>>> populate_source 7
>>>
>>> *CommandError: Opgegeven sleutel 7 niet gevonden*
>>>
>>> Running the tests shows
>>>
>>> (.venv) werker@Werkers-Mac-mini domain_reader % python3 manage.py test 
>>> tests.test_sources_app_command_populate
>>>
>>> Found 3 test(s).
>>>
>>> Creating test database for alias 'default'...
>>>
>>> System check identified no issues (0 silenced).
>>>
>>> EEE
>>>
>>> ======================================================================
>>>
>>> ERROR: test_command_output_been_there 
>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_been_there)
>>>
>>> Test for failure: in_use = True.
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Traceback (most recent call last):
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 89, in _execute
>>>
>>>     return self.cursor.execute(sql, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py",
>>>  
>>> line 328, in execute
>>>
>>>     return super().execute(query, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> sqlite3.IntegrityError: NOT NULL constraint failed: 
>>> domain_sources_app_characternumber.number_of_combinations
>>>
>>>
>>> The above exception was the direct cause of the following exception:
>>>
>>>
>>> Traceback (most recent call last):
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py",
>>>  
>>> line 30, in test_command_output_been_there
>>>
>>>     thingy.save()
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 814, in save
>>>
>>>     self.save_base(
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 877, in save_base
>>>
>>>     updated = self._save_table(
>>>
>>>               ^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 1020, in _save_table
>>>
>>>     results = self._do_insert(
>>>
>>>               ^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 1061, in _do_insert
>>>
>>>     return manager._insert(
>>>
>>>            ^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/manager.py",
>>>  
>>> line 87, in manager_method
>>>
>>>     return getattr(self.get_queryset(), name)(*args, **kwargs)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/query.py",
>>>  
>>> line 1805, in _insert
>>>
>>>     return query.get_compiler(using=using).execute_sql(returning_fields)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
>>>  
>>> line 1820, in execute_sql
>>>
>>>     cursor.execute(sql, params)
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 67, in execute
>>>
>>>     return self._execute_with_wrappers(
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 80, in _execute_with_wrappers
>>>
>>>     return executor(sql, params, many, context)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 84, in _execute
>>>
>>>     with self.db.wrap_database_errors:
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/utils.py",
>>>  
>>> line 91, in __exit__
>>>
>>>     raise dj_exc_value.with_traceback(traceback) from exc_value
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 89, in _execute
>>>
>>>     return self.cursor.execute(sql, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py",
>>>  
>>> line 328, in execute
>>>
>>>     return super().execute(query, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> django.db.utils.IntegrityError: NOT NULL constraint failed: 
>>> domain_sources_app_characternumber.number_of_combinations
>>>
>>>
>>> ======================================================================
>>>
>>> ERROR: test_command_output_small 
>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_small)
>>>
>>> Test for failure with value '0'.
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Traceback (most recent call last):
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py",
>>>  
>>> line 20, in test_command_output_small
>>>
>>>     call_command("populate_source", 0, stdout=out)
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/core/management/__init__.py",
>>>  
>>> line 194, in call_command
>>>
>>>     return command.execute(*args, **defaults)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/core/management/base.py",
>>>  
>>> line 458, in execute
>>>
>>>     output = self.handle(*args, **options)
>>>
>>>              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/domain_sources_app/management/commands/populate_source.py",
>>>  
>>> line 36, in handle
>>>
>>>     raise CommandError('Alleen hele getallen > 0 toegestaan')
>>>
>>> django.core.management.base.CommandError: Alleen hele getallen > 0 
>>> toegestaan
>>>
>>>
>>> ======================================================================
>>>
>>> ERROR: test_command_output_success 
>>> (tests.test_sources_app_command_populate.PopulateSourceTests.test_command_output_success)
>>>
>>> Test for success: in_use = False.
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Traceback (most recent call last):
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 89, in _execute
>>>
>>>     return self.cursor.execute(sql, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py",
>>>  
>>> line 328, in execute
>>>
>>>     return super().execute(query, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> sqlite3.IntegrityError: NOT NULL constraint failed: 
>>> domain_sources_app_characternumber.number_of_combinations
>>>
>>>
>>> The above exception was the direct cause of the following exception:
>>>
>>>
>>> Traceback (most recent call last):
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/tests/test_sources_app_command_populate.py",
>>>  
>>> line 48, in test_command_output_success
>>>
>>>     thingy.save()
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 814, in save
>>>
>>>     self.save_base(
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 877, in save_base
>>>
>>>     updated = self._save_table(
>>>
>>>               ^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 1020, in _save_table
>>>
>>>     results = self._do_insert(
>>>
>>>               ^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/base.py",
>>>  
>>> line 1061, in _do_insert
>>>
>>>     return manager._insert(
>>>
>>>            ^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/manager.py",
>>>  
>>> line 87, in manager_method
>>>
>>>     return getattr(self.get_queryset(), name)(*args, **kwargs)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/query.py",
>>>  
>>> line 1805, in _insert
>>>
>>>     return query.get_compiler(using=using).execute_sql(returning_fields)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/models/sql/compiler.py",
>>>  
>>> line 1820, in execute_sql
>>>
>>>     cursor.execute(sql, params)
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 67, in execute
>>>
>>>     return self._execute_with_wrappers(
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 80, in _execute_with_wrappers
>>>
>>>     return executor(sql, params, many, context)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 84, in _execute
>>>
>>>     with self.db.wrap_database_errors:
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/utils.py",
>>>  
>>> line 91, in __exit__
>>>
>>>     raise dj_exc_value.with_traceback(traceback) from exc_value
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/utils.py",
>>>  
>>> line 89, in _execute
>>>
>>>     return self.cursor.execute(sql, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>>   File 
>>> "/Users/werker/Projects/domain_reader/.venv/lib/python3.11/site-packages/django/db/backends/sqlite3/base.py",
>>>  
>>> line 328, in execute
>>>
>>>     return super().execute(query, params)
>>>
>>>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>
>>> django.db.utils.IntegrityError: NOT NULL constraint failed: 
>>> domain_sources_app_characternumber.number_of_combinations
>>>
>>>
>>> ----------------------------------------------------------------------
>>>
>>> Ran 3 tests in 0.008s
>>>
>>>
>>> FAILED (errors=3)
>>>
>>> Destroying test database for alias 'default'...
>>>
>>> Code for test:
>>> from io import StringIO
>>>
>>> from django.core.management import call_command
>>> from django.test import TestCase
>>>
>>> from domain_sources_app.models import CharacterNumber
>>>
>>>
>>> class PopulateSourceTests(TestCase):
>>> """Testcases for Django-admin command populate_source."""
>>> def test_command_output_small(self):
>>> """Test for failure with value '0'."""
>>> out = StringIO()
>>> call_command("populate_source", 0, stdout=out)
>>> self.assertIn("Alleen hele getallen > 0 toegestaan", out.getvalue())
>>>
>>> def test_command_output_been_there(self):
>>> """Test for failure: in_use = True."""
>>>
>>> thingy = CharacterNumber(
>>> number_of_characters=1,
>>> in_use=True,
>>> )
>>> thingy.save()
>>>
>>> out = StringIO()
>>> call_command(
>>> "populate_source",
>>> 1,
>>> stdout=out,
>>> )
>>> self.assertIn("Teksten voor nummer 1 zijn al \
>>> eerder gegenereerd", out.getvalue())
>>>
>>> def test_command_output_success(self):
>>> """Test for success: in_use = False."""
>>>
>>> thingy = CharacterNumber(
>>> number_of_characters=1,
>>> in_use=False,
>>> )
>>> thingy.save()
>>>
>>> out = StringIO()
>>> call_command(
>>> "populate_source",
>>> 1,
>>> stdout=out,
>>> )
>>> self.assertIn("Teksten gegenereerd voor nummer 1", out.getvalue())
>>>
>>>
>>>
>>> Code for the command:
>>> from django.core.management.base import BaseCommand
>>> from django.core.management.base import CommandError
>>>
>>> from domain_sources_app.models import CharacterNumber
>>> from domain_sources_app.generate_domain_strings import 
>>> generate_domain_strings
>>>
>>>
>>> class Command(BaseCommand):
>>> """Populate Result with inital strings of
>>> a certain length.
>>>
>>> Args:
>>> BaseCommand (_type_): _description_
>>>
>>> Raises:
>>> CommandError: _description_
>>> """
>>> help = "Genereert de te onderzoeken combinaties bij de opgegeven lengte"
>>>
>>> def add_arguments(self, parser):
>>> parser.add_argument("character_number_ids", nargs="+", type=int)
>>>
>>> def handle(self, *args, **options):
>>> for character_number_id in options["character_number_ids"]:
>>> if character_number_id < 1:
>>> raise CommandError('Alleen hele getallen > 0 toegestaan')
>>> else:
>>> try:
>>> thingy = CharacterNumber.objects.get(
>>> pk=character_number_id
>>> )
>>> except CharacterNumber.DoesNotExist:
>>> raise CommandError(
>>> f'Opgegeven sleutel {character_number_id} \
>>> niet gevonden')
>>>
>>> if not thingy.in_use:
>>> # generate for this number:
>>> generate_domain_strings(character_number_id)
>>> # register use of CharacterNumber
>>> thingy.in_use = True
>>> thingy.save()
>>>
>>> self.stdout.write(
>>> self.style.SUCCESS(
>>> f'Teksten zijn gegenereerd voor \
>>> tekstlengte {character_number_id}'
>>> )
>>> )
>>> else:
>>> raise CommandError(
>>> f'Teksten voor nummer {character_number_id} zijn al \
>>> eerder gegenereerd'
>>> )
>>>
>>>
>>>
>>>
>>> Thanks,
>>> Bob
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "Django users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/django-users/1d0ce155-35e7-4049-88d4-80124c83dedcn%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/django-users/1d0ce155-35e7-4049-88d4-80124c83dedcn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/723ee45e-6b7f-4434-b2d8-64ecb3170ff2n%40googlegroups.com.

Reply via email to