コード例 #1
0
 def setUp(self):
     universidad = Universidad.objects.create(nombre='uba')
     carrera = Carrera.objects.create(nombre='Computación',
                                      slug='compu',
                                      universidad=universidad)
     materia = Materia.objects.create()
     self.materia_carrera = MateriaCarrera.objects.create(nombre='materia',
                                                          slug='materia',
                                                          carrera=carrera,
                                                          materia=materia)
     practica = Practica.objects.create(materia=materia,
                                        anio=2018,
                                        cuatrimestre=1,
                                        numero=1)
     self.creador = get_user_model().objects.create_user(username='******',
                                                         password='')
     self.enunciado = Enunciado.objects.create(conjunto=practica, numero=1)
     VersionTexto.versiones.create(texto='un texto',
                                   posteo=self.enunciado,
                                   autor=self.creador)
     self.editor = get_sentinel_user()
     self.solucion = Solucion.objects.create(enunciado_padre=self.enunciado,
                                             creador=self.creador)
     self.version_texto = VersionTexto.versiones.create(
         texto='asdsad', posteo=self.solucion, autor=self.creador)
コード例 #2
0
 def crear_enunciado_con_texto(self, numero):
     enunciado = Enunciado.objects.create(conjunto=self.practica,
                                          numero=numero)
     VersionTexto.versiones.create(texto='hola',
                                   posteo=enunciado,
                                   autor=get_sentinel_user())
     return enunciado
コード例 #3
0
def handle_post(request, materia_carrera, conjunto, enunciado_encontrado):
    numero_anterior = enunciado_encontrado.numero
    enunciado_form = EnunciadoConConjuntoForm(conjunto,
                                              request.POST,
                                              instance=enunciado_encontrado)
    version_texto_form = VersionTextoForm(request.POST)

    response = None
    if enunciado_form.is_valid() and version_texto_form.is_valid():
        nuevo_numero = enunciado_form.cleaned_data['numero']
        texto_nuevo = version_texto_form.cleaned_data['texto']
        cambio_texto = se_cambio_texto(enunciado_encontrado, texto_nuevo)
        if numero_anterior == nuevo_numero and not cambio_texto:
            version_texto_form.add_error(
                'texto', ValidationError(_('No se cambió el texto.')))
        else:
            enunciado = crear_enunciado_con_forms(enunciado_form,
                                                  version_texto_form,
                                                  get_sentinel_user(),
                                                  cambio_texto)
            success_url = enunciados_url_parser.url_enunciado(
                materia_carrera, enunciado)
            response = redirect(success_url)

    if not response:
        response = render_editar_enunciado(request, materia_carrera,
                                           enunciado_form, version_texto_form,
                                           enunciado_encontrado)
    return response
コード例 #4
0
def guardar_enunciado(enunciado_form, materia_carrera, version_texto_form):
    enunciado = enunciado_form.save()
    success_url = enunciados_url_parser.url_enunciado(materia_carrera,
                                                      enunciado)
    if version_texto_form.is_valid():
        guardar_version_texto(enunciado, version_texto_form,
                              get_sentinel_user())
    response = redirect(success_url)
    return response
コード例 #5
0
 def form_valid(self, form):
     user = get_sentinel_user()
     solucion = Solucion(enunciado_padre=self.enunciado, creador=user)
     solucion.save()
     self.object = form.save(commit=False)
     self.object.posteo = solucion
     self.object.autor = user
     self.object.save()
     return redirect(self.get_success_url())
コード例 #6
0
    def test_se_puede_editar_solucion_sin_loguearse(self):
        url = self.url_editar_solucion()
        texto = 'un texto muy largo'
        response = self.client.post(url, {'texto': texto})

        self.assertEquals(response.status_code, HTTPStatus.FOUND)
        url_redir = self.url_ver_enunciado()
        self.assertEquals(response.url, url_redir)
        self.assertEquals(self.solucion.versiones.ultima().texto, texto)
        self.assertEquals(self.solucion.versiones.ultima().autor,
                          get_sentinel_user())
コード例 #7
0
def editar_solucion(request, pk_solucion, **kwargs):
    materia_carrera = kwargs['materia_carrera']
    solucion = get_object_or_404(Solucion, pk=pk_solucion)
    usuario = get_sentinel_user()
    if request.method == 'POST':
        form = VersionTextoSolucionForm(solucion, usuario, request.POST)
        if form.is_valid():
            deberia_sumar_puntos = no_edito_solucion(solucion, usuario)
            form.save()
            if deberia_sumar_puntos:
                dar_puntos_a_usuario(usuario)
            success_url = enunciados_url_parser.url_enunciado(
                materia_carrera, solucion.enunciado_padre)
            return redirect(success_url)
    else:
        form = VersionTextoSolucionForm(
            solucion,
            usuario,
            initial={'texto': solucion.versiones.ultima().texto})

    contexto = {
        'materia_carrera':
        materia_carrera,
        'carrera':
        materia_carrera.carrera,
        'form':
        form,
        'solucion':
        solucion,
        'enunciado':
        solucion.enunciado_padre,
        'breadcrumb':
        breadcrumb_editar_solucion(materia_carrera, solucion.enunciado_padre),
        'texto_boton':
        _('Enviar'),
    }
    return render(request, 'enunciados/nueva_solucion.html', contexto)