Skip to content

Commit

Permalink
Merge pull request #5355 from jinjunoh/SWC-6635
Browse files Browse the repository at this point in the history
SWC-6635: invalidate trashcan cache when entity is deleted
  • Loading branch information
jinjunoh authored Apr 15, 2024
2 parents b4c7dec + 12b24dd commit 5dded21
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public KeyFactory(String accessToken) {}
public native QueryKey getDownloadListBaseQueryKey();

public native QueryKey getEntityQueryKey(String entityId);

public native QueryKey getTrashCanItemsQueryKey();
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,13 +83,18 @@
import org.sagebionetworks.web.client.PortalGinInjector;
import org.sagebionetworks.web.client.SynapseClientAsync;
import org.sagebionetworks.web.client.SynapseJavascriptClient;
import org.sagebionetworks.web.client.context.KeyFactoryProvider;
import org.sagebionetworks.web.client.context.QueryClientProvider;
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.events.DownloadListUpdatedEvent;
import org.sagebionetworks.web.client.events.EntityUpdatedEvent;
import org.sagebionetworks.web.client.jsinterop.AlertButtonConfig;
import org.sagebionetworks.web.client.jsinterop.EntityFinderScope;
import org.sagebionetworks.web.client.jsinterop.KeyFactory;
import org.sagebionetworks.web.client.jsinterop.ReactMouseEvent;
import org.sagebionetworks.web.client.jsinterop.ToastMessageOptions;
import org.sagebionetworks.web.client.jsinterop.reactquery.InvalidateQueryFilters;
import org.sagebionetworks.web.client.jsinterop.reactquery.QueryClient;
import org.sagebionetworks.web.client.place.AccessRequirementsPlace;
import org.sagebionetworks.web.client.place.LoginPlace;
import org.sagebionetworks.web.client.place.Profile;
Expand Down Expand Up @@ -287,6 +292,8 @@ public class EntityActionControllerImpl
ChallengeTab challengeTab;
PopupUtilsView popupUtils;
ContainerClientsHelp containerClientsHelp;
QueryClient queryClient;
KeyFactoryProvider keyFactoryProvider;

@Inject
public EntityActionControllerImpl(
Expand All @@ -298,7 +305,9 @@ public EntityActionControllerImpl(
IsACTMemberAsyncHandler isACTMemberAsyncHandler,
GWTWrapper gwt,
EventBus eventBus,
PopupUtilsView popupUtilsView
PopupUtilsView popupUtilsView,
QueryClientProvider queryClientProvider,
KeyFactoryProvider keyFactoryProvider
) {
super();
this.view = view;
Expand All @@ -310,6 +319,8 @@ public EntityActionControllerImpl(
this.gwt = gwt;
this.eventBus = eventBus;
this.popupUtils = popupUtilsView;
this.queryClient = queryClientProvider.getQueryClient();
this.keyFactoryProvider = keyFactoryProvider;
entityUpdatedWizardCallback =
new WizardCallback() {
@Override
Expand Down Expand Up @@ -2788,6 +2799,14 @@ public void onSuccess(Void result) {
// Go to entity's parent
Place gotoPlace = createDeletePlace();
getGlobalApplicationState().getPlaceChanger().goTo(gotoPlace);
KeyFactory keyFactory = keyFactoryProvider.getKeyFactory(
authenticationController.getCurrentUserAccessToken()
);
queryClient.invalidateQueries(
InvalidateQueryFilters.create(
keyFactory.getTrashCanItemsQueryKey()
)
);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,12 +121,18 @@
import org.sagebionetworks.web.client.SynapseJavascriptClient;
import org.sagebionetworks.web.client.SynapseProperties;
import org.sagebionetworks.web.client.UserProfileClientAsync;
import org.sagebionetworks.web.client.context.KeyFactoryProvider;
import org.sagebionetworks.web.client.context.QueryClientProvider;
import org.sagebionetworks.web.client.cookie.CookieProvider;
import org.sagebionetworks.web.client.events.DownloadListUpdatedEvent;
import org.sagebionetworks.web.client.events.EntityUpdatedEvent;
import org.sagebionetworks.web.client.jsinterop.CreateTableViewWizardProps;
import org.sagebionetworks.web.client.jsinterop.KeyFactory;
import org.sagebionetworks.web.client.jsinterop.SqlDefinedTableEditorModalProps;
import org.sagebionetworks.web.client.jsinterop.ToastMessageOptions;
import org.sagebionetworks.web.client.jsinterop.reactquery.InvalidateQueryFilters;
import org.sagebionetworks.web.client.jsinterop.reactquery.QueryClient;
import org.sagebionetworks.web.client.jsinterop.reactquery.QueryKey;
import org.sagebionetworks.web.client.place.AccessRequirementsPlace;
import org.sagebionetworks.web.client.place.LoginPlace;
import org.sagebionetworks.web.client.place.Profile;
Expand Down Expand Up @@ -386,6 +392,18 @@ public class EntityActionControllerImplTest {
@Mock
ContainerClientsHelp mockContainerClientsHelp;

@Mock
QueryClientProvider mockQueryClientProvider;

@Mock
QueryClient mockQueryClient;

@Mock
KeyFactoryProvider mockKeyFactoryProvider;

@Mock
KeyFactory mockKeyFactory;

@Captor
ArgumentCaptor<
CreateTableViewWizardProps.OnComplete
Expand Down Expand Up @@ -422,6 +440,8 @@ public void before() {
.thenReturn(currentUserId);
when(mockGlobalApplicationState.getPlaceChanger())
.thenReturn(mockPlaceChanger);
when(mockKeyFactoryProvider.getKeyFactory(anyString()))
.thenReturn(mockKeyFactory);

when(mockPortalGinInjector.getSynapseProperties())
.thenReturn(mockSynapseProperties);
Expand Down Expand Up @@ -488,6 +508,7 @@ public void before() {
.thenReturn(getDoneFuture(false));
when(mockSynapseJavascriptClient.getRestrictionInformation(any(), any()))
.thenReturn(getDoneFuture(mockRestrictionInformation));
when(mockQueryClientProvider.getQueryClient()).thenReturn(mockQueryClient);

// The controller under test.
controller =
Expand All @@ -500,7 +521,9 @@ public void before() {
mockIsACTMemberAsyncHandler,
mockGWT,
mockEventBus,
mockPopupUtils
mockPopupUtils,
mockQueryClientProvider,
mockKeyFactoryProvider
);

parentId = "syn456";
Expand Down Expand Up @@ -2617,6 +2640,12 @@ public void testOnDeleteConfirmedPreFlightPassedDeleteFailed() {
.deleteEntityById(anyString(), any(AsyncCallback.class));
verify(mockView)
.showErrorMessage(DisplayConstants.ERROR_ENTITY_DELETE_FAILURE + error);
QueryKey mockQueryKey = mock(QueryKey.class);
when(mockKeyFactory.getTrashCanItemsQueryKey()).thenReturn(mockQueryKey);
verify(mockKeyFactoryProvider, never()).getKeyFactory(anyString());
verify(mockKeyFactory, never()).getTrashCanItemsQueryKey();
verify(mockQueryClient, never())
.invalidateQueries(any(InvalidateQueryFilters.class));
}

@Test
Expand Down Expand Up @@ -2659,6 +2688,12 @@ public void testOnDeleteConfirmedPreFlightPassedDeleteSuccess() {
);
verify(mockPlaceChanger)
.goTo(new Synapse(parentId, null, EntityArea.TABLES, null));
QueryKey mockQueryKey = mock(QueryKey.class);
when(mockKeyFactory.getTrashCanItemsQueryKey()).thenReturn(mockQueryKey);
verify(mockKeyFactoryProvider).getKeyFactory(anyString());
verify(mockKeyFactory).getTrashCanItemsQueryKey();
verify(mockQueryClient)
.invalidateQueries(any(InvalidateQueryFilters.class));
}

@Test
Expand Down

0 comments on commit 5dded21

Please sign in to comment.