from urllib.parse import urlparse from bs4 import BeautifulSoup from flask import render_template from tests.atlas_um.factories import DNAAccountFactory from tests.atlas_um.pytest_helpers import UrlForThisMixin class TestSearch(UrlForThisMixin): ENDPOINT = "dna_accounts.search" def test_no_recent_searches(self, app): with app.test_request_context(self.url_for_this(app)): page = self.render_soup(recent_searches=None, search_results=None) assert ( page.select_one(".search-message").get_text(strip=True) == "Start typing to se search results" ) def test_recent_searches(self, app): account = DNAAccountFactory.build() with app.test_request_context(self.url_for_this(app)): page = self.render_soup( recent_searches=[account], search_results=None ) assert ( page.select_one(".recent-searches .search-header").get_text( strip=True ) == "Recent Searches" ) assert ( page.select_one(".recent-searches .items-container").get_text( strip=True ) == account.name ) def test_no_search_results(self, app): with app.test_request_context(self.url_for_this(app)): page = self.render_soup(recent_searches=None, search_results=[]) assert ( page.select_one(".search-message").get_text(strip=True) == "No results to show. Try another search." ) def test_search_results(self, app): account = DNAAccountFactory.build() with app.test_request_context(self.url_for_this(app)): page = self.render_soup( recent_searches=None, search_results=[account] ) account_url = self.urlspec_for_this( app, endpoint="dna_accounts.show", dna_sub=account.sub ) assert ( page.select_one(".search-results .search-header").get_text( strip=True ) == "Search Results" ) assert ( page.select_one( ".search-results .row.body .account-name" ).get_text(strip=True) == account.name ) assert ( urlparse( page.select_one( ".search-results .row.body .account-name a" ).attrs.get("href") ) == account_url ) assert ( page.select_one( ".search-results .row.body .account-email" ).get_text(strip=True) == account.email ) assert ( urlparse( page.select_one( ".search-results .row.body .account-email a" ).attrs.get("href") ) == account_url ) assert ( page.select_one( ".search-results .row.body .account-status" ).get_text(strip=True) == account.status ) assert ( urlparse( page.select_one( ".search-results .row.body .account-status a" ).attrs.get("href") ) == account_url ) def test_modal_in_base_template(self, app): with app.test_request_context(self.url_for_this(app)): page = self.render_soup(template="base.html") assert ( page.select_one(".ui.modal.search").attrs.get("style") == "display: none" ) # Helpers def urlspec_for_this(self, app, **kwargs): u = urlparse(self.url_for_this(app, **kwargs)) return u._replace(scheme="", netloc="") def render_soup(self, *args, **kwargs): template = kwargs.get("template", "dna_accounts/search.html") rt = render_template(template, *args, **kwargs) return BeautifulSoup(rt, "html.parser")