test_evento.py 3.31 KB
import pytest
import json

from datetime import time, datetime
from rest_framework import status
from django.contrib.auth.models import User
from django.urls import reverse
from rest_framework.test import APIClient

from evento.tests.factories import EventoFactory, FechaEventoFactory
from evento.models import Evento


@pytest.mark.django_db
@pytest.mark.parametrize('mes, fecha_inicio, fecha_final', [
    (10, '2024-10-07', '2024-10-07'),  # Evento en octubre
    (11, '2024-11-04', '2024-11-04')   # Evento en noviembre
])
def test_obtener_mes_get(mes, fecha_inicio, fecha_final):
    cliente = APIClient()
    user = User.objects.create_user(
        username='admin',
        email='admin@example.com',
        password='password123',
        is_superuser=True,
    )
    cliente.force_authenticate(user=user)

    calendario = FechaEventoFactory.create(duracion_evento=1)

    data = {
        'titulo': f'Event test for month {mes}',
        'categoria': 'Cultural',
        'descripcion': f'Durante el evento test para el mes {mes}',
        'direccion': 'https://maps.app.goo.gl/RJExHoGFyg8Ska7CA',
        'fecha_inicio': fecha_inicio,
        'hora_inicio': str(time(8, 30)),
        'fecha_final': fecha_final,
        'hora_fin': str(time(12, 00)),
        'url': 'google.com',
        'fechas': json.dumps([
            {
                'id': calendario.pk,
                'duracion_evento': 1,
                'dias': None,
            }
        ]),
    }

    evento = Evento.objects.create(
        titulo=data['titulo'],
        categoria=data['categoria'],
        descripcion=data['descripcion'],
        direccion=data['direccion'],
        fecha_inicio=data['fecha_inicio'],
        hora_inicio=data['hora_inicio'],
        fecha_final=data['fecha_final'],
        hora_fin=data['hora_fin'],
        url=data['url']
    )
    evento.fechas.set([calendario])

    url = reverse('evento-obtener-mes')

    response = cliente.post(url, {'mes': mes}, format='multipart')
    print("Response JSON:", response.json())

    evento_fechas = evento.fechas.all().values()
    print("Fechas asociadas al evento:", list(evento_fechas))

    if response.status_code == status.HTTP_400_BAD_REQUEST:
        assert response.data['error'] == (
            'El mes ingresado no es válido. Por favor, ingrese el mes correspondiente a la fecha actual o posterior.'
        )
    else:
        assert response.status_code == 200

        # Verificar que solo existe una fecha asociada con el evento
        assert evento.fechas.count() == 1, "Debe existir solo una fecha asociada al evento"

        evento_data = response.json()['data'][0]
        assert evento_data['titulo'] == f'Event test for month {mes}'
        assert evento_data['categoria'] == 'Cultural'
        assert evento_data['descripcion'] == f'Durante el evento test para el mes {mes}'
        assert evento_data['direccion'] == 'https://maps.app.goo.gl/RJExHoGFyg8Ska7CA'
        assert evento_data['fecha_inicio'] == fecha_inicio
        assert evento_data['hora_inicio'] == str(time(8, 30))
        assert evento_data['fecha_final'] == fecha_final
        assert evento_data['hora_fin'] == str(time(12, 0))
        assert evento_data['url'] == 'google.com'
        assert evento_data['fechas'] == [{
            'id': calendario.pk,
            'duracion_evento': 1,
            'dias': fecha_inicio,
        }]