mirror of
https://github.com/boostorg/website-v2.git
synced 2026-01-19 04:42:17 +00:00
Adjust active/inactive Versions
This commit is contained in:
16
conftest.py
16
conftest.py
@@ -1,6 +1,22 @@
|
||||
import pytest
|
||||
import tempfile
|
||||
from PIL import Image
|
||||
|
||||
from django.core.files import File as DjangoFile
|
||||
|
||||
pytest_plugins = [
|
||||
"users.tests.fixtures",
|
||||
"versions.tests.fixtures",
|
||||
]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def temp_image_file():
|
||||
image = Image.new("RGB", (100, 100))
|
||||
|
||||
tmp_file = tempfile.NamedTemporaryFile(suffix=".jpg")
|
||||
image.save(tmp_file)
|
||||
|
||||
tmp_file.seek(0)
|
||||
file_obj = DjangoFile(open(tmp_file.name, mode="rb"), name="tmp_file")
|
||||
yield file_obj.seek(0)
|
||||
|
||||
@@ -14,3 +14,18 @@ class VersionManager(models.Manager):
|
||||
def active(self):
|
||||
"""Return active versions"""
|
||||
return self.get_queryset().active()
|
||||
|
||||
|
||||
class VersionFileQuerySet(models.QuerySet):
|
||||
def active(self):
|
||||
"""Return files for active versions"""
|
||||
return self.filter(version__active=True)
|
||||
|
||||
|
||||
class VersionFileManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
return VersionFileQuerySet(self.model, using=self._db)
|
||||
|
||||
def active(self):
|
||||
"""Return files active versions"""
|
||||
return self.get_queryset().active()
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import hashlib
|
||||
from django.db import models
|
||||
|
||||
from .managers import VersionManager
|
||||
from .managers import VersionManager, VersionFileManager
|
||||
|
||||
|
||||
class Version(models.Model):
|
||||
@@ -36,10 +36,18 @@ class VersionFile(models.Model):
|
||||
checksum = models.CharField(max_length=64, unique=True, default=None)
|
||||
file = models.FileField(upload_to="uploads/")
|
||||
|
||||
objects = VersionFileManager()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.file is not None:
|
||||
if self.checksum is None:
|
||||
self.checksum = hashlib.sha256(
|
||||
self.file.file.encode("utf-8")
|
||||
).hexdigest()
|
||||
super().save(*args, **kwargs)
|
||||
# Calculate sha256 hash
|
||||
if self.file is not None and self.checksum is None:
|
||||
h = hashlib.sha256()
|
||||
with self.file.open("rb") as f:
|
||||
data = f.read()
|
||||
while data:
|
||||
h.update(data)
|
||||
data = f.read()
|
||||
|
||||
self.checksum = h.hexdigest()
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
@@ -26,4 +26,4 @@ class VersionSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Version
|
||||
fields = ["id", "name", "release_date", "description", "files"]
|
||||
fields = ["id", "name", "release_date", "description", "active", "files"]
|
||||
|
||||
@@ -1,14 +1,50 @@
|
||||
import pytest
|
||||
import datetime
|
||||
import hashlib
|
||||
import pytest
|
||||
import random
|
||||
|
||||
from model_bakery import baker
|
||||
from django.core.files.base import ContentFile
|
||||
|
||||
|
||||
def fake_checksum():
|
||||
return hashlib.sha256(random.randbytes(200)).hexdigest()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def version(db):
|
||||
# Make version
|
||||
yesterday = datetime.date.today() - datetime.timedelta(days=1)
|
||||
return baker.make(
|
||||
v = baker.make(
|
||||
"versions.Version",
|
||||
name="Version 1.79.0",
|
||||
description="Some awesome description of the library",
|
||||
release_date=yesterday,
|
||||
)
|
||||
|
||||
# Make verison file
|
||||
c = fake_checksum()
|
||||
f1 = ContentFile("Version 1 Fake Content")
|
||||
vf = baker.make("versions.VersionFile", version=v, checksum=c, file=f1)
|
||||
|
||||
return v
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def inactive_version(db):
|
||||
# Make version
|
||||
yesterday = datetime.date.today() - datetime.timedelta(days=1)
|
||||
v = baker.make(
|
||||
"versions.Version",
|
||||
name="Version 1.0.0",
|
||||
description="Some old description of the library",
|
||||
release_date=yesterday,
|
||||
active=False,
|
||||
)
|
||||
|
||||
# Make verison file
|
||||
c = fake_checksum()
|
||||
f1 = ContentFile("Old Version Fake Content")
|
||||
vf = baker.make("versions.VersionFile", version=v, checksum=c, file=f1)
|
||||
|
||||
return v
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import pytest
|
||||
|
||||
from model_bakery import baker
|
||||
|
||||
from versions.models import Version
|
||||
from versions.models import Version, VersionFile
|
||||
|
||||
|
||||
def test_active_manager(version):
|
||||
@@ -8,3 +10,9 @@ def test_active_manager(version):
|
||||
v3 = baker.make("versions.Version", active=False)
|
||||
|
||||
assert Version.objects.active().count() == 1
|
||||
|
||||
|
||||
def test_active_file_manager(version, inactive_version):
|
||||
|
||||
assert Version.objects.active().count() == 1
|
||||
assert VersionFile.objects.active().count() == 1
|
||||
|
||||
Reference in New Issue
Block a user