def test_import_auth(self): ea = self.ExternalAccountFactory() self.user.external_accounts.append(ea) self.user.save() node = ProjectFactory(creator=self.user) node_settings = node.get_or_add_addon(self.ADDON_SHORT_NAME, auth=Auth(self.user)) node.save() url = node.api_url_for("{0}_import_auth".format(self.ADDON_SHORT_NAME)) res = self.app.put_json(url, {"external_account_id": ea._id}, auth=self.user.auth) assert_equal(res.status_code, http.OK) assert_in("result", res.json) node_settings.reload() assert_equal(node_settings.external_account._id, ea._id) node.reload() last_log = node.logs[-1] assert_equal(last_log.action, "{0}_node_authorized".format(self.ADDON_SHORT_NAME))
def test_import_auth(self): ea = self.ExternalAccountFactory() self.user.external_accounts.append(ea) self.user.save() node = ProjectFactory(creator=self.user) node_settings = node.get_or_add_addon(self.ADDON_SHORT_NAME, auth=Auth(self.user)) node.save() url = node.api_url_for('{0}_import_auth'.format(self.ADDON_SHORT_NAME)) res = self.app.put_json(url, { 'external_account_id': ea._id }, auth=self.user.auth) assert_equal(res.status_code, http.OK) assert_in('result', res.json) node_settings.reload() assert_equal(node_settings.external_account._id, ea._id) node.reload() last_log = node.logs.latest() assert_equal(last_log.action, '{0}_node_authorized'.format(self.ADDON_SHORT_NAME))
class TestNodeSettings(OsfTestCase): ADDONS_UNDER_TEST = { MockOAuth2Provider.short_name: { 'user_settings': MockUserSettings, 'node_settings': MockNodeSettings, } } @classmethod def setUpClass(cls): super(TestNodeSettings, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestNodeSettings, cls).tearDownClass() def setUp(self): super(TestNodeSettings, self).setUp() self.project = ProjectFactory() self.user = self.project.creator self.node_settings = self.project.get_or_add_addon( MockNodeSettings.oauth_provider.short_name, auth=Auth(user=self.user) ) self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name ) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() def test_has_auth_false(self): assert_false(self.node_settings.has_auth) def test_has_auth_no_grant(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings assert_false(self.node_settings.has_auth) def test_has_auth(self): self.node_settings.set_auth( external_account=self.external_account, user=self.user ) assert_true(self.node_settings.has_auth) def test_set_auth(self): self.node_settings.set_auth( external_account=self.external_account, user=self.user ) assert_equal( self.node_settings.external_account, self.external_account ) assert_equal( self.node_settings.user_settings, self.user_settings ) assert_in( self.project._id, self.user_settings.oauth_grants.keys() ) def test_revoke_auth(self): self.node_settings.set_auth( external_account=self.external_account, user=self.user ) self.user_settings.revoke_oauth_access(self.external_account) assert_equal( self.user_settings.oauth_grants, {self.project._id: {}} ) def test_clear_auth(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings self.node_settings.clear_auth() assert_is_none(self.node_settings.external_account) assert_is_none(self.node_settings.user_settings)
class TestUserSettings(OsfTestCase): ADDONS_UNDER_TEST = { MockOAuth2Provider.short_name: { 'user_settings': MockUserSettings, 'node_settings': MockNodeSettings, } } @classmethod def setUpClass(cls): super(TestUserSettings, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestUserSettings, cls).tearDownClass() def setUp(self): super(TestUserSettings, self).setUp() self.user = AuthUserFactory() self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name ) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() self.project = ProjectFactory(creator=self.user) def tearDown(self): super(TestUserSettings, self).tearDown() def test_connected_accounts_empty(self): self.user.external_accounts = [] assert_equal( self.user_settings.external_accounts, [] ) def test_connected_accounts(self): assert_equal( self.user_settings.external_accounts, [self.external_account] ) def test_verify_false_no_grants(self): assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project ) ) def test_verify_false_with_grants(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=ProjectFactory() ) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project ) ) def test_verify_false_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'} ) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'baz': 'qiz'} ) ) def test_verify_true(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project ) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project ) ) def test_verify_true_with_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'} ) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'} ) ) def test_grant(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project ) assert_equal( self.user_settings.oauth_grants, { self.project._id: { self.external_account._id: {} } } ) def test_grant_not_owned(self): self.user.external_accounts = [] with assert_raises(PermissionsError): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project ) assert_equal( self.user_settings.oauth_grants, {} ) def test_grant_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'} ) assert_equal( self.user_settings.oauth_grants, { self.project._id: { self.external_account._id: {'foo': 'bar'} } } ) def test_on_delete(self): node_settings = self.project.get_or_add_addon( MockUserSettings.oauth_provider.short_name, auth=Auth(user=self.user) ) node_settings.set_auth( external_account=self.external_account, user=self.user ) self.user.delete_addon( MockUserSettings.oauth_provider.short_name ) node_settings.reload() assert_is_none(node_settings.external_account) assert_is_none(node_settings.user_settings)
class TestNodeSettings(OsfTestCase): ADDONS_UNDER_TEST = { MockOAuth2Provider.short_name: { 'user_settings': MockUserSettings, 'node_settings': MockNodeSettings, } } @classmethod def setUpClass(cls): super(TestNodeSettings, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestNodeSettings, cls).tearDownClass() def setUp(self): super(TestNodeSettings, self).setUp() self.project = ProjectFactory() self.user = self.project.creator self.node_settings = self.project.get_or_add_addon( MockNodeSettings.oauth_provider.short_name, auth=Auth(user=self.user)) self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() def test_has_auth_false(self): assert_false(self.node_settings.has_auth) def test_has_auth_no_grant(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings assert_false(self.node_settings.has_auth) def test_has_auth(self): self.node_settings.set_auth(external_account=self.external_account, user=self.user) assert_true(self.node_settings.has_auth) def test_set_auth(self): self.node_settings.set_auth(external_account=self.external_account, user=self.user) assert_equal(self.node_settings.external_account, self.external_account) assert_equal(self.node_settings.user_settings, self.user_settings) assert_in(self.project._id, self.user_settings.oauth_grants.keys()) @mock.patch('tests.test_addons_oauth.MockNodeSettings.deauthorize') @mock.patch('framework.auth.core._get_current_user') def test_revoke_auth(self, mock_decorator, mock_deauth): mock_decorator.return_value = self.user self.node_settings.set_auth(external_account=self.external_account, user=self.user) self.user_settings.revoke_oauth_access(self.external_account, auth=Auth(self.user)) self.user_settings.reload() mock_deauth.assert_called() assert_equal(self.user_settings.oauth_grants, {self.project._id: {}}) def test_clear_auth(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings self.node_settings.clear_auth() assert_is_none(self.node_settings.external_account) assert_is_none(self.node_settings.user_settings)
class TestUserSettings(OsfTestCase): ADDONS_UNDER_TEST = { MockOAuth2Provider.short_name: { 'user_settings': MockUserSettings, 'node_settings': MockNodeSettings, } } @classmethod def setUpClass(cls): super(TestUserSettings, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestUserSettings, cls).tearDownClass() def setUp(self): super(TestUserSettings, self).setUp() self.user = AuthUserFactory() self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() self.project = ProjectFactory(creator=self.user) def tearDown(self): super(TestUserSettings, self).tearDown() def test_connected_accounts_empty(self): self.user.external_accounts = [] assert_equal(self.user_settings.external_accounts, []) def test_connected_accounts(self): assert_equal(self.user_settings.external_accounts, [self.external_account]) def test_verify_false_no_grants(self): assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_false_with_grants(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=ProjectFactory()) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_false_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'baz': 'qiz'})) def test_verify_true(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_true_with_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'})) def test_grant(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_equal(self.user_settings.oauth_grants, {self.project._id: { self.external_account._id: {} }}) def test_grant_not_owned(self): self.user.external_accounts = [] with assert_raises(PermissionsError): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_equal(self.user_settings.oauth_grants, {}) def test_grant_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_equal( self.user_settings.oauth_grants, {self.project._id: { self.external_account._id: { 'foo': 'bar' } }}) @mock.patch( 'tests.test_addons_oauth.MockUserSettings.revoke_remote_oauth_access') @mock.patch('framework.auth.core._get_current_user') def test_revoke_remote_access_called(self, mock_decorator, mock_revoke): mock_decorator.return_value = self.user self.user_settings.delete() assert_equal(mock_revoke.call_count, 1) @mock.patch( 'tests.test_addons_oauth.MockUserSettings.revoke_remote_oauth_access') @mock.patch('framework.auth.core._get_current_user') def test_revoke_remote_access_not_called(self, mock_decorator, mock_revoke): mock_decorator.return_value = self.user user2 = AuthUserFactory() user2.external_accounts.append(self.external_account) user2.save() self.user_settings.delete() assert_equal(mock_revoke.call_count, 0) def test_on_delete(self): node_settings = self.project.get_or_add_addon( MockUserSettings.oauth_provider.short_name, auth=Auth(user=self.user)) node_settings.set_auth(external_account=self.external_account, user=self.user) self.user.delete_addon(MockUserSettings.oauth_provider.short_name) node_settings.reload() assert_is_none(node_settings.external_account) assert_is_none(node_settings.user_settings)
class TestNodeSettings(OsfTestCase): ADDONS_UNDER_TEST = { MockOAuth2Provider.short_name: { 'user_settings': MockUserSettings, 'node_settings': MockNodeSettings, } } @classmethod def setUpClass(cls): super(TestNodeSettings, cls).setUpClass() @classmethod def tearDownClass(cls): super(TestNodeSettings, cls).tearDownClass() def setUp(self): super(TestNodeSettings, self).setUp() self.project = ProjectFactory() self.user = self.project.creator self.node_settings = self.project.get_or_add_addon( MockNodeSettings.oauth_provider.short_name, auth=Auth(user=self.user) ) self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name ) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() def test_has_auth_false(self): assert_false(self.node_settings.has_auth) def test_has_auth_no_grant(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings assert_false(self.node_settings.has_auth) def test_has_auth(self): self.node_settings.set_auth( external_account=self.external_account, user=self.user ) assert_true(self.node_settings.has_auth) def test_set_auth(self): self.node_settings.set_auth( external_account=self.external_account, user=self.user ) assert_equal( self.node_settings.external_account, self.external_account ) assert_equal( self.node_settings.user_settings, self.user_settings ) assert_in( self.project._id, self.user_settings.oauth_grants.keys() ) @mock.patch('tests.test_addons_oauth.MockNodeSettings.deauthorize') @mock.patch('framework.auth.core._get_current_user') def test_revoke_auth(self, mock_decorator, mock_deauth): mock_decorator.return_value = self.user self.node_settings.set_auth( external_account=self.external_account, user=self.user ) self.user_settings.revoke_oauth_access(self.external_account, auth=Auth(self.user)) self.user_settings.reload() mock_deauth.assert_called() assert_equal( self.user_settings.oauth_grants, {self.project._id: {}} ) def test_clear_auth(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings self.node_settings.clear_auth() assert_is_none(self.node_settings.external_account) assert_is_none(self.node_settings.user_settings)
class ApiAddonTestCase(ApiTestCase): """Base `TestCase` for tests that require interaction with addons. """ @abc.abstractproperty def short_name(self): pass @abc.abstractproperty def addon_type(self): pass @abc.abstractmethod def _apply_auth_configuration(self): pass @abc.abstractmethod def _set_urls(self): pass def _settings_kwargs(self, node, user_settings): return {"user_settings": self.user_settings, "folder_id": "1234567890", "owner": self.node} def setUp(self): super(ApiAddonTestCase, self).setUp() from tests.factories import ProjectFactory, AuthUserFactory from website.addons.base import ( AddonOAuthNodeSettingsBase, AddonNodeSettingsBase, AddonOAuthUserSettingsBase, AddonUserSettingsBase, ) assert self.addon_type in ("CONFIGURABLE", "OAUTH", "UNMANAGEABLE", "INVALID") self.account = None self.node_settings = None self.user_settings = None self.user = AuthUserFactory() self.auth = Auth(self.user) self.node = ProjectFactory(creator=self.user) if self.addon_type not in ("UNMANAGEABLE", "INVALID"): if self.addon_type in ("OAUTH", "CONFIGURABLE"): self.account = self.AccountFactory() self.user.external_accounts.append(self.account) self.user.save() self.user_settings = self.user.get_or_add_addon(self.short_name) self.node_settings = self.node.get_or_add_addon(self.short_name, auth=self.auth) if self.addon_type in ("OAUTH", "CONFIGURABLE"): self.node_settings.set_auth(self.account, self.user) self._apply_auth_configuration() if self.addon_type in ("OAUTH", "CONFIGURABLE"): assert isinstance(self.node_settings, AddonOAuthNodeSettingsBase) assert isinstance(self.user_settings, AddonOAuthUserSettingsBase) self.account_id = self.account._id if self.account else None self.set_urls() def tearDown(self): super(ApiAddonTestCase, self).tearDown() self.user.remove() self.node.remove() if self.node_settings: self.node_settings.remove() if self.user_settings: self.user_settings.remove() if self.account: self.account.remove()
class TestMigrateFiles(OsfTestCase): def setUp(self): super(TestMigrateFiles, self).setUp() self.project = ProjectFactory() self.user = self.project.creator self.auth_obj = Auth(user=self.user) self.project.delete_addon('osfstorage', auth=None, _force=True) for idx in range(5): content = 'i want {0} pizzas'.format(idx) self.project.add_file( auth=self.auth_obj, file_name='pizza.md', content=content, size=len(content), content_type='text/markdown', ) def check_record(self, record): assert_true(record) assert_equal(len(record.versions), 5) for idx, version in enumerate(record.versions): assert_false(version.pending) expected = 'i want {0} pizzas'.format(idx) download_url = utils.get_waterbutler_download_url(idx + 1, version, record) resp = requests.get(download_url) assert_equal(expected, resp.content) def test_migrate(self): main(dry_run=False) node_settings = self.project.get_addon('osfstorage') assert_true(node_settings) record = model.OsfStorageFileRecord.find_by_path('pizza.md', node_settings) self.check_record(record) # Test idempotence of migration main(dry_run=False) assert_equal(len(record.versions), 5) def test_migrate_incomplete(self): node_settings = self.project.get_or_add_addon('osfstorage', auth=None, log=False) record = model.OsfStorageFileRecord.get_or_create('pizza.md', node_settings) node_file = NodeFile.load(self.project.files_versions['pizza_md'][0]) content, _ = self.project.read_file_object(node_file) file_pointer = StringIO(content) hash_str = scripts_settings.UPLOAD_PRIMARY_HASH(content).hexdigest() record.create_pending_version(node_file.uploader, hash_str) main(dry_run=False) def test_migrate_fork(self): fork = self.project.fork_node(auth=self.auth_obj) main(dry_run=False) node_settings = self.project.get_addon('osfstorage') record = model.OsfStorageFileRecord.find_by_path('pizza.md', node_settings) self.check_record(record) fork_node_settings = fork.get_addon('osfstorage') fork_record = model.OsfStorageFileRecord.find_by_path('pizza.md', fork_node_settings) self.check_record(fork_record) def test_migrate_corrupt_fork_repo_deleted(self): fork = self.project.fork_node(auth=self.auth_obj) fork_repo = os.path.join(settings.UPLOADS_PATH, fork._id) shutil.rmtree(fork_repo) main(dry_run=False) node_settings = self.project.get_addon('osfstorage') record = model.OsfStorageFileRecord.find_by_path('pizza.md', node_settings) self.check_record(record) fork_node_settings = fork.get_addon('osfstorage') fork_record = model.OsfStorageFileRecord.find_by_path('pizza.md', fork_node_settings) self.check_record(fork_record) def test_migrate_corrupt_fork_git_dir_deleted(self): fork = self.project.fork_node(auth=self.auth_obj) fork_git_dir = os.path.join(settings.UPLOADS_PATH, fork._id, '.git') shutil.rmtree(fork_git_dir) main(dry_run=False) node_settings = self.project.get_addon('osfstorage') record = model.OsfStorageFileRecord.find_by_path('pizza.md', node_settings) self.check_record(record) fork_node_settings = fork.get_addon('osfstorage') fork_record = model.OsfStorageFileRecord.find_by_path('pizza.md', fork_node_settings) self.check_record(fork_record)
class ApiAddonTestCase(ApiTestCase): """Base `TestCase` for tests that require interaction with addons. """ @abc.abstractproperty def short_name(self): pass @abc.abstractproperty def addon_type(self): pass @abc.abstractmethod def _apply_auth_configuration(self): pass @abc.abstractmethod def _set_urls(self): pass def _settings_kwargs(self, node, user_settings): return { 'user_settings': self.user_settings, 'folder_id': '1234567890', 'owner': self.node } def setUp(self): super(ApiAddonTestCase, self).setUp() from tests.factories import ( ProjectFactory, AuthUserFactory, ) from website.addons.base import (AddonOAuthNodeSettingsBase, AddonNodeSettingsBase, AddonOAuthUserSettingsBase, AddonUserSettingsBase) assert self.addon_type in ('CONFIGURABLE', 'OAUTH', 'UNMANAGEABLE', 'INVALID') self.account = None self.node_settings = None self.user_settings = None self.user = AuthUserFactory() self.auth = Auth(self.user) self.node = ProjectFactory(creator=self.user) if self.addon_type not in ('UNMANAGEABLE', 'INVALID'): if self.addon_type in ('OAUTH', 'CONFIGURABLE'): self.account = self.AccountFactory() self.user.external_accounts.append(self.account) self.user.save() self.user_settings = self.user.get_or_add_addon(self.short_name) self.node_settings = self.node.get_or_add_addon(self.short_name, auth=self.auth) if self.addon_type in ('OAUTH', 'CONFIGURABLE'): self.node_settings.set_auth(self.account, self.user) self._apply_auth_configuration() if self.addon_type in ('OAUTH', 'CONFIGURABLE'): assert isinstance(self.node_settings, AddonOAuthNodeSettingsBase) assert isinstance(self.user_settings, AddonOAuthUserSettingsBase) self.account_id = self.account._id if self.account else None self.set_urls() def tearDown(self): super(ApiAddonTestCase, self).tearDown() self.user.remove() self.node.remove() if self.node_settings: self.node_settings.remove() if self.user_settings: self.user_settings.remove() if self.account: self.account.remove()
class TestNodeSettings(OsfTestCase): @classmethod def setUpClass(cls): init_mock_addon() super(TestNodeSettings, cls).setUpClass() @classmethod def tearDownClass(cls): remove_mock_addon() super(TestNodeSettings, cls).tearDownClass() def setUp(self): super(TestNodeSettings, self).setUp() self.project = ProjectFactory() self.user = self.project.creator self.node_settings = self.project.get_or_add_addon( MockNodeSettings.oauth_provider.short_name, auth=Auth(user=self.user)) self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() def test_has_auth_false(self): assert_false(self.node_settings.has_auth) def test_has_auth_no_grant(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings assert_false(self.node_settings.has_auth) def test_has_auth(self): self.node_settings.set_auth(external_account=self.external_account, user=self.user) assert_true(self.node_settings.has_auth) def test_set_auth(self): self.node_settings.set_auth(external_account=self.external_account, user=self.user) assert_equal(self.node_settings.external_account, self.external_account) assert_equal(self.node_settings.user_settings, self.user_settings) assert_in(self.project._id, self.user_settings.oauth_grants.keys()) def test_revoke_auth(self): self.node_settings.set_auth(external_account=self.external_account, user=self.user) self.user_settings.revoke_oauth_access(self.external_account) assert_equal(self.user_settings.oauth_grants, {self.project._id: {}}) def test_clear_auth(self): self.node_settings.external_account = self.external_account self.node_settings.user_settings = self.user_settings self.node_settings.clear_auth() assert_is_none(self.node_settings.external_account) assert_is_none(self.node_settings.user_settings)
class TestUserSettings(OsfTestCase): @classmethod def setUpClass(cls): init_mock_addon() super(TestUserSettings, cls).setUpClass() @classmethod def tearDownClass(cls): remove_mock_addon() super(TestUserSettings, cls).tearDownClass() def setUp(self): super(TestUserSettings, self).setUp() self.user = AuthUserFactory() self.user_settings = self.user.get_or_add_addon( MockUserSettings.oauth_provider.short_name) self.external_account = ExternalAccountFactory() self.user.external_accounts.append(self.external_account) self.user.save() self.project = ProjectFactory(creator=self.user) def tearDown(self): super(TestUserSettings, self).tearDown() def test_connected_accounts_empty(self): self.user.external_accounts = [] assert_equal(self.user_settings.external_accounts, []) def test_connected_accounts(self): assert_equal(self.user_settings.external_accounts, [self.external_account]) def test_verify_false_no_grants(self): assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_false_with_grants(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=ProjectFactory()) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_false_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_false( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'baz': 'qiz'})) def test_verify_true(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project)) def test_verify_true_with_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_true( self.user_settings.verify_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'})) def test_grant(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_equal(self.user_settings.oauth_grants, {self.project._id: { self.external_account._id: {} }}) def test_grant_not_owned(self): self.user.external_accounts = [] with assert_raises(PermissionsError): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project) assert_equal(self.user_settings.oauth_grants, {}) def test_grant_metadata(self): self.user_settings.grant_oauth_access( external_account=self.external_account, node=self.project, metadata={'foo': 'bar'}) assert_equal( self.user_settings.oauth_grants, {self.project._id: { self.external_account._id: { 'foo': 'bar' } }}) def test_on_delete(self): node_settings = self.project.get_or_add_addon( MockUserSettings.oauth_provider.short_name, auth=Auth(user=self.user)) node_settings.set_auth(external_account=self.external_account, user=self.user) self.user.delete_addon(MockUserSettings.oauth_provider.short_name) node_settings.reload() assert_is_none(node_settings.external_account) assert_is_none(node_settings.user_settings)