From 2c19f289f20720c12c1975970c26fb8251410a0d Mon Sep 17 00:00:00 2001 From: Lacey Williams Henschel Date: Wed, 8 Feb 2023 13:57:03 -0800 Subject: [PATCH] :bank: Add Version.slug --- libraries/tests/test_models.py | 2 +- versions/migrations/0006_version_slug.py | 18 ++++++++++++++++++ versions/models.py | 13 +++++++++++++ versions/tests/test_managers.py | 4 ++-- versions/tests/test_models.py | 16 ++++++++++++++++ 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 versions/migrations/0006_version_slug.py diff --git a/libraries/tests/test_models.py b/libraries/tests/test_models.py index 643e3690..b554921b 100644 --- a/libraries/tests/test_models.py +++ b/libraries/tests/test_models.py @@ -45,7 +45,7 @@ def test_library_version_multiple_versions(library, library_version): assert library.versions.filter( library_version__version=library_version.version ).exists() - other_version = baker.make("versions.Version") + other_version = baker.make("versions.Version", name="New Version") new_library_version = baker.make( "libraries.LibraryVersion", library=library, version=other_version ) diff --git a/versions/migrations/0006_version_slug.py b/versions/migrations/0006_version_slug.py new file mode 100644 index 00000000..d59985a7 --- /dev/null +++ b/versions/migrations/0006_version_slug.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.2 on 2023-02-08 21:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("versions", "0005_version_active"), + ] + + operations = [ + migrations.AddField( + model_name="version", + name="slug", + field=models.SlugField(blank=True, null=True), + ), + ] diff --git a/versions/models.py b/versions/models.py index e2da5b8c..7e37a177 100755 --- a/versions/models.py +++ b/versions/models.py @@ -1,5 +1,6 @@ import hashlib from django.db import models +from django.utils.text import slugify from .managers import VersionManager, VersionFileManager @@ -8,6 +9,7 @@ class Version(models.Model): name = models.CharField( max_length=256, null=False, blank=False, help_text="Version name" ) + slug = models.SlugField(blank=True, null=True) release_date = models.DateField(auto_now=False, auto_now_add=False) description = models.TextField(blank=True) active = models.BooleanField( @@ -20,6 +22,17 @@ class Version(models.Model): def __str__(self): return self.name + def save(self, *args, **kwargs): + if not self.slug: + self.slug = self.get_slug() + return super(Version, self).save(*args, **kwargs) + + def get_slug(self): + if self.slug: + return self.slug + name = self.name.replace(".", " ") + return slugify(name)[:50] + class VersionFile(models.Model): Unix = "Unix" diff --git a/versions/tests/test_managers.py b/versions/tests/test_managers.py index 5d31f89b..6dd838ca 100644 --- a/versions/tests/test_managers.py +++ b/versions/tests/test_managers.py @@ -6,8 +6,8 @@ from versions.models import Version, VersionFile def test_active_manager(version): - v2 = baker.make("versions.Version", active=False) - v3 = baker.make("versions.Version", active=False) + v2 = baker.make("versions.Version", name="Sample 1", active=False) + v3 = baker.make("versions.Version", name="Sample 2", active=False) assert Version.objects.active().count() == 1 diff --git a/versions/tests/test_models.py b/versions/tests/test_models.py index a71815ca..acfc7070 100644 --- a/versions/tests/test_models.py +++ b/versions/tests/test_models.py @@ -1,10 +1,26 @@ import datetime +from model_bakery import baker + def test_version_creation(version): today = datetime.date.today() assert version.release_date < today +def test_version_slug(version): + version.name = "New Name" + version.slug = None + version.save() + version.refresh_from_db() + assert version.slug is not None + assert version.slug == "new-name" + + +def test_version_get_slug(db): + version = baker.prepare("versions.Version", name="Sample Library") + assert version.get_slug() == "sample-library" + + def test_version_file_creation(full_version_one): assert full_version_one.files.count() == 3