from flask import render_template, url_for from bs4 import BeautifulSoup from . import helpers from atlas_um.applications.forms import ApplicationForm from tests.atlas_um.factories import ApplicationFactory class TestUpdateApplication: def test_title_admin(self, app, pgdb_session, authorized_admin): application = ApplicationFactory.build() pgdb_session.add(application) pgdb_session.commit() with app.test_request_context( url_for("applications.update", application_id=application.id) ): form = ApplicationForm(obj=application) page = self.render_soup(form=form, application=application) expected_title = f"Update Application: {application.name}" assert page.title.get_text(strip=True) == expected_title assert ( page.find(id="subnav-header") .find(string=True, recursive=False) .strip() == f"{application.dna_account.email} -> {application.name}" ) def test_title_developer(self, app, pgdb_session, authorized_developer): application = ApplicationFactory.build() pgdb_session.add(application) pgdb_session.commit() with app.test_request_context( url_for("applications.update", application_id=application.id) ): form = ApplicationForm(obj=application) page = self.render_soup(form=form, application=application) expected_title = f"Update Application: {application.name}" assert page.title.get_text(strip=True) == expected_title assert ( page.find(id="subnav-header") .find(string=True, recursive=False) .strip() == application.name ) def test_form_fields(self, app, pgdb_session, authorized_admin): application = ApplicationFactory.build() pgdb_session.add(application) pgdb_session.commit() with app.test_request_context( url_for("applications.update", application_id=application.id) ): form = ApplicationForm() page = self.render_soup(form=form, application=application) assert page.find(id="application-editing-form") is not None assert page.find(id="delete_form") is not None assert page.find(id="reset_secret_form") is not None for field in list(form): assert ( page.find(id=field.id) is not None ), f"Field not found: {field}" assert page.find(id="delete_button") is not None assert page.find(id="save_button") is not None assert page.find(id="reset-button") is not None def test_frontend_libs_are_added( self, app, pgdb_session, authorized_admin ): application = ApplicationFactory.build() pgdb_session.add(application) pgdb_session.commit() with app.test_request_context( url_for("applications.update", application_id=application.id) ): form = ApplicationForm() page = self.render_soup(form=form, application=application) assert all(helpers.added_frontend_libs(page)) assert ( page.find( "script", attrs={"src": "/static/js/edit-application.js"} ) is not None ) # Helpers def render_soup(self, *args, **kwargs): rt = render_template( "applications/update_application.html", *args, **kwargs ) return BeautifulSoup(rt, "html.parser")