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)
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
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
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
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())
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())
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)