diff options
| author | bwarsaw | 2007-01-18 06:29:42 +0000 |
|---|---|---|
| committer | bwarsaw | 2007-01-18 06:29:42 +0000 |
| commit | 372d4c2fdf072f6bfedca5fc84a2d5bb427418e6 (patch) | |
| tree | 594db647158d8156f51ea6d05aba093f29ae061e /Mailman/testing/test_membership.py | |
| parent | 1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd (diff) | |
| download | mailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.tar.gz mailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.tar.zst mailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.zip | |
Rework MailList.available_languages so that we don't need to use a PickleType
column in the database for this list of strings. We use SQLAlchemy's
many-to-many relationship, however because of this, you cannot simply append
new unicodes to .available_languages. You need to wrap the language code in a
Language instance and append that instance to the list.
In order to handle this, I added a property MailList.language_codes which
returns a list of the code strings (not Language instances). Also new are
MailList.set_languages() for setting (i.e. overriding) the set of available
languages for the list; and add_language() which takes a single language code,
wraps it, and appends it. The code does not and should not use
.available_languages directory any more.
MailList.GetAvailableLanguages() is removed. The 'available_languages' column
is removed from the Listdata table.
Add a getValue() to Mailman.Gui.Language in order to unwrap the language codes
stored in the database's association table. Modify _setValue() to do the
wrapping.
In dbcontext.py, don't import * from the sqlalchemy package. It contains a
'logging' name which is not the standard Python logging package. I also added
essentially a bag of attributes class called Tables which will hold references
to all the SA tables that are created. Update the make_table() API to take an
instance of Tables.
Added a close() method to DBContext. This is needed for the updated unit test
suite.
Changed bin/import.py so that when available_languages is being set, it calls
MailList.set_languages() instead of trying to set that attribute directly.
Updated some language idioms while I was at it.
More eradication of mm_cfg in favor of the config object and the Defaults
module.
In testall.py, call initialize() instead of loginit.initialize().
Promote MAX_RESTARTS into a Defaults.py.in variable. This is because the unit
tests will knock that value down to something not so annoying should one of
the qrunner-required tests traceback.
Several other important changes to the unit test suite (which now completely
succeeds again!):
- Set the uid and gid of the temporary mailman.cfg and tmp*.db files to the
Mailman user and group as specified in the config object.
- Make sure that all of the tests point to a SQLite database file that was
created with the tempfile module. This way we don't pollute our main
database with data that is getting created during the unit tests.
- In the TestBase.setUp() method, be sure to close the existing dbcontext,
clear out the mappers, and then reconnect the dbcontext with the new
SQLALCHEMY_ENGINE_URL pointing to the tempfile. However, we don't need to
reload the MailList instance any more.
- Make all tests work, except for the tests that require crypt. That upgrade
path will not be available in this version of Mailman.
Diffstat (limited to 'Mailman/testing/test_membership.py')
| -rw-r--r-- | Mailman/testing/test_membership.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/Mailman/testing/test_membership.py b/Mailman/testing/test_membership.py index b98e1b187..ed8ebb1f4 100644 --- a/Mailman/testing/test_membership.py +++ b/Mailman/testing/test_membership.py @@ -1,4 +1,4 @@ -# Copyright (C) 2001-2006 by the Free Software Foundation, Inc. +# Copyright (C) 2001-2007 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -24,6 +24,7 @@ import unittest from Mailman import MailList from Mailman import MemberAdaptor from Mailman import Utils +from Mailman import passwords from Mailman.Errors import NotAMemberError from Mailman.UserDesc import UserDesc from Mailman.configuration import config @@ -31,6 +32,11 @@ from Mailman.testing.base import TestBase +def password(cleartext): + return passwords.make_secret(cleartext, 'ssha') + + + class TestNoMembers(TestBase): def test_no_member(self): eq = self.assertEqual @@ -78,9 +84,10 @@ class TestNoMembers(TestBase): class TestMembers(TestBase): def setUp(self): TestBase.setUp(self) + self._member_password = password('xxXXxx') self._mlist.addNewMember('person@dom.ain', digest=0, - password='xxXXxx', + password=self._member_password, language='xx', realname='A. Nice Person') @@ -95,7 +102,7 @@ class TestMembers(TestBase): eq(mlist.getMemberCPAddress('person@dom.ain'), 'person@dom.ain') eq(mlist.getMemberCPAddresses(('person@dom.ain', 'noperson@dom.ain')), ['person@dom.ain', None]) - eq(mlist.getMemberPassword('person@dom.ain'), 'xxXXxx') + eq(mlist.getMemberPassword('person@dom.ain'), self._member_password) eq(mlist.getMemberLanguage('person@dom.ain'), 'en') eq(mlist.getMemberOption('person@dom.ain', config.Digests), 0) eq(mlist.getMemberOption('person@dom.ain', config.AcknowledgePosts), 0) @@ -106,7 +113,7 @@ class TestMembers(TestBase): mlist = self._mlist self.failIf(mlist.authenticateMember('person@dom.ain', 'xxx')) self.assertEqual(mlist.authenticateMember('person@dom.ain', 'xxXXxx'), - 'xxXXxx') + self._member_password) def test_remove_member(self): eq = self.assertEqual @@ -161,7 +168,7 @@ class TestMembers(TestBase): eq(mlist.getMemberCPAddress('nice@dom.ain'), 'nice@dom.ain') eq(mlist.getMemberCPAddresses(('nice@dom.ain', 'nonice@dom.ain')), ['nice@dom.ain', None]) - eq(mlist.getMemberPassword('nice@dom.ain'), 'xxXXxx') + eq(mlist.getMemberPassword('nice@dom.ain'), self._member_password) eq(mlist.getMemberLanguage('nice@dom.ain'), 'en') eq(mlist.getMemberOption('nice@dom.ain', config.Digests), 0) eq(mlist.getMemberOption('nice@dom.ain', config.AcknowledgePosts), 0) @@ -188,9 +195,10 @@ class TestMembers(TestBase): def test_set_password(self): eq = self.assertEqual mlist = self._mlist - mlist.setMemberPassword('person@dom.ain', 'yyYYyy') - eq(mlist.getMemberPassword('person@dom.ain'), 'yyYYyy') - eq(mlist.authenticateMember('person@dom.ain', 'yyYYyy'), 'yyYYyy') + new_password = password('yyYYyy') + mlist.setMemberPassword('person@dom.ain', new_password) + eq(mlist.getMemberPassword('person@dom.ain'), new_password) + eq(mlist.authenticateMember('person@dom.ain', 'yyYYyy'), new_password) self.failIf(mlist.authenticateMember('person@dom.ain', 'xxXXxx')) def test_set_language(self): @@ -200,7 +208,7 @@ class TestMembers(TestBase): odesc = config.LC_DESCRIPTIONS.copy() try: config.add_language('xx', 'Xxian', 'utf-8') - self._mlist.available_languages.append('xx') + self._mlist.add_language('xx') self._mlist.setMemberLanguage('person@dom.ain', 'xx') self.assertEqual(self._mlist.getMemberLanguage('person@dom.ain'), 'xx') |
