def test_search_amendement_too_many(app, settings, lecture_an, article1_an, lecture_an_url, amendements_an, user_david): from zam_repondeur.models import Amendement nb_amendements = int(settings["zam.limits.max_amendements_for_full_index"]) with transaction.manager: for i in range(nb_amendements): Amendement.create(lecture=lecture_an, article=article1_an, num=i + 1) resp = app.get( f"{lecture_an_url}/search_amendement", params={"num": amendements_an[0].num}, user=user_david, ) assert resp.status_code == 200 assert resp.content_type == "application/json" assert resp.json == { "index": ("https://zam.test" "/dossiers/plfss-2018/lectures/an.15.269.PO717460/amendements/" "?article=article.1..#amdt-666") }
def test_number_of_amendements_is_displayed_too_many_amendements( wsgi_server, driver, settings, article1_an, lecture_an, lecture_an_url, amendements_an, ): from zam_repondeur.models import Amendement nb_amendements = int(settings["zam.limits.max_amendements_for_full_index"]) with transaction.manager: for i in range(nb_amendements): Amendement.create(lecture=lecture_an, article=article1_an, num=i + 1) driver.get(f"{lecture_an_url}/amendements/") trs = driver.find_elements_by_css_selector("tbody tr") assert len(trs) == 7 counter = driver.find_element_by_css_selector( 'span[data-target="amendements-filters.count"]') assert counter.text == "7 amendements pour cet article • 7 amendements au total"
def test_amendements_search_too_many( wsgi_server, settings, driver, lecture_an, article1_an, lecture_an_url, amendements_an, ): from zam_repondeur.models import Amendement nb_amendements = int(settings["zam.limits.max_amendements_for_full_index"]) with transaction.manager: for i in range(nb_amendements): Amendement.create(lecture=lecture_an, article=article1_an, num=i + 1) url = f"{lecture_an_url}/amendements/" driver.get(url) input_field = driver.find_element_by_css_selector( "thead tr.filters th:nth-child(3) input") input_field.send_keys("111") # Unknown numero. wait = WebDriverWait(driver, 1) wait.until(lambda driver: driver.current_url != url) filter_url = driver.current_url assert driver.find_element_by_css_selector( '[data-target="amendement-search.form"]').is_displayed() driver.find_element_by_css_selector("#q-amendement").send_keys( f"{amendements_an[0].num}{Keys.ENTER}") wait = WebDriverWait(driver, 1) wait.until(lambda driver: driver.current_url != filter_url) assert driver.current_url == f"{url}?article=article.1..#amdt-666"
def apply(self, lecture: Lecture) -> FetchResult: article = self._get_article(lecture) parent = self._get_parent(lecture, article) Amendement.create( lecture=lecture, article=article, parent=parent, position=self.position, num=self.num, rectif=self.rectif, tri_amendement=self.tri_amendement, id_discussion_commune=self.id_discussion_commune, id_identique=self.id_identique, matricule=self.matricule, groupe=self.groupe, auteur=self.auteur, mission_titre=self.mission_titre, mission_titre_court=self.mission_titre_court, corps=self.corps, expose=self.expose, sort=self.sort, date_depot=self.date_depot, ) return FetchResult.create(fetched={self.num}, created={self.num})
def test_download_xlsx_lots_of_amendements(app, lecture_an, article1_an, user_david): from zam_repondeur.models import Amendement nb_amendements = 11 with transaction.manager: for i in range(nb_amendements): Amendement.create(lecture=lecture_an, article=article1_an, num=i + 1) params = "&".join(f"n={i+1}" for i in range(nb_amendements)) resp = app.get( (f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/export_xlsx" f"?article={article1_an.url_key}&{params}"), user=user_david, ) assert resp.status_code == 200 assert ( resp.content_type == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") assert ( resp.headers["Content-Disposition"] == "attachment; filename=an-269-PO717460-article1-11amendements-1etc.xlsx" )
def test_get_amendements_columns_too_many_amendements(app, settings, article1_an, lecture_an, lecture_an_url, amendements_an, user_david): from zam_repondeur.models import Amendement nb_amendements = int(settings["zam.limits.max_amendements_for_full_index"]) with transaction.manager: for i in range(nb_amendements): Amendement.create(lecture=lecture_an, article=article1_an, num=i + 1) resp = app.get(f"{lecture_an_url}/amendements/", user=user_david) assert resp.status_code == 200 assert [ node.text().strip().split() for node in resp.parser.css("thead tr.filters th") if node.text().strip().split() ] == [ ["Art.", "1"], ["Nº", "Gouv."], ["Table/boîte", "Vide"], ["Avis", "Vide"], ["Réponse"], ] options = resp.parser.css("thead tr.filters th select option") assert "selected" in options[0].attributes
def test_post_form(app, lecture_an, lecture_an_url, article1_an, user_david): from zam_repondeur.models import Amendement, DBSession, Lecture # Initially, we only have one amendement (#135), with a response with transaction.manager: DBSession.add(lecture_an) lecture_an.texte.date_depot = datetime.utcnow().date() - timedelta( days=5) Amendement.create(lecture=lecture_an, article=article1_an, num=135, position=1) assert lecture_an.events == [] # No progress status by default. assert lecture_an.get_fetch_progress() == {} with setup_mock_responses( lecture=lecture_an, liste=read_sample_data("an/269/liste.xml"), amendements=( ("177", read_sample_data("an/269/177.xml")), ("270", read_sample_data("an/269/270.xml")), ("723", read_sample_data("an/269/723.xml")), ("135", read_sample_data("an/269/135.xml")), ("192", read_sample_data("an/269/192.xml")), ), ): # Then we ask for a refresh form = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/journal/", user=user_david).forms["manual-refresh"] resp = form.submit() assert resp.status_code == 302 assert resp.location == f"https://zam.test{lecture_an_url}/amendements/" resp = resp.follow() assert resp.status_code == 200 lecture_an = Lecture.get_by_pk(lecture_an.pk) # refresh object events = lecture_an.events assert len(events) == 1 assert events[0].render_summary() == "4 nouveaux amendements récupérés." assert "Rafraîchissement des amendements en cours." in resp.text # Default progress status for dummy progress bar is set. assert lecture_an.get_fetch_progress() == {"current": 1, "total": 10} # If we fetch again the journal, the refresh button is not present anymore. resp = app.get("/dossiers/plfss-2018/lectures/an.15.269.PO717460/journal/", user=user_david) assert resp.status_code == 200 assert "manual-refresh" not in resp.forms
def test_post_form(app, lecture_an, article1_an, user_david): from zam_repondeur.models import Amendement, Lecture # Initially, we only have one amendement (#135), with a response with transaction.manager: Amendement.create(lecture=lecture_an, article=article1_an, num=135, position=1) assert lecture_an.events == [] with setup_mock_responses( lecture=lecture_an, liste=read_sample_data("an/269/liste.xml"), amendements=( ("177", read_sample_data("an/269/177.xml")), ("270", read_sample_data("an/269/270.xml")), ("723", read_sample_data("an/269/723.xml")), ("135", read_sample_data("an/269/135.xml")), ("192", read_sample_data("an/269/192.xml")), ), ) as mock_resp: mock_resp.add( responses.GET, "http://www.assemblee-nationale.fr/15/projets/pl0269.asp", body=(Path(__file__).parent / "sample_data" / "pl0269.html").read_text( "utf-8", "ignore" ), status=200, ) # Then we ask for a refresh form = app.get("/lectures/an.15.269.PO717460/journal/", user=user_david).forms[ "manual-refresh" ] resp = form.submit() assert resp.status_code == 302 assert resp.location == "https://zam.test/lectures/an.15.269.PO717460/amendements" resp = resp.follow() assert resp.status_code == 200 lecture_an = Lecture.get( chambre=lecture_an.chambre, session_or_legislature=lecture_an.session, num_texte=lecture_an.texte.numero, partie=None, organe=lecture_an.organe, ) events = lecture_an.events assert len(events) == 2 assert events[0].render_summary() == "Le contenu des articles a été récupéré." assert events[1].render_summary() == "4 nouveaux amendements récupérés." assert "Rafraichissement des amendements et des articles en cours." in resp.text
def test_amendement_unicity(amendements_an, article1av_an): from zam_repondeur.models import Amendement, DBSession existing = amendements_an[0] with transaction.manager, pytest.raises(IntegrityError) as error_info: Amendement.create( lecture=existing.lecture, num=existing.num, rectif=existing.rectif + 1, article=article1av_an, parent=None, objet="don't worry, this is an expected error", ) DBSession.flush() assert "constraint" in error_info.value._message()
def test_lecture_post_transfer_amendements_to_index(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import Amendement, DBSession with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.add_amendement(amendements_an[0]) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/transfer_amendements", {"n": [amendements_an[0]]}, user=user_david, ) resp = resp.forms["transfer-amendements"].submit("submit-index") # We're redirected to our table assert resp.status_code == 302 assert resp.location == (("https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/")) # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) # The amendement is now on the index assert amendement.location.user_table is None assert amendement.location.shared_table is None assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index.") assert amendement.table_name == ""
def test_tables_grab_amendements(app, lecture_an, amendements_an, user_david, david_has_no_amendement): from zam_repondeur.models import Amendement email = user_david.email resp = app.post( f"/lectures/an.15.269.PO717460/tables/{email}", { "nums": [amdt.num for amdt in amendements_an], "submit-table": True }, user=user_david, ) # We're redirected to our table assert resp.status_code == 302 assert (resp.location == f"https://zam.test/lectures/an.15.269.PO717460/tables/{email}") # Reload amendements as they were updated in another transaction amendements = [ Amendement.get(lecture_an, amdt.num) for amdt in amendements_an ] assert_amendements_are_on_table_for(amendements, user_david) assert_amendements_have_event_with_summary( amendements, "<abbr title='*****@*****.**'>David</abbr> a mis l’amendement sur sa table", )
def test_tables_release_amendement(app, lecture_an, amendements_an, user_david, david_has_one_amendement): from zam_repondeur.models import Amendement email = user_david.email assert_amendement_is_on_table_for(amendements_an[0], user_david) resp = app.post( f"/lectures/an.15.269.PO717460/tables/{email}", { "nums": [amendements_an[0].num], "submit-index": True }, user=user_david, ) # We're redirected to our table assert resp.status_code == 302 assert (resp.location == f"https://zam.test/lectures/an.15.269.PO717460/tables/{email}") # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) assert_amendement_is_on_the_index(amendement) assert_amendement_has_event_with_summary( amendement, "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index", )
def test_write_with_affectation(lecture_senat, article1_senat, tmpdir, user_david_table_senat): from zam_repondeur.export.json import write_json from zam_repondeur.models import Amendement, DBSession filename = str(tmpdir.join("test.json")) with transaction.manager: DBSession.add(user_david_table_senat) amendement = Amendement.create( lecture=lecture_senat, article=article1_senat, alinea="", num=42, rectif=1, auteur="M. DUPONT", groupe="RDSE", matricule="000000", corps="<p>L'article 1 est supprimé.</p>", expose="<p>Cet article va à l'encontre du principe d'égalité.</p>", ) user_david_table_senat.amendements.append(amendement) counter = write_json(lecture_senat, filename, request={}) with open(filename, "r", encoding="utf-8-sig") as f_: backup = json.loads(f_.read()) amendements = backup["amendements"] articles = backup["articles"] assert counter["amendements"] == len(amendements) == 1 assert counter["articles"] == len(articles) == 1 assert amendements[0]["affectation_email"] == "*****@*****.**" assert amendements[0]["affectation_name"] == "David"
def test_tables_steal_amendements(app, lecture_an, amendements_an, user_david, david_has_two_amendements, user_ronan): from zam_repondeur.models import Amendement assert len(user_ronan.table_for(lecture_an).amendements) == 0 email = user_ronan.email # Transfer amendements to ronan's table (stealing them from david) resp = app.post( f"/lectures/an.15.269.PO717460/tables/{email}", { "nums": [amendements_an[0].num, amendements_an[1].num], "submit-table": True }, user=user_ronan, ) # We're redirected to our table assert resp.status_code == 302 assert (resp.location == f"https://zam.test/lectures/an.15.269.PO717460/tables/{email}") # Reload amendements as they were updated in another transaction amendements = [ Amendement.get(lecture_an, amdt.num) for amdt in amendements_an ] assert_amendements_are_on_table_for(amendements, user_ronan) assert_amendements_have_event_with_summary( amendements, "<abbr title='*****@*****.**'>Ronan</abbr> " "a transféré l’amendement de « David ([email protected]) » à lui/elle-même", )
def test_transfer_one_amendement_to_myself_is_a_no_op( self, app, lecture_an, amendements_an, user_david, david_has_one_amendement ): from zam_repondeur.models import Amendement email = user_david.email resp = app.post( f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/{email}", {"n": [amendements_an[0].num], "submit-table": True}, user=user_david, ) # We're redirected to our table assert resp.status_code == 302 assert resp.location == ( "https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/" ) # Reload amendement before checking for changes in the web transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) assert_amendement_is_on_table_for(amendement, user_david) assert len(amendement.events) == 0
def test_transfer_one_amendement_to_index_manually_is_forbidden( self, app, lecture_an, amendements_an, user_david, david_has_one_amendement ): from zam_repondeur.models import Amendement email = user_david.email resp = app.post( f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/{email}", {"n": [amendements_an[0].num], "target": ""}, user=user_david, ) # We're redirected back to the form assert resp.status_code == 302 assert resp.location == ( ( "https://zam.test" "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/transfer_amendements?n=666" ) ) # Reload amendement before checking for changes in the web transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) assert_amendement_is_on_table_for(amendement, user_david) assert len(amendement.events) == 0
def test_tables_release_amendements( app, lecture_an, amendements_an, user_david, david_has_two_amendements ): from zam_repondeur.models import Amendement email = user_david.email resp = app.post( f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/{email}", {"n": [amendements_an[0].num, amendements_an[1].num], "submit-index": True}, user=user_david, ) # We're redirected to our table assert resp.status_code == 302 assert resp.location == ( "https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/" ) # Reload amendements as they were updated in another transaction amendements = [Amendement.get(lecture_an, amdt.num) for amdt in amendements_an] assert_amendements_are_on_the_index(amendements) assert_amendements_have_event_with_summary( amendements, "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index.", )
def test_fetch_amendements_with_errored(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import Amendement with patch("zam_repondeur.views.lectures.get_amendements" ) as mock_get_amendements: mock_get_amendements.return_value = ( [ Amendement( chambre="an", session="15", num_texte=269, organe="PO717460", subdiv_type="article", subdiv_num="1", num=666, position=1, ) ], ["111", "222"], ) resp = app.post("/lectures/an.15.269.PO717460/fetch_amendements") assert resp.status_code == 302 assert resp.location == "http://localhost/lectures/an.15.269.PO717460/" resp = resp.follow() assert resp.status_code == 200 assert "Les amendements 111, 222 n’ont pu être récupérés." in resp.text assert "1 amendement inchangé." in resp.text
def test_lecture_post_transfer_amendements_from_void_to_shared_table( app, lecture_an, amendements_an, user_david, shared_table_lecture_an): from zam_repondeur.models import Amendement resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/transfer_amendements", {"n": [amendements_an[0]]}, user=user_david, ) form = resp.forms["transfer-amendements"] form["target"] = shared_table_lecture_an.slug resp = form.submit("submit-to") # We're redirected to our table assert resp.status_code == 302 assert resp.location == (("https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/")) # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) # The amendement is now on the shared table. assert amendement.location.user_table is None assert amendement.location.shared_table.pk == shared_table_lecture_an.pk assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a transféré l’amendement à « Test table ».") assert amendement.table_name == "Test table"
def test_download_pdf_multiple_amendements_multiple_articles( app, lecture_an, article7bis_an, amendements_an, user_david): from zam_repondeur.models import Amendement with transaction.manager: Amendement.create(lecture=lecture_an, article=article7bis_an, num=777) resp = app.get( ("/dossiers/plfss-2018/lectures/an.15.269.PO717460/export_pdf" "?article=all&n=666&n=777"), user=user_david, ) assert resp.status_code == 200 assert resp.content_type == "application/pdf" assert (resp.headers["Content-Disposition"] == "attachment; filename=an-269-PO717460-amendements-666_777.pdf")
def test_export_csv_with_parent(lecture_an, article1_an, tmpdir): from zam_repondeur.models import Amendement, DBSession from zam_repondeur.services.import_export.csv import export_csv filename = str(tmpdir.join("test.csv")) amendements = [ Amendement.create( lecture=lecture_an, article=article1_an, num=num, position=position, avis="Favorable", objet="Un objet très pertinent", reponse="Une réponse très appropriée", comments="Avec des commentaires", ) for position, num in enumerate((333, 777), 1) ] amendements[1].parent = amendements[0] DBSession.add_all(amendements) DBSession.add(lecture_an) counter = export_csv(lecture_an, filename, request={}) assert counter["amendements"] == 2 with Path(filename).open(encoding="utf-8-sig") as csv_file: reader = csv.DictReader(csv_file, delimiter=";") amendement1 = next(reader) assert amendement1["Parent (sous-amdt)"] == "" amendement2 = next(reader) assert amendement2["Parent (sous-amdt)"] == "333"
def test_lecture_post_transfer_amendements_from_shared_table_to_other( app, lecture_an, amendements_an, user_david, user_ronan, shared_table_lecture_an): from zam_repondeur.models import Amendement, DBSession with transaction.manager: DBSession.add(amendements_an[0]) amendements_an[0].location.shared_table = shared_table_lecture_an resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/transfer_amendements", {"n": [amendements_an[0]]}, user=user_david, ) form = resp.forms["transfer-amendements"] form["target"] = user_ronan.email resp = form.submit("submit-to") # We're redirected to our table assert resp.status_code == 302 assert resp.location == (("https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/")) # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) # The amendement is now on their table. assert amendement.location.user_table.user.email == user_ronan.email assert amendement.location.shared_table is None assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a transféré l’amendement de « Test table » " "à « Ronan ([email protected]) ».")
def test_tables_grab_amendement( app, lecture_an, amendements_an, user_david, david_has_no_amendement ): from zam_repondeur.models import Amendement email = user_david.email # We're redirected to our table resp = app.post( f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/{email}", {"n": [amendements_an[0].num], "submit-table": True}, user=user_david, ) # We're redirected to our table assert resp.status_code == 302 assert resp.location == ( "https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/" ) # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) assert_amendement_is_on_table_for(amendement, user_david) assert_amendement_has_event_with_summary( amendement, ( "<abbr title='*****@*****.**'>David</abbr> " "a mis l’amendement sur sa table." ), )
def test_generate_pdf_amendement_with_responses(app, lecture_senat, article1_senat): from zam_repondeur.models import Amendement, AmendementList from zam_repondeur.services.import_export.pdf import generate_html_for_pdf amendement = Amendement.create( lecture=lecture_senat, article=article1_senat, alinea="", num=42, rectif=1, auteur="M. DUPONT", groupe="RDSE", matricule="000000", corps="<p>L'article 1 est supprimé.</p>", expose="<p>Cet article va à l'encontre du principe d'égalité.</p>", resume="Suppression de l'article", position=1, avis="Favorable", ) amdt_list = AmendementList([amendement]) parser = HTMLParser( generate_html_for_pdf( DummyRequest(), "print/multiple.html", { "amendements": amdt_list, "article_amendements": amdt_list }, )) assert _html_page_titles(parser) == ["Réponse", "Amendement nº 42 rect."]
def test_tables_steal_amendement_resets_editing_status( app, lecture_an, amendements_an, user_david, david_has_one_amendement, user_ronan, team_zam, ): from zam_repondeur.models import Amendement, DBSession with transaction.manager: team_zam.users.append(user_ronan) DBSession.add(team_zam) amendements_an[0].start_editing() assert amendements_an[0].is_being_edited # Transfer amendement to ronan's table (stealing it from david) email = user_ronan.email app.post( f"/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/{email}", {"n": [amendements_an[0].num], "submit-table": True}, user=user_ronan, ) amendement = Amendement.get(lecture_an, amendements_an[0].num) assert not amendement.is_being_edited
def test_export_csv_with_identique(lecture_an, article1_an, tmpdir): from zam_repondeur.export.spreadsheet import write_csv from zam_repondeur.models import DBSession, Amendement filename = str(tmpdir.join("test.csv")) amendements = [ Amendement.create( lecture=lecture_an, article=article1_an, num=num, position=position, avis="Favorable", objet="Un objet très pertinent", reponse="Une réponse très appropriée", comments="Avec des commentaires", ) for position, num in enumerate((333, 444, 777), 1) ] amendements[0].id_identique = 42 amendements[1].id_identique = 42 DBSession.add_all(amendements) DBSession.add(lecture_an) counter = write_csv(lecture_an, filename, request={}) assert counter["amendements"] == 3 with Path(filename).open(encoding="utf-8-sig") as csv_file: reader = csv.DictReader(csv_file, delimiter=";") amendement1 = next(reader) assert amendement1["Identique"] == "333" amendement2 = next(reader) assert amendement2["Identique"] == "333" amendement3 = next(reader) assert amendement3["Identique"] == ""
def test_lecture_post_transfer_amendements_to_index(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession, Amendement with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.amendements.append(amendements_an[0]) resp = app.get( "/lectures/an.15.269.PO717460/transfer_amendements", {"nums": [amendements_an[0]]}, user=user_david, ) resp = resp.form.submit("submit-index") # We're redirected to our table assert resp.status_code == 302 assert ( resp.location == f"https://zam.test/lectures/an.15.269.PO717460/tables/{user_david.email}" ) # Reload amendement as it was updated in another transaction amendement = Amendement.get(lecture_an, amendements_an[0].num) # The amendement is now on the index assert amendement.user_table is None assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index")
def test_batch_amendements_is_hidden_when_selected_amendements_have_different_articles( wsgi_server, driver, lecture_an, article7bis_an, amendements_an, lecture_an_url, user_david, user_david_table_an, ): from zam_repondeur.models import Amendement, DBSession with transaction.manager: amendement = Amendement.create(lecture=lecture_an, article=article7bis_an, num=777) DBSession.add(user_david_table_an) user_david_table_an.add_amendement(amendements_an[0]) user_david_table_an.add_amendement(amendements_an[1]) user_david_table_an.add_amendement(amendement) driver.get(f"{lecture_an_url}/tables/{user_david.email}") checkboxes = driver.find_elements_by_css_selector( '[name="amendement-selected"]') checkboxes[0].click() checkboxes[1].click() checkboxes[2].click() group_actions = driver.find_element_by_css_selector(".groupActions") assert group_actions.is_displayed() batch_amendements = driver.find_element_by_css_selector( "#batch-amendements") assert not batch_amendements.is_displayed()
def test_column_filtering_by_value_for_missions( wsgi_server, driver, lecture_plf2018_an_premiere_lecture_seance_publique_2, article1_plf2018_an_premiere_lecture_seance_publique_2, amendements_plf2018_an_premiere_lecture_seance_publique_2, column_index, input_text, kind, initial, filtered, ): from zam_repondeur.models import Amendement, DBSession LECTURE_URL = ( f"{wsgi_server.application_url}" f"dossiers/" f"{lecture_plf2018_an_premiere_lecture_seance_publique_2.dossier.url_key}/" f"lectures/{lecture_plf2018_an_premiere_lecture_seance_publique_2.url_key}" ) with transaction.manager: amendement = Amendement.create( lecture=lecture_plf2018_an_premiere_lecture_seance_publique_2, article=article1_plf2018_an_premiere_lecture_seance_publique_2, num=222, position=3, mission_titre="Mission Action extérieure de l'État", mission_titre_court="Action ext.", ) DBSession.add(amendement) driver.get(f"{LECTURE_URL}/amendements/") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial input_field = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) input") input_field.send_keys(input_text) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == filtered assert ( driver.current_url == f"{LECTURE_URL}/amendements/?{kind}={input_text.replace(' ', '+')}") # Restore initial state. input_field.send_keys(Keys.BACKSPACE * len(input_text)) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial assert driver.current_url == f"{LECTURE_URL}/amendements/" # Check filters are active on URL (re)load. driver.get(f"{LECTURE_URL}/amendements/?{kind}={input_text}") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == filtered input_field = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) input") input_field.send_keys(Keys.BACKSPACE * len(input_text)) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial assert driver.current_url == f"{LECTURE_URL}/amendements/"
def test_column_filtering_by_value( wsgi_server, driver, lecture_an, lecture_an_url, article1_an, amendements_an, user_david_table_an, user_ronan_table_an, user_daniel_table_an, column_index, input_text, kind, initial, filtered, ): from zam_repondeur.models import Amendement, DBSession with transaction.manager: DBSession.add(user_ronan_table_an) DBSession.add(user_david_table_an) DBSession.add(user_daniel_table_an) user_ronan_table_an.add_amendement(amendements_an[0]) user_david_table_an.add_amendement(amendements_an[1]) amendement = Amendement.create(lecture=lecture_an, article=article1_an, num=777, position=3) user_daniel_table_an.add_amendement(amendement) driver.get(f"{lecture_an_url}/amendements/") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial input_field = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) input") input_field.send_keys(input_text) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == filtered assert ( driver.current_url == f"{lecture_an_url}/amendements/?{kind}={input_text.replace(' ', '+')}") # Restore initial state. input_field.send_keys(Keys.BACKSPACE * len(input_text)) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial assert driver.current_url == f"{lecture_an_url}/amendements/" # Check filters are active on URL (re)load. driver.get(f"{lecture_an_url}/amendements/?{kind}={input_text}") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == filtered input_field = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) input") input_field.send_keys(Keys.BACKSPACE * len(input_text)) trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_column_text(column_index, trs) == initial assert driver.current_url == f"{lecture_an_url}/amendements/"