def test_compare_borrower_bad(self, mock_register_adapter): with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_register_adapter.return_value = ["Alice", "Bob"] self.assertRaises(BorrowerNamesDifferException, compare_borrower_names, PAYLOAD)
def setUp(self): app.testing = True self.client = app.test_client(use_cookies=True) self.app_context = app.test_request_context() self.app_context.push()
def test_update(self): user = db.User.query().get() role = db.Role(parent=user.key) role.type_index = RoleType.COMMITTEE_ADMIN role.committee = 'EDU' role.put() supplier = db.Supplier(id=6) supplier.name = 'S1' supplier.put() self.assertEquals(db.create_key('Supplier-6'), supplier.key) fund = db.Fund(id=11) fund.committee = 'EDU' fund.name = 'myFund' fund.put() purchase = db.Purchase(id=12, parent=fund.key) purchase.description = 'a' purchase.put() with app.test_request_context('/p', method='POST', data={ '_action': 'update', 'supplier': 'Supplier-6', 'quote_amount-value': '11', 'description': 'b' }): purchases.view_purchase('Purchase-12') self.assertEqual('b', purchase.description)
def test_purchase_list(self): fund = db.Fund(id=11) fund.committee = 'EDU' fund.name = 'myFund' fund.put() with app.test_request_context('/', method='GET'): purchases.view_purchase_list('Fund-11')
def test_create_deed_html(self, mock_format): deed = DeedModelMock mock_format.return_value = 'a house' with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): self.assertTrue('Digital Mortgage Deed' in create_deed_html(deed.deed)) self.assertTrue('e-MD12344' in create_deed_html(deed.deed))
def test_auth_sms_deed_not_found(self, mock_get_deed): with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_get_deed.return_value = None with self.assertRaises(NotFound): auth_sms("11", "11", "11")
def test_view_supplier(self): supplier = db.Supplier(id=6) supplier.name = 'Sup-6' supplier.receives_grants = True supplier.paid_in_sterling = False supplier.put() with app.test_request_context('/', method='GET'): args = suppliers.view_supplier('Supplier-6')
def test_auth_sms_no_esec_id(self, mock_get_deed, mock_get_borrower, mock_convert_json, mock_borrower_pos, mock_akuma): mock_get_borrower.return_value = BorrowerModelMock with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_get_deed.return_value = DeedModelMock() with self.assertRaises(InternalServerError): auth_sms("11", "11", "11")
def test_borrowers_present_bad(self, mock_register_adapter): with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_register_adapter.return_value = [ "Jake Bullet", "Jill Beatrix Bullet", "Another Name" ] self.assertRaises(BorrowerNamesMissingException, all_borrower_names_present, PAYLOAD)
def setUp(self): create_app("test") from application import app, db self.app = app with app.test_request_context(): db.create_all() # Initialize database, if needed self.db_session = db.create_scoped_session()
def test_func_w_dec_returns_302(self): with app.test_request_context(): @login_only def func(): return 1 check = func() self.assertEqual(302, check.status_code)
def test_requires_login_redirects_when_no_user(self, signed_in_mock): signed_in_mock.return_value = False func = lambda x: x wrapped_app_method = requires_authentication(func) with app.test_request_context('/protected-resource', method='GET'): response = wrapped_app_method() assert_that(response.status_code, equal_to(302)) assert_that(response.headers['Location'], equal_to('/'))
def enter_test_request_context(app): """ 在依赖到 flask 请求上下文的测试用例中,可以使用该 fixture 进入上下文以访问上下文资源, 比如 flask.g, flask.current_app 和 flask.request 等。 尤其是 dao.connect 等 方法创建对象时是基于 request context 的,所有必须依赖上下文。 如果不想让整个 test method 都处于上下文,(比如需要测试上下文结束后的情况),则可以手动 写 with app.test_request_context() 来控制上下文范围 """ with app.test_request_context(): yield
def test_func_w_dec_returns_1_when_session(self): with app.test_request_context(): session['user'] = '******' @login_only def func(): return 1 check = func() self.assertEqual(1, check)
def test_create_deed_html_with_date_of_mortgage_offer(self, mock_format): deed = MortgageDocMockWithDateOfMortgageOffer mock_format.return_value = 'a house' with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): self.assertTrue('Digital Mortgage Deed' in create_deed_html(deed.deed)) self.assertTrue('e-MD1291A' in create_deed_html(deed.deed)) self.assertTrue('Date of Mortgage Offer' in create_deed_html(deed.deed)) self.assertTrue('a date string' in create_deed_html(deed.deed))
def setUp(self): # Allow exceptions (if any) to propagate to the test client. app.testing = True # Create a test client. self.client = app.test_client(use_cookies=True) # Create an application context for testing. self.app_context = app.test_request_context() self.app_context.push()
def test_requires_feature_redirects_when_not_signed_in( self, signed_in_mock): signed_in_mock.return_value = False func = lambda: 'Decorator exited successfully' wrapped_app_method = requires_feature('some-feature') with app.test_request_context('/protected', method='GET') as context: response = wrapped_app_method(func)() assert_that(response.status_code, is_(302)) assert_that(response.headers['Location'], is_('/'))
def setUp(self): super(BillingBaseReportTests, self).setUp() self.project_month_repository = ProjectMonthRepository() self.user_repository = UserRepository() with app.test_request_context(): project_month = self.project_month_repository.find_by_id(1) project_month.remarks = 'test' user = self.user_repository.find_by_id(1) session['user'] = user.serialize() billing_base_report = BillingBaseReport(project_month) self.billing_base_report = billing_base_report
def test_auth_sms_akuma_result_z(self, mock_get_deed, mock_akuma): with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_get_deed.return_value = DeedModelMock() mock_akuma.return_value = { "result": "Z", "id": "2b9115b2-d956-11e5-942f-08002719cd16" } result = auth_sms("11", "11", "11") self.assertEqual(result, 'Failed to sign Mortgage document')
def setUp(self): super(BpOrderReportTests, self).setUp() self.project_repository = ProjectRepository() self.user_repository = UserRepository() self.project_detail_repository = ProjectDetailRepository() self.engineer_repository = EngineerRepository() with app.test_request_context(): project_detail = self.project_detail_repository.find_by_id(1) user = self.user_repository.find_by_id(1) session['user'] = user.serialize() bp_order_report = BpOrderReport(project_detail) self.bp_order_report = bp_order_report
def test_auth_sms_happy_path(self, mock_get_deed, mock_get_borrower, mock_convert_json, mock_borrower_pos, mock_akuma, mock_esec_client): mock_get_borrower.return_value = BorrowerModelMockNoId mock_esec_client.return_value = EsecClientMock() with app.app_context() as ac: ac.g.trace_id = None with app.test_request_context(): mock_get_deed.return_value = DeedModelMock() resp = auth_sms("11", "11", "11") self.assertEqual(resp[1], 200)
def setUp(self): app.testing = True app.csrf_enable = False app.config['CSRF_ENABLED'] = False app.config['WTF_CSRF_ENABLED'] = False app.config['SECRET_KEY'] = 'Super Secret Unguessable Key' app.config['BABEL_DEFAULT_LOCALE'] = 'en' self.client = app.test_client(use_cookies=True) self.app_context = app.test_request_context() self.app_context.push()
def test_view_purchase(self): fund = db.Fund(id=11) fund.committee = 'EDU' fund.name = 'myFund' fund.put() purchase = db.Purchase(id=12, parent=fund.key) purchase.po_number = 'MB006' purchase.state_index = 1 purchase.quote_amount = db.Money(value=1234) purchase.description = "desc" purchase.put() with app.test_request_context('/', method='GET'): purchases.view_purchase('Purchase-12')
def loop(self, client): # FIXME(tsukasa-au): This is a hack... But I can't think of anything # better. # Add a test request context so that babel will work. app.test_request_context().push() logger = logging.getLogger('loop') res = client.rtm_connect() logger.debug('Connection result: %r', res) if not res: logger.error('Connection Failed.') return logger.info('Users: %s', client.server.users) logger.info('Channels: %s', client.server.channels) while True: for event in client.rtm_read(): logger.debug('Event: %s', event) if 'type' in event: # Call all handlers for the given event type. for handler in self.DISPATCH.get(event['type'], []): handler(client, event) time.sleep(0.1)
def test_requires_feature_allows_access(self, signed_in_mock): signed_in_mock.return_value = True func = lambda: 'Decorator exited successfully' wrapped_app_method = requires_feature('big-edit') with app.test_request_context('/protected', method='GET') as context: context.session.update({ 'oauth_user': { 'permissions': ['admin'] }, }) response = wrapped_app_method(func)() assert_that(response, is_('Decorator exited successfully'))
def test_checked(self): user = db.User.query().get() role = db.Role(parent=user.key) role.type_index = RoleType.FUND_ADMIN role.put() fund = db.Fund(id=11) fund.put() purchase = db.Purchase(id=12, parent=fund.key) purchase.put() with app.test_request_context('/p', method='POST', data={'_action': 'checked'}): purchases.view_purchase('Purchase-12') self.assertEqual("MB0001", purchase.po_number)
def setup_db(admin_email): """Setup the database - Create admin, subscriber and demo Group collection - Create admin user (must use valid blender-id credentials) - Create one project """ # Create default groups groups_list = [] for group in ['admin', 'subscriber', 'demo']: g = {'name': group} g = post_internal('groups', g) groups_list.append(g[0]['_id']) print("Creating group {0}".format(group)) # Create admin user user = { 'username': admin_email, 'groups': groups_list, 'roles': ['admin', 'subscriber', 'demo'], 'settings': { 'email_communications': 1 }, 'auth': [], 'full_name': admin_email, 'email': admin_email } result, _, _, status = post_internal('users', user) if status != 201: raise SystemExit('Error creating user {}: {}'.format( admin_email, result)) user.update(result) print("Created user {0}".format(user['_id'])) # Create a default project by faking a POST request. with app.test_request_context(data={'project_name': u'Default Project'}): from flask import g from application.modules import projects g.current_user = { 'user_id': user['_id'], 'groups': user['groups'], 'roles': set(user['roles']) } projects.create_project(overrides={ 'url': 'default-project', 'is_private': False })
def test_requires_feature_redirects_for_bad_permissions( self, signed_in_mock): signed_in_mock.return_value = True func = lambda: 'Decorator exited successfully' wrapped_app_method = requires_feature('some-feature') with app.test_request_context('/protected', method='GET') as context: context.session.update({ 'oauth_user': { 'permissions': ['normal-permission'] }, }) response = wrapped_app_method(func)() assert_that(response.status_code, is_(302)) assert_that(response.headers['Location'], is_('/'))
def test_create_payment(self): user = db.User.query().get() role = db.Role(parent=user.key) role.type_index = RoleType.PAYMENT_ADMIN role.put() supplier = db.Supplier(id=6) supplier.paid_in_sterling = False supplier.name = "Sup-6" supplier.put() grant = db.Grant() grant.put() with app.test_request_context('/supplier/123', method='POST', data={'_action': 'startTransfer'}): url = suppliers.view_supplier('Supplier-6') self.assertEquals('/foreigntransfer/ForeignTransfer-5', url)
def create_rendering(report): ''' instantiate a new rendering queue it up for pdf-creation and s3-upload ''' creation_time = datetime.datetime.utcnow() # create a suitable filename filename = '%s--%s.pdf' % (report.label , creation_time.strftime('%Y-%m-%dT%H-%M-%SZ')) if '..' in filename or filename.startswith('/'): # set filename as just the date filename = 'report--%s.pdf' % \ creation_time.strftime('%y-%m-%dT%H-%M-%SZ') # null bytes in the original unicode were causing problems filename = str(filename) # make sure we have access to request context with app.test_request_context(): # the public-facing url of this report # used so wkhtmltopdf can run sans auth # have to generate url here while we're in the right context url = url_for('public_reports' , org_label=report.project.organization.label , project_label = report.project.label , public_label = report.public_label) public_url = urlparse.urljoin(app.config['APP_ROOT'], url) # create new rendering object # punting on saving components for now frozen_components = [] new_rendering = Rendering( components = frozen_components , creation_time = creation_time , filename = filename , label = generate_random_string(12) , report = report ) new_rendering.save() # enqueue pdf-generation with rq-scheduler redis_config = app.config['REDIS_CONFIG'] use_connection(Redis(redis_config['host'], redis_config['port'] , password=redis_config['password'])) queue = Queue() queue.enqueue(render_report, new_rendering.id, public_url) return new_rendering
def test_get_dict(self): with app.test_request_context(): # testページで検索条件 excepted = ImmutableMultiDict({'test': 'test'}) search = SearchSessionService('test', excepted) # saveしていない場合は、get_dictでNoneが返却される self.assertIsNone(search.get_dict()) # saveすると、get_dictで保存した検索条件を取得できる。 search.save() self.assertEqual(search.get_dict(), excepted) # pageを変更すると、get_dictでNoneが返却される search = SearchSessionService('test2', excepted) search.save() self.assertEqual(search.get_dict(), excepted)
def setup_db(admin_email): """Setup the database - Create admin, subscriber and demo Group collection - Create admin user (must use valid blender-id credentials) - Create one project """ # Create default groups groups_list = [] for group in ['admin', 'subscriber', 'demo']: g = {'name': group} g = post_internal('groups', g) groups_list.append(g[0]['_id']) print("Creating group {0}".format(group)) # Create admin user user = {'username': admin_email, 'groups': groups_list, 'roles': ['admin', 'subscriber', 'demo'], 'settings': {'email_communications': 1}, 'auth': [], 'full_name': admin_email, 'email': admin_email} result, _, _, status = post_internal('users', user) if status != 201: raise SystemExit('Error creating user {}: {}'.format(admin_email, result)) user.update(result) print("Created user {0}".format(user['_id'])) # Create a default project by faking a POST request. with app.test_request_context(data={'project_name': u'Default Project'}): from flask import g from application.modules import projects g.current_user = {'user_id': user['_id'], 'groups': user['groups'], 'roles': set(user['roles'])} projects.create_project(overrides={'url': 'default-project', 'is_private': False})
def test_get_document(self): with app.app_context(): with app.test_request_context(): resp = get_document() self.assertEqual(str(resp.mimetype), "application/pdf")