class ShakeModelTests(BaseTestCase): def setUp(self): super(ShakeModelTests, self).setUp() self.user = User(name='admin', email='*****@*****.**', email_confirmed=1, is_paid=1) self.user.set_password('asdfasdf') self.user.save() self.shake = Shake(user_id=self.user.id, name='asdf', type='group', title='My Test Shake', description='Testing this shake test.') self.shake.save() def test_correct_owner_is_returned(self): """ Verifies the owner is correctly returned """ self.assertEqual(self.user.id, self.shake.user_id) def test_correct_page_image_is_returned(self): """ If an image exists, it should return the correct path. """ self.assertEqual(None, self.shake.page_image()) self.assertEqual('/static/images/default-icon-venti.svg', self.user.shake().page_image()) self.shake.image = 1 self.shake.save self.assertEqual( 'https://%s.s3.amazonaws.com/account/1/shake_asdf.jpg' % options.aws_bucket, self.shake.page_image()) def test_correct_thumbnail_url_is_returned(self): """ If an image exists, it should return the correct thumbnail path """ self.assertEqual( 'https://mltshp-cdn.com/static/images/default-icon-venti.svg', self.shake.thumbnail_url()) self.assertEqual( 'https://mltshp-cdn.com/static/images/default-icon-venti.svg', self.user.shake().thumbnail_url()) self.shake.image = 1 self.shake.save() self.assertEqual( 'https://%s.s3.amazonaws.com/account/1/shake_asdf_small.jpg' % options.aws_bucket, self.shake.thumbnail_url()) def test_correct_path_is_returned(self): """ Simply returns the correct path for the shake """ self.assertEqual('/asdf', self.shake.path()) self.assertEqual('/user/admin', self.user.shake().path()) def test_correct_display_name_is_returned(self): """ Display name or title is returned if set. """ self.assertEqual('My Test Shake', self.shake.display_name()) self.assertEqual('admin', self.user.shake().display_name()) def test_user_can_update_shake(self): """ Tests that a user can and cannot update a certain shake """ user1 = User(name='user1', email='*****@*****.**', email_confirmed=1, is_paid=1) user1.set_password('asdfasdf') user1.save() user2 = User(name='user2', email='*****@*****.**', email_confirmed=1, is_paid=1) user2.set_password('asdfasdf') user2.save() self.shake.add_manager(user1) self.assertTrue(self.shake.can_update(user1.id)) self.assertTrue(self.shake.can_update(self.user.id)) self.assertFalse(self.shake.can_update(user2.id)) def test_saving_validates_title(self): """ Creates shakes with valid and invalid titles """ valid_titles = ['asdf', 'This is a test.'] invalid_titles = ['', None] identifier = 1 for title in valid_titles: self.assertTrue( Shake(user_id=self.user.id, title=title, name='testing%s' % (identifier), type='group').save()) identifier += 1 for title in invalid_titles: self.assertFalse( Shake(user_id=self.user.id, title=title, name='testing%s' % (identifier), type='group').save()) identifier += 1 def test_saving_validates_name(self): """ Creates shakes with valid and invalid names """ valid_names = [ 'a-b-c', 'qwerty', '1234', '2a93sfj', 'asdfgasdfgasdfgasdfgasdfg' ] invalid_names = [ '', None, 'a x', 'AsDf', 'static', #asdf exists in the setup, static is reserved 'asdfgasdfgasdfgasdfgasdfgx' ] #too long for name in valid_names: self.assertTrue( Shake(user_id=self.user.id, title="some text", name=name, type='group').save()) for name in invalid_names: self.assertFalse( Shake(user_id=self.user.id, title="some text", name=name, type='group').save()) def test_subscribers(self): """ Tests whether subscribers returned are the subscribers to a particular shake. """ user1 = User(name='user1', email='*****@*****.**', email_confirmed=1, is_paid=1) user1.set_password('asdfasdf') user1.save() user2 = User(name='user2', email='*****@*****.**', email_confirmed=1, is_paid=1) user2.set_password('asdfasdf') user2.save() user1.subscribe(self.shake) user2.subscribe(self.shake) self.assertTrue(user1.id in [s.id for s in self.shake.subscribers()]) self.assertTrue(user2.id in [s.id for s in self.shake.subscribers()]) user1.unsubscribe(self.shake) self.assertFalse(user1.id in [s.id for s in self.shake.subscribers()]) user1.subscribe(self.shake) self.assertTrue(user1.id in [s.id for s in self.shake.subscribers()]) def test_paginated_sharedfiles_and_count(self): """ Tests both the pagination of a shake's shared files and the count """ sharedfiles = [] sourcefile = Sourcefile(width=20, height=20, file_key="asdf", thumb_key="asdf_t") sourcefile.save() for i in range(31): sf = Sharedfile(source_id=sourcefile.id, name="my shared file", user_id=self.user.id, content_type="image/png", share_key="1", description="some\ndescription\nhere", source_url="https://www.mltshp.com/?hi") sf.save() sf.add_to_shake(self.shake) sharedfiles.append(sf) self.assertEqual(len(self.shake.sharedfiles()), 10) #default self.assertEqual(len(self.shake.sharedfiles(page=1)), 10) self.assertEqual(len(self.shake.sharedfiles(page=2)), 10) self.assertEqual(len(self.shake.sharedfiles(page=3)), 10) self.assertEqual(len(self.shake.sharedfiles(page=4)), 1) self.assertEqual(len(self.shake.sharedfiles(page=1, per_page=31)), 31) def test_adding_manager(self): """ Verifies adding a new manager works """ user1 = User(name='user1', email='*****@*****.**', email_confirmed=1, is_paid=1) user1.set_password('asdfasdf') user1.save() self.shake.add_manager(user1) self.assertTrue(user1.id in [m.id for m in self.shake.managers()]) self.shake.remove_manager(user1) self.assertFalse(user1.id in [m.id for m in self.shake.managers()]) self.shake.add_manager(user1) self.assertTrue(user1.id in [m.id for m in self.shake.managers()]) def test_can_edit(self): """ Tests whether a user has the ability to edit a shake """ user1 = User(name='user1', email='*****@*****.**', email_confirmed=1, is_paid=1) user1.set_password('asdfasdf') user1.save() self.assertTrue(self.shake.can_edit(self.user)) self.assertFalse(self.shake.can_edit(user1))
class RequestInvitationTests(test.base.BaseAsyncTestCase): def setUp(self): super(RequestInvitationTests, self).setUp() self.user = User(name='joe', email='*****@*****.**', email_confirmed=1, is_paid=1) self.user.set_password('asdfasdf') self.user.save() self.sign_in("joe", "asdfasdf") self.manager = User(name='admin', email='*****@*****.**', email_confirmed=1, is_paid=1) self.manager.set_password('asdfasdf') self.manager.save() self.shake = Shake(user_id=self.manager.id, type='group', title="derp", name='derp') self.shake.save() def test_posting_request_creates_request(self): response = self.post_url('/shake/derp/request_invitation?json=1') j_response = json_decode(response.body) self.assertEqual(j_response['status'], 'ok') no = Notification.all()[0] self.assertEqual(no.sender_id, self.user.id) self.assertEqual(no.receiver_id, self.manager.id) self.assertEqual(no.action_id, self.shake.id) def test_cannot_request_after_one_already_exists(self): response = self.post_url('/shake/derp/request_invitation?json=1') j_response = json_decode(response.body) self.assertEqual(j_response['status'], 'ok') response = self.post_url('/shake/derp/request_invitation?json=1') j_response = json_decode(response.body) self.assertEqual(j_response['status'], 'error') def test_posting_request_doesnt_recreate_request(self): response = self.post_url('/shake/derp/request_invitation?json=1') j_response = json_decode(response.body) self.assertEqual(j_response['status'], 'ok') no = Notification.all()[0] self.assertEqual(no.sender_id, self.user.id) self.assertEqual(no.receiver_id, self.manager.id) self.assertEqual(no.action_id, self.shake.id) response = self.post_url('/shake/derp/request_invitation?json=1') self.assertEqual(len(Notification.all()), 1) def test_no_button_shows_when_request_has_been_made(self): response = self.post_url('/shake/derp/request_invitation?json=1') response = self.fetch_url('/derp') self.assertTrue(response.body.find('/request_invitation') == -1) def test_shake_manager_gets_notification_created(self): response = self.post_url('/shake/derp/request_invitation?json=1') n = Notification.get('receiver_id = %s', self.manager.id) self.assertEqual(n.sender_id, self.user.id) self.assertEqual(n.action_id, self.shake.id) def test_shake_accept_request_creates_editor(self): self.post_url('/shake/derp/request_invitation?json=1') self.sign_in("admin", "asdfasdf") response = self.post_url('/shake/derp/approve_invitation?json=1', arguments={'user_id': self.user.id}) manager = ShakeManager.get('user_id = %s', self.user.id) self.assertTrue(manager) def test_shake_accept_request_deletes_notification(self): self.post_url('/shake/derp/request_invitation?json=1') self.sign_in("admin", "asdfasdf") response = self.post_url('/shake/derp/approve_invitation?json=1', arguments={'user_id': self.user.id}) n = Notification.get('receiver_id = %s', self.manager.id) self.assertTrue(n.deleted) def test_shake_accept_request_creates_notification(self): self.post_url('/shake/derp/request_invitation?json=1') self.sign_in("admin", "asdfasdf") response = self.post_url('/shake/derp/approve_invitation?json=1', arguments={'user_id': self.user.id}) n = Notification.get('receiver_id = %s and type=%s', self.manager.id, "invitation_request") self.assertTrue(n.deleted) n = Notification.get('receiver_id = %s and type=%s', self.user.id, "invitation_approved") self.assertTrue(n) def test_shake_decline_request_deletes_notification(self): self.post_url('/shake/derp/request_invitation?json=1') self.sign_in("admin", "asdfasdf") response = self.post_url('/shake/derp/decline_invitation?json=1', arguments={'user_id': self.user.id}) manager = ShakeManager.get('user_id = %s', self.user.id) self.assertFalse(manager) n = Notification.get('receiver_id = %s', self.manager.id) self.assertTrue(n.deleted) def test_already_a_member_do_not_see_request_button(self): self.shake.add_manager(self.user) response = self.fetch_url('/derp') self.assertTrue(response.body.find('join this shake') == -1)