Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

735 #736

Open
wants to merge 17 commits into
base: master
Choose a base branch
from
Open

735 #736

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
language: python
python:
- 3.7
install:
- pip install -q pipenv codecov
- pipenv sync --dev
script:
- 3.10
- 2.7
install:
- pip install -q -r requirements-dev.txt codecov
- flake8
- pytest libpythonpro --cov=libpythonpro
- pytest Libpythonpro --cov=libpythonpro-1
after_success:
- codecov
1 change: 1 addition & 0 deletions Libpythonpro/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
__version__ = '0.2'
5 changes: 3 additions & 2 deletions libpythonpro/github_api.py → Libpythonpro/github_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
def buscar_avatar(usuario):
"""
Busca o avatar de um usuário no Github

:param usuario: str com o nome de usuário no github
:Param usuário: str com o nome usuário no github
:return: str com o link do avatar
"""
url = f'https://api.github.com/users/{usuario}'
resp = requests.get(url)
return resp.json()['avatar_url']


File renamed without changes.
8 changes: 1 addition & 7 deletions libpythonpro/spam/db.py → Libpythonpro/spam/db.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
from time import sleep


class Sessao:
contador = 0
usuarios = []
Expand All @@ -14,16 +11,13 @@ def listar(self):
return self.usuarios

def roll_back(self):
self.usuarios.clear()
pass

def fechar(self):
pass


class Conexao:
def __init__(self):
sleep(1)

def gerar_sessao(self):
return Sessao()

Expand Down
4 changes: 3 additions & 1 deletion libpythonpro/spam/main.py → Libpythonpro/spam/main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
class EnviadorDeSpam:
def __init__(self, sessao, enviador):
self.sessao = sessao
self.enviador = enviador
self.sessao = sessao

def enviar_emails(self, remetente, assunto, corpo):
for usuario in self.sessao.listar():
Expand All @@ -11,3 +11,5 @@ def enviar_emails(self, remetente, assunto, corpo):
assunto,
corpo
)


File renamed without changes.
File renamed without changes.
9 changes: 9 additions & 0 deletions Libpythonpro/spam/test_spam/enviador_de_email.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class Enviador:
def enviar(self, remetente, destinatário, assunto, corpo):
if '@' not in remetente:
raise EmailInvalido(f'Email de Remetente Inválido:{remetente}')
return remetente


class EmailInvalido(Exception):
pass
2 changes: 2 additions & 0 deletions Libpythonpro/tests/test_exemplo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
def test_int():
assert 1 == 1
Empty file.
60 changes: 60 additions & 0 deletions Libpythonpro/tests/test_spam/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from time import sleep

import pytest


class Sessao:
contador = 0
usuarios = []

def salvar(self, usuario):
Sessao.contador += 1
usuario.id = Sessao.contador
self.usuarios.append(usuario)

def listar(self):
return self.usuarios

def roll_back(self):
self.usuarios.clear()

def fechar(self):
pass


class Conexao:

def __init__(self):
sleep(1)

def gerar_sessao(self):
return Sessao()

def fechar(self):
pass


@pytest.fixture(scope='session')
def conexao():
# Setup
conexao_obj = Conexao()
yield conexao_obj
# Tear Down
conexao_obj.fechar()


@pytest.fixture
def sessao(conexao):
sessao_obj = conexao.gerar_sessao()
yield sessao_obj
sessao_obj.roll_back()
sessao_obj.fechar()









Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
import pytest

from libpythonpro.spam.enviador_de_email import EmailInvalido, Enviador
from Libpythonpro.spam.test_spam.enviador_de_email import Enviador, EmailInvalido


def test_criar_enviador_de_email():
enviador = Enviador()
enviador= Enviador()
assert enviador is not None


@pytest.mark.parametrize(
'remetente',
['[email protected]', '[email protected]']
'destinatario',
['[email protected]','[email protected]']
)
def test_remetente(remetente):
def test_remetente(destinatario):
enviador = Enviador()
destinatario
resultado = enviador.enviar(
remetente,
destinatario,
'[email protected]',
'Cursos Python Pro',
'Primeira turma Guido Von Rossum aberta.'
)
assert remetente in resultado
'Primeira Turma Guido Von Rossum aberta.')
assert destinatario in resultado


@pytest.mark.parametrize(
'remetente',
['', 'renzo']
['','renzo']
)
def test_remetente_invalido(remetente):
enviador = Enviador()
Expand All @@ -34,5 +33,6 @@ def test_remetente_invalido(remetente):
remetente,
'[email protected]',
'Cursos Python Pro',
'Primeira turma Guido Von Rossum aberta.'
'Primeira Turma Guido Von Rossum aberta.'
)

56 changes: 56 additions & 0 deletions Libpythonpro/tests/test_spam/test_envio_para_base_de_usuarios.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from unittest.mock import Mock

import pytest

from Libpythonpro.spam.main import EnviadorDeSpam
from Libpythonpro.spam.modelos import Usuario
from Libpythonpro.spam.test_spam.enviador_de_email import Enviador

def test_envio_de_spam(sessao):
enviador_de_spam= EnviadorDeSpam(sessao, Enviador())


@pytest.mark.parametrize(
'usuarios',
[
[
Usuario(nome='Carlos', email='[email protected]'),
Usuario(nome='Givani', email='[email protected]')
],
[
Usuario(nome='Carlos', email='[email protected]')
]
]
)
def test_qtd_de_spam(sessao, usuarios):
for usuario in usuarios:
sessao.salvar(usuario)
enviador = Mock()
enviador_de_spam= EnviadorDeSpam(sessao, enviador)
enviador_de_spam.enviar_emails(
'[email protected]',
'Curso Pythonpro',
'Confira os módulos fantásticos'
)
assert len(usuarios) == enviador.enviar.call_count


def test_parametros_de_spam(sessao):
usuario = Usuario(nome='Carlos', email='[email protected]')
sessao.salvar(usuario)
enviador = Mock()
enviador_de_spam= EnviadorDeSpam(sessao, enviador)
enviador_de_spam.enviar_emails(
'[email protected]',
'Curso Pythonpro',
'Confira os módulos fantásticos'
)
enviador.enviar.assert_called_once_with(
'[email protected]',
'[email protected]',
'Curso Pythonpro',
'Confira os módulos fantásticos'
)



25 changes: 25 additions & 0 deletions Libpythonpro/tests/test_spam/test_github_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from unittest.mock import Mock

import pytest

from Libpythonpro import github_api

@pytest.fixture
def avatar_url(mocker):
resp_mock = Mock()
url = 'https://avatars.githubusercontent.com/u/107650943?v=4'
resp_mock.json.return_value = {
'login': 'Carloshbfreire', 'id': 107650943,
'avatar_url': url,
}
get_mock = mocker.patch('Libpythonpro.github_api.requests.get')
get_mock.return_value = resp_mock
return url

def test_buscar_avatar(avatar_url):
url = github_api.buscar_avatar('Carloshbfreire')
assert avatar_url == url

def test_buscar_avatar_integraçao():
url = github_api.buscar_avatar('Carloshbfreire')
assert 'https://avatars.githubusercontent.com/u/107650943?v=4' == url
20 changes: 20 additions & 0 deletions Libpythonpro/tests/test_spam/testes_usuarios.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
from Libpythonpro.spam.modelos import Usuario


def test_salvar_usuario(sessao):
usuario= Usuario(nome='Carlos', email= '[email protected]' )
sessao.salvar(usuario)
assert isinstance(usuario.id, int)


def test_listar_usuario(sessao):
usuarios = [
Usuario(nome='Carlos', email='[email protected]'),
Usuario(nome='Givani', email='[email protected]')
]
for usuario in usuarios:
sessao.salvar(usuario)
assert usuarios == sessao.listar()



18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,27 @@ Nesse curso é ensinado como contribuir com projetos de código aberto

Link para o curso [Python Pro](https://www.python.pro.br/)

[![Build Status](https://travis-ci.org/pythonprobr/libpythonpro.svg?branch=master)](https://travis-ci.org/pythonprobr/libpythonpro)
[![Build Status](https://app.travis-ci.com/Carloshbfreire/libpythonpro-1.svg?branch=master)](https://app.travis-ci.com/Carloshbfreire/libpythonpro-1)

[![Updates](https://pyup.io/repos/github/pythonprobr/libpythonpro/shield.svg)](https://pyup.io/repos/github/pythonprobr/libpythonpro/)
[![Python 3](https://pyup.io/repos/github/pythonprobr/libpythonpro/python-3-shield.svg)](https://pyup.io/repos/github/pythonprobr/libpythonpro/)
[![codecov](https://codecov.io/gh/pythonprobr/libpythonpro/branch/master/graph/badge.svg)](https://codecov.io/gh/pythonprobr/libpythonpro)

Suportada versão 3 de Python

Suportada versão 3 de Python Carlinhos

Para instalar:

```console
pip install pipenv
pipenv install --dev
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-dev.txt
```

Para conferir qualidade de código:

```console
pipenv run flake8
flake8
```

Tópicos a serem abordados:
Expand All @@ -32,4 +35,7 @@ Tópicos a serem abordados:
3. Pip
4. Mock
5. Pipenv


Revisando aula sobre Fork.

Link do Curso [Python pro](https://pythonpro.com.br/)
1 change: 0 additions & 1 deletion libpythonpro/__init__.py

This file was deleted.

9 changes: 0 additions & 9 deletions libpythonpro/spam/enviador_de_email.py

This file was deleted.

2 changes: 0 additions & 2 deletions libpythonpro/tests/test_exemplo.py

This file was deleted.

20 changes: 0 additions & 20 deletions libpythonpro/tests/test_spam/conftest.py

This file was deleted.

Loading