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
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
venv
__pycache__
db.sqlite3
db.sqlite3
.vs/
50 changes: 50 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@

Se crean nuevas tareas en una base de datos a parte y se eliminan una vez termine de ejecutarse el test

# Creacion de pruebas unitarias para el uso de fechas en la creacion de una nueva tarea:
## Pruebas Unitarias


![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/622dcff3-cedb-4c86-9dd3-078dd832a123)

![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/d08eae43-4e1a-44c1-ab05-5800f4ea56b7)

![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/af55bd76-1ee2-43de-9f6f-fc91ef28e29a)


Verifica que la fecha de creación de una tarea sea una fecha valida


![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/06901a4f-65e3-480f-8fb3-3338e8f42e9f)


## Lenguaje ubicuo:

![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/bf5db47e-a12f-40ce-901e-02cd2b7fa9c4)

**Modelo (Task):** Se utiliza el término "Task" para referirse al modelo.el término "Task" representa la entidad que está siendo modelada en la base de datos.

**ModelForm:** El nombre TaskForm comunica que este formulario está específicamente diseñado para el modelo Task. Utilizar "Form" al final del nombre es una convención común para los formularios basados en modelos en Django.

**Meta:** En Django, la clase Meta se utiliza para proporcionar metainformación sobre el formulario, como el modelo al que está vinculado y los campos que deben incluirse.

**fields = ['title', 'description', 'important', 'fecha_limite']:** Al especificar los campos que deben incluirse en el formulario, se sigue utilizando el lenguaje del modelo. En este caso, los campos son 'title', 'description', 'important', y 'fecha_limite', que son los mismos campos definidos en el modelo Task.

![image](https://github.com/SergioMenaQuispe/django-notes-ISII/assets/104391441/e01775f5-1cd6-45fc-808a-446e63bfd7b6)


**title:** Un campo de caracteres que almacena el título de la tarea con una longitud máxima de 200 caracteres.

**description:** Un campo de texto más largo que almacena la descripción de la tarea con una longitud máxima de 1000 caracteres.

**created:** Un campo de fecha y hora que se establece automáticamente en la fecha y hora actual cuando se crea la tarea.

**datecompleted:** Un campo de fecha y hora que puede ser nulo y en blanco. Almacena la fecha y hora en que se completó la tarea.

**important:** Un campo booleano que indica si la tarea es importante o no. El valor predeterminado es False.

**user:** Una clave externa que se relaciona con el modelo de usuario (User). Utiliza on_delete=models.CASCADE, lo que significa que si un usuario se elimina, también se eliminarán todas sus tareas asociadas.

**fecha_limite:** Un campo de fecha que puede ser nulo y en blanco. Almacena la fecha límite para la tarea.

**def __str__(self)::** Un método que devuelve una representación de cadena del objeto. En este caso, devuelve una cadena que combina el título de la tarea y el nombre de usuario del propietario.
2 changes: 1 addition & 1 deletion tasks/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@
class TaskForm(ModelForm):
class Meta:
model = Task
fields = ['title', 'description', 'important']
fields = ['title', 'description', 'important','fecha_limite',]
18 changes: 18 additions & 0 deletions tasks/migrations/0003_task_due_date.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1 on 2023-12-18 14:11

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('tasks', '0002_rename_datedcompleted_task_datecompleted'),
]

operations = [
migrations.AddField(
model_name='task',
name='due_date',
field=models.DateField(blank=True, null=True),
),
]
18 changes: 18 additions & 0 deletions tasks/migrations/0004_rename_due_date_task_fecha_limite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Generated by Django 4.1 on 2023-12-18 14:23

from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
('tasks', '0003_task_due_date'),
]

operations = [
migrations.RenameField(
model_name='task',
old_name='due_date',
new_name='fecha_limite',
),
]
19 changes: 9 additions & 10 deletions tasks/models.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
from django.db import models
from django.contrib.auth.models import User

# Create your models here.

class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(max_length=1000)
created = models.DateTimeField(auto_now_add=True)
datecompleted = models.DateTimeField(null=True, blank=True)
important = models.BooleanField(default=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
description = models.TextField(max_length=1000)
created = models.DateTimeField(auto_now_add=True)
datecompleted = models.DateTimeField(null=True, blank=True)
important = models.BooleanField(default=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
fecha_limite = models.DateField(null=True, blank=True)

def __str__(self):
return self.title + ' - ' + self.user.username
def _str_(self):
return self.title + ' - ' + self.user.username
21 changes: 15 additions & 6 deletions tasks/templates/create_task.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,22 @@

{% block content %}

<h1>CReate task</h1>
<h1>Create task</h1>

{{error}}
{{ error }}
<form action="/create_task/" method="POST">
{% csrf_token %}
{{form}}
{% csrf_token %}

<button>Save</button>
{{ form.title.label_tag }} {{ form.title }}
<br>
{{ form.description.label_tag }} {{ form.description }}
<br>
{{ form.fecha_limite.label_tag }} {{ form.fecha_limite }}
<br>
{{ form.important.label_tag }} {{ form.important }}
<br>

<button>Save</button>
</form>
{% endblock %}
{% endblock %}

48 changes: 48 additions & 0 deletions tasks/testDiegoApaza.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# tests.py
from django.test import TestCase
from django.contrib.auth.models import User
from .models import Task
from .forms import TaskForm

class TaskFormTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='testpassword')

def test_valid_form(self):
data = {
'title': 'Test Task',
'description': 'This is a test task',
'fecha_limite': '2023-12-31',
'important': True,
}

form = TaskForm(data=data)
self.assertTrue(form.is_valid())

def test_invalid_form(self):

data = {
'title': 'Test Task',
'description': 'This is a test task',
'fecha_limite': '54164651',
'important': True,
}

form = TaskForm(data=data)
self.assertFalse(form.is_valid())
self.assertIn('fecha_limite', form.errors) # Verifica que haya errores en el campo de fecha

def test_blank_fields(self):
# Prueba que el formulario sea inv�lido si algunos campos requeridos est�n en blanco
data = {
'title': '',
'description': '',
'fecha_limite': '',
'important': False,
}

form = TaskForm(data=data)
self.assertFalse(form.is_valid())
self.assertIn('title', form.errors)
self.assertIn('description', form.errors)

47 changes: 46 additions & 1 deletion tasks/tests.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,48 @@
# tests.py
from django.test import TestCase
from django.contrib.auth.models import User
from .models import Task
from .forms import TaskForm

# Create your tests here.
class TaskFormTest(TestCase):
def setUp(self):
self.user = User.objects.create_user(username='testuser', password='testpassword')

def test_valid_form(self):
data = {
'title': 'Test Task',
'description': 'This is a test task',
'fecha_limite': '2023-12-31',
'important': True,
}

form = TaskForm(data=data)
self.assertTrue(form.is_valid())

def test_invalid_form(self):

data = {
'title': 'Test Task',
'description': 'This is a test task',
'fecha_limite': '54164651',
'important': True,
}

form = TaskForm(data=data)
self.assertFalse(form.is_valid())
self.assertIn('fecha_limite', form.errors) # Verifica que haya errores en el campo de fecha

def test_blank_fields(self):
# Prueba que el formulario sea inv�lido si algunos campos requeridos est�n en blanco
data = {
'title': '',
'description': '',
'fecha_limite': '',
'important': False,
}

form = TaskForm(data=data)
self.assertFalse(form.is_valid())
self.assertIn('title', form.errors)
self.assertIn('description', form.errors)