From 2120c788de46774f03bb6299b7243b1dc466fbfb Mon Sep 17 00:00:00 2001 From: Jay Hodgson Date: Wed, 6 Mar 2024 11:31:22 -0800 Subject: [PATCH] SWC-6712 --- .../web/client/widget/team/BigTeamBadge.java | 21 +++-- .../client/widget/team/BigTeamBadgeView.java | 1 + .../widget/team/BigTeamBadgeViewImpl.java | 8 ++ .../widget/team/BigTeamBadgeViewImpl.ui.xml | 14 ++- .../widget/entity/team/BigTeamBadgeTest.java | 91 +++++++++++++------ 5 files changed, 91 insertions(+), 44 deletions(-) diff --git a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadge.java b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadge.java index 59ef882cd6..d98223e648 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadge.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadge.java @@ -68,7 +68,7 @@ public void onSuccess(String teamIconUrl) { } } - private void setViewTeam( + public void setViewTeam( Team team, String description, TeamMembershipStatus teamMembershipStatus, @@ -76,8 +76,13 @@ private void setViewTeam( ) { view.setTeam(team, description, teamIconUrl); boolean canSendEmail = - teamMembershipStatus != null && teamMembershipStatus.getCanSendEmail(); - view.setTeamEmailAddress(getTeamEmail(team.getName(), canSendEmail)); + teamMembershipStatus != null && + teamMembershipStatus.getCanSendEmail() && + authController.isLoggedIn(); + view.setTeamEmailVisible(canSendEmail); + if (canSendEmail) { + view.setTeamEmailAddress(getTeamEmail(team.getName())); + } } public void configure(final String teamId) { @@ -121,12 +126,8 @@ public void setHeight(String height) { view.setHeight(height); } - public String getTeamEmail(String teamName, boolean canSendEmail) { - if (authController.isLoggedIn() && canSendEmail) { - // strip out any non-word character. Not a (letter, number, underscore) - return teamName.replaceAll("\\W", "") + "@synapse.org"; - } else { - return ""; - } + public String getTeamEmail(String teamName) { + // strip out any non-word character. Not a (letter, number, underscore) + return teamName.replaceAll("\\W", "") + "@synapse.org"; } } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeView.java b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeView.java index c5b8fa0cbc..db01305bc7 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeView.java @@ -17,5 +17,6 @@ public interface BigTeamBadgeView extends IsWidget, SynapseView { void setMemberCountWidget(IsWidget widget); + void setTeamEmailVisible(boolean visible); void setTeamEmailAddress(String teamEmail); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.java index 642761bbbc..48ca959b6d 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.java @@ -54,6 +54,9 @@ public interface Binder extends UiBinder {} @UiField TextBoxWithCopyToClipboardWidget synapseEmailField; + @UiField + Div emailUI; + GlobalApplicationState globalApplicationState; IconsImageBundle iconsImageBundle; Linkify linkify; @@ -152,6 +155,11 @@ public void setMemberCountWidget(IsWidget widget) { memberCountContainer.add(widget); } + @Override + public void setTeamEmailVisible(boolean visible) { + emailUI.setVisible(visible); + } + @Override public void setTeamEmailAddress(String teamEmail) { synapseEmailField.setText(teamEmail); diff --git a/src/main/resources/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.ui.xml b/src/main/resources/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.ui.xml index aced7dbf83..e867831aa1 100644 --- a/src/main/resources/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.ui.xml +++ b/src/main/resources/org/sagebionetworks/web/client/widget/team/BigTeamBadgeViewImpl.ui.xml @@ -46,10 +46,16 @@ team members - + + Team email list: + + + (note: all emails to this address sent to the entire team) + + diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/team/BigTeamBadgeTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/team/BigTeamBadgeTest.java index bc34a3681c..147e6b7c90 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/team/BigTeamBadgeTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/entity/team/BigTeamBadgeTest.java @@ -12,6 +12,7 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sagebionetworks.repo.model.Team; +import org.sagebionetworks.repo.model.TeamMembershipStatus; import org.sagebionetworks.web.client.SynapseJSNIUtils; import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.security.AuthenticationController; @@ -38,6 +39,9 @@ public class BigTeamBadgeTest { @Mock TeamMemberCountWidget mockTeamMemberCountWidget; + @Mock + TeamMembershipStatus mockTeamMembershipStatus; + BigTeamBadge presenter; @Mock @@ -48,22 +52,20 @@ public class BigTeamBadgeTest { @Before public void setUp() throws Exception { - presenter = - new BigTeamBadge( - mockView, - mockJsClient, - mockJsniUtils, - mockAuthenticationController, - mockTeamMemberCountWidget - ); + presenter = new BigTeamBadge( + mockView, + mockJsClient, + mockJsniUtils, + mockAuthenticationController, + mockTeamMemberCountWidget + ); + when(mockTeam.getName()).thenReturn("simpleteam"); when(mockTeam.getDescription()).thenReturn(TEAM_DESCRIPTION); when(mockTeam.getIcon()).thenReturn("1111"); - AsyncMockStubber - .callSuccessWith(TEAM_ICON_URL) + AsyncMockStubber.callSuccessWith(TEAM_ICON_URL) .when(mockJsClient) .getTeamPicturePreviewURL(anyString(), any(AsyncCallback.class)); - AsyncMockStubber - .callSuccessWith(mockTeam) + AsyncMockStubber.callSuccessWith(mockTeam) .when(mockJsClient) .getTeam(anyString(), any(AsyncCallback.class)); } @@ -77,8 +79,7 @@ public void testConfigure() { @Test public void testConfigureFailedToGetIcon() { - AsyncMockStubber - .callFailureWith(new Exception("failed")) + AsyncMockStubber.callFailureWith(new Exception("failed")) .when(mockJsClient) .getTeamPicturePreviewURL(anyString(), any(AsyncCallback.class)); @@ -89,33 +90,63 @@ public void testConfigureFailedToGetIcon() { @Test public void testGetTeamEmail() { - boolean canSendEmail = true; - when(mockAuthenticationController.isLoggedIn()).thenReturn(true); - assertEquals( - "basic@synapse.org", - presenter.getTeamEmail("basic", canSendEmail) - ); + assertEquals("basic@synapse.org", presenter.getTeamEmail("basic")); assertEquals( "StandardCaseHere@synapse.org", - presenter.getTeamEmail("Standard Case Here", canSendEmail) + presenter.getTeamEmail("Standard Case Here") ); assertEquals( "unlikelycase@synapse.org", - presenter.getTeamEmail(" \n\r unlikely\t case ", canSendEmail) + presenter.getTeamEmail(" \n\r unlikely\t case ") ); assertEquals( "Another_UnlikelyCase@synapse.org", - presenter.getTeamEmail( - " %^$##* Another_Unlikely\t &*#$)(!!@~Case ", - canSendEmail - ) + presenter.getTeamEmail(" %^$##* Another_Unlikely\t &*#$)(!!@~Case ") + ); + } + + @Test + public void testEmailVisible() { + when(mockAuthenticationController.isLoggedIn()).thenReturn(true); + when(mockTeamMembershipStatus.getCanSendEmail()).thenReturn(true); + + presenter.setViewTeam( + mockTeam, + TEAM_DESCRIPTION, + mockTeamMembershipStatus, + TEAM_ICON_URL ); - canSendEmail = false; - assertEquals("", presenter.getTeamEmail("basic", canSendEmail)); + verify(mockView).setTeamEmailVisible(true); + } - canSendEmail = true; + @Test + public void testEmailNotVisibleWhenAnonymous() { when(mockAuthenticationController.isLoggedIn()).thenReturn(false); - assertEquals("", presenter.getTeamEmail("basic", canSendEmail)); + when(mockTeamMembershipStatus.getCanSendEmail()).thenReturn(true); + + presenter.setViewTeam( + mockTeam, + TEAM_DESCRIPTION, + mockTeamMembershipStatus, + TEAM_ICON_URL + ); + + verify(mockView).setTeamEmailVisible(false); + } + + @Test + public void testEmailNotVisibleWhenUnauthorized() { + when(mockAuthenticationController.isLoggedIn()).thenReturn(true); + when(mockTeamMembershipStatus.getCanSendEmail()).thenReturn(false); + + presenter.setViewTeam( + mockTeam, + TEAM_DESCRIPTION, + mockTeamMembershipStatus, + TEAM_ICON_URL + ); + + verify(mockView).setTeamEmailVisible(false); } }