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.

