Opened 14 years ago
Closed 14 years ago
#14350 closed (duplicate)
Please add a login method to the test Client that doesn't depend on passwords
Reported by: | Owned by: | nobody | |
---|---|---|---|
Component: | Testing framework | Version: | 1.2 |
Severity: | Keywords: | ||
Cc: | hv@… | Triage Stage: | Unreviewed |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hi,
Requiring passwords in tests that don't test the login is unnecessary and
binds them too tightly to implementation that they don't care about.
I suggest something like the following:
def login_user(self, user): if not 'django.contrib.sessions' in settings.INSTALLED_APPS: raise AssertionError("Unable to login without django.contrib.sessions in INSTALLED_APPS") user.backend = "%s.%s" % ("django.contrib.auth.backends", "ModelBackend") engine = import_module(settings.SESSION_ENGINE) # Create a fake request to store login details. request = HttpRequest() if self.session: request.session = self.session else: request.session = engine.SessionStore() login(request, user) # Set the cookie to represent the session. session_cookie = settings.SESSION_COOKIE_NAME self.cookies[session_cookie] = request.session.session_key cookie_data = { 'max-age': None, 'path': '/', 'domain': settings.SESSION_COOKIE_DOMAIN, 'secure': settings.SESSION_COOKIE_SECURE or None, 'expires': None, } self.cookies[session_cookie].update(cookie_data) # Save the session values. request.session.save()
refactoring with the common code in other methods.
That would allow you to just login with a User object.
Thanks,
James
Attachments (1)
Change History (6)
by , 14 years ago
Attachment: | login_user.txt added |
---|
comment:3 by , 14 years ago
Component: | Uncategorized → Testing framework |
---|
comment:4 by , 14 years ago
Cc: | added |
---|
I had this idea some time ago, but it was rejected. I hope this ticket has more luck than mine #5938
comment:5 by , 14 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
Duplicate of #5938, which was previously wontfixed. If you want to make your case for this, start a discussion on django-dev and make your case.
For the record, I would argue that login() doesn't bind you to passwords. It binds you to the authentication mechanism of your stack, which is what the test client is testing.
Suggested approach