Skip to content

Commit

Permalink
Merge pull request ofek#72 from odufrn/development
Browse files Browse the repository at this point in the history
Versão 1.1.0
  • Loading branch information
diegodiogenes authored Aug 22, 2019
2 parents 974e995 + 5ada5e1 commit 7ed5880
Show file tree
Hide file tree
Showing 10 changed files with 139 additions and 26 deletions.
4 changes: 4 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ fail_fast: true
install:
- python setup.py install
- pip install pycodestyle
- pip install coveralls
before_install:
- pip install --upgrade pip
script:
- find . -name \*.py -exec pycodestyle --ignore=E402 {} +
- python -m unittest -v
- coverage run --source=. --omit=setup.py -m unittest -v
after_success:
- coveralls
16 changes: 8 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ pedimos que ele seja seguido para interagir com o projeto.

## Processo de Pull Request

1. Pull requests devem passar pelo build do Travis e depois ser revisados pelos mantenedores.
2. Ao contribuir com o código deve-se escrever os testes e documentar as alterações.
3. Qualquer adição de dependência devem ser descritos na descrição do pull request.
4. Após a revisão de código por dois ou mais mantenedores, se aceitas as mudanças,
o pull request é aceito.
5. Os pulls request devem ser feitos para a branch development, pois as modicações serão
lançadas na próxima versão do sistema.
6. Um mantenedor não pode aceitar o próprio pull request
1. Pull requests devem passar pelo **build do Travis** e depois ser **revisados** pelos mantenedores;
2. Ao contribuir com o código deve-se **escrever os testes** e **documentar** as alterações;
3. Qualquer adição de dependência devem ser **descritos** no pull request;
4. Após a revisão de código por **dois ou mais mantenedores**, se aceitas as mudanças,
o pull request é aceito;
5. Os pulls request devem ser feitos para a **branch development**, pois as modicações serão
lançadas na próxima versão do sistema;
6. Um mantenedor **não** pode aceitar o próprio pull request.

## Instalando ambiente para desenvolvimento

Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
<a href="https://travis-ci.org/odufrn/odufrn-downloader">
<img alt="Build" src="https://img.shields.io/travis/odufrn/odufrn-downloader">
</a>
<a href="https://coveralls.io/github/odufrn/odurfn-downloader?branch=master">
<img alt="Coverage Status" src="https://img.shields.io/coveralls/odufrn/odufrn-downloader?color=brightgreen">
</a>
<a href="https://github.com/odufrn/odufrn-downloader/blob/master/LICENSE">
<img alt="License" src="https://img.shields.io/badge/license-MIT-brightgreen.svg">
</a>
Expand Down
4 changes: 1 addition & 3 deletions odufrn_downloader/mixins/filters/YearsMixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ class YearsMixin:
"""Mixin que adiciona métodos relacionados a filtragem
de pacotes e grupos por anos"""

def year_find(self, package_name: str, years: list) -> bool:
def year_find(self, package_name: str, years: list = None) -> bool:
"""Verifica se o pacote pertence a uma ano específico da lista years.
Parâmetros
Expand All @@ -16,8 +16,6 @@ def year_find(self, package_name: str, years: list) -> bool:
----------
bool
True se o ano foi encontrado no nome do pacote se não false."""
if years is None:
return True

if years:
for _, year in enumerate(years):
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name="odufrn_downloader",
version="1.0.2",
version="1.1.0",
author="Open Data UFRN",
author_email="[email protected]",
description="Open Data UFRN Downloader",
Expand Down
32 changes: 32 additions & 0 deletions tests/test_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from .utils import *
import tempfile


class Group(unittest.TestCase):
def setUp(self):
"""Inicia novo objeto em todo os testes """
self.ufrn_data = ODUFRNDownloader()

def test_can_download_packages_from_file(self):
"""Verifica se dado um arquivo com pacotes realiza-se download."""
with tempfile.NamedTemporaryFile() as tmp:
tmp.write(b'telefones\n')
tmp.write(b'unidades-academicas')
tmp.seek(0)
self.ufrn_data.download_from_file(tmp.name, './tmp')
path_telefones = os.path.exists('./tmp/telefones')
path_unidades = os.path.exists('./tmp/unidades-academicas')
self.assertTrue(
path_telefones and path_unidades
)
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')

def test_can_print_exception_download_packages_from_file(self):
"""Verifica se dado um arquivo com nomes errados de pacotes
lança-se exceção."""
assert_console(
lambda: self.ufrn_data.download_from_file(
'potato', './tmp'
)
)
42 changes: 34 additions & 8 deletions tests/test_group.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,49 @@ def setUp(self):
"""Inicia novo objeto em todo os testes """
self.ufrn_data = ODUFRNDownloader()

def test_print_groups(self):
def test_can_print_groups(self):
"""Verifica se a lista de grupos é impressa na tela """
assert_console(self.ufrn_data.print_groups)

def test_load_groups(self):
def test_can_load_groups(self):
"""Verifica se a lista de grupos é carregada no objeto """
self.ufrn_data.load_groups()
self.assertTrue(len(self.ufrn_data.available_groups) > 0)

def test_get_packages_group(self):
"""Verifica se a lista de datasets em um grupo é
retornada
"""
group = 'despesas-e-orcamento'
def test_can_get_packages_group(self):
"""Verifica se a lista de datasets em um grupo é retornada."""
group = 'extensao'
self.assertTrue(len(self.ufrn_data.get_packages_group(group)) > 0)

def test_search_groups(self):
def test_can_raise_exception_on_get_packages_group(self):
"""Verifica se digitando um nome errado de um grupo
consegue-se lançar exceção de grupo não encontrado."""
group = 'despesas-e-orcam'
self.assertTrue(
"não foi encontrado" in (
input_value(lambda: self.ufrn_data.get_packages_group(group))
)
)

def test_can_download_group(self):
"""Verifica se baixa-se arquivos de um grupo."""
self.ufrn_data.download_group('extensao', './tmp')
self.assertTrue(os.path.exists('./tmp/extensao'))
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')

def test_can_download_groups(self):
"""Verifica se baixa-se arquivos de vários grupos."""
self.ufrn_data.download_groups(['biblioteca', 'extensao'], './tmp')
path_extensao = os.path.exists('./tmp/extensao')
path_biblioteca = os.path.exists('./tmp/biblioteca')
self.assertTrue(
path_extensao and path_biblioteca
)
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')

def test_can_search_groups(self):
"""Verifica se a procura por grupos está funcionando."""
list_groups = self.ufrn_data.search_related_groups('pesquis')
self.assertTrue(len(list_groups) == 1)
Expand Down
36 changes: 36 additions & 0 deletions tests/test_package.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,24 @@ def test_search_packages(self):
list_groups = self.ufrn_data.search_related_packages('disc')
self.assertTrue(len(list_groups) == 0)

def test_can_download_package(self):
"""Verifica se baixa-se arquivos de um grupo"""
self.ufrn_data.download_package('telefones', './tmp')
self.assertTrue(os.path.exists('./tmp/telefones'))
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')

def test_can_download_packages(self):
"""Verifica se baixa-se arquivos de um pacote"""
self.ufrn_data.download_packages(
['telefones', 'unidades-academicas'], './tmp'
)
telefone_path = os.path.exists('./tmp/telefones')
unidades_path = os.path.exists('./tmp/unidades-academicas')
self.assertTrue(telefone_path and unidades_path)
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')

def test_can_print_files_from_package(self):
"""Verifica se os arquivos de um pacote podem ser impressos na tela."""
assert_console(
Expand All @@ -35,3 +53,21 @@ def test_can_print_files_from_package_with_typo(self):
assert_console(
lambda: self.ufrn_data.print_files_from_package('discente')
)

def test_can_print_not_relation(self):
"""Verifica se imprime não haver relação de pacote."""
self.ufrn_data.warnings = True
assert_console(
lambda: self.ufrn_data.search_related_packages(
'asudsada', True, True
)
)

def test_can_download_packages_filtering_years(self):
"""Verifica se baixa-se pacote filtrando por anos"""
self.ufrn_data.download_package('discentes', './tmp', years=[2018])
_, _, files = next(os.walk('./tmp/discentes'))
file_exist = os.path.exists('./tmp/discentes/Ingressantes em 2018.csv')
self.assertTrue(len(files) > 0 and file_exist)
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')
7 changes: 7 additions & 0 deletions tests/test_tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,3 +28,10 @@ def test_search_tags(self):
expected = ['cursos-de-graduacao', 'discentes', 'turmas',
'cursos-ufrn', 'estruturas-curriculares']
self.assertTrue(sorted(packages) == sorted(expected))

def test_can_download_tags(self):
"""Verifica se baixa-se arquivos de tags."""
self.ufrn_data.download_packages_by_tag('materiais', './tmp')
self.assertTrue(os.path.exists('./tmp/acervo-biblioteca'))
if os.path.exists('./tmp'):
shutil.rmtree('./tmp')
19 changes: 13 additions & 6 deletions tests/utils.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,24 @@
import io
import os
import sys
import shutil
import unittest
from os.path import dirname, join, abspath
sys.path.insert(0, abspath(join(dirname(__file__), '..')))
from odufrn_downloader import ODUFRNDownloader


def assert_console(output):
""" Recebe função que printa algo na tela e realiza assert
que verifica se foi printado."""
unit = unittest.TestCase()
def input_value(fun):
"""Recebe função que imprime algo na tela e retorna impressao."""
capturedOutput = io.StringIO()
sys.stdout = capturedOutput
output()
fun()
sys.stdout = sys.__stdout__
return unit.assertTrue(len(capturedOutput.getvalue()) > 0)
return capturedOutput.getvalue()


def assert_console(fun):
"""Recebe função que printa algo na tela e realiza assert
que verifica se foi printado."""
unit = unittest.TestCase()
return unit.assertTrue(len(input_value(fun)) > 0)

0 comments on commit 7ed5880

Please sign in to comment.