def test_new_dossier_is_added(self): from zam_repondeur.models import DBSession, Dossier from zam_repondeur.services.data import repository from zam_repondeur.services.fetch.an.dossiers.models import DossierRef from zam_repondeur.tasks.periodic import create_missing_dossiers_an assert DBSession.query(Dossier).filter_by( an_id="nouveau").first() is None repository.set_opendata_dossier_ref( DossierRef( uid="nouveau", titre="Titre nouveau", slug="titre-nouveau", an_url="", senat_url="", lectures=[], )) with patch.object(repository, "list_opendata_dossiers") as mock_list: mock_list.return_value = ["existant", "nouveau"] create_missing_dossiers_an() dossier = DBSession.query(Dossier).filter_by(an_id="nouveau").one() assert dossier.an_id == "nouveau" assert dossier.titre == "Titre nouveau" assert dossier.slug == "titre-nouveau"
def test_post_amendement_edit_form_reset_editing_state(app, lecture_an_url, amendements_an_batch, user_david, user_david_table_an): from zam_repondeur.models import Amendement, DBSession amendement_666, amendement_999 = amendements_an_batch with transaction.manager: DBSession.add(user_david_table_an) user_david_table_an.add_amendement(amendement_666) user_david_table_an.add_amendement(amendement_999) amendement_666.start_editing() assert amendement_666.is_being_edited amendement_999.start_editing() assert amendement_999.is_being_edited resp = app.get(f"{lecture_an_url}/amendements/999/", user=user_david) form = resp.forms["edit-amendement"] form["avis"] = "Favorable" form["objet"] = "Un objet très pertinent" form["reponse"] = "Une réponse <strong>très</strong> appropriée" form["comments"] = "Avec des <table><tr><td>commentaires</td></tr></table>" resp = form.submit("save") amendement_666 = DBSession.query(Amendement).filter( Amendement.num == 666).one() assert not amendement_666.is_being_edited amendement_999 = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert not amendement_999.is_being_edited
def test_custom_article_titles_are_preserved(self, app, lecture_an, amendements_an): from zam_repondeur.models import Amendement, DBSession from zam_repondeur.services.fetch.articles import get_articles responses.add( responses.GET, "http://www.assemblee-nationale.fr/15/projets/pl0269.asp", body=(SAMPLE_DATA_DIR / "pl0269.html").read_text( "utf-8", "ignore"), status=200, ) DBSession.add(lecture_an) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.article.user_content.title == "" assert amendement.article.content == {} # Let's set a custom article title amendement.article.user_content.title = "My custom title" changed = get_articles(lecture_an) assert changed # We can get the article contents from an amendement amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.article.user_content.title == "My custom title" assert amendement.article.content["001"].startswith( "Au titre de l'exercice 2016")
def test_existing_articles_are_updated(self, app, lecture_an, amendements_an): from zam_repondeur.fetch.articles import get_articles from zam_repondeur.models import DBSession, Amendement responses.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, ) DBSession.add(lecture_an) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.article.user_content.title == "" assert amendement.article.content == {} changed = get_articles(lecture_an) assert changed # We can get the article contents from an amendement amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert (amendement.article.user_content.title == "Dispositions relatives l'exercice 2016") assert amendement.article.content["001"].startswith( "Au titre de l'exercice 2016")
def test_lecture_post_transfer_amendements_to_other_from_index( app, lecture_an, amendements_an, user_david, user_ronan): from zam_repondeur.models import DBSession, User with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.amendements.append(amendements_an[0]) resp = app.get( "/lectures/an.15.269.PO717460/transfer_amendements", { "nums": [amendements_an[0]], "from_index": 1 }, user=user_david, ) form = resp.form form["target"] = user_ronan.email resp = form.submit() assert resp.status_code == 302 assert resp.location == "https://zam.test/lectures/an.15.269.PO717460/amendements" user_david = DBSession.query(User).filter( User.email == user_david.email).first() table_david = user_david.table_for(lecture_an) assert len(table_david.amendements) == 0 user_ronan = DBSession.query(User).filter( User.email == user_ronan.email).first() table_ronan = user_ronan.table_for(lecture_an) assert len(table_ronan.amendements) == 1 assert table_ronan.amendements[0].events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a transféré l’amendement à « Ronan ([email protected]) »")
def test_upload_backup_with_affectation_to_unknown_user_without_team( self, app, user_ronan): from zam_repondeur.models import DBSession, Amendement from zam_repondeur.models.events.amendement import AmendementTransfere amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.user_table is None 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 == "David2" assert amendement.user_table.user.teams == [] events = {type(event): event for event in amendement.events} assert AmendementTransfere in events amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.user_table is None events = {type(event): event for event in amendement.events} assert AmendementTransfere not in events
def test_new_user_without_name_get_an_error(app): from zam_repondeur.models import DBSession, User user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user is None resp = app.post("/identification", {"email": "*****@*****.**"}) assert resp.status_code == 302 assert ( resp.location == "https://zam.test/bienvenue?source=https%3A%2F%2Fzam.test%2Flectures%2F" ) user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name is None resp = resp.follow() assert resp.form["name"].value == "Jane Doe" # prefilled based on email resp.form["name"] = "" resp = resp.form.submit() assert resp.status_code == 302 assert resp.location == "https://zam.test/bienvenue" resp = resp.follow() assert "La saisie d’un nom est requise." in resp.text user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name is None
def test_new_texte_is_added(self): from zam_repondeur.models import Chambre, DBSession, Texte, TypeTexte from zam_repondeur.services.data import repository from zam_repondeur.services.fetch.an.dossiers.models import TexteRef from zam_repondeur.tasks.periodic import create_missing_textes assert ( DBSession.query(Texte) .filter_by(chambre=Chambre.AN, numero=124, legislature=15) .first() is None ) repository.set_opendata_texte_ref( TexteRef( uid="bar", type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=124, titre_long="Titre long", titre_court="Titre court", date_depot=date(2019, 9, 6), ) ) create_missing_textes({"bar"}) texte = ( DBSession.query(Texte) .filter_by(chambre=Chambre.AN, numero=124, legislature=15) .one() ) assert texte.type_ == TypeTexte.PROJET assert texte.date_depot == date(2019, 9, 6)
def test_user_unset_team(team_zam, user_david): from zam_repondeur.models import DBSession, User user_david.teams.append(team_zam) user_david = DBSession.query(User).first() user_david.teams.remove(team_zam) assert DBSession.query(User).first().teams == []
def test_upload_affectation_box_existing_not_updated( self, app, lecture_an, user_david): from zam_repondeur.models import Amendement, DBSession, SharedTable from zam_repondeur.models.events.amendement import AmendementTransfere with transaction.manager: DBSession.add_all([user_david]) amendement = (DBSession.query(Amendement).filter( Amendement.num == 666).first()) shared_table = SharedTable.create(lecture=lecture_an, titre="PréRIM") shared_table.add_amendement(amendement) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.shared_table.titre == "PréRIM" amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.shared_table is None self._upload_backup(app, "backup_with_affectation_box.json", user_david) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.shared_table.titre == "PréRIM" # No transfer event has been created assert not any(event for event in amendement.events if isinstance(event, AmendementTransfere)) amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.shared_table is None
def test_post_article_edit_form_title_redirect_next(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import Amendement, Article, DBSession with transaction.manager: article_2 = Article.create(lecture=lecture_an, type="article", num="2") DBSession.add(article_2) DBSession.add(lecture_an) amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert amendement.article.user_content.title == "" resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/articles/article.1../", user=user_david, ) form = resp.forms["edit-article"] form["title"] = "Titre article" resp = form.submit() assert resp.status_code == 302 assert resp.location == ( "https://zam.test" "/dossiers/plfss-2018/lectures/an.15.269.PO717460/articles/article.2../" ) amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert amendement.article.user_content.title == "Titre article"
def test_upload_affectation_box_new(self, app, lecture_an, user_david): from zam_repondeur.models import Amendement, DBSession from zam_repondeur.models.events.amendement import AmendementTransfere amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.shared_table is None 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" # A transfer event has been created assert any( isinstance(event, AmendementTransfere) for event in amendement.events) transfer_event = next(event for event in amendement.events if isinstance(event, AmendementTransfere)) assert str(transfer_event.user) == "David ([email protected])" assert transfer_event.data["old_value"] == "" assert transfer_event.data["new_value"] == "PréRIM" assert transfer_event.render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a transféré l’amendement à « PréRIM ».") amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.shared_table is None
def test_upload_backup_with_affectation_to_unknown_user_without_team( self, app, user_david, team_zam): from zam_repondeur.models import Amendement, DBSession from zam_repondeur.models.events.amendement import AmendementTransfere amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.user_table is None amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.user_table is None self._upload_backup(app, "backup_with_affectation_new.json", user_david) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.location.user_table.user.email == "*****@*****.**" assert amendement.location.user_table.user.name == "Mélodie" assert amendement.location.user_table.user.teams[0].pk == team_zam.pk events = {type(event): event for event in amendement.events} assert AmendementTransfere in events amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.location.user_table is None events = {type(event): event for event in amendement.events} assert AmendementTransfere not in events
def test_post_article_edit_form_title(app, lecture_an, amendements_an, user_david): from zam_repondeur.models.events.article import TitreArticleModifie from zam_repondeur.models import Amendement, DBSession amendement = DBSession.query(Amendement).filter(Amendement.num == 999).one() resp = app.get( "/lectures/an.15.269.PO717460/articles/article.1../", user=user_david ) form = resp.forms["edit-article"] form["title"] = "Titre article" resp = form.submit() amendement = DBSession.query(Amendement).filter(Amendement.num == 999).one() assert len(amendement.article.events) == 1 event = amendement.article.events[0] assert isinstance(event, TitreArticleModifie) assert event.created_at is not None assert event.user.email == "*****@*****.**" assert event.data["old_value"] == "" assert event.data["new_value"] == "Titre article" assert ( event.render_summary() == "<abbr title='*****@*****.**'>[email protected]</abbr> a ajouté le titre" ) assert event.render_details() == "<ins>Titre article</ins> <del></del>"
def test_lecture_delete(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import Amendement, DBSession, Lecture assert Lecture.exists( chambre=dummy_lecture.chambre, session=dummy_lecture.session, num_texte=dummy_lecture.num_texte, organe=dummy_lecture.organe, ) assert DBSession.query(Amendement).count() == 2 form = app.get("http://localhost/lectures/an.15.269.PO717460/" ).forms["delete-lecture"] resp = form.submit() assert resp.status_code == 302 assert resp.location == "http://localhost/lectures/" resp = resp.follow() assert resp.status_code == 200 assert "Lecture supprimée avec succès." in resp.text assert not Lecture.exists( chambre=dummy_lecture.chambre, session=dummy_lecture.session, num_texte=dummy_lecture.num_texte, organe=dummy_lecture.organe, ) assert DBSession.query(Amendement).count() == 0
def test_post_reponse_edit_form(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import Amendement, DBSession amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert amendement.avis is None assert amendement.observations is None assert amendement.reponse is None resp = app.get( "http://localhost/lectures/an.15.269.PO717460/amendements/999/reponse") form = resp.forms["edit-reponse"] form["avis"] = "Favorable" form["observations"] = "Des observations très pertinentes" form["reponse"] = "Une réponse très appropriée" form["comments"] = "Avec des commentaires" resp = form.submit() assert resp.status_code == 302 assert resp.location == "http://localhost/lectures/an.15.269.PO717460/amendements/" amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert amendement.avis == "Favorable" assert amendement.observations == "Des observations très pertinentes" assert amendement.reponse == "Une réponse très appropriée" assert amendement.comments == "Avec des commentaires"
def test_amendement_stop_editing( app, lecture_an_url, amendements_an_batch, user_david, user_david_table_an ): from zam_repondeur.models import Amendement, DBSession amendement_666 = amendements_an_batch[0] amendement_999 = amendements_an_batch[1] with transaction.manager: DBSession.add(user_david_table_an) user_david_table_an.add_amendement(amendement_666) user_david_table_an.add_amendement(amendement_999) assert not amendement_666.is_being_edited assert not amendement_999.is_being_edited resp = app.post_json( f"{lecture_an_url}/amendements/{amendement_666.num}/start_editing", user=user_david, ) resp = app.post_json( f"{lecture_an_url}/amendements/{amendement_666.num}/stop_editing", user=user_david, ) assert resp.status_code == 200 assert resp.content_type == "application/json" amendement_666 = DBSession.query(Amendement).get(amendement_666.pk) amendement_999 = DBSession.query(Amendement).get(amendement_999.pk) assert not amendement_666.is_being_edited assert not amendement_999.is_being_edited
def test_upload_with_affectation_to_unknown_user_without_team( self, app, user_david): from zam_repondeur.models import DBSession, Amendement from zam_repondeur.models.events.amendement import AmendementTransfere amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.user_table is None amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.user_table is None self._upload_csv(app, "reponses_with_affectation.csv", user=user_david) amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.user_table.user.email == "*****@*****.**" assert amendement.user_table.user.name == "Mélodie Dahi" events = {type(event): event for event in amendement.events} assert AmendementTransfere in events amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.user_table is None events = {type(event): event for event in amendement.events} assert AmendementTransfere not in events
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_post_article_edit_form_presentation(app, lecture_an, amendements_an, user_david): from zam_repondeur.models import Amendement, DBSession from zam_repondeur.models.events.article import PresentationArticleModifiee with transaction.manager: DBSession.add(user_david) amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/articles/article.1../", user=user_david, ) form = resp.forms["edit-article"] form["presentation"] = "<p>Content</p>" resp = form.submit() amendement = DBSession.query(Amendement).filter( Amendement.num == 999).one() assert len(amendement.article.events) == 1 event = amendement.article.events[0] assert isinstance(event, PresentationArticleModifiee) assert event.created_at is not None assert event.user.email == "*****@*****.**" assert event.data["old_value"] == "" assert event.data["new_value"] == "<p>Content</p>" assert event.render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> a ajouté la présentation." ) assert event.render_details() == "<p><ins>Content</ins></p> <del></del>"
def test_new_user_must_enter_their_name_on_the_welcome_page(app): from zam_repondeur.models import DBSession, User user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user is None resp = app.post("/identification", {"email": "*****@*****.**"}) assert resp.status_code == 302 assert ( resp.location == "https://zam.test/bienvenue?source=https%3A%2F%2Fzam.test%2Flectures%2F" ) user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name is None resp = resp.follow() assert resp.form["name"].value == "Jane Doe" # prefilled based on email resp.form["name"] = " Something Else " resp.form.submit() user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name == "Something Else"
def test_lecture_post_transfer_amendements_to_index_from_index( app, lecture_an, lecture_an_url, amendements_an, user_david): from zam_repondeur.models import Amendement, DBSession, User with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.add_amendement(amendements_an[0]) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/transfer_amendements", { "n": [amendements_an[0]], "from_index": 1 }, user=user_david, ) resp = resp.forms["transfer-amendements"].submit("submit-index") assert resp.status_code == 302 assert resp.location == f"https://zam.test{lecture_an_url}/amendements/" user_david = DBSession.query(User).filter( User.email == user_david.email).first() table = user_david.table_for(lecture_an) assert len(table.amendements) == 0 amendement = (DBSession.query(Amendement).filter( Amendement.num == amendements_an[0].num).first()) assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index.")
def test_lecture_post_transfer_amendements_to_index_from_index( app, lecture_an, amendements_an, user_david): from zam_repondeur.models import DBSession, User, Amendement with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.amendements.append(amendements_an[0]) resp = app.get( "/lectures/an.15.269.PO717460/transfer_amendements", { "nums": [amendements_an[0]], "from_index": 1 }, user=user_david, ) resp = resp.form.submit("submit-index") assert resp.status_code == 302 assert resp.location == "https://zam.test/lectures/an.15.269.PO717460/amendements" user_david = DBSession.query(User).filter( User.email == user_david.email).first() table = user_david.table_for(lecture_an) assert len(table.amendements) == 0 amendement = (DBSession.query(Amendement).filter( Amendement.num == amendements_an[0].num).first()) assert amendement.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a remis l’amendement dans l’index")
def test_lecture_post_transfer_amendements_to_other(app, lecture_an, amendements_an, user_david, user_ronan): from zam_repondeur.models import DBSession, User with transaction.manager: DBSession.add(amendements_an[0]) table_david = user_david.table_for(lecture_an) table_david.add_amendement(amendements_an[0]) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/transfer_amendements", {"n": [amendements_an[0]]}, user=user_david, ) form = resp.forms["transfer-amendements"] form["target"] = user_ronan.email resp = form.submit() assert resp.status_code == 302 assert resp.location == (("https://zam.test/" "dossiers/plfss-2018/" "lectures/an.15.269.PO717460/" "tables/[email protected]/")) user_david = DBSession.query(User).filter( User.email == user_david.email).first() table_david = user_david.table_for(lecture_an) assert len(table_david.amendements) == 0 user_ronan = DBSession.query(User).filter( User.email == user_ronan.email).first() table_ronan = user_ronan.table_for(lecture_an) assert len(table_ronan.amendements) == 1 assert table_ronan.amendements[0].events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a transféré l’amendement à « Ronan ([email protected]) ».")
def test_delete(self, app, user_sgg, user_david): from zam_repondeur.models import DBSession, User with transaction.manager: user_david.admin_at = datetime.utcnow() DBSession.add(user_david) assert DBSession.query(User).filter(User.admin_at.isnot(None)).count() == 2 resp = app.get("/admins/", user=user_sgg) form = resp.forms[1] form["user_pk"] = user_david.pk resp = form.submit() assert resp.status_code == 302 assert resp.location == "https://zam.test/admins/" resp = resp.follow() assert resp.status_code == 200 assert resp.content_type == "text/html" assert len(resp.parser.css(".box ul li")) == 1 assert DBSession.query(User).filter(User.admin_at.isnot(None)).count() == 1 with transaction.manager: DBSession.add(user_sgg) assert len(user_sgg.events) == 1 assert user_sgg.events[0].render_summary() == ( "<abbr title='*****@*****.**'>SGG user</abbr> a retiré " "<abbr title='*****@*****.**'>David ([email protected])" "</abbr> de la liste des administrateur·ice·s." )
def test_post_form_with_comments(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import DBSession, Amendement form = app.get( "/lectures/an.15.269.PO717460/amendements/").forms["import-form"] path = Path(__file__).parent / "sample_data" / "reponses_with_comments.csv" form["reponses"] = Upload("file.csv", path.read_bytes()) resp = form.submit() assert resp.status_code == 302 assert resp.location == "http://localhost/lectures/an.15.269.PO717460/amendements/" resp = resp.follow() assert resp.status_code == 200 assert "2 réponses chargées" in resp.text amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.position == 1 assert amendement.comments == "A comment" amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.position == 2 assert amendement.comments == ""
def test_new_user_must_enter_their_name_on_the_welcome_page(self, app): from zam_repondeur.auth import generate_auth_token from zam_repondeur.models import DBSession, User from zam_repondeur.services.users import repository user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user is None token = generate_auth_token() repository.set_auth_token("*****@*****.**", token) resp = app.get("/authentification", params={"token": token}) assert resp.status_code == 302 assert ( resp.location == "https://zam.test/bienvenue?source=https%3A%2F%2Fzam.test%2Fdossiers%2F" ) user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name is None resp = resp.follow() assert resp.form["name"].value == "Jane Doe" # prefilled based on email resp.form["name"] = " Something Else " resp.form.submit() user = DBSession.query(User).filter_by( email="*****@*****.**").first() assert user.name == "Something Else"
def test_post_form_semicolumns(app, dummy_lecture, dummy_amendements): from zam_repondeur.models import DBSession, Amendement form = app.get( "/lectures/an.15.269.PO717460/amendements/").forms["import-form"] path = Path(__file__).parent / "sample_data" / "reponses_semicolumns.csv" form["reponses"] = Upload("file.csv", path.read_bytes()) resp = form.submit() assert resp.status_code == 302 assert resp.location == "http://localhost/lectures/an.15.269.PO717460/amendements/" resp = resp.follow() assert resp.status_code == 200 assert "2 réponses chargées" in resp.text amendement = DBSession.query(Amendement).filter( Amendement.num == 666).first() assert amendement.avis == "Défavorable" assert amendement.position == 1 assert "<strong>ipsum</strong>" in amendement.observations assert "<blink>amet</blink>" not in amendement.observations assert "<i>tempor</i>" in amendement.reponse assert "<u>aliqua</u>" not in amendement.reponse amendement = DBSession.query(Amendement).filter( Amendement.num == 999).first() assert amendement.observations.startswith("Lorem") assert amendement.position == 2
def test_same_avis_and_same_reponse(self, amendements_an): from zam_repondeur.models import Amendement, DBSession amendements_an = DBSession.query(Amendement).all() 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 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 amendement_666.all_displayable_identiques_have_same_response() assert amendement_999.all_displayable_identiques_have_same_response()
def test_post_shared_tables_delete_form(app, lecture_an, amendements_an, user_david, shared_table_lecture_an): from zam_repondeur.models import DBSession, Lecture, SharedTable with transaction.manager: DBSession.add(user_david) assert (DBSession.query(SharedTable).filter( SharedTable.titre == "Test table").count() == 1) resp = app.get( "/dossiers/plfss-2018/lectures/an.15.269.PO717460/boites/test-table/delete", user=user_david, ) resp = resp.forms["box-delete"].submit() assert resp.status_code == 302 assert resp.location == ("https://zam.test" "/dossiers/plfss-2018" "/lectures/an.15.269.PO717460" "/options#shared-tables") resp = resp.follow() assert resp.status_code == 200 assert "Test table" in resp.text # From notification. assert (DBSession.query(SharedTable).filter( SharedTable.titre == "Test table").count() == 0) # A dedicated event should be created. lecture_an = Lecture.get_by_pk(lecture_an.pk) # refresh object assert len(lecture_an.events) == 1 assert lecture_an.events[0].render_summary() == ( "<abbr title='*****@*****.**'>David</abbr> " "a supprimé la boîte « Test table »")