From 4ff8b9164ebfeaeb391608b4ceb1259625b765b0 Mon Sep 17 00:00:00 2001 From: Jay Hodgson Date: Fri, 26 Apr 2024 13:25:43 -0700 Subject: [PATCH 1/3] SWC-6810: add support for subjectsDefinedByAnnotations attribute --- ...eOrUpdateAccessRequirementWizardProps.java | 2 +- .../presenter/AccessRequirementPresenter.java | 60 +++++++++++-------- .../ACTAccessRequirementWidget.java | 1 + .../ACTAccessRequirementWidgetView.java | 2 + .../ACTAccessRequirementWidgetViewImpl.java | 17 ++++++ .../CreateAccessRequirementButton.java | 17 ++++-- .../ManagedACTAccessRequirementWidget.java | 4 ++ ...ManagedACTAccessRequirementWidgetView.java | 2 + ...gedACTAccessRequirementWidgetViewImpl.java | 17 ++++++ .../SelfSignAccessRequirementWidget.java | 4 ++ .../SelfSignAccessRequirementWidgetView.java | 2 + ...lfSignAccessRequirementWidgetViewImpl.java | 17 ++++++ .../TermsOfUseAccessRequirementWidget.java | 4 ++ ...TermsOfUseAccessRequirementWidgetView.java | 2 + ...sOfUseAccessRequirementWidgetViewImpl.java | 17 ++++++ .../ACTAccessRequirementWidgetViewImpl.ui.xml | 41 +++++++------ ...dACTAccessRequirementWidgetViewImpl.ui.xml | 48 ++++++++------- ...SignAccessRequirementWidgetViewImpl.ui.xml | 50 +++++++++------- ...fUseAccessRequirementWidgetViewImpl.ui.xml | 49 ++++++++------- 19 files changed, 245 insertions(+), 111 deletions(-) diff --git a/src/main/java/org/sagebionetworks/web/client/jsinterop/CreateOrUpdateAccessRequirementWizardProps.java b/src/main/java/org/sagebionetworks/web/client/jsinterop/CreateOrUpdateAccessRequirementWizardProps.java index 0610b9e7b5..1823908c9c 100644 --- a/src/main/java/org/sagebionetworks/web/client/jsinterop/CreateOrUpdateAccessRequirementWizardProps.java +++ b/src/main/java/org/sagebionetworks/web/client/jsinterop/CreateOrUpdateAccessRequirementWizardProps.java @@ -14,7 +14,7 @@ public class CreateOrUpdateAccessRequirementWizardProps @FunctionalInterface @JsFunction public interface OnComplete { - void onComplete(); + void onComplete(String accessRequirementID); } @FunctionalInterface diff --git a/src/main/java/org/sagebionetworks/web/client/presenter/AccessRequirementPresenter.java b/src/main/java/org/sagebionetworks/web/client/presenter/AccessRequirementPresenter.java index 93b46b37ea..c59763ef40 100644 --- a/src/main/java/org/sagebionetworks/web/client/presenter/AccessRequirementPresenter.java +++ b/src/main/java/org/sagebionetworks/web/client/presenter/AccessRequirementPresenter.java @@ -8,6 +8,7 @@ import org.sagebionetworks.repo.model.AccessRequirement; import org.sagebionetworks.repo.model.RestrictableObjectDescriptor; import org.sagebionetworks.repo.model.RestrictableObjectType; +import org.sagebionetworks.web.client.DisplayUtils; import org.sagebionetworks.web.client.SynapseJavascriptClient; import org.sagebionetworks.web.client.place.AccessRequirementPlace; import org.sagebionetworks.web.client.place.AccessRequirementsPlace; @@ -59,37 +60,44 @@ public void setPlace(AccessRequirementPlace place) { String id = place.getParam(AccessRequirementsPlace.ID_PARAM); String typeString = place.getParam(AccessRequirementsPlace.TYPE_PARAM); - // Note: configuring the Access Requirement widget without a target subject will result in notifications sent to the user will not have the context (Project/Folder/File associated with the restriction). - if (id != null && typeString != null) { - RestrictableObjectDescriptor targetSubject = - new RestrictableObjectDescriptor(); - RestrictableObjectType type = RestrictableObjectType.valueOf( - typeString.toUpperCase() - ); - targetSubject.setType(type); - targetSubject.setId(id); + jsClient.getAccessRequirement( + requirementId, + new AsyncCallback() { + @Override + public void onSuccess(AccessRequirement result) { + String titleInfo = DisplayUtils.isDefined(result.getName()) + ? ": " + result.getName() + : ""; + view.addTitle("Access Requirement" + titleInfo); - arWidget.configure(requirementId, targetSubject); - } else { - // SWC-6700: No subject specified, pick a random one since some code assumes a subject has been specified. - jsClient.getAccessRequirement( - requirementId, - new AsyncCallback() { - @Override - public void onSuccess(AccessRequirement result) { - RestrictableObjectDescriptor firstSubject = result - .getSubjectIds() - .get(0); + // Note: configuring the Access Requirement widget without a target subject will result in notifications sent to the user will not have the context (Project/Folder/File associated with the restriction). + if (id != null && typeString != null) { + RestrictableObjectDescriptor targetSubject = + new RestrictableObjectDescriptor(); + RestrictableObjectType type = RestrictableObjectType.valueOf( + typeString.toUpperCase() + ); + targetSubject.setType(type); + targetSubject.setId(id); + + arWidget.configure(requirementId, targetSubject); + } else { + // SWC-6700: No subject specified, pick a random one since some code assumes a subject has been specified. + // configure using the first subject, if available + RestrictableObjectDescriptor firstSubject = null; + if (result.getSubjectIds().size() > 0) { + firstSubject = result.getSubjectIds().get(0); + } arWidget.configure(requirementId, firstSubject); } + } - @Override - public void onFailure(Throwable caught) { - synAlert.handleException(caught); - } + @Override + public void onFailure(Throwable caught) { + synAlert.handleException(caught); } - ); - } + } + ); } public AccessRequirementPlace getPlace() { diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidget.java index 36c71aed64..0d77403089 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidget.java @@ -149,6 +149,7 @@ public void onSuccess(String rootWikiId) { convertACTAccessRequirementButton.configure(ar, refreshCallback); view.setAccessRequirementName(ar.getName()); view.setAccessRequirementID(ar.getId().toString()); + view.setSubjectsDefinedByAnnotations(ar.getSubjectsDefinedByAnnotations()); lazyLoadHelper.setIsConfigured(); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetView.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetView.java index 07520af587..d810441ba3 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetView.java @@ -67,4 +67,6 @@ public interface Presenter { void setAccessRequirementIDVisible(boolean visible); void setAccessRequirementID(String arID); + + void setSubjectsDefinedByAnnotations(Boolean subjectsDefinedByAnnotations); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.java index 4d49fc4861..450dfdcb70 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.java @@ -89,6 +89,12 @@ public class ACTAccessRequirementWidgetViewImpl @UiField InlineLabel accessRequirementIDField; + @UiField + Div subjectsDefinedByAnnotationsUI; + + @UiField + Div subjectsDefinedInAccessRequirementUI; + public interface Binder extends UiBinder {} @@ -265,6 +271,17 @@ public void setAccessRequirementName(String description) { } } + @Override + public void setSubjectsDefinedByAnnotations( + Boolean subjectsDefinedByAnnotations + ) { + boolean v = subjectsDefinedByAnnotations != null + ? subjectsDefinedByAnnotations.booleanValue() + : false; + subjectsDefinedByAnnotationsUI.setVisible(v); + subjectsDefinedInAccessRequirementUI.setVisible(!v); + } + @Override public void setCoveredEntitiesHeadingVisible(boolean visible) { coveredEntitiesHeadingUI.setVisible(visible); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/CreateAccessRequirementButton.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/CreateAccessRequirementButton.java index ad91aca1a4..7b08c1c1ac 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/CreateAccessRequirementButton.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/CreateAccessRequirementButton.java @@ -12,6 +12,7 @@ import org.sagebionetworks.web.client.PortalGinInjector; import org.sagebionetworks.web.client.cookie.CookieProvider; import org.sagebionetworks.web.client.jsinterop.CreateOrUpdateAccessRequirementWizardProps; +import org.sagebionetworks.web.client.place.AccessRequirementPlace; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.accessrequirements.createaccessrequirement.CreateOrUpdateAccessRequirementWizard; @@ -126,11 +127,17 @@ private void useSrcWizard() { CreateOrUpdateAccessRequirementWizard wizard = ginInjector.getCreateOrUpdateAccessRequirementWizard(); - CreateOrUpdateAccessRequirementWizardProps.OnComplete onComplete = () -> { - wizard.setOpen(false); - refreshCallback.invoke(); - view.clearWidgets(); - }; + CreateOrUpdateAccessRequirementWizardProps.OnComplete onComplete = + accessRequirementID -> { + wizard.setOpen(false); + view.clearWidgets(); + AccessRequirementPlace target = new AccessRequirementPlace(""); + target.putParam( + AccessRequirementPlace.AR_ID_PARAM, + accessRequirementID + ); + ginInjector.getGlobalApplicationState().getPlaceChanger().goTo(target); + }; CreateOrUpdateAccessRequirementWizardProps.OnCancel onCancel = () -> { wizard.setOpen(false); refreshCallback.invoke(); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidget.java index dc319b0946..f126d8c8cb 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidget.java @@ -159,6 +159,10 @@ public void onSuccess(String rootWikiId) { isACTMemberAsyncHandler.isACTActionAvailable(isACT -> { view.setAccessRequirementIDVisible(isACT); view.setCoveredEntitiesHeadingVisible(isACT); + // show the subjects defined by annotations UI if isACT and this flag is set + view.setSubjectsDefinedByAnnotations( + isACT && ar.getSubjectsDefinedByAnnotations() + ); }); view.setAccessRequirementName(ar.getName()); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetView.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetView.java index 416b7f9d3a..254b1c69f5 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetView.java @@ -94,4 +94,6 @@ public interface Presenter { void setAccessRequirementRelatedProjectsList( IsWidget accessRequirementRelatedProjectsList ); + + void setSubjectsDefinedByAnnotations(Boolean subjectsDefinedByAnnotations); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetViewImpl.java index 3318e50bce..ddc67f4dec 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/ManagedACTAccessRequirementWidgetViewImpl.java @@ -124,6 +124,12 @@ public class ManagedACTAccessRequirementWidgetViewImpl @UiField Span accessRequirementDescription; + @UiField + Div subjectsDefinedByAnnotationsUI; + + @UiField + Div subjectsDefinedInAccessRequirementUI; + private final JSONObjectAdapter jsonObjectAdapter; private final SynapseReactClientFullContextPropsProvider propsProvider; Callback onAttachCallback; @@ -403,6 +409,17 @@ public void showRequestAccessModal( ); } + @Override + public void setSubjectsDefinedByAnnotations( + Boolean subjectsDefinedByAnnotations + ) { + boolean v = subjectsDefinedByAnnotations != null + ? subjectsDefinedByAnnotations.booleanValue() + : false; + subjectsDefinedByAnnotationsUI.setVisible(v); + subjectsDefinedInAccessRequirementUI.setVisible(!v); + } + public void hideRequestAccessModal() { requestDataAccessWidget.clear(); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidget.java index 21c92cc7a4..0e13fc1513 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidget.java @@ -147,6 +147,10 @@ public void onSuccess(String rootWikiId) { isACTMemberAsyncHandler.isACTActionAvailable(isACT -> { view.setAccessRequirementIDVisible(isACT); view.setCoveredEntitiesHeadingVisible(isACT); + // show the subjects defined by annotations UI if isACT and this flag is set + view.setSubjectsDefinedByAnnotations( + isACT && ar.getSubjectsDefinedByAnnotations() + ); }); lazyLoadHelper.setIsConfigured(); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetView.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetView.java index 4645be5d8f..eb6df52f35 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetView.java @@ -60,4 +60,6 @@ public interface Presenter { void setAccessRequirementRelatedProjectsList( IsWidget accessRequirementRelatedProjectsList ); + + void setSubjectsDefinedByAnnotations(Boolean subjectsDefinedByAnnotations); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetViewImpl.java index d5e2d47c9d..9f5d983632 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/SelfSignAccessRequirementWidgetViewImpl.java @@ -77,6 +77,12 @@ public class SelfSignAccessRequirementWidgetViewImpl Callback onAttachCallback; + @UiField + Div subjectsDefinedByAnnotationsUI; + + @UiField + Div subjectsDefinedInAccessRequirementUI; + public interface Binder extends UiBinder {} @@ -241,4 +247,15 @@ public void setAccessRequirementID(String arID) { public void setAccessRequirementIDVisible(boolean visible) { accessRequirementIDUI.setVisible(visible); } + + @Override + public void setSubjectsDefinedByAnnotations( + Boolean subjectsDefinedByAnnotations + ) { + boolean v = subjectsDefinedByAnnotations != null + ? subjectsDefinedByAnnotations.booleanValue() + : false; + subjectsDefinedByAnnotationsUI.setVisible(v); + subjectsDefinedInAccessRequirementUI.setVisible(!v); + } } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidget.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidget.java index 2e53b4f50b..2ebadeb379 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidget.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidget.java @@ -130,6 +130,10 @@ public void onSuccess(String rootWikiId) { isACTMemberAsyncHandler.isACTActionAvailable(isACT -> { view.setAccessRequirementIDVisible(isACT); view.setCoveredEntitiesHeadingVisible(isACT); + // show the subjects defined by annotations UI if isACT and this flag is set + view.setSubjectsDefinedByAnnotations( + isACT && ar.getSubjectsDefinedByAnnotations() + ); }); teamSubjectsWidget.configure(ar.getSubjectIds()); entitySubjectsWidget.configure(ar.getSubjectIds()); diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetView.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetView.java index a1d4dd79d8..1f1a958d2c 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetView.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetView.java @@ -58,4 +58,6 @@ public interface Presenter { void setAccessRequirementRelatedProjectsList( IsWidget accessRequirementRelatedProjectsList ); + + void setSubjectsDefinedByAnnotations(Boolean subjectsDefinedByAnnotations); } diff --git a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetViewImpl.java b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetViewImpl.java index f4699c9467..829acc6e4e 100644 --- a/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetViewImpl.java +++ b/src/main/java/org/sagebionetworks/web/client/widget/accessrequirements/TermsOfUseAccessRequirementWidgetViewImpl.java @@ -74,6 +74,12 @@ public class TermsOfUseAccessRequirementWidgetViewImpl @UiField Div controlsContainer; + @UiField + Div subjectsDefinedByAnnotationsUI; + + @UiField + Div subjectsDefinedInAccessRequirementUI; + Callback onAttachCallback; public interface Binder @@ -232,4 +238,15 @@ public void showLoginButton() { public void hideControls() { controlsContainer.setVisible(false); } + + @Override + public void setSubjectsDefinedByAnnotations( + Boolean subjectsDefinedByAnnotations + ) { + boolean v = subjectsDefinedByAnnotations != null + ? subjectsDefinedByAnnotations.booleanValue() + : false; + subjectsDefinedByAnnotationsUI.setVisible(v); + subjectsDefinedInAccessRequirementUI.setVisible(!v); + } } diff --git a/src/main/resources/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.ui.xml b/src/main/resources/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.ui.xml index ea5ff1b4aa..6b7ecdbcf3 100644 --- a/src/main/resources/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.ui.xml +++ b/src/main/resources/org/sagebionetworks/web/client/widget/accessrequirements/ACTAccessRequirementWidgetViewImpl.ui.xml @@ -72,28 +72,35 @@ /> - - - + + + Subjects controlled by this Access Requirement are defined by + annotations on individual entities. + - - - - + + + + + + + + + + + - - - - - + + + Subjects controlled by this Access Requirement are defined by + annotations on individual entities. + - - - - + + + + + + + + + + + - - - - + + + Subjects controlled by this Access Requirement are defined by + annotations on individual entities. + + + + + + + + + + + - - - - - - - + + + Subjects controlled by this Access Requirement are defined by + annotations on individual entities. + + + + + + + + + + - - - - Date: Fri, 26 Apr 2024 13:39:33 -0700 Subject: [PATCH 2/3] update test --- .../CreateAccessRequirementButtonTest.java | 43 +++++++++++++++++-- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/test/java/org/sagebionetworks/web/unitclient/widget/accessrequirements/CreateAccessRequirementButtonTest.java b/src/test/java/org/sagebionetworks/web/unitclient/widget/accessrequirements/CreateAccessRequirementButtonTest.java index 3edfcf0e86..aae721a854 100644 --- a/src/test/java/org/sagebionetworks/web/unitclient/widget/accessrequirements/CreateAccessRequirementButtonTest.java +++ b/src/test/java/org/sagebionetworks/web/unitclient/widget/accessrequirements/CreateAccessRequirementButtonTest.java @@ -1,5 +1,6 @@ package org.sagebionetworks.web.unitclient.widget.accessrequirements; +import static org.junit.Assert.*; import static org.mockito.Matchers.any; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.never; @@ -7,6 +8,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.google.gwt.place.shared.Place; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -16,9 +18,12 @@ import org.sagebionetworks.repo.model.AccessRequirement; import org.sagebionetworks.repo.model.RestrictableObjectDescriptor; import org.sagebionetworks.web.client.DisplayUtils; +import org.sagebionetworks.web.client.GlobalApplicationState; +import org.sagebionetworks.web.client.PlaceChanger; import org.sagebionetworks.web.client.PortalGinInjector; import org.sagebionetworks.web.client.cookie.CookieProvider; import org.sagebionetworks.web.client.jsinterop.CreateOrUpdateAccessRequirementWizardProps; +import org.sagebionetworks.web.client.place.AccessRequirementPlace; import org.sagebionetworks.web.client.utils.Callback; import org.sagebionetworks.web.client.utils.CallbackP; import org.sagebionetworks.web.client.widget.accessrequirements.CreateAccessRequirementButton; @@ -75,6 +80,15 @@ public class CreateAccessRequirementButtonTest { @Mock Callback mockRefreshCallback; + @Mock + GlobalApplicationState mockGlobalAppState; + + @Mock + PlaceChanger mockPlaceChanger; + + @Captor + ArgumentCaptor placeCaptor; + @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); @@ -89,6 +103,9 @@ public void setUp() throws Exception { .thenReturn(mockLegacyCreateAccessRequirementWizard); when(mockGinInjector.getCreateOrUpdateAccessRequirementWizard()) .thenReturn(mockCreateOrUpdateAccessRequirementWizard); + when(mockGinInjector.getGlobalApplicationState()) + .thenReturn(mockGlobalAppState); + when(mockGlobalAppState.getPlaceChanger()).thenReturn(mockPlaceChanger); } @Test @@ -194,9 +211,18 @@ public void testConfigureWithARInExperimentalMode() { verify(mockLegacyCreateAccessRequirementWizard, never()) .showModal(wizardCallbackCallback.capture()); - createOrUpdateArOnCompleteCaptor.getValue().onComplete(); + String arID = "12345"; + createOrUpdateArOnCompleteCaptor.getValue().onComplete(arID); verify(mockCreateOrUpdateAccessRequirementWizard).setOpen(false); - verify(mockRefreshCallback).invoke(); + verify(mockPlaceChanger).goTo(placeCaptor.capture()); + Place actualPlace = placeCaptor.getValue(); + assertTrue(actualPlace instanceof AccessRequirementPlace); + assertEquals( + arID, + ((AccessRequirementPlace) actualPlace).getParam( + AccessRequirementPlace.AR_ID_PARAM + ) + ); } @Test @@ -227,9 +253,18 @@ public void testConfigureWithSubjectInExperimentalMode() { verify(mockLegacyCreateAccessRequirementWizard, never()) .showModal(wizardCallbackCallback.capture()); - createOrUpdateArOnCompleteCaptor.getValue().onComplete(); + String arID = "12345"; + createOrUpdateArOnCompleteCaptor.getValue().onComplete(arID); verify(mockCreateOrUpdateAccessRequirementWizard).setOpen(false); - verify(mockRefreshCallback).invoke(); + verify(mockPlaceChanger).goTo(placeCaptor.capture()); + Place actualPlace = placeCaptor.getValue(); + assertTrue(actualPlace instanceof AccessRequirementPlace); + assertEquals( + arID, + ((AccessRequirementPlace) actualPlace).getParam( + AccessRequirementPlace.AR_ID_PARAM + ) + ); } @Test From 10835ad00ed3d38efcd6de1374a6e32fa92b6888 Mon Sep 17 00:00:00 2001 From: Jay Hodgson Date: Mon, 29 Apr 2024 09:15:19 -0700 Subject: [PATCH 3/3] merge upstream release-498, and bump SRC to 3.2.13 --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f9e05acdab..a60dde0a6d 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "react-transition-group": "2.6.0", "sass": "^1.63.6", "spark-md5": "^3.0.2", - "synapse-react-client": "3.2.12", + "synapse-react-client": "3.2.13", "universal-cookie": "^4.0.4", "xss": "^1.0.15" }, diff --git a/yarn.lock b/yarn.lock index 28a8f27450..29889fa460 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5066,10 +5066,10 @@ svg-path-sdf@^1.1.3: parse-svg-path "^0.1.2" svg-path-bounds "^1.0.1" -synapse-react-client@3.2.12: - version "3.2.12" - resolved "https://registry.yarnpkg.com/synapse-react-client/-/synapse-react-client-3.2.12.tgz#a5dcb636ca634b555b2ac78c7a2e6d6a6267932a" - integrity sha512-0PqYHHe127kjPVHdQQvWGeeoqj1JtYvSGsjzInImbdaImMxEPljoPyvKGSFR1G0ze/f+JRM80wgV5N74NY78ZA== +synapse-react-client@3.2.13: + version "3.2.13" + resolved "https://registry.yarnpkg.com/synapse-react-client/-/synapse-react-client-3.2.13.tgz#a219c71edcc18d2869efd62159de61f9d58443c7" + integrity sha512-nKViR+ZSnQ3Ps8+FKo93rqmWvLRlPUtSIUDURqG+VlPK5YouSpWFu7ycTK8zj+t8Hx0vkG89q1jrmAf6DwssbQ== dependencies: "@apidevtools/json-schema-ref-parser" "^9.1.2" "@brainhubeu/react-carousel" "1.19.26"