Merge pull request #117 from revsys/add-version-slug

Add `slug` to `Version` model and related refactoring
This commit is contained in:
Lacey Williams Henschel
2023-02-13 10:27:27 -08:00
committed by GitHub
9 changed files with 55 additions and 8 deletions

View File

@@ -133,8 +133,8 @@ urlpatterns = [
name="getting-started",
),
path("contact/", ContactView.as_view(), name="contact"),
path("versions/<slug:slug>/", VersionDetail.as_view(), name="version-detail"),
path("versions/", VersionList.as_view(), name="version-list"),
path("versions/<int:pk>/", VersionDetail.as_view(), name="version-detail"),
# Markdown content
re_path(
r"^(?P<content_path>.+)/?",

View File

@@ -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
)

View File

@@ -10,7 +10,7 @@
<a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-orange text-base font-medium rounded-md text-orange md:py-4 md:text-lg md:px-10"> Download </a>
</div>
<div class="mt-3 rounded-md shadow sm:mt-0 sm:ml-3">
<a href="{% url 'version-detail' v.pk %}" class="w-full flex items-center justify-center px-8 py-3 border border-steel text-base font-medium rounded-md text-orange md:py-4 md:text-lg md:px-10"> Version Details > </a>
<a href="{% url 'version-detail' v.slug %}" class="w-full flex items-center justify-center px-8 py-3 border border-steel text-base font-medium rounded-md text-orange md:py-4 md:text-lg md:px-10"> Version Details > </a>
</div>
</div>
</div>

View File

@@ -25,7 +25,7 @@
<a href="#" class="w-full flex items-center justify-center px-8 py-3 border border-orange text-base font-medium rounded-md text-orange md:py-4 md:text-lg md:px-10"> Download </a>
</div>
<div class="mt-3 rounded-md shadow sm:mt-0 sm:ml-3">
<a href="{% url 'version-detail' current_version.pk %}" class="w-full flex items-center justify-center px-8 py-3 border border-steel text-base font-medium rounded-md text-orange hover:bg-gray-50 md:py-4 md:text-lg md:px-10"> Version Details > </a>
<a href="{% url 'version-detail' current_version.slug %}" class="w-full flex items-center justify-center px-8 py-3 border border-steel text-base font-medium rounded-md text-orange hover:bg-gray-50 md:py-4 md:text-lg md:px-10"> Version Details > </a>
</div>
</div>
</div>

View File

@@ -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),
),
]

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -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)