Skip to content

Commit 94f4f30

Browse files
committed
Remove update and create post views.
1 parent 04994e0 commit 94f4f30

6 files changed

Lines changed: 3 additions & 194 deletions

File tree

project/newsletter/test_views.py

Lines changed: 2 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
from datetime import timedelta
2-
from io import BytesIO
32
from unittest.mock import patch
43

54
from django.conf import settings
65
from django.contrib.auth.models import User
76
from django.urls import reverse
87
from django.utils import timezone
9-
from PIL import Image
108

119
from project.newsletter.models import Post, Subscription, SubscriptionNotification
1210
from project.newsletter.test import DataTestCase
@@ -208,78 +206,6 @@ def test_pagination(self):
208206
)
209207

210208

211-
class TestUpdatePost(DataTestCase):
212-
def test_staff_user_required(self):
213-
user = User.objects.create_user(username="basic")
214-
self.client.force_login(user)
215-
url = reverse(
216-
"newsletter:update_post", kwargs={"slug": self.data.private_post.slug}
217-
)
218-
response = self.client.post(url)
219-
self.assertRedirects(response, f"{settings.LOGIN_URL}?next={url}")
220-
221-
def test_get(self):
222-
self.client.force_login(self.user)
223-
url = reverse(
224-
"newsletter:update_post", kwargs={"slug": self.data.private_post.slug}
225-
)
226-
response = self.client.get(url)
227-
self.assertTemplateUsed(response, "staff/post_form.html")
228-
229-
def test_invalid(self):
230-
self.client.force_login(self.user)
231-
url = reverse(
232-
"newsletter:update_post", kwargs={"slug": self.data.private_post.slug}
233-
)
234-
response = self.client.post(url, data={})
235-
self.assertTemplateUsed(response, "staff/post_form.html")
236-
self.assertInHTML(
237-
"<li>This field is required.</li>",
238-
response.content.decode("utf-8"),
239-
)
240-
241-
def test_update(self):
242-
post = Post.objects.create(
243-
author=self.data.author,
244-
title="Test Update",
245-
slug="test-update",
246-
content="c",
247-
)
248-
self.client.force_login(self.user)
249-
250-
img = BytesIO()
251-
Image.new("RGB", (1, 1), "#FF0000").save(img, format="PNG")
252-
img.name = "myimage.png"
253-
img.seek(0)
254-
data = {
255-
"title": "Test Update2",
256-
"slug": "test-update2",
257-
"categories": [self.data.career.id],
258-
"content": "content",
259-
"summary": "summary",
260-
"is_public": False,
261-
"is_published": True,
262-
"open_graph_description": "description",
263-
"open_graph_image": img,
264-
}
265-
response = self.client.post(
266-
reverse("newsletter:update_post", kwargs={"slug": post.slug}), data=data
267-
)
268-
self.assertRedirects(
269-
response, reverse("newsletter:update_post", kwargs={"slug": "test-update2"})
270-
)
271-
post.refresh_from_db()
272-
self.assertEqual(post.slug, "test-update2")
273-
self.assertEqual(post.title, "Test Update2")
274-
self.assertEqual(post.categories.get(), self.data.career)
275-
self.assertEqual(post.content, "content")
276-
self.assertEqual(post.summary, "summary")
277-
self.assertEqual(post.open_graph_description, "description")
278-
self.assertFalse(post.is_public)
279-
self.assertTrue(post.is_published)
280-
self.assertIsNotNone(post.open_graph_image.file)
281-
282-
283209
class TestTogglePostPrivacy(DataTestCase):
284210
def test_staff_user_required(self):
285211
user = User.objects.create_user(username="basic")
@@ -314,74 +240,12 @@ def test_toggle(self):
314240
self.assertFalse(post.is_public)
315241

316242
# Toggle the property back and verify the redirect to next.
317-
response = self.client.post(
318-
url
319-
+ f"?next={reverse('newsletter:update_post', kwargs={'slug': post.slug})}"
320-
)
321-
self.assertRedirects(
322-
response, reverse("newsletter:update_post", kwargs={"slug": post.slug})
323-
)
243+
response = self.client.post(url + f"?next={reverse('newsletter:landing')}")
244+
self.assertRedirects(response, reverse("newsletter:landing"))
324245
post.refresh_from_db()
325246
self.assertTrue(post.is_public)
326247

327248

328-
class TestCreatePost(DataTestCase):
329-
def test_staff_user_required(self):
330-
user = User.objects.create_user(username="basic")
331-
self.client.force_login(user)
332-
url = reverse("newsletter:create_post")
333-
response = self.client.post(url)
334-
self.assertRedirects(response, f"{settings.LOGIN_URL}?next={url}")
335-
336-
def test_get(self):
337-
self.client.force_login(self.user)
338-
url = reverse("newsletter:create_post")
339-
response = self.client.get(url)
340-
self.assertTemplateUsed(response, "staff/post_form.html")
341-
342-
def test_invalid(self):
343-
self.client.force_login(self.user)
344-
response = self.client.post(reverse("newsletter:create_post"), data={})
345-
self.assertTemplateUsed(response, "staff/post_form.html")
346-
self.assertInHTML(
347-
"<li>This field is required.</li>",
348-
response.content.decode("utf-8"),
349-
)
350-
351-
def test_create(self):
352-
self.client.force_login(self.user)
353-
354-
img = BytesIO()
355-
Image.new("RGB", (1, 1), "#FF0000").save(img, format="PNG")
356-
img.name = "myimage.png"
357-
img.seek(0)
358-
data = {
359-
"title": "Test Create",
360-
"slug": "test-create",
361-
"categories": [self.data.career.id],
362-
"content": "content",
363-
"summary": "summary",
364-
"is_public": False,
365-
"is_published": True,
366-
"open_graph_description": "description",
367-
"open_graph_image": img,
368-
}
369-
response = self.client.post(reverse("newsletter:create_post"), data=data)
370-
371-
self.assertRedirects(
372-
response, reverse("newsletter:update_post", kwargs={"slug": "test-create"})
373-
)
374-
post = Post.objects.get(slug="test-create")
375-
self.assertEqual(post.title, "Test Create")
376-
self.assertEqual(post.categories.get(), self.data.career)
377-
self.assertEqual(post.content, "content")
378-
self.assertEqual(post.summary, "summary")
379-
self.assertEqual(post.open_graph_description, "description")
380-
self.assertFalse(post.is_public)
381-
self.assertTrue(post.is_published)
382-
self.assertIsNotNone(post.open_graph_image.file)
383-
384-
385249
class TestUpdateSubscription(DataTestCase):
386250
def setUp(self) -> None:
387251
super().setUp()

project/newsletter/urls.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@
99
path("account/", views.update_subscription, name="update_subscription"),
1010
path("analytics/", views.analytics, name="analytics"),
1111
path("post/unpublished/", views.unpublished_posts, name="unpublished_posts"),
12-
path("post/create/", views.create_post, name="create_post"),
13-
path("post/<slug>/update/", views.update_post, name="update_post"),
1412
path(
1513
"post/<slug>/toggle_privacy/",
1614
views.toggle_post_privacy,

project/newsletter/views.py

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from martor.utils import LazyEncoder
2020

2121
from project.newsletter import operations
22-
from project.newsletter.forms import PostForm, SubscriptionForm
22+
from project.newsletter.forms import SubscriptionForm
2323
from project.newsletter.models import Category, Post, Subscription
2424

2525
LIST_POSTS_PAGE_SIZE = 100
@@ -129,41 +129,6 @@ def unpublished_posts(request):
129129
)
130130

131131

132-
@staff_member_required(login_url=settings.LOGIN_URL)
133-
@require_http_methods(["GET", "POST"])
134-
def create_post(request):
135-
"""
136-
Staff create post view
137-
"""
138-
form = PostForm()
139-
if request.method == "POST":
140-
form = PostForm(request.POST, files=request.FILES)
141-
if form.is_valid():
142-
form.instance.author = request.user
143-
post = form.save()
144-
messages.success(request, f"Post '{post.title}' was created successfully.")
145-
return redirect("newsletter:update_post", slug=post.slug)
146-
return render(request, "staff/post_form.html", {"form": form, "post": None})
147-
148-
149-
@staff_member_required(login_url=settings.LOGIN_URL)
150-
@require_http_methods(["GET", "POST"])
151-
def update_post(request, slug):
152-
"""
153-
Staff update post view
154-
"""
155-
post = get_object_or_404(Post, slug=slug)
156-
form = PostForm(instance=post)
157-
if request.method == "POST":
158-
form = PostForm(request.POST, instance=post, files=request.FILES)
159-
if form.is_valid():
160-
form.instance.author = request.user
161-
post = form.save()
162-
messages.success(request, f"Post '{post.title}' was updated successfully.")
163-
return redirect("newsletter:update_post", slug=post.slug)
164-
return render(request, "staff/post_form.html", {"form": form, "post": post})
165-
166-
167132
@staff_member_required(login_url=settings.LOGIN_URL)
168133
@require_http_methods(["POST"])
169134
def toggle_post_privacy(request, slug):

project/templates/base.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
<div class="menu transition hidden" tabindex="-1">
2626
<a href="{% url "newsletter:list_posts" %}" class="item">Published</a>
2727
<a href="{% url "newsletter:unpublished_posts" %}" class="item">Unpublished</a>
28-
<div class="divider"></div>
29-
<a href="{% url "newsletter:create_post" %}" class="item">Create</a>
3028
</div>
3129
</div>
3230
{% endif %}

project/templates/posts/detail.html

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,7 @@
2727
{% else %}
2828
{{ post.title }}
2929
{% endif %}
30-
3130
</div>
32-
{% if request.user.is_staff %}
33-
<div class="divider"> / </div>
34-
<a href="{% url "newsletter:update_post" slug=post.slug %}" class="section">Edit</a>
35-
{% endif %}
3631
</div>
3732
<p>
3833
Posted {{ post.publish_date|naturaltime }}

project/templates/posts/includes/list_item.html

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,4 @@ <h3 class="ui header">{{ post.title }}</h3>
2222
<div class="left floated six wide column">
2323
<a href="{{ post.get_absolute_url }}" class="ui large button">Read More</a>
2424
</div>
25-
{% if request.user.is_staff %}
26-
<div class="right floated six wide column">
27-
<form action="{% url "newsletter:toggle_post_privacy" slug=post.slug %}?next={{ request.path }}" method="post">
28-
{% csrf_token %}
29-
<div class="ui buttons">
30-
<a href="{% url "newsletter:update_post" slug=post.slug %}" class="ui basic compact button">Edit</a>
31-
<button class="ui basic compact button" type="submit">Set to {% if post.is_public %}private{% else %}public{% endif %}</button>
32-
</div>
33-
</form>
34-
</div>
35-
{% endif %}
3625
</div>

0 commit comments

Comments
 (0)