flask test client post does not create object in database -


the following test code not pass though manually submitting form on web interface work.

import os flask.ext.testing import testcase flask import url_for  config import _basedir app import app, db app.users.models import user   class testuser(testcase):      def create_app(self):         """         required method. implement app returned context.         """         app.config['testing'] = true         app.config['sqlalchemy_database_uri'] = 'sqlite:///' + os.path.join(_basedir, 'test.db')         app.config['wtf_csrf_enabled'] = false  # must disabled post succeed during tests         self.client = app.test_client()         ctx = app.app_context()         ctx.push()         return app      def setup(self):         db.create_all()         #pass      @app.teardown_appcontext     def teardown(self):         db.session.remove()         db.drop_all()         #pass      def test_admin_home(self):          # url admin home page         url = url_for('admin.index')         resp = self.client.get(url)         self.asserttrue(resp.status_code == 200)      def test_admin_registration(self):          url = url_for('admin.register_view')         data = {'username': 'admin', 'email': 'admin@example.com', 'password': 'admin'}         resp = self.client.post(url, data)         self.asserttrue(resp.status_code == 200)          u = user.query.filter_by(username=u'admin').first()         self.asserttrue(u.username == 'admin')   # <----- fails. why? 

after test client has post register_view url , returns 200 ok response, fail retrieve 'admin' user test database. why so?

here's view code (this flask admin view)

from flask import request flask.ext.admin import expose, adminindexview, helpers  app.auth.forms import loginform, registrationform app.users.models import user app import db   class myadminindexview(adminindexview):      @expose('/', methods=('get', 'post'))     def index(self):         # handle user login         form = loginform(request.form)         self._template_args['form'] = form         return super(myadminindexview, self).index()      @expose('/register/', methods=('get', 'post'))     def register_view(self):         # handle user registration         form = registrationform(request.form)         if helpers.validate_form_on_submit(form):             user = user()             form.populate_obj(user)             db.session.add(user)             db.session.commit()          self._template_args['form'] = form         return super(myadminindexview, self).index() 

dumbest mistake ever.

the offending line in test code is

resp = self.client.post(url, data) 

it should be

resp = self.client.post(url, data=data) 

i managed track down painstakingly walking through logic , inserting ipdb.set_trace() step step until found bad post request made client.


Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -