From 2db460a1f8910e83e1b1cdf06dce59b53b0f39b9 Mon Sep 17 00:00:00 2001 From: Italo Epifanio Date: Sat, 17 Aug 2019 15:18:32 -0300 Subject: [PATCH 1/4] Modifica travis e adiciona novos testes --- .travis.yml | 4 ++ .../mixins/filters/YearsMixin.py | 4 +- tests/test_file.py | 32 ++++++++++++++ tests/test_group.py | 42 +++++++++++++++---- tests/test_package.py | 36 ++++++++++++++++ tests/test_tag.py | 7 ++++ tests/utils.py | 19 ++++++--- 7 files changed, 127 insertions(+), 17 deletions(-) create mode 100644 tests/test_file.py diff --git a/.travis.yml b/.travis.yml index 2fdfe2c..9d3e1c6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -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 \ No newline at end of file diff --git a/odufrn_downloader/mixins/filters/YearsMixin.py b/odufrn_downloader/mixins/filters/YearsMixin.py index 54c5a2e..ca73555 100644 --- a/odufrn_downloader/mixins/filters/YearsMixin.py +++ b/odufrn_downloader/mixins/filters/YearsMixin.py @@ -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 @@ -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): diff --git a/tests/test_file.py b/tests/test_file.py new file mode 100644 index 0000000..bb21fb0 --- /dev/null +++ b/tests/test_file.py @@ -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' + ) + ) diff --git a/tests/test_group.py b/tests/test_group.py index f94b033..7334c98 100644 --- a/tests/test_group.py +++ b/tests/test_group.py @@ -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) diff --git a/tests/test_package.py b/tests/test_package.py index f319c6a..0713e4d 100644 --- a/tests/test_package.py +++ b/tests/test_package.py @@ -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( @@ -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') diff --git a/tests/test_tag.py b/tests/test_tag.py index 0e0c608..abbd1e1 100644 --- a/tests/test_tag.py +++ b/tests/test_tag.py @@ -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') diff --git a/tests/utils.py b/tests/utils.py index 353cb4e..677282f 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -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) From e12931dd39c094db0d668d87094561afe9b86c7c Mon Sep 17 00:00:00 2001 From: Mayra Azevedo Date: Mon, 19 Aug 2019 11:31:37 -0300 Subject: [PATCH 2/4] fix #51 --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c473cc9..3df5bf2 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,9 @@ Build + + Coverage Status + License From 0acbef866b6b4c6a9798dd7e883c9f42704caebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Diego=20Di=C3=B3genes?= Date: Mon, 19 Aug 2019 14:06:53 -0300 Subject: [PATCH 3/4] Update CONTRIBUTING.md --- CONTRIBUTING.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 41211a9..d85abc7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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 From 5ada5e1a8025fd0e042546bd8c49c0d2165815f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Ferreira=20Pires=20de=20Paiva?= Date: Thu, 22 Aug 2019 10:24:29 -0300 Subject: [PATCH 4/4] version 1.1.0 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e7473b7..fc86318 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setuptools.setup( name="odufrn_downloader", - version="1.0.2", + version="1.1.0", author="Open Data UFRN", author_email="alvarofepipa@gmail.com", description="Open Data UFRN Downloader",