From 645eb0a62d2435761d74ab348adc0ac51eb69ef7 Mon Sep 17 00:00:00 2001 From: Gavin Date: Thu, 4 Jun 2020 15:15:05 -0700 Subject: [PATCH] Return created llink from core code Next expose in api --- lib/SampleService/core/samples.py | 4 +- test/core/samples_test.py | 67 ++++++++++++++----------------- 2 files changed, 33 insertions(+), 38 deletions(-) diff --git a/lib/SampleService/core/samples.py b/lib/SampleService/core/samples.py index f8e5d8fa..11933d06 100644 --- a/lib/SampleService/core/samples.py +++ b/lib/SampleService/core/samples.py @@ -273,7 +273,7 @@ def create_data_link( duid: DataUnitID, sna: SampleNodeAddress, update: bool = False, - as_admin: bool = False): + as_admin: bool = False) -> DataLink: ''' Create a link from a data unit to a sample. The user must have admin access to the sample, since linking data grants permissions: once linked, if a user @@ -291,6 +291,7 @@ def create_data_link( If False and a link from the data unit already exists, link creation will fail. :param as_admin: allow link creation to proceed if user does not have appropriate permissions. + :returns: the new link. :raises UnauthorizedError: if the user does not have acceptable permissions. :raises NoSuchSampleError: if the sample does not exist. :raises NoSuchSampleVersionError: if the sample version does not exist. @@ -309,6 +310,7 @@ def create_data_link( self._ws.has_permission(user, wsperm, upa=duid.upa) dl = DataLink(self._uuid_gen(), duid, sna, self._now(), user) self._storage.create_data_link(dl, update=update) + return dl def expire_data_link(self, user: UserID, duid: DataUnitID, as_admin: bool = False) -> None: ''' diff --git a/test/core/samples_test.py b/test/core/samples_test.py index 69ac6f61..c13799fb 100644 --- a/test/core/samples_test.py +++ b/test/core/samples_test.py @@ -527,38 +527,10 @@ def _replace_sample_acls(user: UserID, as_admin): kafka.notify_sample_acl_change.assert_called_once_with(id_) -def test_replace_sample_acls_without_notifier(): - storage = create_autospec(ArangoSampleStorage, spec_set=True, instance=True) - lu = create_autospec(KBaseUserLookup, spec_set=True, instance=True) - meta = create_autospec(MetadataValidatorSet, spec_set=True, instance=True) - ws = create_autospec(WS, spec_set=True, instance=True) - samples = Samples(storage, lu, meta, ws, now=nw, - uuid_gen=lambda: UUID('1234567890abcdef1234567890abcdef')) - id_ = UUID('1234567890abcdef1234567890abcde0') - - lu.invalid_users.return_value = [] - - storage.get_sample_acls.return_value = SampleACL( - u('someuser'), - [u('otheruser'), u('y')], - [u('anotheruser'), u('ur mum')], - [u('Fungus J. Pustule Jr.'), u('x')]) - - samples.replace_sample_acls(id_, u('y'), SampleACL( - u('someuser'), [u('x'), u('y')], [u('z'), u('a')], [u('b'), u('c')])) - - assert lu.invalid_users.call_args_list == [ - (([u(x) for x in ['x', 'y', 'z', 'a', 'b', 'c']],), {})] - - assert storage.get_sample_acls.call_args_list == [ - ((UUID('1234567890abcdef1234567890abcde0'),), {})] - - assert storage.replace_sample_acls.call_args_list == [ - ((UUID('1234567890abcdef1234567890abcde0'), - SampleACL(u('someuser'), [u('x'), u('y')], [u('z'), u('a')], [u('b'), u('c')])), {})] - - def test_replace_sample_acls_with_owner_change(): + """ + Also tests replacing sample acls without a notifier. + """ storage = create_autospec(ArangoSampleStorage, spec_set=True, instance=True) lu = create_autospec(KBaseUserLookup, spec_set=True, instance=True) meta = create_autospec(MetadataValidatorSet, spec_set=True, instance=True) @@ -928,10 +900,17 @@ def _create_data_link(user): [u('anotheruser'), u('ur mum')], [u('Fungus J. Pustule Jr.'), u('x')]) - s.create_data_link( + assert s.create_data_link( user, DataUnitID(UPA('1/1/1')), - SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode')) + SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode') + ) == DataLink( + UUID('1234567890abcdef1234567890abcdef'), + DataUnitID(UPA('1/1/1')), + SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode'), + dt(6), + user + ) storage.get_sample_acls.assert_called_once_with(UUID('1234567890abcdef1234567890abcdee')) @@ -961,11 +940,18 @@ def test_create_data_link_with_data_id_and_update(): storage.get_sample_acls.return_value = SampleACL(u('someuser')) - s.create_data_link( + assert s.create_data_link( UserID('someuser'), DataUnitID(UPA('1/1/1'), 'foo'), SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode'), - update=True) + update=True + ) == DataLink( + UUID('1234567890abcdef1234567890abcdef'), + DataUnitID(UPA('1/1/1'), 'foo'), + SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode'), + dt(6), + UserID('someuser') + ) storage.get_sample_acls.assert_called_once_with(UUID('1234567890abcdef1234567890abcdee')) @@ -991,11 +977,18 @@ def test_create_data_link_as_admin(): s = Samples(storage, lu, meta, ws, now=nw, uuid_gen=lambda: UUID('1234567890abcdef1234567890abcdef')) - s.create_data_link( + assert s.create_data_link( UserID('someuser'), DataUnitID(UPA('1/1/1'), 'foo'), SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode'), - as_admin=True) + as_admin=True + ) == DataLink( + UUID('1234567890abcdef1234567890abcdef'), + DataUnitID(UPA('1/1/1'), 'foo'), + SampleNodeAddress(SampleAddress(UUID('1234567890abcdef1234567890abcdee'), 3), 'mynode'), + dt(6), + UserID('someuser') + ) ws.has_permission.assert_called_once_with( UserID('someuser'), WorkspaceAccessType.NONE, upa=UPA('1/1/1'))