예제 #1
0
class UrlsTestCase(TestCase):
    """ Testa as URLs da aplicação """
    def setUp(self):
        self.problema = Problema(titulo="Título do Problema 1",
                                 descricao="Descrição do Problema 1")
        self.problema.save()
        self.client = Client()
            
    def test_existencia_urls(self):
        response = self.client.get(reverse('problema-aleatorio'))
        self.assertNotEqual(response.status_code, 404)   

        response = self.client.get(reverse('exibe-problema', args=[self.problema.id]))
        self.assertNotEqual(response.status_code, 404)
        titulo = "<title>DojoPuzzles.com - {0}</title>"
        self.assertContains(response, titulo.format(self.problema.titulo), 1)

        response = self.client.get(reverse('sem-problemas-novos'))
        self.assertNotEqual(response.status_code, 404)
        self.assertContains(response, "<title>DojoPuzzles.com - Todos os problemas visualizados</title>", 1)
        
        response = self.client.get(reverse('nenhum-problema-cadastrado'))
        self.assertNotEqual(response.status_code, 404)
        self.assertContains(response, "<title>DojoPuzzles.com - Nenhum problema cadastrado</title>", 1)

        response = self.client.get(reverse('todos-problemas'))
        self.assertNotEqual(response.status_code, 404)
        self.assertContains(response, "<title>DojoPuzzles.com - Problemas cadastrados</title>", 1)
예제 #2
0
 def setUp(self):
     # Cadastra 10 problemas que serão utilizados nos testes
     for i in xrange(1,11):
         titulo = "Título do Problema {0}".format(i)
         descricao = "Descrição do Problema {0}".format(i)
         problema = Problema(titulo=titulo, descricao=descricao)
         problema.save()
     self.client = Client()
예제 #3
0
class ProblemasGosteiTestCase(TestCase):

    def setUp(self):
        titulo = "Título do Problema 1"
        descricao = "Descrição do Problema 1"
        self.problema = Problema(titulo=titulo, descricao=descricao)
        self.problema.save()
        self.client = Client()
        
    def tearDown(self):
        Problema.objects.all().delete()
        ProblemaUtilizado.objects.all().delete()

    def test_problema_exibido_pela_primeira_vez(self):
        """ Um problema exibido pela primeira vez deve informar que nunca foi utilizado em um Dojo """
        response = self.client.get(reverse('exibe-problema', args=[self.problema.slug]))
        self.assertContains(response, 'Este problema ainda não foi utilizado em nenhum Dojo.', 1)

    def test_problema_utilizado_em_um_dojo(self):
        """ Se alguém informar que gostou e vai utilizar um problema em um Dojo
        ao exibir este problema ele tem que informar quantas vezes ele já foi utilizado """
        url_gostei_e_vou_usar = reverse('problema-utilizado-em-dojo', args=[self.problema.id])
        response = self.client.get(url_gostei_e_vou_usar, follow=True)
        self.assertEqual(self.problema.utilizacoes, 1)
        self.assertContains(response, 'Este problema foi utilizado em 1 Dojo(s).', 1)
        self.assertContains(response, 'Você está resolvendo este problema.', 1)

        try:
            problema_utilizado = self.client.session['problema_utilizado']
            self.assertEqual(problema_utilizado, self.problema)
        except KeyError:
            self.fail('Problema que o usuário vai utilizar para o Dojo não está indicado.')

        # Se um novo usuário escolher este problema
        self.client.session.flush()
        url_gostei_e_vou_usar = reverse('problema-utilizado-em-dojo', args=[self.problema.id])
        response = self.client.get(url_gostei_e_vou_usar, follow=True)
        self.assertEqual(self.problema.utilizacoes, 2)
        self.assertContains(response, 'Este problema foi utilizado em 2 Dojo(s).', 1)

    def test_exibicao_problema_utilizado(self):
        """ Ao selecionar um problema para exibir não deve mais mostrar os botões de escolha """
        response = self.client.get(reverse('exibe-problema', args=[self.problema.slug]), follow=True)
        self.assertContains(response, 'id="botao_gostei"')
        self.assertContains(response, 'id="botao_talvez"')
        self.assertContains(response, 'id="botao_nao_gostei"')

        url_gostei_e_vou_usar = reverse('problema-utilizado-em-dojo', args=[self.problema.id])
        response = self.client.get(url_gostei_e_vou_usar, follow=True)
        self.assertNotContains(response, 'id="botao_gostei"')
        self.assertNotContains(response, 'id="botao_talvez"')
        self.assertNotContains(response, 'id="botao_nao_gostei"')

    def test_pagina_404(self):
      response = self.client.get(reverse('exibe-problema', args=['lala']))
      self.assertTemplateUsed(response, '404.html')
예제 #4
0
def contribuicao(request):
    if request.method == 'POST':
        form = ContribuicaoForm(request.POST)
        if form.is_valid():
            emails_a_enviar = []

            mensagem = form.cleaned_data['mensagem']
            email_administracao = '*****@*****.**'
            remetente = form.cleaned_data['email']
            nome_remetente = form.cleaned_data['nome']
            titulo_problema = form.cleaned_data['titulo_problema']

            assunto = form.cleaned_data['assunto']
            if assunto == 'CONTATO':
                subject = 'DojoPuzzles.com - Contato realizado através do site'
                emails_a_enviar.append({'subject': subject,
                                        'message': mensagem,
                                        'from_email': remetente,
                                        'recipient_list': [email_administracao],
                                        'fail_silently': False})

            elif assunto == 'PROBLEMA_NOVO':
                subject = 'DojoPuzzles.com - Obrigado pela contribuição'
                mensagem_agradecimento = MENSAGEM_AGRADECIMENTO.format(nome_remetente)

                emails_a_enviar.append({'subject': subject,
                                        'message': mensagem_agradecimento,
                                        'from_email': email_administracao,
                                        'recipient_list': [remetente],
                                        'fail_silently': False})

                subject = 'DojoPuzzles.com - Nova contribuição de problema'
                emails_a_enviar.append({'subject':subject,
                                        'message': mensagem,
                                        'from_email': remetente,
                                        'recipient_list': [email_administracao],
                                        'fail_silently': False})

                problema = Problema(titulo=titulo_problema,
                                    descricao=mensagem,
                                    nome_contribuidor=nome_remetente,
                                    publicado=False)
                problema.save()

            for email in emails_a_enviar:
                send_mail(**email)

            return HttpResponseRedirect(reverse('contribuicao-recebida'))
    else:
        form = ContribuicaoForm()

    titulo_pagina = 'Contribua'
    return render_to_response('contribua.html', 
                              locals(), 
                              RequestContext(request))
예제 #5
0
def novo_problema(dados_problema):
    """
    Cadastra um novo problema no sistema para ser utilizado
    em testes.
    """
    numero_problemas = Problema.objects.count()
    indice = numero_problemas + 1

    dados_problema.setdefault('titulo', "Título Problema Teste {0}".format(indice))
    dados_problema.setdefault('publicado', True)

    problema = Problema(**dados_problema)
    problema.save()

    return problema
예제 #6
0
 def setUp(self):
     titulo = "Título do Problema 1"
     descricao = "Descrição do Problema 1"
     self.problema = Problema(titulo=titulo, descricao=descricao)
     self.problema.save()
     self.client = Client()