123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- from path import path
- from django.contrib.auth import get_user_model
- from django.core import mail
- from django.core.urlresolvers import reverse
- from misago.acl.testutils import override_acl
- from misago.admin.testutils import AdminTestCase
- from misago.conf import settings
- from misago.core import threadstore
- from misago.users.avatars import store
- class ChangeForumOptionsTests(AdminTestCase):
- def setUp(self):
- super(ChangeForumOptionsTests, self).setUp()
- self.view_link = reverse('misago:usercp_change_forum_options')
- def test_change_forum_options_get(self):
- """GET to usercp change options view returns 200"""
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Change forum options', response.content)
- def test_change_forum_options_post(self):
- """POST to usercp change options view returns 302"""
- response = self.client.post(self.view_link, data={
- 'timezone': 'Asia/Qatar',
- 'is_hiding_presence': '1',
- 'subscribe_to_started_threads': '0',
- 'subscribe_to_replied_threads': '1',
- })
- self.assertEqual(response.status_code, 302)
- test_user = get_user_model().objects.get(pk=self.test_admin.pk)
- self.assertEqual(test_user.timezone, 'Asia/Qatar')
- self.assertEqual(test_user.is_hiding_presence, 1)
- self.assertEqual(test_user.subscribe_to_started_threads, 0)
- self.assertEqual(test_user.subscribe_to_replied_threads, 1)
- class ChangeAvatarTests(AdminTestCase):
- def setUp(self):
- super(ChangeAvatarTests, self).setUp()
- self.view_link = reverse('misago:usercp_change_avatar')
- def test_avatar_get(self):
- """GET to change avatar returns 200"""
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- def test_avatar_locked(self):
- """usercp locked change avatar view returns 200"""
- self.test_admin.is_avatar_locked = True
- self.test_admin.avatar_lock_user_message = 'Your avatar is banned.'
- self.test_admin.save()
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Your avatar is banned', response.content)
- def test_set_gravatar(self):
- """view sets user gravatar"""
- self.test_admin.set_email('kontakt@rpiton.com')
- self.test_admin.save()
- response = self.client.post(self.view_link, data={'dl-gravatar': '1'})
- self.assertEqual(response.status_code, 302)
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Gravatar was downloaded', response.content)
- self.test_admin.set_email('test@test.com')
- self.test_admin.save()
- self.client.post(self.view_link, data={'dl-gravatar': '1'})
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('No Gravatar is associated', response.content)
- def test_set_dynamic(self):
- """view sets user dynamic avatar"""
- response = self.client.post(self.view_link, data={'set-dynamic': '1'})
- self.assertEqual(response.status_code, 302)
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('New avatar based', response.content)
- class AvatarUploadTests(AdminTestCase):
- def setUp(self):
- super(AvatarUploadTests, self).setUp()
- store.delete_avatar(self.test_admin)
- def tearDown(self):
- store.delete_avatar(self.test_admin)
- def test_upload_form_view(self):
- """upload view renders on get"""
- response = self.client.get(reverse('misago:usercp_upload_avatar'))
- self.assertEqual(response.status_code, 200)
- self.assertIn('Upload avatar', response.content)
- def test_upload_view(self):
- """upload view renders on get"""
- handler_link = reverse('misago:usercp_upload_avatar_handler')
- response = self.client.get(handler_link)
- self.assertEqual(response.status_code, 405)
- ajax_header = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}
- response = self.client.post(handler_link,
- data={'baww': 'nope'},
- **ajax_header)
- self.assertEqual(response.status_code, 406)
- self.assertIn('No file was sent.', response.content)
- with open('%s/%s' % (settings.MEDIA_ROOT, 'misago.png')) as avatar:
- response = self.client.post(handler_link,
- data={'new-avatar': avatar},
- **ajax_header)
- self.assertEqual(response.status_code, 200)
- avatar_dir = store.get_existing_avatars_dir(self.test_admin)
- avatar = path('%s/%s_tmp.png' % (avatar_dir, self.test_admin.pk))
- self.assertTrue(avatar.exists())
- self.assertTrue(avatar.isfile())
- def test_crop_view(self):
- """avatar gets cropped"""
- with open('%s/%s' % (settings.MEDIA_ROOT, 'misago.png')) as avatar:
- handler_link = reverse('misago:usercp_upload_avatar_handler')
- ajax_header = {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'}
- response = self.client.post(handler_link,
- data={'new-avatar': avatar},
- **ajax_header)
- self.assertEqual(response.status_code, 200)
- crop_link = reverse('misago:usercp_crop_new_avatar')
- response = self.client.post(crop_link, data={'crop': '1245'})
- self.assertEqual(response.status_code, 200)
- test_crop = '619,201,150,150,0,0,150,150'
- response = self.client.post(crop_link, data={'crop': test_crop})
- self.assertEqual(response.status_code, 302)
- avatar_dir = store.get_existing_avatars_dir(self.test_admin)
- avatar = path('%s/%s_tmp.png' % (avatar_dir, self.test_admin.pk))
- self.assertFalse(avatar.exists())
- avatar = path('%s/%s_org.png' % (avatar_dir, self.test_admin.pk))
- self.assertTrue(avatar.exists())
- self.assertTrue(avatar.isfile())
- class AvatarGalleryTests(AdminTestCase):
- def setUp(self):
- super(AvatarGalleryTests, self).setUp()
- self.view_link = reverse('misago:usercp_avatar_galleries')
- def test_gallery_list(self):
- """view renders gallery on GET"""
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Select avatar from gallery', response.content)
- def test_gallery_set_avatar(self):
- """view changes user avatar on post"""
- response = self.client.post(self.view_link, data={
- 'new-image': 'avatars/Nature/serval.jpg'})
- self.assertEqual(response.status_code, 302)
- response = self.client.get(reverse('misago:usercp_change_avatar'))
- self.assertEqual(response.status_code, 200)
- self.assertIn('Avatar from gallery was set', response.content)
- response = self.client.post(self.view_link, data={
- 'new-image': 'baww.jpg'})
- self.assertEqual(response.status_code, 200)
- self.assertIn('Incorrect image', response.content)
- class EditSignatureTests(AdminTestCase):
- def setUp(self):
- super(EditSignatureTests, self).setUp()
- self.view_link = reverse('misago:usercp_edit_signature')
- def test_signature_no_permission(self):
- """edit signature view with no ACL returns 404"""
- override_acl(self.test_admin, {
- 'can_have_signature': 0,
- })
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 404)
- def test_signature_locked(self):
- """locked edit signature view returns 200"""
- override_acl(self.test_admin, {
- 'can_have_signature': 1,
- })
- self.test_admin.is_signature_locked = True
- self.test_admin.signature_lock_user_message = 'Your siggy is banned.'
- self.test_admin.save()
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Your siggy is banned', response.content)
- def test_signature_change(self):
- """GET to usercp change options view returns 200"""
- override_acl(self.test_admin, {
- 'can_have_signature': 1,
- })
- self.test_admin.is_signature_locked = False
- self.test_admin.save()
- response = self.client.post(self.view_link,
- data={'signature': 'Hello siggy!'})
- self.assertEqual(response.status_code, 302)
- response = self.client.get(self.view_link)
- self.assertIn('<p>Hello siggy!</p>', response.content)
- class ChangeUsernameTests(AdminTestCase):
- def setUp(self):
- super(ChangeUsernameTests, self).setUp()
- self.view_link = reverse('misago:usercp_change_username')
- def test_change_username_get(self):
- """GET to usercp change username view returns 200"""
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Change username', response.content)
- def test_change_username_post(self):
- """POST to usercp change username view returns 302"""
- response = self.client.post(self.view_link,
- data={'new_username': 'Boberson'})
- self.assertEqual(response.status_code, 302)
- test_user = get_user_model().objects.get(pk=self.test_admin.pk)
- self.assertEqual(test_user.username, 'Boberson')
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn(test_user.username, response.content)
- class ChangeEmailPasswordTests(AdminTestCase):
- def setUp(self):
- super(ChangeEmailPasswordTests, self).setUp()
- self.view_link = reverse('misago:usercp_change_email_password')
- threadstore.clear()
- def _link_from_mail(self, mail_body):
- for line in mail.outbox[0].body.splitlines():
- if line.strip().startswith('http://testserver/'):
- return line.strip()[len('http://testserver'):]
- raise ValueError("mail body didn't contain link with token")
- def test_change_email_password_get(self):
- """GET to usercp change email/pass view returns 200"""
- response = self.client.get(self.view_link)
- self.assertEqual(response.status_code, 200)
- self.assertIn('Change email or password', response.content)
- def test_change_email(self):
- """POST to usercp change email view returns 302"""
- response = self.client.post(self.view_link,
- data={'new_email': 'newmail@test.com',
- 'current_password': 'Pass.123'})
- self.assertEqual(response.status_code, 302)
- self.assertIn('Confirm changes to', mail.outbox[0].subject)
- confirmation_link = self._link_from_mail(mail.outbox[0].body)
- response = self.client.get(confirmation_link)
- self.assertEqual(response.status_code, 302)
- User = get_user_model()
- test_user = User.objects.get(email='newmail@test.com')
- def test_change_password(self):
- """POST to usercp change password view returns 302"""
- response = self.client.post(self.view_link,
- data={'new_password': 'newpass123',
- 'current_password': 'Pass.123'})
- self.assertEqual(response.status_code, 302)
- self.assertIn('Confirm changes to', mail.outbox[0].subject)
- confirmation_link = self._link_from_mail(mail.outbox[0].body)
- response = self.client.get(confirmation_link)
- self.assertEqual(response.status_code, 302)
- User = get_user_model()
- test_user = User.objects.get(pk=self.test_admin.pk)
- self.assertFalse(test_user.check_password('Pass.123'))
- self.assertTrue(test_user.check_password('newpass123'))
|