def test_users_projects_in_common_exclude_deleted_projects(self): project_list = [] for x in range(1, 10): project = ProjectFactory(creator=self.user_one) project.add_contributor(contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one)) project.save() project_list.append(project) for x in range(1, 5): project = project_list[x] project.reload() project.remove_node(auth=Auth(user=self.user_one)) project.save() url = "/{}users/{}/nodes/?embed=contributors&show_projects_in_common=true".format( API_BASE, self.user_two._id) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'][0]['embeds']['contributors']['data'] for user in user_json: meta = user['embeds']['users']['data']['relationships']['nodes'][ 'links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 5)
def test_users_projects_in_common_exclude_deleted_projects(self): project_list=[] for x in range(1,10): project = ProjectFactory(creator=self.user_one) project.add_contributor( contributor=self.user_two, permissions=CREATOR_PERMISSIONS, auth=Auth(user=self.user_one) ) project.save() project_list.append(project) for x in range(1,5): project = project_list[x] project.reload() project.remove_node(auth=Auth(user=self.user_one)) project.save() url = "/{}users/{}/nodes/?embed=contributors&show_projects_in_common=true".format(API_BASE, self.user_two._id) res = self.app.get(url, auth=self.user_two.auth) user_json = res.json['data'][0]['embeds']['contributors']['data'] for user in user_json: meta = user['embeds']['users']['data']['relationships']['nodes']['links']['related']['meta'] assert_in('projects_in_common', meta) assert_equal(meta['projects_in_common'], 5)
class TestCallbacks(OsfTestCase): def setUp(self): super(TestCallbacks, self).setUp() self.user = AuthUserFactory() self.consolidated_auth = Auth(user=self.user) self.auth = ('test', self.user.api_keys[0]._primary_key) self.project = ProjectFactory(creator=self.user) self.non_authenticator = AuthUserFactory() self.project.add_contributor( contributor=self.non_authenticator, auth=Auth(self.project.creator), ) self.project.add_addon('figshare', auth=self.consolidated_auth) self.project.creator.add_addon('figshare') self.node_settings = self.project.get_addon('figshare') self.user_settings = self.project.creator.get_addon('figshare') self.user_settings.oauth_access_token = 'legittoken' self.user_settings.oauth_access_token_secret = 'legittoken' self.user_settings.save() self.node_settings.user_settings = self.user_settings self.node_settings.figshare_id = '123456' self.node_settings.figshare_type = 'project' self.node_settings.figshare_title = 'singlefile' self.node_settings.save() def test_update_fields_project(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'project', 'id': '313131', 'title': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs+1) def test_update_fields_fileset(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'fileset', 'id': '313131', 'title': 'A FILESET' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'fileset') assert_equals(self.node_settings.figshare_title, 'A FILESET') # check for log added assert_equals(len(self.project.logs), num_logs+1) def test_update_fields_some_missing(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'project', 'id': '313131', 'title': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs+1) def test_update_fields_invalid(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'adad' : 131313, 'i1513': '313131', 'titladad': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '123456') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'singlefile') # check for log added assert_equals(len(self.project.logs), num_logs) def test_api_url_no_user(self): self.node_settings.user_settings = None self.node_settings.save() assert_equal(self.node_settings.api_url, figshare_settings.API_URL) def test_api_url(self): assert_equal(self.node_settings.api_url, figshare_settings.API_OAUTH_URL) def test_before_register_linked_content(self): assert_false( self.node_settings.before_register( self.project, self.project.creator ) is None ) def test_before_register_no_linked_content(self): self.node_settings.figshare_id = None assert_true( self.node_settings.before_register( self.project, self.project.creator ) is None ) def test_before_remove_contributor_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.project.creator ) assert_true(message) def test_before_remove_contributor_not_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.non_authenticator ) assert_false(message) def test_after_remove_contributor_authenticator(self): self.node_settings.after_remove_contributor( self.project, self.project.creator ) assert_equal( self.node_settings.user_settings, None ) def test_after_fork_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.project.creator, ) assert_equal( self.node_settings.user_settings, clone.user_settings, ) def test_after_fork_not_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.non_authenticator, ) assert_equal( clone.user_settings, None, ) def test_after_delete(self): self.project.remove_node(Auth(user=self.project.creator)) # Ensure that changes to node settings have been saved self.node_settings.reload() assert_true(self.node_settings.user_settings is None) assert_true(self.node_settings.figshare_id is None) assert_true(self.node_settings.figshare_type is None) assert_true(self.node_settings.figshare_title is None) #TODO Test figshare options and figshare to_json
class TestPublicNodes(SearchTestCase): def setUp(self): super(TestPublicNodes, self).setUp() self.user = UserFactory(usename='Doug Bogie') self.title = 'Red Special' self.consolidate_auth = Auth(user=self.user) self.project = ProjectFactory( title=self.title, creator=self.user, is_public=True, ) self.component = NodeFactory( parent=self.project, title=self.title, creator=self.user, is_public=True ) self.registration = ProjectFactory( title=self.title, creator=self.user, is_public=True, is_registration=True ) def test_make_private(self): """Make project public, then private, and verify that it is not present in search. """ self.project.set_privacy('private') docs = query('category:project AND ' + self.title)['results'] assert_equal(len(docs), 0) self.component.set_privacy('private') docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 0) self.registration.set_privacy('private') docs = query('category:registration AND ' + self.title)['results'] assert_equal(len(docs), 0) def test_public_parent_title(self): self.project.set_title('hello & world', self.consolidate_auth) self.project.save() docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 1) assert_equal(docs[0]['parent_title'], 'hello & world') assert_true(docs[0]['parent_url']) def test_make_parent_private(self): """Make parent of component, public, then private, and verify that the component still appears but doesn't link to the parent in search. """ self.project.set_privacy('private') docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 1) assert_equal(docs[0]['parent_title'], '-- private project --') assert_false(docs[0]['parent_url']) def test_delete_project(self): """ """ self.component.remove_node(self.consolidate_auth) docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 0) self.project.remove_node(self.consolidate_auth) docs = query('category:project AND ' + self.title)['results'] assert_equal(len(docs), 0) def test_change_title(self): """ """ title_original = self.project.title self.project.set_title( 'Blue Ordinary', self.consolidate_auth, save=True) docs = query('category:project AND ' + title_original)['results'] assert_equal(len(docs), 0) docs = query('category:project AND ' + self.project.title)['results'] assert_equal(len(docs), 1) def test_add_tags(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 0) self.project.add_tag(tag, self.consolidate_auth, save=True) for tag in tags: docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 1) def test_remove_tag(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) self.project.remove_tag(tag, self.consolidate_auth, save=True) docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 0) def test_update_wiki(self): """Add text to a wiki page, then verify that project is found when searching for wiki text. """ wiki_content = { 'home': 'Hammer to fall', 'swag': '#YOLO' } for key, value in wiki_content.items(): docs = query(value)['results'] assert_equal(len(docs), 0) self.project.update_node_wiki( key, value, self.consolidate_auth, ) docs = query(value)['results'] assert_equal(len(docs), 1) def test_clear_wiki(self): """Add wiki text to page, then delete, then verify that project is not found when searching for wiki text. """ wiki_content = 'Hammer to fall' self.project.update_node_wiki( 'home', wiki_content, self.consolidate_auth, ) self.project.update_node_wiki('home', '', self.consolidate_auth) docs = query(wiki_content)['results'] assert_equal(len(docs), 0) def test_add_contributor(self): """Add a contributor, then verify that project is found when searching for contributor. """ user2 = UserFactory(fullname='Adam Lambert') docs = query('category:project AND "{}"'.format(user2.fullname))['results'] assert_equal(len(docs), 0) self.project.add_contributor(user2, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))['results'] assert_equal(len(docs), 1) def test_remove_contributor(self): """Add and remove a contributor, then verify that project is not found when searching for contributor. """ user2 = UserFactory(fullname='Brian May') self.project.add_contributor(user2, save=True) self.project.remove_contributor(user2, self.consolidate_auth) docs = query('category:project AND "{}"'.format(user2.fullname))['results'] assert_equal(len(docs), 0) def test_hide_contributor(self): user2 = UserFactory(fullname='Brian May') self.project.add_contributor(user2) self.project.set_visible(user2, False, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))['results'] assert_equal(len(docs), 0) self.project.set_visible(user2, True, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))['results'] assert_equal(len(docs), 1) def test_wrong_order_search(self): title_parts = self.title.split(' ') title_parts.reverse() title_search = ' '.join(title_parts) docs = query(title_search)['results'] assert_equal(len(docs), 3) def test_tag_aggregation(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) docs = query(self.title)['tags'] assert len(docs) == 3 for doc in docs: assert doc['key'] in tags
class TestPublicNodes(SearchTestCase): def setUp(self): super(TestPublicNodes, self).setUp() self.user = UserFactory(usename='Doug Bogie') self.title = 'Red Special' self.consolidate_auth = Auth(user=self.user) self.project = ProjectFactory( title=self.title, creator=self.user, is_public=True, ) self.component = NodeFactory(parent=self.project, title=self.title, creator=self.user, is_public=True) self.registration = ProjectFactory(title=self.title, creator=self.user, is_public=True, is_registration=True) def test_make_private(self): # Make project public, then private, and verify that it is not present # in search. self.project.set_privacy('private') docs = query('category:project AND ' + self.title)['results'] assert_equal(len(docs), 0) self.component.set_privacy('private') docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 0) def test_public_parent_title(self): self.project.set_title('hello & world', self.consolidate_auth) self.project.save() docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 1) assert_equal(docs[0]['parent_title'], 'hello & world') assert_true(docs[0]['parent_url']) def test_make_parent_private(self): # Make parent of component, public, then private, and verify that the # component still appears but doesn't link to the parent in search. self.project.set_privacy('private') docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 1) assert_equal(docs[0]['parent_title'], '-- private project --') assert_false(docs[0]['parent_url']) def test_delete_project(self): self.component.remove_node(self.consolidate_auth) docs = query('category:component AND ' + self.title)['results'] assert_equal(len(docs), 0) self.project.remove_node(self.consolidate_auth) docs = query('category:project AND ' + self.title)['results'] assert_equal(len(docs), 0) def test_change_title(self): title_original = self.project.title self.project.set_title('Blue Ordinary', self.consolidate_auth, save=True) docs = query('category:project AND ' + title_original)['results'] assert_equal(len(docs), 0) docs = query('category:project AND ' + self.project.title)['results'] assert_equal(len(docs), 1) def test_add_tags(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 0) self.project.add_tag(tag, self.consolidate_auth, save=True) for tag in tags: docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 1) def test_remove_tag(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) self.project.remove_tag(tag, self.consolidate_auth, save=True) docs = query('tags:"{}"'.format(tag))['results'] assert_equal(len(docs), 0) def test_update_wiki(self): """Add text to a wiki page, then verify that project is found when searching for wiki text. """ wiki_content = {'home': 'Hammer to fall', 'swag': '#YOLO'} for key, value in wiki_content.items(): docs = query(value)['results'] assert_equal(len(docs), 0) self.project.update_node_wiki( key, value, self.consolidate_auth, ) docs = query(value)['results'] assert_equal(len(docs), 1) def test_clear_wiki(self): # Add wiki text to page, then delete, then verify that project is not # found when searching for wiki text. wiki_content = 'Hammer to fall' self.project.update_node_wiki( 'home', wiki_content, self.consolidate_auth, ) self.project.update_node_wiki('home', '', self.consolidate_auth) docs = query(wiki_content)['results'] assert_equal(len(docs), 0) def test_add_contributor(self): # Add a contributor, then verify that project is found when searching # for contributor. user2 = UserFactory(fullname='Adam Lambert') docs = query('category:project AND "{}"'.format( user2.fullname))['results'] assert_equal(len(docs), 0) self.project.add_contributor(user2, save=True) docs = query('category:project AND "{}"'.format( user2.fullname))['results'] assert_equal(len(docs), 1) def test_remove_contributor(self): # Add and remove a contributor, then verify that project is not found # when searching for contributor. user2 = UserFactory(fullname='Brian May') self.project.add_contributor(user2, save=True) self.project.remove_contributor(user2, self.consolidate_auth) docs = query('category:project AND "{}"'.format( user2.fullname))['results'] assert_equal(len(docs), 0) def test_hide_contributor(self): user2 = UserFactory(fullname='Brian May') self.project.add_contributor(user2) self.project.set_visible(user2, False, save=True) docs = query('category:project AND "{}"'.format( user2.fullname))['results'] assert_equal(len(docs), 0) self.project.set_visible(user2, True, save=True) docs = query('category:project AND "{}"'.format( user2.fullname))['results'] assert_equal(len(docs), 1) def test_wrong_order_search(self): title_parts = self.title.split(' ') title_parts.reverse() title_search = ' '.join(title_parts) docs = query(title_search)['results'] assert_equal(len(docs), 3) def test_tag_aggregation(self): tags = ['stonecoldcrazy', 'just a poor boy', 'from-a-poor-family'] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) docs = query(self.title)['tags'] assert len(docs) == 3 for doc in docs: assert doc['key'] in tags
class OAuthAddonNodeSettingsTestSuiteMixin(OAuthAddonModelTestSuiteMixinBase): @abc.abstractproperty def NodeSettingsFactory(self): pass @abc.abstractproperty def NodeSettingsClass(self): pass @abc.abstractproperty def UserSettingsFactory(self): pass def _node_settings_class_kwargs(self, node, user_settings): return { 'user_settings': self.user_settings, 'folder_id': '1234567890', 'owner': self.node } def setUp(self): super(OAuthAddonNodeSettingsTestSuiteMixin, self).setUp() self.node = ProjectFactory() self.user = self.node.creator self.external_account = self.ExternalAccountFactory() self.user.add_addon(self.short_name) self.user.external_accounts.append(self.external_account) self.user.save() self.user_settings = self.user.get_addon(self.short_name) self.user_settings.grant_oauth_access( node=self.node, external_account=self.external_account, metadata={'folder': '1234567890'} ) self.user_settings.save() self.node_settings = self.NodeSettingsFactory( **self._node_settings_class_kwargs(self.node, self.user_settings) ) self.node_settings.external_account = self.external_account self.node_settings.save() def tearDown(self): super(OAuthAddonNodeSettingsTestSuiteMixin, self).tearDown() self.user_settings.remove() self.node_settings.remove() self.external_account.remove() self.node.remove() self.user.remove() def test_complete_true(self): assert_true(self.node_settings.has_auth) assert_true(self.node_settings.complete) def test_complete_has_auth_not_verified(self): with mock_auth(self.user): self.user_settings.revoke_oauth_access(self.external_account) assert_false(self.node_settings.has_auth) assert_false(self.node_settings.complete) def test_complete_auth_false(self): self.node_settings.user_settings = None assert_false(self.node_settings.has_auth) assert_false(self.node_settings.complete) def test_fields(self): node_settings = self.NodeSettingsClass(user_settings=self.user_settings) node_settings.save() assert_true(node_settings.user_settings) assert_equal(node_settings.user_settings.owner, self.user) assert_true(hasattr(node_settings, 'folder_id')) assert_true(hasattr(node_settings, 'user_settings')) def test_folder_defaults_to_none(self): node_settings = self.NodeSettingsClass(user_settings=self.user_settings) node_settings.save() assert_is_none(node_settings.folder_id) def test_has_auth(self): self.user.external_accounts = [] self.user_settings.reload() node = ProjectFactory() settings = self.NodeSettingsClass(user_settings=self.user_settings, owner=node) settings.save() assert_false(settings.has_auth) self.user.external_accounts.append(self.external_account) settings.set_auth(self.external_account, self.user) settings.reload() assert_true(settings.has_auth) def test_clear_auth(self): node_settings = self.NodeSettingsFactory() node_settings.external_account = self.ExternalAccountFactory() node_settings.user_settings = self.UserSettingsFactory() node_settings.save() node_settings.clear_auth() assert_is_none(node_settings.external_account) assert_is_none(node_settings.user_settings) def test_clear_settings(self): node_settings = self.NodeSettingsFactory() node_settings.external_account = self.ExternalAccountFactory() node_settings.user_settings = self.UserSettingsFactory() node_settings.save() node_settings.clear_settings() assert_is_none(node_settings.folder_id) def test_to_json(self): settings = self.node_settings user = UserFactory() result = settings.to_json(user) assert_equal(result['addon_short_name'], self.short_name) def test_delete(self): assert_true(self.node_settings.user_settings) assert_true(self.node_settings.folder_id) old_logs = self.node.logs self.node_settings.delete() self.node_settings.save() assert_is(self.node_settings.user_settings, None) assert_is(self.node_settings.folder_id, None) assert_true(self.node_settings.deleted) assert_equal(self.node.logs, old_logs) def test_deauthorize(self): assert_true(self.node_settings.user_settings) assert_true(self.node_settings.folder_id) self.node_settings.deauthorize(auth=Auth(self.user)) self.node_settings.save() assert_is(self.node_settings.user_settings, None) assert_is(self.node_settings.folder_id, None) last_log = self.node.logs[-1] assert_equal(last_log.action, '{0}_node_deauthorized'.format(self.short_name)) params = last_log.params assert_in('node', params) assert_in('project', params) def test_set_folder(self): folder_id = '1234567890' self.node_settings.set_folder(folder_id, auth=Auth(self.user)) self.node_settings.save() # Folder was set assert_equal(self.node_settings.folder_id, folder_id) # Log was saved last_log = self.node.logs[-1] assert_equal(last_log.action, '{0}_folder_selected'.format(self.short_name)) def test_set_user_auth(self): node_settings = self.NodeSettingsFactory() user_settings = self.UserSettingsFactory() external_account = self.ExternalAccountFactory() user_settings.owner.external_accounts.append(external_account) user_settings.save() node_settings.external_account = external_account node_settings.set_auth(external_account, user_settings.owner) node_settings.save() assert_true(node_settings.has_auth) assert_equal(node_settings.user_settings, user_settings) # A log was saved last_log = node_settings.owner.logs[-1] assert_equal(last_log.action, '{0}_node_authorized'.format(self.short_name)) log_params = last_log.params assert_equal(log_params['node'], node_settings.owner._primary_key) assert_equal(last_log.user, user_settings.owner) def test_serialize_credentials(self): self.user_settings.external_accounts[0].oauth_key = 'key-11' self.user_settings.save() credentials = self.node_settings.serialize_waterbutler_credentials() expected = {'token': self.node_settings.external_account.oauth_key} assert_equal(credentials, expected) def test_serialize_credentials_not_authorized(self): self.node_settings.user_settings = None self.node_settings.save() with assert_raises(exceptions.AddonError): self.node_settings.serialize_waterbutler_credentials() def test_serialize_settings(self): settings = self.node_settings.serialize_waterbutler_settings() expected = {'folder': self.node_settings.folder_id} assert_equal(settings, expected) def test_serialize_settings_not_configured(self): self.node_settings.clear_settings() self.node_settings.save() with assert_raises(exceptions.AddonError): self.node_settings.serialize_waterbutler_settings() def test_create_log(self): action = 'file_added' path = 'pizza.nii' nlog = len(self.node.logs) self.node_settings.create_waterbutler_log( auth=Auth(user=self.user), action=action, metadata={'path': path, 'materialized': path}, ) self.node.reload() assert_equal(len(self.node.logs), nlog + 1) assert_equal( self.node.logs[-1].action, '{0}_{1}'.format(self.short_name, action), ) assert_equal( self.node.logs[-1].params['path'], path ) def test_after_fork_by_authorized_user(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( node=self.node, fork=fork, user=self.user_settings.owner ) assert_equal(clone.user_settings, self.user_settings) def test_after_fork_by_unauthorized_user(self): fork = ProjectFactory() user = UserFactory() clone, message = self.node_settings.after_fork( node=self.node, fork=fork, user=user, save=True ) assert_is(clone.user_settings, None) def test_before_fork(self): node = ProjectFactory() message = self.node_settings.before_fork(node, self.user) assert_true(message) def test_before_remove_contributor_message(self): message = self.node_settings.before_remove_contributor( self.node, self.user) assert_true(message) assert_in(self.user.fullname, message) assert_in(self.node.project_or_component, message) def test_after_remove_authorized_user_not_self(self): message = self.node_settings.after_remove_contributor( self.node, self.user_settings.owner) self.node_settings.save() assert_is_none(self.node_settings.user_settings) assert_true(message) assert_in("You can re-authenticate", message) def test_after_remove_authorized_user_self(self): auth = Auth(user=self.user_settings.owner) message = self.node_settings.after_remove_contributor( self.node, self.user_settings.owner, auth) self.node_settings.save() assert_is_none(self.node_settings.user_settings) assert_true(message) assert_not_in("You can re-authenticate", message) def test_after_delete(self): self.node.remove_node(Auth(user=self.node.creator)) # Ensure that changes to node settings have been saved self.node_settings.reload() assert_is_none(self.node_settings.user_settings) assert_is_none(self.node_settings.folder_id)
class TestCallbacks(OsfTestCase): def setUp(self): super(TestCallbacks, self).setUp() self.user = AuthUserFactory() self.consolidated_auth = Auth(user=self.user) self.auth = self.user.auth self.project = ProjectFactory(creator=self.user) self.non_authenticator = AuthUserFactory() self.project.add_contributor( contributor=self.non_authenticator, auth=Auth(self.project.creator), ) self.project.add_addon('figshare', auth=self.consolidated_auth) self.project.creator.add_addon('figshare') self.node_settings = self.project.get_addon('figshare') self.user_settings = self.project.creator.get_addon('figshare') self.user_settings.oauth_access_token = 'legittoken' self.user_settings.oauth_access_token_secret = 'legittoken' self.user_settings.save() self.node_settings.user_settings = self.user_settings self.node_settings.figshare_id = '123456' self.node_settings.figshare_type = 'project' self.node_settings.figshare_title = 'singlefile' self.node_settings.save() def test_update_fields_project(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'project', 'id': '313131', 'name': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_fileset(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'fileset', 'id': '313131', 'name': 'A FILESET' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'fileset') assert_equals(self.node_settings.figshare_title, 'A FILESET') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_some_missing(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'type': 'project', 'id': '313131', 'name': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_invalid(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'adad': 131313, 'i1513': '313131', 'titladad': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '123456') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'singlefile') # check for log added assert_equals(len(self.project.logs), num_logs) def test_api_url_no_user(self): self.node_settings.user_settings = None self.node_settings.save() assert_equal(self.node_settings.api_url, figshare_settings.API_URL) def test_api_url(self): assert_equal(self.node_settings.api_url, figshare_settings.API_OAUTH_URL) def test_before_register_linked_content(self): assert_false( self.node_settings.before_register( self.project, self.project.creator ) is None ) def test_before_register_no_linked_content(self): self.node_settings.figshare_id = None assert_true( self.node_settings.before_register( self.project, self.project.creator ) is None ) def test_before_remove_contributor_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.project.creator ) assert_true(message) def test_before_remove_contributor_not_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.non_authenticator ) assert_false(message) def test_after_remove_contributor_authenticator_not_self(self): auth = Auth(user=self.non_authenticator) msg = self.node_settings.after_remove_contributor( self.project, self.project.creator, auth ) assert_in( self.project.project_or_component, msg ) assert_equal( self.node_settings.user_settings, None ) assert_in("You can re-authenticate", msg) def test_after_remove_contributor_authenticator_self(self): msg = self.node_settings.after_remove_contributor( self.project, self.project.creator, self.consolidated_auth ) assert_in( self.project.title, msg ) assert_equal( self.node_settings.user_settings, None ) assert_not_in("You can re-authenticate", msg) def test_after_fork_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.project.creator, ) assert_equal( self.node_settings.user_settings, clone.user_settings, ) def test_after_fork_not_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.non_authenticator, ) assert_equal( clone.user_settings, None, ) def test_after_delete(self): self.project.remove_node(Auth(user=self.project.creator)) # Ensure that changes to node settings have been saved self.node_settings.reload() assert_true(self.node_settings.user_settings is None) assert_true(self.node_settings.figshare_id is None) assert_true(self.node_settings.figshare_type is None) assert_true(self.node_settings.figshare_title is None) @mock.patch('website.archiver.tasks.archive') @mock.patch('website.addons.figshare.model.AddonFigShareNodeSettings.archive_errors') def test_does_not_get_copied_to_registrations(self, mock_errors, mock_archive): registration = self.project.register_node( schema=None, auth=Auth(user=self.project.creator), template='Template1', data='hodor' ) assert_false(registration.has_addon('figshare'))
class TestCallbacks(OsfTestCase): def setUp(self): super(TestCallbacks, self).setUp() self.user = AuthUserFactory() self.consolidated_auth = Auth(user=self.user) self.auth = self.user.auth self.project = ProjectFactory(creator=self.user) self.non_authenticator = AuthUserFactory() self.project.add_contributor( contributor=self.non_authenticator, auth=Auth(self.project.creator), ) self.project.add_addon('figshare', auth=self.consolidated_auth) self.project.creator.add_addon('figshare') self.node_settings = self.project.get_addon('figshare') self.user_settings = self.project.creator.get_addon('figshare') self.user_settings.oauth_access_token = 'legittoken' self.user_settings.oauth_access_token_secret = 'legittoken' self.user_settings.save() self.node_settings.user_settings = self.user_settings self.node_settings.figshare_id = '123456' self.node_settings.figshare_type = 'project' self.node_settings.figshare_title = 'singlefile' self.node_settings.save() def test_update_fields_project(self): num_logs = len(self.project.logs) # try updating fields newfields = {'type': 'project', 'id': '313131', 'name': 'A PROJECT'} self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_fileset(self): num_logs = len(self.project.logs) # try updating fields newfields = {'type': 'fileset', 'id': '313131', 'name': 'A FILESET'} self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_type, 'fileset') assert_equals(self.node_settings.figshare_title, 'A FILESET') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_some_missing(self): num_logs = len(self.project.logs) # try updating fields newfields = {'type': 'project', 'id': '313131', 'name': 'A PROJECT'} self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '313131') assert_equals(self.node_settings.figshare_title, 'A PROJECT') # check for log added assert_equals(len(self.project.logs), num_logs + 1) def test_update_fields_invalid(self): num_logs = len(self.project.logs) # try updating fields newfields = { 'adad': 131313, 'i1513': '313131', 'titladad': 'A PROJECT' } self.node_settings.update_fields(newfields, self.project, Auth(self.project.creator)) #check for updated assert_equals(self.node_settings.figshare_id, '123456') assert_equals(self.node_settings.figshare_type, 'project') assert_equals(self.node_settings.figshare_title, 'singlefile') # check for log added assert_equals(len(self.project.logs), num_logs) def test_api_url_no_user(self): self.node_settings.user_settings = None self.node_settings.save() assert_equal(self.node_settings.api_url, figshare_settings.API_URL) def test_api_url(self): assert_equal(self.node_settings.api_url, figshare_settings.API_OAUTH_URL) def test_before_register_linked_content(self): assert_false( self.node_settings.before_register(self.project, self.project.creator) is None) def test_before_register_no_linked_content(self): self.node_settings.figshare_id = None assert_true( self.node_settings.before_register(self.project, self.project.creator) is None) def test_before_remove_contributor_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.project.creator) assert_true(message) def test_before_remove_contributor_not_authenticator(self): message = self.node_settings.before_remove_contributor( self.project, self.non_authenticator) assert_false(message) def test_after_remove_contributor_authenticator_not_self(self): auth = Auth(user=self.non_authenticator) msg = self.node_settings.after_remove_contributor( self.project, self.project.creator, auth) assert_in(self.project.project_or_component, msg) assert_equal(self.node_settings.user_settings, None) assert_in("You can re-authenticate", msg) def test_after_remove_contributor_authenticator_self(self): msg = self.node_settings.after_remove_contributor( self.project, self.project.creator, self.consolidated_auth) assert_in(self.project.title, msg) assert_equal(self.node_settings.user_settings, None) assert_not_in("You can re-authenticate", msg) def test_after_fork_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.project.creator, ) assert_equal( self.node_settings.user_settings, clone.user_settings, ) def test_after_fork_not_authenticator(self): fork = ProjectFactory() clone, message = self.node_settings.after_fork( self.project, fork, self.non_authenticator, ) assert_equal( clone.user_settings, None, ) def test_after_delete(self): self.project.remove_node(Auth(user=self.project.creator)) # Ensure that changes to node settings have been saved self.node_settings.reload() assert_true(self.node_settings.user_settings is None) assert_true(self.node_settings.figshare_id is None) assert_true(self.node_settings.figshare_type is None) assert_true(self.node_settings.figshare_title is None) @mock.patch('website.archiver.tasks.archive.si') @mock.patch( 'website.addons.figshare.model.AddonFigShareNodeSettings.archive_errors' ) def test_does_not_get_copied_to_registrations(self, mock_errors, mock_archive): registration = self.project.register_node( schema=None, auth=Auth(user=self.project.creator), template='Template1', data='hodor') assert_false(registration.has_addon('figshare'))
class TestPublicNodes(SearchTestCase): def setUp(self): super(TestPublicNodes, self).setUp() self.user = UserFactory(usename="Doug Bogie") self.title = "Red Special" self.consolidate_auth = Auth(user=self.user) self.project = ProjectFactory(title=self.title, creator=self.user, is_public=True) self.component = NodeFactory(parent=self.project, title=self.title, creator=self.user, is_public=True) self.registration = ProjectFactory(title=self.title, creator=self.user, is_public=True, is_registration=True) def test_make_private(self): """Make project public, then private, and verify that it is not present in search. """ self.project.set_privacy("private") docs = query("category:project AND " + self.title)["results"] assert_equal(len(docs), 0) self.component.set_privacy("private") docs = query("category:component AND " + self.title)["results"] assert_equal(len(docs), 0) self.registration.set_privacy("private") docs = query("category:registration AND " + self.title)["results"] assert_equal(len(docs), 0) def test_public_parent_title(self): self.project.set_title("hello & world", self.consolidate_auth) self.project.save() docs = query("category:component AND " + self.title)["results"] assert_equal(len(docs), 1) assert_equal(docs[0]["parent_title"], "hello & world") assert_true(docs[0]["parent_url"]) def test_make_parent_private(self): """Make parent of component, public, then private, and verify that the component still appears but doesn't link to the parent in search. """ self.project.set_privacy("private") docs = query("category:component AND " + self.title)["results"] assert_equal(len(docs), 1) assert_equal(docs[0]["parent_title"], "-- private project --") assert_false(docs[0]["parent_url"]) def test_delete_project(self): """ """ self.component.remove_node(self.consolidate_auth) docs = query("category:component AND " + self.title)["results"] assert_equal(len(docs), 0) self.project.remove_node(self.consolidate_auth) docs = query("category:project AND " + self.title)["results"] assert_equal(len(docs), 0) def test_change_title(self): """ """ title_original = self.project.title self.project.set_title("Blue Ordinary", self.consolidate_auth, save=True) docs = query("category:project AND " + title_original)["results"] assert_equal(len(docs), 0) docs = query("category:project AND " + self.project.title)["results"] assert_equal(len(docs), 1) def test_add_tags(self): tags = ["stonecoldcrazy", "just a poor boy", "from-a-poor-family"] for tag in tags: docs = query('tags:"{}"'.format(tag))["results"] assert_equal(len(docs), 0) self.project.add_tag(tag, self.consolidate_auth, save=True) for tag in tags: docs = query('tags:"{}"'.format(tag))["results"] assert_equal(len(docs), 1) def test_remove_tag(self): tags = ["stonecoldcrazy", "just a poor boy", "from-a-poor-family"] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) self.project.remove_tag(tag, self.consolidate_auth, save=True) docs = query('tags:"{}"'.format(tag))["results"] assert_equal(len(docs), 0) def test_update_wiki(self): """Add text to a wiki page, then verify that project is found when searching for wiki text. """ wiki_content = {"home": "Hammer to fall", "swag": "#YOLO"} for key, value in wiki_content.items(): docs = query(value)["results"] assert_equal(len(docs), 0) self.project.update_node_wiki(key, value, self.consolidate_auth) docs = query(value)["results"] assert_equal(len(docs), 1) def test_clear_wiki(self): """Add wiki text to page, then delete, then verify that project is not found when searching for wiki text. """ wiki_content = "Hammer to fall" self.project.update_node_wiki("home", wiki_content, self.consolidate_auth) self.project.update_node_wiki("home", "", self.consolidate_auth) docs = query(wiki_content)["results"] assert_equal(len(docs), 0) def test_add_contributor(self): """Add a contributor, then verify that project is found when searching for contributor. """ user2 = UserFactory(fullname="Adam Lambert") docs = query('category:project AND "{}"'.format(user2.fullname))["results"] assert_equal(len(docs), 0) self.project.add_contributor(user2, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))["results"] assert_equal(len(docs), 1) def test_remove_contributor(self): """Add and remove a contributor, then verify that project is not found when searching for contributor. """ user2 = UserFactory(fullname="Brian May") self.project.add_contributor(user2, save=True) self.project.remove_contributor(user2, self.consolidate_auth) docs = query('category:project AND "{}"'.format(user2.fullname))["results"] assert_equal(len(docs), 0) def test_hide_contributor(self): user2 = UserFactory(fullname="Brian May") self.project.add_contributor(user2) self.project.set_visible(user2, False, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))["results"] assert_equal(len(docs), 0) self.project.set_visible(user2, True, save=True) docs = query('category:project AND "{}"'.format(user2.fullname))["results"] assert_equal(len(docs), 1) def test_wrong_order_search(self): title_parts = self.title.split(" ") title_parts.reverse() title_search = " ".join(title_parts) docs = query(title_search)["results"] assert_equal(len(docs), 3) def test_tag_aggregation(self): tags = ["stonecoldcrazy", "just a poor boy", "from-a-poor-family"] for tag in tags: self.project.add_tag(tag, self.consolidate_auth, save=True) docs = query(self.title)["tags"] assert len(docs) == 3 for doc in docs: assert doc["key"] in tags