From 8869e29bbf7607b162fe53791c2c699ae07b2691 Mon Sep 17 00:00:00 2001 From: Jay Hodgson Date: Fri, 24 Jan 2025 14:29:56 -0800 Subject: [PATCH] SWC-7233 --- .../client/widget/entity/EntityPageTop.java | 17 ++++-- .../widget/entity/EntityPageTopTest.java | 52 +++++++++++++++++++ 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityPageTop.java b/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityPageTop.java index 8821ee9f16..ef8b3e65dd 100755 --- a/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityPageTop.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/entity/EntityPageTop.java @@ -675,10 +675,21 @@ public void showSelectedTabs() { projectHeader.getId(), getTabVisibilityCallback(EntityArea.WIKI, wikiTab.asTab()) ); - synapseJavascriptClient.isFileOrFolder( - projectHeader.getId(), + // SWC-7233: It's possible that the Project has no children visible to the current user. + // But show the tab if the filesEntityBundle points to a target FileEntity or Folder + if ( + currentTargetEntityBundle != null && + (currentTargetEntityBundle.getEntity() instanceof FileEntity || + currentTargetEntityBundle.getEntity() instanceof Folder) + ) { getTabVisibilityCallback(EntityArea.FILES, filesTab.asTab()) - ); + .onSuccess(true); + } else { + synapseJavascriptClient.isFileOrFolder( + projectHeader.getId(), + getTabVisibilityCallback(EntityArea.FILES, filesTab.asTab()) + ); + } synapseJavascriptClient.isEntityRefCollectionView( projectHeader.getId(), getTabVisibilityCallback(EntityArea.DATASETS, datasetsTab.asTab()) diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/EntityPageTopTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/EntityPageTopTest.java index 9fc25ab8b1..665b95cc5b 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/EntityPageTopTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/EntityPageTopTest.java @@ -33,6 +33,7 @@ import org.sagebionetworks.repo.model.EntityHeader; import org.sagebionetworks.repo.model.EntityPath; import org.sagebionetworks.repo.model.FileEntity; +import org.sagebionetworks.repo.model.Folder; import org.sagebionetworks.repo.model.Link; import org.sagebionetworks.repo.model.Project; import org.sagebionetworks.repo.model.Reference; @@ -94,6 +95,9 @@ public class EntityPageTopTest { @Mock FileEntity mockFileEntity; + @Mock + Folder mockFolderEntity; + @Mock TableEntity mockTableEntity; @@ -1272,6 +1276,54 @@ public void testContentOneTabShown() { verify(mockDockerInnerTab, atLeastOnce()).setTabListItemVisible(false); } + // SWC-7233 (File test) + @Test + public void testFilesTabShownIfFileConfigured() { + Synapse.EntityArea area = null; + String areaToken = null; + Long versionNumber = null; + AsyncMockStubber + .callSuccessWith(false) + .when(mockSynapseJavascriptClient) + .isFileOrFolder(anyString(), any(AsyncCallback.class)); + + when(mockEntityBundle.getEntity()).thenReturn(mockFileEntity); + pageTop.configure( + mockEntityBundle, + versionNumber, + mockProjectHeader, + area, + areaToken + ); + verify(mockSynapseJavascriptClient, never()) + .isFileOrFolder(anyString(), any(AsyncCallback.class)); + verify(mockFilesInnerTab, atLeastOnce()).setTabListItemVisible(true); + } + + // SWC-7233 (Folder test) + @Test + public void testFilesTabShownIfFolderConfigured() { + Synapse.EntityArea area = null; + String areaToken = null; + Long versionNumber = null; + AsyncMockStubber + .callSuccessWith(false) + .when(mockSynapseJavascriptClient) + .isFileOrFolder(anyString(), any(AsyncCallback.class)); + + when(mockEntityBundle.getEntity()).thenReturn(mockFolderEntity); + pageTop.configure( + mockEntityBundle, + versionNumber, + mockProjectHeader, + area, + areaToken + ); + verify(mockSynapseJavascriptClient, never()) + .isFileOrFolder(anyString(), any(AsyncCallback.class)); + verify(mockFilesInnerTab, atLeastOnce()).setTabListItemVisible(true); + } + @Test public void testUpdateEntityBundleToLink() { Synapse.EntityArea area = null;