def test_reponses_article_additionnel_avant( app, lecture_an, amendements_an, article1av_an, user_david ): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" amendements_an[0].article = article1av_an DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1..avant" "/reponses" ), user=user_david, ) section_ids = [ section.attributes.get("id") for section in resp.parser.tags("section") if "id" in section.attributes ] assert section_ids == ["article-add-av-1"] article_titles = [item.text() for item in resp.parser.css(".titles h2")] assert article_titles == ["Article add. av. 1"]
def test_upload_affectation_box_existing_not_updated( self, app, lecture_an, user_david): from zam_repondeur.models import Amendement, DBSession, SharedTable from zam_repondeur.models.events.amendement import AmendementTransfere with transaction.manager: DBSession.add_all([user_david]) amendement = (DBSession.query(Amendement).filter( Amendement.num == 666).first()) shared_table = SharedTable.create(lecture=lecture_an, titre="PréRIM") shared_table.add_amendement(amendement) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.shared_table.titre == "PréRIM" amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.shared_table is None self._upload_backup(app, "backup_with_affectation_box.json", user_david) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.shared_table.titre == "PréRIM" # No transfer event has been created assert not any(event for event in amendement.events if isinstance(event, AmendementTransfere)) amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.shared_table is None
def test_reponses_with_textes(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" amendement.article.user_content.title = "Titre article" amendement.article.content = {"001": "Premier paragraphe"} DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1.." "/reponses" ), user=user_david, ) fake_anchor = resp.parser.css_first("#content-article-1") article_content = fake_anchor.parent.css_first(".article") assert article_content.css_first("h2").text() == "Titre article" assert article_content.css_first("h3").text() == "Texte de l’article" assert article_content.css_first("dt").text() == "001" assert article_content.css_first("dd").text().strip() == "Premier paragraphe"
def test_reponses_without_textes_or_presentations( app, lecture_an, amendements_an, user_david ): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1.." "/reponses" ), user=user_david, ) fake_anchor = resp.parser.css_first("#content-article-1") article_content = fake_anchor.parent.css_first(".article") assert article_content.css_first("h3") is None
def test_reponses_gouvernemental(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.auteur = "LE GOUVERNEMENT" DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1.." "/reponses" ), user=user_david, ) test_amendement = resp.find_amendement(amendements_an[0]) assert test_amendement is not None assert test_amendement.number_is_in_title() assert test_amendement.has_gouvernemental_class() test_amendement = resp.find_amendement(amendements_an[1]) assert test_amendement is not None assert test_amendement.number_is_in_title() assert test_amendement.has_gouvernemental_class()
def test_reponses_abandoned_and_gouvernemental_not_displayed( app, lecture_an, amendements_an, sort, user_david ): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" amendement.auteur = "LE GOUVERNEMENT" # Only the last one. amendement.sort = sort DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1.." "/reponses" ), user=user_david, ) test_amendement = resp.find_amendement(amendements_an[0]) assert test_amendement is not None assert test_amendement.number_is_in_title() assert test_amendement.has_gouvernemental_class() assert resp.find_amendement(amendements_an[1]) is None
def test_reponses_not_grouping_on_same_reponse_only( app, lecture_an, amendements_an, user_david ): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = "Réponse" DBSession.add_all(amendements_an) resp = app.get( ( "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/articles/article.1.." "/reponses" ), user=user_david, ) assert resp.status_code == 200 test_amendement_666 = resp.find_amendement(amendements_an[0]) assert test_amendement_666.number_is_in_title() test_amendement_999 = resp.find_amendement(amendements_an[1]) assert test_amendement_999.number_is_in_title() assert ( test_amendement_666.node.css_first("header h2").text().strip() != test_amendement_999.node.css_first("header h2").text().strip() )
def test_amendement_edit_notification_on_amendement_transfer( wsgi_server, driver, lecture_an, amendements_an, lecture_an_url, user_david_table_an): from zam_repondeur.models import DBSession with transaction.manager: DBSession.add(user_david_table_an) user_david_table_an.add_amendement(amendements_an[0]) DBSession.add_all(amendements_an) driver.get(f"{lecture_an_url}/amendements/{amendements_an[0].num}/") status = driver.find_element_by_css_selector('div[role="status"] div') assert not status.is_displayed() assert not status.text with transaction.manager: amendements_an[0].location.user_table = None DBSession.add_all(amendements_an) sleep( wsgi_server.settings["zam.check_for.amendement_stolen_while_editing"]) assert status.is_displayed() assert status.text == ( "L’amendement en cours d’édition n’est plus sur votre table. " "Votre saisie ne va PAS être sauvegardée. Retourner à ma table")
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_get_amendements_columns_not_default_article(app, lecture_an_url, amendements_an, article7bis_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: amendements_an[0].article = article7bis_an DBSession.add_all(amendements_an) resp = app.get( f"{lecture_an_url}/amendements/", params={"article": "article.7.bis."}, 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() ] == [ ["Tous", "Art.", "1", "Art.", "7", "bis"], ["Nº", "Gouv."], ["Table/boîte", "Vide"], ["Avis", "Vide"], ["Réponse"], ] options = resp.parser.css("thead tr.filters th select option") assert "selected" not in options[0].attributes assert "selected" not in options[1].attributes assert "selected" in options[2].attributes
def test_previous_next_displayable(self, article1_an, lecture_an, amendements_an): from zam_repondeur.models import Article, DBSession article_6 = Article.create(lecture=lecture_an, type="article", num=6) apres_article_6 = Article.create(lecture=lecture_an, type="article", num=6, pos="après") avant_article_7 = Article.create(lecture=lecture_an, type="article", num=7, pos="avant") article_7 = Article.create(lecture=lecture_an, type="article", num=7) amendements_an[0].article = avant_article_7 amendements_an[0].user_content.avis = "Favorable" DBSession.add_all(amendements_an) assert article1_an.previous_displayable_article is None assert article1_an.next_displayable_article == article_6 assert article_6.previous_displayable_article == article1_an assert article_6.next_displayable_article == avant_article_7 assert apres_article_6.previous_displayable_article == article_6 assert apres_article_6.next_displayable_article == avant_article_7 assert avant_article_7.previous_displayable_article == article_6 assert avant_article_7.next_displayable_article == article_7 assert article_7.previous_displayable_article == avant_article_7 assert article_7.next_displayable_article is None
def test_reponses_full(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import DBSession with transaction.manager: for amendement in dummy_amendements: amendement.avis = "Favorable" amendement.observations = f"Observations pour {amendement.num}" amendement.reponse = f"Réponse pour {amendement.num}" DBSession.add_all(dummy_amendements) resp = app.get("http://localhost/lectures/an.15.269.PO717460/reponses") assert resp.status_code == 200 assert resp.first_element("h1") == dummy_lecture.dossier_legislatif assert resp.first_element("h2") == str(dummy_lecture) test_amendement = resp.find_amendement(dummy_amendements[0]) assert test_amendement is not None assert test_amendement.number_is_in_title() assert not test_amendement.has_gouvernemental_class() test_amendement = resp.find_amendement(dummy_amendements[1]) assert test_amendement is not None assert test_amendement.number_is_in_title() assert not test_amendement.has_gouvernemental_class()
def test_lecture_get_batch_amendements_different_mission( app, lecture_an, article7bis_an, amendements_an, user_david, david_has_two_amendements, ): from zam_repondeur.models import DBSession with transaction.manager: amendements_an[0].mission_titre = "test" DBSession.add_all(amendements_an) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/batch_amendements", {"n": amendements_an}, user=user_david, ) assert resp.status_code == 302 assert resp.location == ( "https://zam.test" "/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/[email protected]/" ) resp = resp.follow() assert ("Tous les amendements doivent être relatifs à la même mission " "pour pouvoir être associés.") in resp.text
def test_upload_updates_affectation(self, app, lecture_an, user_david, user_ronan): from zam_repondeur.models import DBSession, Amendement with transaction.manager: DBSession.add_all([user_david, user_ronan]) amendement = (DBSession.query(Amendement).filter( Amendement.num == 666).first()) amendement.user_table = user_ronan.table_for(lecture_an) assert amendement.user_table.user.email == "*****@*****.**" assert amendement.user_table.user.name == "Ronan" amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.user_table is None self._upload_backup(app, "backup_with_affectation.json", user_ronan) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.user_table.user.email == "*****@*****.**" assert (amendement.user_table.user.name == "David" ) # Should not override the name of an existing user. amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.user_table is None
def test_table_notification_on_amendement_transfer(wsgi_server, driver, lecture_an, amendements_an, user_david_table_an, user_david): from zam_repondeur.models import DBSession LECTURE_URL = f"{wsgi_server.application_url}lectures/{lecture_an.url_key}" with transaction.manager: DBSession.add(user_david_table_an) user_david_table_an.amendements.append(amendements_an[0]) DBSession.add_all(amendements_an) driver.get(f"{LECTURE_URL}/tables/{user_david.email}") status = driver.find_element_by_css_selector('div[role="status"] div') assert not status.is_displayed() assert not status.text with transaction.manager: amendements_an[0].user_table = None DBSession.add_all(amendements_an) sleep(wsgi_server.settings["zam.check_for.transfers_from_to_my_table"]) assert status.is_displayed() assert status.text == "L’amendement 666 a été retiré de votre table. Rafraîchir"
def test_lecture_get_batch_amendements_same_reponses_different_comments( app, lecture_an, amendements_an, user_david, david_has_two_amendements): from zam_repondeur.models import DBSession with transaction.manager: amendements_an[0].user_content.avis = "Favorable" amendements_an[1].user_content.avis = "Favorable" amendements_an[1].user_content.comments = "Commentaire" DBSession.add_all(amendements_an) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/batch_amendements", {"n": amendements_an}, user=user_david, ) assert resp.status_code == 302 assert resp.location == ( "https://zam.test" "/dossiers/plfss-2018/lectures/an.15.269.PO717460/tables/[email protected]/" ) resp = resp.follow() assert ( "Tous les amendements doivent avoir les mêmes réponses et commentaires avant " "de pouvoir être associés.") in resp.text
def test_reponses_authors_not_grouping(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = "Objet" amendement.user_content.reponse = "Réponse" amendement.auteur = "M. JEAN" amendement.groupe = "Les Indépendants" amendement.auteur = "M. CLAUDE" amendement.groupe = "Les Mécontents" DBSession.add_all(amendements_an) resp = app.get( "/lectures/an.15.269.PO717460/articles/article.1../reponses", user=user_david) assert resp.status_code == 200 test_amendement_666 = resp.find_amendement(amendements_an[0]) assert test_amendement_666.number_is_in_title() test_amendement_999 = resp.find_amendement(amendements_an[1]) assert test_amendement_999.number_is_in_title() assert (_text_from_node(test_amendement_666.node, "header .authors") == "M. JEAN (Les Indépendants ), M. CLAUDE (Les Mécontents)")
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_reponses_with_different_articles(app, lecture_an, amendements_an, article7bis_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for index, amendement in enumerate(amendements_an, 1): amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" amendement.article.user_content.title = f"Titre article {index}" # Only the last one. amendement.article = article7bis_an DBSession.add_all(amendements_an) resp = app.get( "/lectures/an.15.269.PO717460/articles/article.1../reponses", user=user_david) assert resp.parser.css(".titles h2")[0].text() == "Article 1" assert len(resp.parser.css("nav.secondary")) == 2 assert (resp.parser.css_first("nav.secondary .arrow-right").text().strip() == "Article 7 bis") assert (resp.parser.css_first( "nav.secondary.bottom .arrow-right").text().strip() == "Article 7 bis") resp = app.get( "/lectures/an.15.269.PO717460/articles/article.7.bis./reponses") assert resp.parser.css(".titles h2")[0].text() == "Article 7 bis" assert (resp.parser.css_first("nav.secondary .arrow-left").text().strip() == "Article 1") assert (resp.parser.css_first( "nav.secondary.bottom .arrow-left").text().strip() == "Article 1")
def test_reponses_grouping(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = "Objet" amendement.user_content.reponse = "Réponse" DBSession.add_all(amendements_an) resp = app.get( "/lectures/an.15.269.PO717460/articles/article.1../reponses", user=user_david) assert resp.status_code == 200 test_amendement_666 = resp.find_amendement(amendements_an[0]) assert test_amendement_666.number_is_in_title() test_amendement_999 = resp.find_amendement(amendements_an[1]) assert test_amendement_999.number_is_in_title() assert (test_amendement_666.node.css_first("header h2").text().strip() == test_amendement_999.node.css_first("header h2").text().strip()) assert (_text_from_node(test_amendement_666.node, "header h2") == "Amendements 666 et 999")
def test_without_batch(self, amendements_an): from zam_repondeur.models import Amendement, DBSession amendement_666, amendement_999 = amendements_an assert list(amendement_666._displayable_identiques()) == [] assert list(amendement_999._displayable_identiques()) == [] with transaction.manager: DBSession.add_all(amendements_an) amendement_666.id_identique = 41 amendement_999.id_identique = 41 amendement_666.id_discussion_commune = 42 amendement_999.id_discussion_commune = 42 amendement_666.user_content.avis = "Sagesse" amendement_999.user_content.avis = "Sagesse" amendements_an = DBSession.query(Amendement).all() # reload amendement_666, amendement_999 = amendements_an assert list( amendement_666._displayable_identiques()) == [amendement_999] assert list( amendement_999._displayable_identiques()) == [amendement_666]
def test_reponses_full(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: for amendement in amendements_an: amendement.user_content.avis = "Favorable" amendement.user_content.objet = f"Objet pour {amendement.num}" amendement.user_content.reponse = f"Réponse pour {amendement.num}" DBSession.add_all(amendements_an) resp = app.get( "/lectures/an.15.269.PO717460/articles/article.1../reponses", user=user_david) assert resp.status_code == 200 test_amendement_666 = resp.find_amendement(amendements_an[0]) assert test_amendement_666 is not None assert test_amendement_666.number_is_in_title() assert not test_amendement_666.has_gouvernemental_class() test_amendement_999 = resp.find_amendement(amendements_an[1]) assert test_amendement_999 is not None assert test_amendement_999.number_is_in_title() assert not test_amendement_999.has_gouvernemental_class() assert (test_amendement_666.node.css_first("header h2").text().strip() != test_amendement_999.node.css_first("header h2").text().strip()) assert _text_from_node(test_amendement_666.node, "header h2") == "Amendement 666"
def test_amendements_identiques(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession with transaction.manager: DBSession.add_all(amendements_an) amendements_an[0].id_identique = 42 amendements_an[1].id_identique = 42 assert amendements_an[0].all_identiques == [amendements_an[1]] assert amendements_an[1].all_identiques == [amendements_an[0]] resp = app.get(f"/lectures/{lecture_an.url_key}/amendements", user=user_david) assert resp.status_code == 200 amendements = resp.parser.css("tbody tr") assert len(amendements) == 2 identiques = resp.parser.css("tbody tr td.identique") assert len(identiques) == 2 assert "first" in identiques[0].attributes["class"] assert "last" not in identiques[0].attributes["class"] assert "first" not in identiques[1].attributes["class"] assert "last" in identiques[1].attributes["class"]
def test_different_reponse(self, amendements_an): from zam_repondeur.models import Amendement, DBSession amendement_666, amendement_999 = amendements_an assert list(amendement_666._displayable_identiques()) == [] assert list(amendement_999._displayable_identiques()) == [] with transaction.manager: DBSession.add_all(amendements_an) amendement_666.id_identique = 41 amendement_999.id_identique = 41 amendement_666.id_discussion_commune = 42 amendement_999.id_discussion_commune = 42 amendement_666.user_content.avis = "Favorable" amendement_999.user_content.avis = "Favorable" amendement_666.user_content.reponse = "Une réponse" amendement_999.user_content.reponse = "Une autre réponse" amendements_an = DBSession.query(Amendement).all() # reload amendement_666, amendement_999 = amendements_an assert list( amendement_666._displayable_identiques()) == [amendement_999] assert list( amendement_999._displayable_identiques()) == [amendement_666] assert not amendement_666.all_displayable_identiques_have_same_response( ) assert not amendement_999.all_displayable_identiques_have_same_response( )
def test_post_amendement_edit_form_creates_event_only_if_modified( app, lecture_an_url, amendements_an_batch, user_david, user_david_table_an): from zam_repondeur.models import DBSession amendement_666 = amendements_an_batch[0] # Let's set a response on the amendement with transaction.manager: DBSession.add(user_david_table_an) amendement_666.user_content.avis = "Favorable" amendement_666.user_content.objet = "Un objet très pertinent" amendement_666.user_content.reponse = "Une réponse très appropriée" user_david_table_an.add_amendement(amendement_666) # Let's post the response edit form, but with unchanged values resp = app.get(f"{lecture_an_url}/amendements/666/", user=user_david) form = resp.forms["edit-amendement"] form["avis"] = "Favorable" # Even with extra spaces. form["objet"] = "Un objet très pertinent " form["reponse"] = " Une réponse très appropriée" form.submit("save") # No event should be created DBSession.add_all(amendements_an_batch) assert len(amendements_an_batch[0].events) == 0 assert len(amendements_an_batch[1].events) == 0
def test_visionneuse_detail_amendement_reponse_then_texte( wsgi_server, driver, lecture_an, amendements_an): from zam_repondeur.models import DBSession LECTURE_URL = f"{wsgi_server.application_url}lectures/{lecture_an.url_key}" with transaction.manager: amendements_an[0].user_content.avis = "Favorable" amendements_an[0].user_content.reponse = "La réponse" amendements_an[0].user_content.objet = "L’objet" DBSession.add_all(amendements_an) driver.get(f"{LECTURE_URL}/articles/article.1../reponses#amdt-666") article = driver.find_element_by_css_selector("article") header = article.find_element_by_css_selector("header") header.find_element_by_link_text("Réponse").click() assert article.find_element_by_css_selector( ".reponse-detail").is_displayed() assert not article.find_element_by_css_selector( ".amendement-detail").is_displayed() header.find_element_by_link_text("Texte").click() assert not article.find_element_by_css_selector( ".reponse-detail").is_displayed() assert article.find_element_by_css_selector( ".amendement-detail").is_displayed()
def test_visionneuse_detail_amendement_texte(wsgi_server, driver, lecture_an, amendements_an): from zam_repondeur.models import DBSession LECTURE_URL = f"{wsgi_server.application_url}lectures/{lecture_an.url_key}" with transaction.manager: amendements_an[0].user_content.avis = "Favorable" amendements_an[0].corps = "Le corps" DBSession.add_all(amendements_an) driver.get(f"{LECTURE_URL}/articles/article.1../reponses#amdt-666") article = driver.find_element_by_css_selector("article") header = article.find_element_by_css_selector("header") # Unfold header.find_element_by_link_text("Texte").click() WebDriverWait(driver, 10).until( EC.visibility_of( article.find_element_by_css_selector(".amendement-detail"))) assert "Le corps" in article.find_element_by_css_selector( ".amendement-detail").text assert not article.find_element_by_css_selector( ".reponse-detail").is_displayed() # Fold again button = article.find_element_by_css_selector( ".amendement-detail").find_element_by_link_text("Replier") assert button.is_displayed() button.click() WebDriverWait(driver, 10).until( EC.invisibility_of_element( article.find_element_by_css_selector(".amendement-detail")))
def test_search_amendement_with_reponse(app, lecture_an_url, amendements_an, user_david): from zam_repondeur.models import DBSession amendement = amendements_an[0] with transaction.manager: DBSession.add_all(amendements_an) amendement.user_content.avis = "Favorable" amendement.user_content.reponse = "<p>Bla bla bla</p>" 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=all#amdt-666"), "visionneuse": ("https://zam.test" "/dossiers/plfss-2018/lectures/an.15.269.PO717460/articles/article.1../" "reponses#amdt-666"), }
def test_column_filtering_by_checkbox( wsgi_server, driver, lecture_an, lecture_an_url, article7bis_an, amendements_an, user_david_table_an, user_david, column_index, selector, kind, initial, filtered, ): from zam_repondeur.models import Amendement, DBSession with transaction.manager: DBSession.add(user_david_table_an) DBSession.add_all(amendements_an) user_david_table_an.add_amendement(amendements_an[0]) user_david_table_an.add_amendement(amendements_an[1]) amendement = Amendement.create( lecture=lecture_an, article=article7bis_an, num=777, auteur="LE GOUVERNEMENT", ) user_david_table_an.add_amendement(amendement) driver.get(f"{lecture_an_url}/tables/{user_david.email}") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_item_text(selector, trs) == initial driver.find_element_by_link_text("Filtrer").click() label = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) label[for='{kind}']") label.click() trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_item_text(selector, trs) == filtered assert driver.current_url == f"{lecture_an_url}/tables/{user_david.email}?{kind}=1" # Restore initial state. label.click() trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_item_text(selector, trs) == initial assert driver.current_url == f"{lecture_an_url}/tables/{user_david.email}" # Check filters are active on URL (re)load. driver.get(f"{lecture_an_url}/tables/{user_david.email}?{kind}=1") trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_item_text(selector, trs) == filtered label = driver.find_element_by_css_selector( f"thead tr.filters th:nth-child({column_index}) label[for='{kind}']") label.click() trs = driver.find_elements_by_css_selector(f"tbody tr:not(.hidden-{kind})") assert extract_item_text(selector, trs) == initial assert driver.current_url == f"{lecture_an_url}/tables/{user_david.email}"
def amendements_an_batch(amendements_an): from zam_repondeur.models import Batch, DBSession with transaction.manager: batch = Batch.create() amendements_an[0].location.batch = batch amendements_an[1].location.batch = batch DBSession.add_all(amendements_an) return amendements_an