Exemplo n.º 1
0
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"]
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
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"
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
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
Exemplo n.º 7
0
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()
    )
Exemplo n.º 8
0
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")
Exemplo n.º 9
0
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"
Exemplo n.º 10
0
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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
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()
Exemplo n.º 13
0
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
Exemplo n.º 14
0
    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"
Exemplo n.º 16
0
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
Exemplo n.º 17
0
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)")
Exemplo n.º 18
0
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"] == ""
Exemplo n.º 19
0
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")
Exemplo n.º 20
0
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")
Exemplo n.º 21
0
    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]
Exemplo n.º 22
0
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"
Exemplo n.º 23
0
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"]
Exemplo n.º 24
0
    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(
        )
Exemplo n.º 25
0
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
Exemplo n.º 26
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()
Exemplo n.º 27
0
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")))
Exemplo n.º 28
0
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"),
    }
Exemplo n.º 29
0
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}"
Exemplo n.º 30
0
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