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