Lets say I have flask Application Now I want to test u=g.user.be_friend(user) which make a user friend with eachother if they werene't friend befor But I don't know how I can test g.user and most importantly g.user.be_friend would you please help thanx ?
view.py:
user = Users.query.filter_by(name = name).first()
if user is None:
flash('User %s not found.' % name)
return redirect(url_for('layout.user'))
if user == g.user:
flash('You can\'t Friend yourself!')
return redirect(url_for('layout.user',page=1, sortby='normal'))
u = g.user.be_friend(user)
mytest_app.py:
def test_friend_main(self):
e1 = Users(name='admine1', email='admine2@gmail.com', age=25)
e2 = Users(name='teste2', email='teste2@gmail.com', age=27)
db.session.add_all([e1, e2])
db.session.commit()
with self.client:
self.assertTrue(g.user =='admine1')
e1.be_friend(e2)
response=self.client.get('/friend/admine1', follow_redirects=True)
self.assertTrue('You are now Friend with !',response.data)
You need flask-login
module.
from flask.ext.login import current_user
@lm.user_loader # you should have same function
def load_user(user_id):
return User.get_user(user_id)
@flask_app.before_request
def before_request():
g.user = current_user # save current user in request context.
Sadly, but I didn't find any easy way to get current g
value in test code. Only hard way with test_request_context. Anyway, you can test current_user
, if it passed to template:
def test_something(self)
self.assertEqual(self.get_context_variable('current_user').name, name_should_be)
But at first, you should login:
response = self.client.post('/login', data=dict(name='admine1', email='admine2@gmail.com'))
User
model can be improved: class User(UserMixin, db.Model):
Also, in test you shouldn't execute e1.be_friend(e2)
directly. You should execute it from your production code.