import pytest from flask import url_for def assert_status_with_message(status_code=200, response=None, message=None): """ Check to see if a message is contained within a response. :param status_code: Status code that defaults to 200 :type status_code: int :param response: Flask response :type response: str :param message: String to check for :type message: str :return: None """ assert response.status_code == status_code assert message in str(response.data) class ViewTestMixin(object): """ Automatically load in a session and client, this is common for a lot of tests that work with views. """ @pytest.fixture(autouse=True) def set_common_fixtures(self, session, client): self.session = session self.client = client def login(self, identity='admin@local.host', password='password'): """ Login a specific user. :return: Flask response """ return login(self.client, identity, password) def logout(self): """ Logout a specific user. :return: Flask response """ return logout(self.client) def login(client, username='', password=''): """ Log a specific user in. :param client: Flask client :param username: The username :type username: str :param password: The password :type password: str :return: Flask response """ user = dict(identity=username, password=password) response = client.post(url_for('user.login'), data=user, follow_redirects=True) return response def logout(client): """ Log a specific user out. :param client: Flask client :return: Flask response """ return client.get(url_for('user.logout'), follow_redirects=True)