From d0a2dfeddcf01517774ddad7155a6e22052600d4 Mon Sep 17 00:00:00 2001 From: Andros Fenollosa Date: Fri, 9 Jul 2021 19:09:31 +0200 Subject: [PATCH] Add model Libros y serializadores --- app/libros/migrations/0002_libros.py | 30 +++++++++++++++++++++++++++ app/libros/models.py | 23 +++++++++++++++++++-- app/libros/serializers.py | 15 ++++++++++++++ tests/libros/test_create_model.py | 29 ++++++++++++++++++++++++++ tests/libros/test_serializers.py | 31 ++++++++++++++++++++++++++++ 5 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 app/libros/migrations/0002_libros.py create mode 100644 app/libros/serializers.py create mode 100644 tests/libros/test_create_model.py create mode 100644 tests/libros/test_serializers.py diff --git a/app/libros/migrations/0002_libros.py b/app/libros/migrations/0002_libros.py new file mode 100644 index 0000000..d8c9a73 --- /dev/null +++ b/app/libros/migrations/0002_libros.py @@ -0,0 +1,30 @@ +# Generated by Django 3.2.5 on 2021-07-09 16:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('libros', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Libros', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255)), + ('genre', models.CharField(max_length=255)), + ('year', models.CharField(max_length=4)), + ('author', models.CharField(max_length=255)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('updated_at', models.DateTimeField(auto_now=True)), + ], + options={ + 'verbose_name': 'Libro', + 'verbose_name_plural': 'Libros', + 'ordering': ('-created_at',), + }, + ), + ] diff --git a/app/libros/models.py b/app/libros/models.py index 59041d1..7136479 100644 --- a/app/libros/models.py +++ b/app/libros/models.py @@ -1,6 +1,25 @@ -from django.db import models +# app/libros/models.py + from django.contrib.auth.models import AbstractUser +from django.db import models class CustomUser(AbstractUser): - pass \ No newline at end of file + pass + + +class Libros(models.Model): + title = models.CharField(max_length=255) + genre = models.CharField(max_length=255) + year = models.CharField(max_length=4) + author = models.CharField(max_length=255) + created_at = models.DateTimeField(auto_now_add=True) + updated_at = models.DateTimeField(auto_now=True) + + class Meta: + ordering = ("-created_at",) + verbose_name = "Libro" + verbose_name_plural = "Libros" + + def __str__(self): + return self.title \ No newline at end of file diff --git a/app/libros/serializers.py b/app/libros/serializers.py new file mode 100644 index 0000000..8933e14 --- /dev/null +++ b/app/libros/serializers.py @@ -0,0 +1,15 @@ +# app/libros/serializers.py + +from rest_framework import serializers +from .models import Libros + + +class LibroSerializer(serializers.ModelSerializer): + class Meta: + model = Libros + fields = "__all__" + read_only_fields = ( + "id", + "created_date", + "updated_date", + ) diff --git a/tests/libros/test_create_model.py b/tests/libros/test_create_model.py new file mode 100644 index 0000000..bfa7e2b --- /dev/null +++ b/tests/libros/test_create_model.py @@ -0,0 +1,29 @@ +# tests/libros/test_create_model.py + +import pytest + +from app.libros.models import Libros + +@pytest.mark.django_db +def test_libros_model(): + + ## Given + # Creamos un nuevo libro en la base de datos + libro = Libros( + title="La fundación", + genre="Ciencia ficción", + year="1951", + author="Isaac Asimov", + ) + libro.save() + + ## When + + ## Then + assert libro.title == "La fundación" + assert libro.genre == "Ciencia ficción" + assert libro.year == "1951" + assert libro.author == "Isaac Asimov" + assert libro.created_at + assert libro.updated_at + assert str(libro) == libro.title \ No newline at end of file diff --git a/tests/libros/test_serializers.py b/tests/libros/test_serializers.py new file mode 100644 index 0000000..837b430 --- /dev/null +++ b/tests/libros/test_serializers.py @@ -0,0 +1,31 @@ +# tests/libros/test_serializers.py + +from app.libros.serializers import LibroSerializer + +def test_valid_libro_serializer(): + valid_serializer_data = { + "title": "Raising Arizona", + "genre": "comedy", + "year": "1987", + "author": "Ray Bradbury", + } + serializer = LibroSerializer(data=valid_serializer_data) + assert serializer.is_valid() + assert serializer.validated_data == valid_serializer_data + assert serializer.data == valid_serializer_data + assert serializer.errors == {} + + +def test_invalid_libro_serializer(): + invalid_serializer_data = { + "title": "Soy Leyenda", + "author": "Richard Matheson", + } + serializer = LibroSerializer(data=invalid_serializer_data) + assert not serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.data == invalid_serializer_data + assert serializer.errors == { + "year": ["This field is required."], + "genre": ["This field is required."], + } \ No newline at end of file