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, <
django-users@googlegroups.com> 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 django-users+unsubscr...@googlegroups.com.
> 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 django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CACaE8x6TbAYMm8bgSbhq1XWgKioinPcLmiMq4mcL0Qu4%2BDHudw%40mail.gmail.com.

Reply via email to