diff --git a/config/urls.py b/config/urls.py index 6c784700..4f77c21c 100755 --- a/config/urls.py +++ b/config/urls.py @@ -133,8 +133,8 @@ urlpatterns = [ name="getting-started", ), path("contact/", ContactView.as_view(), name="contact"), + path("versions//", VersionDetail.as_view(), name="version-detail"), path("versions/", VersionList.as_view(), name="version-list"), - path("versions//", VersionDetail.as_view(), name="version-detail"), # Markdown content re_path( r"^(?P.+)/?", 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/templates/versions/_past_version_list_item.html b/templates/versions/_past_version_list_item.html index a03cac56..4aae2957 100644 --- a/templates/versions/_past_version_list_item.html +++ b/templates/versions/_past_version_list_item.html @@ -10,7 +10,7 @@ Download diff --git a/templates/versions/list.html b/templates/versions/list.html index 1dfe5cd9..022fe303 100644 --- a/templates/versions/list.html +++ b/templates/versions/list.html @@ -25,7 +25,7 @@ Download 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 37d12fa6..0a8dad1b 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 diff --git a/versions/tests/test_views.py b/versions/tests/test_views.py index 18c9c345..8135478d 100644 --- a/versions/tests/test_views.py +++ b/versions/tests/test_views.py @@ -35,7 +35,7 @@ def test_version_list_context(version, old_version, inactive_version, tp): def test_version_detail(version, tp): """ - GET /versions/{pk}/ + GET /versions/{slug}/ """ - res = tp.get("version-detail", pk=version.pk) + res = tp.get("version-detail", slug=version.slug) tp.response_200(res)