def votar(request): """ Ajax para voto pelo site **Context** ``result`` resposta válida (ou não) **Template:** None """ if request.method == 'POST': response_data = {} tipo_voto = request.POST['voto'] sugestao = Sugestao.objects.get(id=request.POST['sugestao']) usuario = Usuario.objects.get(user=request.user) if tipo_voto == 'F': if usuario.tipo == 'Moderador': sugestao.fechada = True sugestao.save() response_data['result'] = 'success' response_data['message'] = 'Sugestão fechada com sucesso' else: # Erro - já existe voto nessa sugestão try: voto = Voto.objects.get(usuario=usuario, sugestao=sugestao) response_data['result'] = 'fail' response_data['message'] = 'Você já votou para essa sugestão, e é permitido apenas um voto.' # Ok - pode votar except Voto.DoesNotExist, e: response_data['result'] = 'success' response_data['message'] = 'Voto feito com sucesso.' voto = Voto(usuario=usuario, sugestao=sugestao, tipo=tipo_voto) voto.save() if sugestao.notificada == False: endossos = Voto.objects.filter(sugestao=sugestao, tipo='E').count() if endossos > 100: responsaveis = [] usuarios = Usuario.objects.filter(tipo='Responsavel', instituto=sugestao.instituto) for usuario in usuarios: responsaveis.append(usuario.user.email) responsaveis.append('*****@*****.**') mail_content = "Favor, responder votos em " + sugestao.get_absolute_url() send_mail("Uspgrade - Endossos atingidos", mail_content, '*****@*****.**', responsaveis, fail_silently=False) sugestao.notificada = True sugestao.save() return HttpResponse(json.dumps(response_data), content_type="application/json")
def test_sistema_envia_email_para_responsavel_quando_sugestao_atinge_x_votos(self): """ """ usuario = Usuario.objects.get(pk=2) sugestao = Sugestao.objects.get(pk=1) for i in range(100): voto = Voto(usuario=usuario, sugestao=sugestao, tipo="E") voto.save() response = self.client.post("/login", {"username": "******", "password": "******"}) response = self.client.post("/api/votar", {"voto": "E", "sugestao": "1"}) sugestao = Sugestao.objects.get(pk=1) self.assertEqual(sugestao.notificada, True)