예제 #1
0
    def test_commission(self, lecture_an, app, source):
        from zam_repondeur.models import DBSession

        DBSession.add(lecture_an)

        with setup_mock_responses(
                lecture=lecture_an,
                liste=read_sample_data("an/1408-CION-SOC/liste.xml"),
                amendements=(
                    ("AS1", read_sample_data("an/1408-CION-SOC/AS1.xml")),
                    ("AS2", read_sample_data("an/1408-CION-SOC/AS2.xml")),
                ),
        ):
            amendements, created, errored = source.fetch(lecture=lecture_an)

        assert len(amendements) == 2

        assert amendements[0].num == 1
        assert amendements[0].position == 1

        assert amendements[1].num == 2
        assert amendements[1].position is None

        assert created == 2
        assert errored == []
예제 #2
0
    def test_with_404(self, lecture_an, app, source):
        from zam_repondeur.models import DBSession

        DBSession.add(lecture_an)

        with setup_mock_responses(
                lecture=lecture_an,
                liste=read_sample_data("an/269/liste.xml"),
                amendements=(
                    ("177", read_sample_data("an/269/177.xml")),
                    # removed 270…
                    ("723", read_sample_data("an/269/723.xml")),
                    ("135", read_sample_data("an/269/135.xml")),
                    ("192", read_sample_data("an/269/192.xml")),
                ),
        ):
            amendements, created, errored = source.fetch(lecture=lecture_an)

        assert len(amendements) == 4
        assert amendements[0].num == 177
        assert amendements[1].num == 723
        assert amendements[2].num == 135
        assert amendements[3].num == 192

        assert [amdt.position for amdt in amendements] == [1, 3, 4, 5]
        assert created == 4
        assert errored == ["270"]
예제 #3
0
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
예제 #5
0
    def test_sous_amendements(self, app, source, dossier_plfss2018,
                              texte_plfss2018_an_premiere_lecture):
        from zam_repondeur.models import DBSession, Lecture

        with transaction.manager:
            texte_plfss2018_an_premiere_lecture.numero = 911
            lecture = Lecture.create(
                chambre="an",
                session="15",
                texte=texte_plfss2018_an_premiere_lecture,
                titre="Titre lecture",
                organe="PO717460",
                dossier=dossier_plfss2018,
            )

        DBSession.add(lecture)

        with setup_mock_responses(
                lecture=lecture,
                liste=read_sample_data("an/911/liste.xml"),
                amendements=(
                    ("1", read_sample_data("an/911/1.xml")),
                    ("2", read_sample_data("an/911/2.xml")),
                    ("3", read_sample_data("an/911/3.xml")),
                ),
        ):
            amendements, created, errored = source.fetch(lecture=lecture)

        assert len(amendements) == 3

        assert amendements[0].num == 1
        assert amendements[0].position == 1
        assert amendements[0].id_discussion_commune == 3448
        assert amendements[0].id_identique == 8496

        assert amendements[1].num == 2
        assert amendements[1].position == 2
        assert amendements[1].id_discussion_commune is None
        assert amendements[1].id_identique is None

        assert amendements[2].num == 3
        assert amendements[2].position == 3
        assert amendements[2].id_discussion_commune is None
        assert amendements[1].id_identique is None

        for amendement in amendements[1:]:
            assert amendement.parent is amendements[0]
            assert amendement.parent_pk == amendements[0].pk

        assert created == 3
        assert errored == []
예제 #6
0
    def test_simple_amendements(self, lecture_an, app, source):
        from zam_repondeur.models import DBSession

        DBSession.add(lecture_an)

        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")),
                ),
        ):
            amendements, created, errored = source.fetch(lecture=lecture_an)

        assert len(amendements) == 5

        assert amendements[0].num == 177
        assert amendements[0].position == 1
        assert amendements[0].id_discussion_commune is None
        assert amendements[0].id_identique == 20386

        assert amendements[1].num == 270
        assert amendements[1].position == 2
        assert amendements[1].id_discussion_commune is None
        assert amendements[1].id_identique == 20386

        assert amendements[2].num == 723
        assert amendements[2].position == 3
        assert amendements[2].id_discussion_commune is None
        assert amendements[2].id_identique is None

        assert amendements[3].num == 135
        assert amendements[3].position == 4
        assert amendements[3].id_discussion_commune is None
        assert amendements[3].id_identique is None

        assert amendements[4].num == 192
        assert amendements[4].position == 5
        assert amendements[4].id_discussion_commune is None
        assert amendements[4].id_identique == 20439

        assert created == 5
        assert errored == []
예제 #7
0
    def test_fetch_amendements_not_in_discussion_list(self, lecture_an, app,
                                                      source):
        from zam_repondeur.models import DBSession

        DBSession.add(lecture_an)

        with setup_mock_responses(
                lecture=lecture_an,
                liste=dedent("""\
                <?xml version="1.0" encoding="UTF-8"?>
                <amdtsParOrdreDeDiscussion bibard="4072" bibardSuffixe="" organe="AN"
                  legislature="14" titre="PLFSS 2017"
                  type="projet de loi de financement de la sécurité sociale">
                  <amendements>
                    <amendement place="Article 3" numero="177" sort="Rejeté"
                        parentNumero="" auteurLabel="M. DOOR"
                        auteurLabelFull="M. DOOR Jean-Pierre"
                        auteurGroupe="Les Républicains" alineaLabel="S" missionLabel=""
                        discussionCommune="" discussionCommuneAmdtPositon=""
                        discussionCommuneSsAmdtPositon="" discussionIdentique="20386"
                        discussionIdentiqueAmdtPositon="debut"
                        discussionIdentiqueSsAmdtPositon="" position="001/772" />
                  </amendements>
                </amdtsParOrdreDeDiscussion>
                """),
                amendements=(
                    ("177", read_sample_data("an/269/177.xml")),
                    ("192", read_sample_data("an/269/192.xml")),
                ),
        ):
            amendements, created, errored = source.fetch(lecture=lecture_an)

        assert len(amendements) == 2

        assert amendements[0].num == 177
        assert amendements[0].position == 1
        assert amendements[0].id_discussion_commune is None
        assert amendements[0].id_identique == 20386

        assert amendements[1].num == 192
        assert amendements[1].position is None
        assert amendements[1].id_discussion_commune is None
        assert amendements[1].id_identique is None

        assert created == 2
        assert errored == []
예제 #8
0
def test_fetch_amendements_with_emptiness(app, lecture_an, article1_an,
                                          amendements_an):
    from zam_repondeur.fetch import get_amendements
    from zam_repondeur.models import Amendement, DBSession

    DBSession.add(lecture_an)

    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion></amdtsParOrdreDeDiscussion>
            """),
            amendements=(),
    ):
        amendements, created, errored = get_amendements(lecture_an)

    assert amendements == []
    assert created == 0
    assert errored == []
    assert DBSession.query(Amendement).count() == len(amendements_an) == 2
예제 #9
0
def test_rectif_with_nil(lecture_an, source):
    from zam_repondeur.models import DBSession, Amendement
    from zam_repondeur.models.events.amendement import ExposeAmendementModifie

    DBSession.add(lecture_an)

    # Initial fetch
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert amendement.rectif == 0

    # Fetch updates
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 4"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=
        (
            (
                "177",
                read_sample_data("an/269/177.xml").replace(
                    "<numeroLong>177</numeroLong>",
                    ('<numeroLong xsi:nil="true" '
                     'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
                     ),
                ),
            ),
            ("270", read_sample_data("an/269/270.xml")),
        ),
    ):
        amendements, created, errored = source.fetch(lecture=lecture_an)

    assert errored == []
    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert amendement.rectif == 0
    # No dedicated AmendementRectifie event created.
    assert len(amendement.events) == 2
    assert isinstance(amendement.events[0], ExposeAmendementModifie)
예제 #10
0
def test_remove_parent_amendement(lecture_an, source):
    """
    A « sous-amendement » can become a standalone one
    """
    from zam_repondeur.models import DBSession, Amendement

    DBSession.add(lecture_an)

    # Initial fetch
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero="177"  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=
        (
            ("177", read_sample_data("an/269/177.xml")),
            (
                "270",
                read_sample_data("an/269/270.xml").replace(
                    '<numeroParent xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>',  # noqa
                    "<numeroParent>177 (Rect)</numeroParent>",
                ),
            ),
        ),
    ):
        source.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 270).one()
    assert amendement.parent is not None
    assert amendement.parent.num == 177

    # Fetch updates
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 270).one()
    assert amendement.parent is None
예제 #11
0
def test_position_changed(lecture_an, source):
    """
    The discussion order of amendements may change
    """
    from zam_repondeur.models import DBSession

    DBSession.add(lecture_an)

    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    assert [amdt.num for amdt in lecture_an.amendements] == [177, 270]
    assert [amdt.position for amdt in lecture_an.amendements] == [1, 2]

    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    assert [amdt.num for amdt in lecture_an.amendements] == [177, 270]
    assert [amdt.position for amdt in lecture_an.amendements] == [2, 1]
예제 #12
0
def test_article_changed(lecture_an, source):
    """
    The targeted article may change
    """
    from zam_repondeur.models import DBSession, Amendement

    DBSession.add(lecture_an)

    # Initial fetch
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert str(amendement.article) == "Art. 3"

    # Fetch updates
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 4"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="001/772"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="002/772"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                (
                    "177",
                    read_sample_data("an/269/177.xml").replace(
                        """\
    <division>
        <titre>Article 3</titre>
        <divisionDesignation>ART. 3</divisionDesignation>
        <type>ARTICLE</type>
        <avantApres>A</avantApres>
        <divisionRattache>ARTICLE 3</divisionRattache>
        <articleAdditionnel>0</articleAdditionnel>
        <divisionAdditionnelle>0</divisionAdditionnelle>
        <urlDivisionTexteVise>/14/textes/4072.asp#D_Article_3</urlDivisionTexteVise>
    </division>""",
                        """\
    <division>
        <titre>Article 4</titre>
        <divisionDesignation>ART. 4</divisionDesignation>
        <type>ARTICLE</type>
        <avantApres>A</avantApres>
        <divisionRattache>ARTICLE 4</divisionRattache>
        <articleAdditionnel>0</articleAdditionnel>
        <divisionAdditionnelle>0</divisionAdditionnelle>
        <urlDivisionTexteVise>/14/textes/4072.asp#D_Article_4</urlDivisionTexteVise>
    </division>""",
                    ),
                ),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert str(amendement.article) == "Art. 4"
예제 #13
0
def test_rectif(lecture_an, source_an):
    from zam_repondeur.models import Amendement, DBSession
    from zam_repondeur.models.events.amendement import AmendementRectifie

    DBSession.add(lecture_an)

    # Initial fetch
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 3"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="1/2"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="2/2"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                ("177", read_sample_data("an/269/177.xml")),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source_an.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert amendement.rectif == 0

    # Fetch updates
    with setup_mock_responses(
            lecture=lecture_an,
            liste=dedent("""\
            <?xml version="1.0" encoding="UTF-8"?>
            <amdtsParOrdreDeDiscussion  bibard="4072"  bibardSuffixe=""  organe="AN"
              legislature="14"  titre="PLFSS 2017"
               type="projet de loi de financement de la sécurité sociale">
              <amendements>
                <amendement  place="Article 4"  numero="177"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. DOOR"
                    auteurLabelFull="M. DOOR Jean-Pierre"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="debut"
                    discussionIdentiqueSsAmdtPositon=""  position="1/2"  />
                <amendement  place="Article 3"  numero="270"  sort="Rejeté"
                    parentNumero=""  auteurLabel="M. ACCOYER"
                    auteurLabelFull="M. ACCOYER Bernard"
                    auteurGroupe="Les Républicains"  alineaLabel="S"  missionLabel=""
                    discussionCommune=""  discussionCommuneAmdtPositon=""
                    discussionCommuneSsAmdtPositon=""  discussionIdentique="20386"
                    discussionIdentiqueAmdtPositon="milieu"
                    discussionIdentiqueSsAmdtPositon=""  position="2/2"  />
              </amendements>
            </amdtsParOrdreDeDiscussion>
            """),
            amendements=(
                (
                    "177",
                    read_sample_data("an/269/177.xml").replace(
                        "<numeroLong>177</numeroLong>",
                        "<numeroLong>177 (2ème Rect)</numeroLong>",
                    ),
                ),
                ("270", read_sample_data("an/269/270.xml")),
            ),
    ):
        source_an.fetch(lecture=lecture_an)

    amendement = DBSession.query(Amendement).filter(
        Amendement.num == 177).one()
    assert amendement.rectif == 2

    event = next(e for e in amendement.events
                 if isinstance(e, AmendementRectifie))
    assert event.data["old_value"] == 0
    assert event.data["new_value"] == 2