diff --git a/conftest.py b/conftest.py index d2c48a3..ff062ea 100644 --- a/conftest.py +++ b/conftest.py @@ -67,7 +67,7 @@ def context( current_video_name = context.current_video_name current_video_path = current_video_name updated_video_path = os.path.join( - video_path, f"{request.node.originalname}_{browser_name}.webm" + video_path, f"{request.node.originalname}_{browser_name}.mp4" ) context.close() os.rename(current_video_path, updated_video_path) diff --git a/controllers/expedientes.py b/controllers/expedientes.py index 72db2b6..f189557 100644 --- a/controllers/expedientes.py +++ b/controllers/expedientes.py @@ -2,8 +2,11 @@ __author__ = "María Andrea Vignau (mavignau@gmail.com)" __copyright__ = "(C) 2016 María Andrea Vignau. GNU GPL 3." - -linked_tables = ['movimiento', 'agenda', 'parte'] +import zipfile +import io +LINKED_TABLES = ['movimiento', 'agenda', 'parte'] +ZIP_FILENAME = 'Movimiento.zip' +CHUNK_SIZE = 4096 @auth.requires_login() @@ -50,7 +53,7 @@ def index(): constraints={ 'expediente': ( db.expediente.created_by == auth.user.id)}, - linked_tables=linked_tables, + linked_tables=LINKED_TABLES, buttons_placement='right', exportclasses=myexport, advanced_search=False, @@ -64,6 +67,28 @@ def index(): return locals() +@auth.requires_login() +def download(): + tempfile = io.BytesIO() + temparchive = zipfile.ZipFile(tempfile, 'w', zipfile.ZIP_DEFLATED) + rows = db(db.movimiento.archivo != None).select() + try: + for file_id in rows: + file_single = file_id.archivo + if file_single: + file_loc = db.movimiento.archivo.retrieve_file_properties(file_single)['path']+ '/' + file_single + file_name = db.movimiento.archivo.retrieve_file_properties(file_single)['filename'] + temparchive.write(file_loc, file_name) + finally: + temparchive.close() + tempfile.seek(0) + + response.headers['Content-Type'] = 'application/zip' + response.headers['Content-Disposition'] = 'attachment; filename = %s' % ZIP_FILENAME + res = response.stream(tempfile, CHUNK_SIZE) + return res + + def vista_expediente(): 'muestra un panel a la izquierda que tiene los datos del expediente y permite navegar en él' expte = SQLFORM(db.expediente, @@ -81,11 +106,15 @@ def vista_expediente(): user_signature=True) links = [A('Expediente', _href=url, _type='button', _class='btn btn-default')] - for k in linked_tables: + for k in LINKED_TABLES: args = ['expediente', '%s.expediente_id' % k, request.args[0]] url = URL('index', args=args, user_signature=True) text = SPAN(k.capitalize() + 's', _class='buttontext button') links.append(A(text, _href=url, _type='button', _class='btn btn-default')) + url = URL('download', args='movimiento.archivo') #Boton de descarga + text1="Descarga" + links.append(A(text1, _href=url, _type='button', + _class='btn btn-default')) return dict(links=links, expte=expte) diff --git a/tests/test_user.py b/tests/test_user.py index ca1eef4..2895753 100644 --- a/tests/test_user.py +++ b/tests/test_user.py @@ -1,3 +1,11 @@ +def login(page): + page.click("text=Log In") + page.click(":nth-match(:text(\"Log In\"), 2)") + page.fill("input[name=\"email\"]", "example@example.com") + page.press("input[name=\"email\"]", "Tab") + page.fill("input[name=\"password\"]", "openlex1234") + page.click("input:has-text(\"Log In\")") + def test_register(page): # ir a la página de inicio (ver pytest.ini para la url base) page.goto("") @@ -30,15 +38,34 @@ def test_login(page): # ir a la página de inicio (ver pytest.ini para la url base) page.goto("") # desplegar el menu, ir a la página de registración (y confirmar url) - page.click("text=Log In") - page.click(":nth-match(:text(\"Log In\"), 2)") - assert page.url.endswith("/OpenLex/default/user/login?_next=/OpenLex/default/index") - - # complear el formulario: - page.fill("input[name=\"email\"]", "example@example.com") - page.press("input[name=\"email\"]", "Tab") - page.fill("input[name=\"password\"]", "openlex1234") - page.click("input:has-text(\"Log In\")") - + login(page) # confirmar assert page.url.endswith("/dashboard/view#") + + +def test_upload_expedientes(page): + page.goto("") + login(page) + page.click("css=[alt=Expedientes]") + assert page.url.endswith("/expedientes/index") + page.click("text=Agregar") + page.fill("input[name=\"numero\"]", "1111") + page.press("input[name=\"numero\"]", "Tab") + page.fill("input[name=\"caratula\"]", "ssdd") + page.click("input:has-text(\"Enviar\")") + + +def test_download(page): + page.goto("") + page.setDefaultTimeout(10000) + login(page) + page.goto("expedientes/index") + page.click("text=Movimientos") + with page.expect_download() as download_info: + # Perform the action that initiates download + page.click("text=Descarga") + download = download_info.value + # Wait for the download process to complete + name = download.suggested_filename + #cut_link = link[22:] + assert "Movimiento.zip" == name