Skip to main content

Smoke tests library for Django Admin

Project description

Django-admin-smoke

Django-Admin-Smoke is a Django app providing smoke tests for django-admin.

build codecov PyPI version

Installation

pip install django-admin-smoke

Usage

Full example located at testproject.testapp.tests

from admin_smoke.tests import AdminTests, AdminBaseTestCase
from testproject.testapp import admin, models


class ProjectAdminTestCase(AdminTests, AdminBaseTestCase):
    model_admin = admin.ProjectAdmin  # ModelAdmin to test
    model = models.Project  # Django model to test against
    object_name = 'project'  # self.project is an edited object in this testcase
    excluded_fields = ['client']  #  fields excluded from presence check

    def setUp(self):
        super().setUp()
        # We need existing object to test editing and deleting
        self.project = models.Project.objects.create(name='first')
        # All inlines for tested model admin should be non-empty, so we fill
        # all related models.
        self.task = models.Task.objects.create(name='first',
                                               project=self.project)

    def transform_to_new(self, data: dict) -> dict:
        # Creating a new object is tested with following algorithm:
        # 1. Open "edit" page for existing object
        # 2. Clear PK value in form data
        # 3. Clear PK values for all related objects in admin inlines
        # 4. Clear FK values pointing to existing object in admin inlines
        # 5. POST resulting data to "add" page
        # This algorithm need some help with unique fields and other constraints
        # and restrictions, so there is a hook for making newly created object
        # valid.

        data = data.copy()
        # Project.name is unique, making new value
        data['name'] += 'new'
        # Manually reset PK/FK values in admin inlines
        self.reset_inline_data(
            data,        # form data
            'task_set',  # name of inline prefix - it's FK's related_name 
            'project'    # name of edited object FK field (FK.name)
        )
        # Task.name is also unique, it should be changed properly
        data['task_set-0-name'] += '_new'
        return data

    def prepare_deletion(self):
        # To delete an object with FK's with models.PROTECT behavior we need
        # a hook to delete it manually before POST delete confirmation.
        self.task.delete()

Happy testing and non-smoky admins :)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_admin_smoke-0.6.0.tar.gz (8.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_admin_smoke-0.6.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

File details

Details for the file django_admin_smoke-0.6.0.tar.gz.

File metadata

  • Download URL: django_admin_smoke-0.6.0.tar.gz
  • Upload date:
  • Size: 8.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for django_admin_smoke-0.6.0.tar.gz
Algorithm Hash digest
SHA256 acc0e19bbfde0c0b0a4f70591a0f87afb15d02177523c1a15cdd321da057f107
MD5 a20228c2db775e24685ba015e0f70273
BLAKE2b-256 a1a1066c5d2b03a795be4a9c5806754d159298634fae416fc35626fae2964dba

See more details on using hashes here.

File details

Details for the file django_admin_smoke-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_admin_smoke-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3e1383f42a0855487e119b788cd4624b9f39fd2bca80c2f4d194aad389bc4b1a
MD5 b5de080805e9e7676074ecf1bb6a97a6
BLAKE2b-256 702f532795b50932ad144c08a655ca90973bc5966abc8074b1ad78ad98befddf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page