Tests en la aplicación tutorial Django
Requisitos de la aplicación
En nuestro programa de encuestas que desarrollamos en el tutorial django, se tienen que tener en cuanta los siguiente elementos:
- Cada pregunta se identifica con un identificador.
- Al crear una pregunta de una encuesta se debe indicar la fecha de publicación.
- Se considera que una pregunta está recientemente publicada, si su fecha de publicación es menos de un día.
- Podemos ver en el modelo de datos (
models.py
) que la claseQuestion
tiene una función booleana (was_published_recently
) que devuelveTrue
si la pregunta ha sido publicada en el último día.
¿Cómo debe funcionar el programa?
-
Si intentamos ver el detalle de una pregunta con fecha de publicación futura nos debe devolver un 404.
- ¿Donde se consigue esto?: En la función
get_queryset
de laClass DetailView
en el ficheroviews.py
, la consulta que se hace es:Question.objects.filter(pub_date__lte=timezone.now())
Al no seleccionar ninguna pregunta nos da un 404. - ¿Dónde se prueba esto?: En la función
test_future_question
de laclass QuestionDetailViewTests
en el ficherotests.py
.
- ¿Donde se consigue esto?: En la función
-
Al ver el detalle de una pregunta publicada con un fecha pasada se debe mostrar el texto de la pregunta.
- ¿Donde se consigue esto?: En el template
detail.html
en la primera línea:<h1>\{\{ question.question_text \}\}</h1>
- ¿Dónde se prueba esto?: En la función
test_past_question
de laclass QuestionDetailViewTests
en el ficherotests.py
.
- ¿Donde se consigue esto?: En el template
-
Si no hay preguntas en la base de datos, en la página principal aparece el mensaje “No polls are available.”.
- ¿Donde se consigue esto?: En el template
index.html
. - ¿Dónde se prueba esto?: En la función
test_no_questions
de laclass QuestionIndexViewTests
en el ficherotests.py
.
- ¿Donde se consigue esto?: En el template
-
Si hay preguntas con fecha de publicación en el pasado, debe aparecer en la página principal. En la página principal se ven las 5 últimas preguntas publicadas.
- ¿Donde se consigue esto?: En el fichero
views.py
en la funciónget_queryset
de laClass IndexView
, la consulta es:Question.objects.filter(pub_date__lte=timezone.now()).order_by('-pub_date')[:5]
- ¿Dónde se prueba esto?: En la función
test_past_questions
de laclass QuestionIndexViewTests
en el ficherotests.py
.
- ¿Donde se consigue esto?: En el fichero
-
Si tenemos preguntas con fecha de publicación en el futuro, no deben aparecer en la página principal. En la página principal aparece el mensaje “No polls are available.”.
- ¿Donde se consigue esto?: En el mismo código que el requerimiento anterior.
- ¿Dónde se prueba esto?: En la función
test_future_question
de laclass QuestionIndexViewTests
en el ficherotests.py
. - Existen dos pruebas más:
test_future_question_and_past_question
, que prueba cuando hay una pasada con fecha de publicación pasada y otra con fecha de publicación futura.test_two_past_questions
, que prueba cuando tenemos dos preguntas con fechas de publicación pasada.
- Nota: No hay ninguna prueba que compruebe que en la página principal se vean las 5 últimas preguntas publicadas.
- En las preguntas publicadas en una fecha futura, la función
was_published_recently()
debe devolverFalse
. - En las preguntas publicadas hace más de 1 día, la función
was_published_recently()
debe devolverFalse
. -
En las preguntas publicadas hace un 1 día, la función
was_published_recently()
debe devolverTrue
.- ¿Donde se consigue esto?: En la función
was_published_recently
en el modelo de datos, en el ficheromodels.py
- ¿Dónde se prueba esto?: En las siguientes funciones de la
class QuestionModelTests
:test_was_published_recently_with_future_question
test_was_published_recently_with_old_question
test_was_published_recently_with_recent_question
- ¿Donde se consigue esto?: En la función