From 4841929b30beb2cd94f7eb1fe486e094b0704bef Mon Sep 17 00:00:00 2001
From: florimondmanca <florimond.manca@gmail.com>
Date: Sat, 12 May 2018 15:51:41 +0100
Subject: [PATCH] fix editable article published date, quick improvements

---
 project/showcase_site/factory.py              |  1 -
 .../migrations/0002_auto_20180512_1643.py     | 24 ++++++++++++++
 project/showcase_site/models.py               | 31 ++-----------------
 project/showcase_site/serializers.py          |  5 ---
 .../tests/test_showcase_site/test_article.py  |  6 ----
 .../test_showcase_site/test_article_api.py    |  8 -----
 .../tests/test_showcase_site/test_partner.py  |  3 --
 7 files changed, 27 insertions(+), 51 deletions(-)
 create mode 100644 project/showcase_site/migrations/0002_auto_20180512_1643.py

diff --git a/project/showcase_site/factory.py b/project/showcase_site/factory.py
index 121e6dc..c58be2a 100644
--- a/project/showcase_site/factory.py
+++ b/project/showcase_site/factory.py
@@ -20,7 +20,6 @@ class ArticleFactory(factory.DjangoModelFactory):
     title = factory.Faker('sentence', locale='fr')
     content = factory.Faker('text', max_nb_chars=2000, locale='fr')
     introduction = factory.Faker('text', max_nb_chars=200, locale='fr')
-    published = factory.Faker('date')
     pinned = factory.Iterator((True, False, False, False))
 
 
diff --git a/project/showcase_site/migrations/0002_auto_20180512_1643.py b/project/showcase_site/migrations/0002_auto_20180512_1643.py
new file mode 100644
index 0000000..0f59d5f
--- /dev/null
+++ b/project/showcase_site/migrations/0002_auto_20180512_1643.py
@@ -0,0 +1,24 @@
+# Generated by Django 2.0.5 on 2018-05-12 14:43
+
+from django.db import migrations, models
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('showcase_site', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='article',
+            name='published',
+            field=models.DateTimeField(default=django.utils.timezone.now, verbose_name='publié le'),
+        ),
+        migrations.AlterField(
+            model_name='partner',
+            name='start_date',
+            field=models.DateField(blank=True, help_text='Laisser vide si inconnu. (Cette information est stockée pour historique uniquement.)', null=True, verbose_name='début du partenariat'),
+        ),
+    ]
diff --git a/project/showcase_site/models.py b/project/showcase_site/models.py
index 1db8bdd..2782764 100644
--- a/project/showcase_site/models.py
+++ b/project/showcase_site/models.py
@@ -1,11 +1,9 @@
 """Showcase site models."""
 
-from datetime import timedelta
 from django.db import models
 from django.shortcuts import reverse
 from django.utils.text import slugify
 from django.utils.timezone import now
-from dry_rest_permissions.generics import authenticated_users
 
 from markdownx.models import MarkdownxField
 
@@ -32,24 +30,7 @@ class Category(models.Model):
 
 
 class Article(models.Model):
-    """Represents a piece of news.
-
-    Fields
-    ------
-    title : str
-        Title of the news.
-    slug : str
-        A brief label identifying the article.
-        It is generated from the title on creation.
-        However, it is not used for the article's API URL.
-    content : str
-        Full content of the news.
-    published : date
-        Date the article was published. Today's date by default.
-    image : Image
-        An image to illustrate the article.
-    pinned : bool
-    """
+    """Represents a piece of news."""
 
     title = models.CharField('titre', max_length=300,
                              help_text="Titre de l'article")
@@ -68,7 +49,7 @@ class Article(models.Model):
     content = MarkdownxField(
         'contenu',
         help_text="Contenu complet de l'article (Markdown est supporté).")
-    published = models.DateTimeField('publié le', auto_now_add=True)
+    published = models.DateTimeField('publié le', default=now)
     modified = models.DateTimeField(
         'modifié le', auto_now=True)
     image = models.ImageField('illustration', blank=True, null=True,
@@ -112,12 +93,6 @@ class Article(models.Model):
         """Return the article's absolute url."""
         return reverse('api:article-detail', args=[str(self.slug)])
 
-    @property
-    def was_modified(self):
-        """Return whether the article has been modified at least once."""
-        return self.modified - self.published > timedelta(seconds=1)
-    was_modified.fget.short_description = 'Modifié'
-
     # Permissions
 
     @staticmethod
@@ -265,7 +240,7 @@ class Partner(models.Model):
         )
     )
     start_date = models.DateField(
-        'début du partenariat', default=now, blank=True, null=True,
+        'début du partenariat', blank=True, null=True,
         help_text=(
             "Laisser vide si inconnu. "
             "(Cette information est stockée pour historique uniquement.)"
diff --git a/project/showcase_site/serializers.py b/project/showcase_site/serializers.py
index dbf2e6f..7bfd0ff 100644
--- a/project/showcase_site/serializers.py
+++ b/project/showcase_site/serializers.py
@@ -48,11 +48,6 @@ class ArticleSerializer(serializers.HyperlinkedModelSerializer):
 
     content = MarkdownField()
     categories = CategoryField(many=True, required=False)
-    modified = serializers.SerializerMethodField()
-
-    def get_modified(self, obj: Article):
-        """Only expose modified if article has already been modified."""
-        return obj.was_modified and obj.modified or None
 
     class Meta:  # noqa
         model = Article
diff --git a/project/tests/test_showcase_site/test_article.py b/project/tests/test_showcase_site/test_article.py
index 7be08db..d77151f 100644
--- a/project/tests/test_showcase_site/test_article.py
+++ b/project/tests/test_showcase_site/test_article.py
@@ -84,12 +84,6 @@ class ArticleTest(ModelTestCase):
         ArticleFactory.create(title='first article')
         ArticleFactory.create(title='second article')
 
-    def test_was_modified(self):
-        self.assertFalse(self.obj.was_modified)
-        sleep(1)
-        self.obj.save()
-        self.assertTrue(self.obj.was_modified)
-
 
 class CleanCategoriesTest(TestCase):
     """Test the clean_categories pre_delete signal on Article."""
diff --git a/project/tests/test_showcase_site/test_article_api.py b/project/tests/test_showcase_site/test_article_api.py
index ffcef74..0f45963 100644
--- a/project/tests/test_showcase_site/test_article_api.py
+++ b/project/tests/test_showcase_site/test_article_api.py
@@ -66,11 +66,3 @@ class TestArticleSerializer(SerializerTestCaseMixin, TestCase):
         expected = set(self.serializer.data['categories'])
         actual = set(c.title for c in self.obj.categories.all())
         self.assertEqual(actual, expected)
-
-    def test_modified_only_contained_if_was_modified(self):
-        obj = self.get_object()
-        self.assertIsNone(self.serializer.data['modified'])
-        sleep(1)
-        obj.save()
-        serializer = self.get_serializer(obj)
-        self.assertIsNotNone(serializer.data['modified'])
diff --git a/project/tests/test_showcase_site/test_partner.py b/project/tests/test_showcase_site/test_partner.py
index 1f0cea1..1064401 100644
--- a/project/tests/test_showcase_site/test_partner.py
+++ b/project/tests/test_showcase_site/test_partner.py
@@ -1,7 +1,5 @@
 """Partner model tests."""
 
-from django.utils.timezone import now
-
 from showcase_site.factory import PartnerFactory
 from showcase_site.models import Partner
 from tests.utils import ModelTestCase
@@ -33,7 +31,6 @@ class PartnerTest(ModelTestCase):
         },
         'start_date': {
             'verbose_name': 'début du partenariat',
-            'default': now,
         }
     }
     model_tests = {
-- 
GitLab