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 == []
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"]
def test_post_form(app, lecture_an, lecture_an_url, article1_an, user_david): from zam_repondeur.models import Amendement, DBSession, Lecture # Initially, we only have one amendement (#135), with a response with transaction.manager: DBSession.add(lecture_an) lecture_an.texte.date_depot = datetime.utcnow().date() - timedelta( days=5) Amendement.create(lecture=lecture_an, article=article1_an, num=135, position=1) assert lecture_an.events == [] # No progress status by default. assert lecture_an.get_fetch_progress() == {} with setup_mock_responses( lecture=lecture_an, liste=read_sample_data("an/269/liste.xml"), amendements=( ("177", read_sample_data("an/269/177.xml")), ("270", read_sample_data("an/269/270.xml")), ("723", read_sample_data("an/269/723.xml")), ("135", read_sample_data("an/269/135.xml")), ("192", read_sample_data("an/269/192.xml")), ), ): # Then we ask for a refresh form = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/journal/", user=user_david).forms["manual-refresh"] resp = form.submit() assert resp.status_code == 302 assert resp.location == f"https://zam.test{lecture_an_url}/amendements/" resp = resp.follow() assert resp.status_code == 200 lecture_an = Lecture.get_by_pk(lecture_an.pk) # refresh object events = lecture_an.events assert len(events) == 1 assert events[0].render_summary() == "4 nouveaux amendements récupérés." assert "Rafraîchissement des amendements en cours." in resp.text # Default progress status for dummy progress bar is set. assert lecture_an.get_fetch_progress() == {"current": 1, "total": 10} # If we fetch again the journal, the refresh button is not present anymore. resp = app.get("/dossiers/plfss-2018/lectures/an.15.269.PO717460/journal/", user=user_david) assert resp.status_code == 200 assert "manual-refresh" not in resp.forms
def test_post_form(app, lecture_an, article1_an, user_david): from zam_repondeur.models import Amendement, Lecture # Initially, we only have one amendement (#135), with a response with transaction.manager: Amendement.create(lecture=lecture_an, article=article1_an, num=135, position=1) assert lecture_an.events == [] with setup_mock_responses( lecture=lecture_an, liste=read_sample_data("an/269/liste.xml"), amendements=( ("177", read_sample_data("an/269/177.xml")), ("270", read_sample_data("an/269/270.xml")), ("723", read_sample_data("an/269/723.xml")), ("135", read_sample_data("an/269/135.xml")), ("192", read_sample_data("an/269/192.xml")), ), ) as mock_resp: mock_resp.add( responses.GET, "http://www.assemblee-nationale.fr/15/projets/pl0269.asp", body=(Path(__file__).parent / "sample_data" / "pl0269.html").read_text( "utf-8", "ignore" ), status=200, ) # Then we ask for a refresh form = app.get("/lectures/an.15.269.PO717460/journal/", user=user_david).forms[ "manual-refresh" ] resp = form.submit() assert resp.status_code == 302 assert resp.location == "https://zam.test/lectures/an.15.269.PO717460/amendements" resp = resp.follow() assert resp.status_code == 200 lecture_an = Lecture.get( chambre=lecture_an.chambre, session_or_legislature=lecture_an.session, num_texte=lecture_an.texte.numero, partie=None, organe=lecture_an.organe, ) events = lecture_an.events assert len(events) == 2 assert events[0].render_summary() == "Le contenu des articles a été récupéré." assert events[1].render_summary() == "4 nouveaux amendements récupérés." assert "Rafraichissement des amendements et des articles en cours." in resp.text
def test_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 == []
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 == []
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 == []
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
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)
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
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]
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"
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