class TestGoogleDriveNodeSettingsModel(OsfTestCase): def setUp(self): super(TestGoogleDriveNodeSettingsModel, self).setUp() self.user = UserFactory() self.user.add_addon('googledrive') self.user.save() self.user_settings = self.user.get_addon('googledrive') oauth_settings = GoogleDriveOAuthSettingsFactory() oauth_settings.save() self.user_settings.oauth_settings = oauth_settings self.user_settings.save() self.project = ProjectFactory() self.node_settings = GoogleDriveNodeSettingsFactory( user_settings=self.user_settings, owner=self.project, ) def test_fields(self): node_settings = GoogleDriveNodeSettings(user_settings=self.user_settings) node_settings.save() assert_true(node_settings.user_settings) assert_true(hasattr(node_settings, 'folder_id')) assert_true(hasattr(node_settings, 'folder_path')) assert_true(hasattr(node_settings, 'folder_name')) assert_equal(node_settings.user_settings.owner, self.user) def test_complete_true(self): assert_true(self.node_settings.has_auth) assert_true(self.node_settings.complete) def test_complete_false(self): self.node_settings.folder_id = None assert_true(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_folder_defaults_to_none(self): node_settings = GoogleDriveNodeSettings(user_settings=self.user_settings) node_settings.save() assert_is_none(node_settings.folder_id) assert_is_none(node_settings.folder_path) def test_has_auth(self): settings = GoogleDriveNodeSettings(user_settings=self.user_settings) settings.user_settings.access_token = None settings.save() assert_false(settings.has_auth) settings.user_settings.access_token = '123abc' settings.user_settings.save() assert_true(settings.has_auth) # TODO use this test if delete function is used in googledrive/model # def test_delete(self): # assert_true(self.node_settings.user_settings) # assert_true(self.node_settings.folder) # old_logs = self.project.logs # self.node_settings.delete() # self.node_settings.save() # assert_is(self.node_settings.user_settings, None) # assert_is(self.node_settings.folder, None) # assert_true(self.node_settings.deleted) # assert_equal(self.project.logs, old_logs) def test_deauthorize(self): assert_true(self.node_settings.folder_id) assert_true(self.node_settings.user_settings) self.node_settings.deauthorize(auth=Auth(self.user)) self.node_settings.save() assert_is(self.node_settings.folder_id, None) assert_is(self.node_settings.user_settings, None) last_log = self.project.logs[-1] params = last_log.params assert_in('node', params) assert_in('folder', params) assert_in('project', params) assert_equal(last_log.action, 'googledrive_node_deauthorized') def test_set_folder(self): folder_name = { 'id': '1234', 'name': 'freddie', 'path': 'queen/freddie', } self.node_settings.set_folder(folder_name, auth=Auth(self.user)) self.node_settings.save() # Folder was set assert_equal(self.node_settings.folder_name, folder_name['name']) # Log was saved last_log = self.project.logs[-1] assert_equal(last_log.action, 'googledrive_folder_selected') def test_set_user_auth(self): node_settings = GoogleDriveNodeSettingsFactory() user_settings = GoogleDriveUserSettingsFactory() node_settings.set_user_auth(user_settings) 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] log_params = last_log.params assert_equal(last_log.user, user_settings.owner) assert_equal(log_params['folder'], node_settings.folder_path) assert_equal(last_log.action, 'googledrive_node_authorized') assert_equal(log_params['node'], node_settings.owner._primary_key) def test_serialize_credentials(self): self.user_settings.access_token = 'secret' self.user_settings.save() credentials = self.node_settings.serialize_waterbutler_credentials() expected = {'token': self.node_settings.user_settings.access_token} 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): self.node_settings.folder_path = 'camera uploads/pizza.nii' self.node_settings.save() settings = self.node_settings.serialize_waterbutler_settings() expected = { 'folder': { 'id': '12345', 'name': 'pizza.nii', 'path': 'camera uploads/pizza.nii', } } assert_equal(settings, expected) def test_serialize_settings_not_configured(self): self.node_settings.folder_id = None self.node_settings.save() with assert_raises(exceptions.AddonError): self.node_settings.serialize_waterbutler_settings() def test_create_log(self): action = 'file_added' path = '12345/camera uploads/pizza.nii' nlog = len(self.project.logs) self.node_settings.create_waterbutler_log( auth=Auth(user=self.user), action=action, metadata={'path': path}, ) self.project.reload() assert_equal(len(self.project.logs), nlog + 1) assert_equal( self.project.logs[-1].action, 'googledrive_{0}'.format(action), ) assert_equal(self.project.logs[-1].params['path'], path)