Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified db.sqlite3
Binary file not shown.
21 changes: 16 additions & 5 deletions noticia/blog/forms.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
from django import forms

from .models import NewsItem
from .models import NewsItem, Event


class PostForm(forms.ModelForm):
class NewsItemForm(forms.ModelForm):
publish_date = forms.DateField(widget=forms.SelectDateWidget())

class Meta:
model = NewsItem
fields = ('title', 'description', 'publish_date')
class Meta:
model = NewsItem
fields = ('title', 'description', 'publish_date')


class EventForm(forms.ModelForm):

start_date = forms.DateField(widget=forms.SelectDateWidget())
end_date = forms.DateField(widget=forms.SelectDateWidget())

class Meta:
model = Event
fields = ('title', 'description', 'start_date', 'end_date')
8 changes: 4 additions & 4 deletions noticia/blog/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from __future__ import unicode_literals
from django.utils import timezone
from django.db import models
import datetime


# Create your models here.

Expand All @@ -23,13 +23,13 @@ def __unicode__(self):


class NewsItem(BaseNews):
publish_date = models.DateTimeField(blank=True, null=True)
publish_date = models.DateTimeField(blank=False, null=False)

def publish(self):
self.published_date = timezone.now()
self.save()


class Event(BaseNews):
start_date = models.DateTimeField(blank=True, null=True)
end_date = models.DateTimeField(blank=True, null=True)
start_date = models.DateTimeField(blank=False, null=False)
end_date = models.DateTimeField(blank=False, null=False)
16 changes: 16 additions & 0 deletions noticia/blog/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from rest_framework import serializers
from .models import NewsItem, Event


class NewsItemSerializer(serializers.ModelSerializer):

class Meta:
model = NewsItem
fields = ('id', 'title', 'description', 'publish_date')


class EventSerializer(serializers.ModelSerializer):

class Meta:
model = Event
fields = ('id', 'title', 'description', 'start_date', 'end_date')
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/event_confirm_delete.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<form method="post">{% csrf_token %}
¿Estás seguro que deseas borrar el "{{ object }}"?
<input type="submit" value="Borrar" />
<a href="{% url 'blog:listnews' %}">Regresar</a>
<a href="{% url 'blog:eventos' %}">Regresar</a>
</form>
</form>
</body>
Expand Down
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/event_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ <h1>{{ event.title }}</h1>
<p>
<a class="btn btn-default" href="{% url 'blog:editevent' event.id %}"><span class="glyphicon glyphicon-pencil">Editar</span></a>
<a class="btn btn-default" href="{% url 'blog:deleteevent' event.id %}"><span class="glyphicon glyphicon-pencil">Borrar</span></a>
<a href="{% url 'blog:listevent' %}">Regresar</a>
<a href="{% url 'blog:eventos' %}">Regresar</a>
</p>
</form>
</body>
Expand Down
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/event_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Publicar" />
<a href="{% url 'blog:listevent' %}">Regresar</a>
<a href="{% url 'blog:eventos' %}">Regresar</a>
</form>
</body>
</html>
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/newsitem_confirm_delete.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<form method="post">{% csrf_token %}
¿Estás seguro que deseas borrar la "{{ object }}"?
<input type="submit" value="Borrar" />
<a href="{% url 'blog:listnews' %}">Regresar</a>
<a href="{% url 'blog:noticias' %}">Regresar</a>
</form>
</form>
</body>
Expand Down
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/newsitem_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ <h1>{{ newsitem.title }}</h1>
<a class="btn btn-default" href="{% url 'blog:v1editnews' newsitem.id %}"><span class="glyphicon glyphicon-pencil">Editar v1</span></a>
<a class="btn btn-default" href="{% url 'blog:deletenews' newsitem.id %}"><span class="glyphicon glyphicon-pencil">Borrar</span></a>
<a class="btn btn-default" href="{% url 'blog:v1deletenews' newsitem.id %}"><span class="glyphicon glyphicon-pencil">Borrar v1</span></a>
<a href="{% url 'blog:listnews' %}">Regresar</a>
<a href="{% url 'blog:noticias' %}">Regresar</a>
</p>

</form>
Expand Down
2 changes: 1 addition & 1 deletion noticia/blog/templates/blog/newsitem_form.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Publicar" />
<a href="{% url 'blog:listnews' %}">Regresar</a>
<a href="{% url 'blog:noticias' %}">Regresar</a>
</form>
</body>
</html>
3 changes: 2 additions & 1 deletion noticia/blog/templates/blog/newsitem_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
</head>
<body>
<div class="page-header">
<a href="{% url 'blog:newnews' %}" class="top-menu"><span class="glyphicon glyphicon-plus">Noticias</span></a>
<a href="{% url 'blog:newnews' %}" class="top-menu"><span class="glyphicon glyphicon-plus">Noticias v2</span></a>
<a href="{% url 'blog:1newnews' %}" class="top-menu"><span class="glyphicon glyphicon-plus">Noticias v1</span></a>
<h1>{{ newsitem.title }}</h1>
<h1>Noticias</h1>
</div>
Expand Down
10 changes: 6 additions & 4 deletions noticia/blog/templates/blog/newsitem_list.html~
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,17 @@
</head>
<body>
<div class="page-header">
<h1><a href="/">Noticias</a></h1>
<a href="{% url 'blog:newnews' %}" class="top-menu"><span class="glyphicon glyphicon-plus">Noticias</span></a>
<h1>{{ newsitem.title }}</h1>
<h1>Noticias</h1>
</div>
<p>hola</p>
{% for post in NewsItem %}
<div>
<h1><a href="">{{ post.title }}</a></h1>
<h1><a href="{% url 'blog:detailnews' post.id %}">{{ post.title }}</a></h1>
<p>{{ post.description}}</p>
<p>Publicación de la noticia: {{ post.publish_date }}</p>
</div>
</div>
{% endfor %}
<a href="{% url 'blog:index' %}">Regresar</a>
</body>
</html>
162 changes: 161 additions & 1 deletion noticia/blog/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,163 @@
from django.test import TestCase
from django.utils import timezone
from django.core.urlresolvers import reverse
from .models import NewsItem, Event
from .views import NewsItemForm, EventForm
from rest_framework.test import APITestCase
from rest_framework import status

# Create your tests here.

def news_example(title):
ahora = timezone.now()
return NewsItem.objects.create(title=title, description="prueba descripcion", publish_date=ahora)


def event_example(title):
ahora = timezone.now()
return Event.objects.create(title=title, description="prueba descripcion", start_date=ahora, end_date=ahora)


class NewsItemEventTest(TestCase):

def test_index(self):
resp = self.client.get(reverse('blog:index'))
self.assertEqual(resp.status_code, 200)

def test_noticia(self):
resp = self.client.get(reverse('blog:noticias'))
self.assertEqual(resp.status_code, 200)

def test_evento(self):
resp = self.client.get(reverse('blog:eventos'))
self.assertEqual(resp.status_code, 200)

def test_both(self):
resp = self.client.get(reverse('blog:todo'))
self.assertEqual(resp.status_code, 200)

def test_class_form(self):
data = {'title': "titulo", 'description': "descripcion", 'publish_date': timezone.now()}
form = NewsItemForm(data=data)
form.save()
self.assertTrue(form.is_valid())
x = NewsItem.objects.get(title="titulo")
self.assertTrue(x)

def test_v2detail(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:detailnews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)

def test_v1detail(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:1detailnews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)

def test_news_create_v1(self):
resp = self.client.get(reverse('blog:1newnews'))
self.assertContains(resp, 'Publicar')

def test_news_create_v2(self):
resp = self.client.get(reverse('blog:newnews'))
self.assertContains(resp, 'Publicar')

def test_news_edit_v1(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:v1editnews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)
resp = self.client.get(reverse('blog:noticias'))
self.assertEqual(resp.status_code, 200)

def test_news_edit_v2(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:editnews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)

def test_news_delete_v1(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:v1deletenews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'borrar')

def test_news_delete_v2(self):
w = news_example("prueba")
resp = self.client.get(reverse('blog:deletenews', kwargs={'pk': w.id}))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'borrar')

def test_eventdetail(self):
z = event_example("prueba")
resp = self.client.get(reverse('blog:detailevent', kwargs={'pk': z.id}))
self.assertEqual(resp.status_code, 200)

def test_eventcreate(self):
resp = self.client.get(reverse('blog:newevent'))
self.assertContains(resp, 'Publicar')

def test_eventedit(self):
z = event_example("prueba")
resp = self.client.get(reverse('blog:editevent', kwargs={'pk': z.id}))
self.assertEqual(resp.status_code, 200)

def test_eventdelete(self):
z = event_example("prueba")
resp = self.client.get(reverse('blog:deleteevent', kwargs={'pk': z.id}))
self.assertEqual(resp.status_code, 200)
self.assertContains(resp, 'borrar')

""" API TEST """


class NewsItemListAPITestCase(APITestCase):

def addNewsItem(self):
form = NewsItemForm(data={'title': "titulo", 'description': "descripcion", 'publish_date': timezone.now()})
form.is_valid()
form.save()
return NewsItem.objects.get(title='titulo')

def test_create(self):
data = {'title': "prueba", 'description': "prueba", 'publish_date': timezone.now()}
response = self.client.post(reverse('blog:apiNewsItem'), data, format="json")
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(NewsItem.objects.get().title, 'prueba')

def test_read(self):
response = self.client.get(reverse('blog:apiNewsItem'))
self.assertEqual(response.status_code, 200)

def test_update_delete(self):
self.addNewsItem()
x = NewsItem.objects.get(title='titulo')
update = {'title': 'clave', 'description': 'clave', 'publish_date': timezone.now()}
response = self.client.patch(reverse('blog:apiDetailNewsItem', kwargs={'pk': x.id}), update, format="json")
self.assertEqual(response.status_code, 200)
self.assertEqual(NewsItem.objects.get().title, 'clave')


class EventAPITestCase(APITestCase):

def addEvent(self):
form = EventForm(data={'title': 'titulo', 'description': 'descripcion', 'start_date': timezone.now(), 'end_date': timezone.now()})
form.is_valid()
form.save()
return Event.objects.get(title="titulo")

def test_create(self):
data = {'title': 'prueba', 'description': 'prueba', 'start_date': timezone.now(), 'end_date': timezone.now()}
response = self.client.post(reverse('blog:apiEvent'), data, format="json")
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(Event.objects.get().title, 'prueba')

def test_read(self):
response = self.client.get(reverse('blog:apiEvent'))
self.assertEqual(response.status_code, 200)

def test_update_delete(self):
self.addEvent()
x = Event.objects.get(title='titulo')
update = {'title': 'prueba', 'description': 'prueba', 'start_date': timezone.now(), 'end_date': timezone.now()}
response = self.client.patch(reverse('blog:apiDetailEvent', kwargs={'pk': x.id}), update, format="json")
self.assertEqual(response.status_code, 200)
self.assertEqual(Event.objects.get().title, 'prueba')

24 changes: 16 additions & 8 deletions noticia/blog/urls.py
Original file line number Diff line number Diff line change
@@ -1,36 +1,44 @@
from django.conf.urls import url
from .views import (
NewsItemList,
# NewsItemList,
NewsItemDetail,
NewsItemCreation,
NewsItemUpdate,
NewsItemDelete,
EventList,
#EventList,
EventDetail,
EventCreation,
EventUpdate,
EventDelete
EventDelete,
)
from . import views
from rest_framework.urlpatterns import format_suffix_patterns
app_name = 'blog'
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^todo/$', views.todo, name='todo'),
url(r'^noticias/$', views.newsitem_list, name='noticias'),
url(r'^noticias/$', NewsItemList.as_view(), name='listnews'),
url(r'^noticias/(?P<pk>[0-9]+)/$', NewsItemDetail.as_view(), name='detailnews'),
# url(r'^noticias/$', NewsItemList.as_view(), name='listnews'),
url(r'^noticias/v2/(?P<pk>[0-9]+)/$', NewsItemDetail.as_view(), name='detailnews'),
url(r'^noticias/v2/nuevo$', NewsItemCreation.as_view(), name='newnews'),
url(r'^noticias/v2/(?P<pk>[0-9]+)/editar/$', NewsItemUpdate.as_view(), name='editnews'),
url(r'^noticias/v2/borrar/(?P<pk>[0-9]+)/$', NewsItemDelete.as_view(), name='deletenews'),
url(r'^eventos/$', views.event_list, name='eventos'),
url(r'^eventos/$', EventList.as_view(), name='listevent'),
#url(r'^eventos/$', EventList.as_view(), name='listevent'),
url(r'^eventos/(?P<pk>[0-9]+)/$', EventDetail.as_view(), name='detailevent'),
url(r'^eventos/nuevo$', EventCreation.as_view(), name='newevent'),
url(r'^eventos/editar/(?P<pk>[0-9]+)/$', EventUpdate.as_view(), name='editevent'),
url(r'^eventos/borrar/(?P<pk>[0-9]+)/$', EventDelete.as_view(), name='deleteevent'),
#noticias v1
url(r'^noticias/$', views.newsitem_list, name='noticias'),
url(r'^noticias/v1/nuevo$', views.newsitem_create, name='1newnews'),
url(r'^noticias/v1/(?P<pk>[0-9]+)/$', NewsItemDetail.as_view(), name='1detailnews'),
url(r'^noticias/v1/(?P<pk>[0-9]+)/editar$', views.newsitem_update, name='v1editnews'),
url(r'^noticias/v1/(?P<pk>[0-9]+)/borrar$', views.newsitem_delete, name='v1deletenews'),
url(r'^noticias/v1/borrar/(?P<pk>[0-9]+)/$', views.newsitem_delete, name='v1deletenews'),
#api newsitem
url(r'^apinews/$', views.NewsItemapi.as_view(), name="apiNewsItem"),
url(r'^apinews/(?P<pk>[0-9]+)/$', views.NewsItemDetailapi.as_view(), name="apiDetailNewsItem"),
#api event
url(r'^apievent/$', views.EventListapi.as_view(), name="apiEvent"),
url(r'^apievent/(?P<pk>[0-9]+)/$', views.EventDetailapi.as_view(), name="apiDetailEvent"),
]
urlpatterns = format_suffix_patterns(urlpatterns)
Loading