mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-27 17:42:08 +00:00
Merge pull request #117 from revsys/add-version-slug
Add `slug` to `Version` model and related refactoring
This commit is contained in:
@@ -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>.+)/?",
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
18
versions/migrations/0006_version_slug.py
Normal file
18
versions/migrations/0006_version_slug.py
Normal 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),
|
||||
),
|
||||
]
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user