Java tutorial
/** * The software subject to this notice and license includes both human readable * source code form and machine readable, binary, object code form. The NCI OCR * Software was developed in conjunction with the National Cancer Institute * (NCI) by NCI employees and 5AM Solutions, Inc. (5AM). To the extent * government employees are authors, any rights in such works shall be subject * to Title 17 of the United States Code, section 105. * * This NCI OCR Software License (the License) is between NCI and You. You (or * Your) shall mean a person or an entity, and all other entities that control, * are controlled by, or are under common control with the entity. Control for * purposes of this definition means (i) the direct or indirect power to cause * the direction or management of such entity, whether by contract or otherwise, * or (ii) ownership of fifty percent (50%) or more of the outstanding shares, * or (iii) beneficial ownership of such entity. * * This License is granted provided that You agree to the conditions described * below. NCI grants You a non-exclusive, worldwide, perpetual, fully-paid-up, * no-charge, irrevocable, transferable and royalty-free right and license in * its rights in the NCI OCR Software to (i) use, install, access, operate, * execute, copy, modify, translate, market, publicly display, publicly perform, * and prepare derivative works of the NCI OCR Software; (ii) distribute and * have distributed to and by third parties the NCI OCR Software and any * modifications and derivative works thereof; and (iii) sublicense the * foregoing rights set out in (i) and (ii) to third parties, including the * right to license such rights to further third parties. For sake of clarity, * and not by way of limitation, NCI shall have no right of accounting or right * of payment from You or Your sub-licensees for the rights granted under this * License. This License is granted at no charge to You. * * Your redistributions of the source code for the Software must retain the * above copyright notice, this list of conditions and the disclaimer and * limitation of liability of Article 6, below. Your redistributions in object * code form must reproduce the above copyright notice, this list of conditions * and the disclaimer of Article 6 in the documentation and/or other materials * provided with the distribution, if any. * * Your end-user documentation included with the redistribution, if any, must * include the following acknowledgment: This product includes software * developed by 5AM and the National Cancer Institute. If You do not include * such end-user documentation, You shall include this acknowledgment in the * Software itself, wherever such third-party acknowledgments normally appear. * * You may not use the names "The National Cancer Institute", "NCI", or "5AM" * to endorse or promote products derived from this Software. This License does * not authorize You to use any trademarks, service marks, trade names, logos or * product names of either NCI or 5AM, except as required to comply with the * terms of this License. * * For sake of clarity, and not by way of limitation, You may incorporate this * Software into Your proprietary programs and into any third party proprietary * programs. However, if You incorporate the Software into third party * proprietary programs, You agree that You are solely responsible for obtaining * any permission from such third parties required to incorporate the Software * into such third party proprietary programs and for informing Your * sub-licensees, including without limitation Your end-users, of their * obligation to secure any required permissions from such third parties before * incorporating the Software into such third party proprietary software * programs. In the event that You fail to obtain such permissions, You agree * to indemnify NCI for any claims against NCI by such third parties, except to * the extent prohibited by law, resulting from Your failure to obtain such * permissions. * * For sake of clarity, and not by way of limitation, You may add Your own * copyright statement to Your modifications and to the derivative works, and * You may provide additional or different license terms and conditions in Your * sublicenses of modifications of the Software, or any derivative works of the * Software as a whole, provided Your use, reproduction, and distribution of the * Work otherwise complies with the conditions stated in this License. * * THIS SOFTWARE IS PROVIDED "AS IS," AND ANY EXPRESSED OR IMPLIED WARRANTIES, * (INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE) ARE DISCLAIMED. IN NO * EVENT SHALL THE NATIONAL CANCER INSTITUTE, 5AM SOLUTIONS, INC. OR THEIR * AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package gov.nih.nci.firebird.web.action.investigator.annual.registration; import static org.junit.Assert.*; import static org.mockito.Mockito.*; import gov.nih.nci.firebird.data.AbstractRegistrationForm; import gov.nih.nci.firebird.data.AnnualRegistration; import gov.nih.nci.firebird.data.AnnualRegistrationType; import gov.nih.nci.firebird.data.InvestigatorProfile; import gov.nih.nci.firebird.data.RegistrationStatus; import gov.nih.nci.firebird.data.user.FirebirdUser; import gov.nih.nci.firebird.data.user.InvestigatorStatus; import gov.nih.nci.firebird.data.user.InvestigatorWithdrawalRequest; import gov.nih.nci.firebird.service.annual.registration.AnnualRegistrationService; import gov.nih.nci.firebird.service.investigatorprofile.InvestigatorProfileService; import gov.nih.nci.firebird.test.AnnualRegistrationFactory; import gov.nih.nci.firebird.test.FirebirdUserFactory; import gov.nih.nci.firebird.test.InvestigatorProfileFactory; import gov.nih.nci.firebird.web.action.FirebirdWebTestUtility; import gov.nih.nci.firebird.web.action.investigator.annual.registration.BrowseAnnualRegistrationsAction.AnnualRegistrationFormListing; import gov.nih.nci.firebird.web.action.investigator.annual.registration.BrowseAnnualRegistrationsAction.AnnualRegistrationListing; import gov.nih.nci.firebird.web.test.AbstractWebTest; import java.util.Collections; import java.util.Date; import java.util.List; import org.apache.commons.lang3.time.DateUtils; import org.apache.struts2.json.JSONException; import org.apache.struts2.json.JSONUtil; import org.junit.Test; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.inject.Inject; import com.opensymphony.xwork2.ActionSupport; public class BrowseAnnualRegistrationsActionTest extends AbstractWebTest { @Inject private BrowseAnnualRegistrationsAction action; @Inject private AnnualRegistrationService mockAnnualRegistrationService; @Inject private InvestigatorProfileService mockProfileService; private InvestigatorProfile profile = InvestigatorProfileFactory.getInstanceWithId().create(); @Override public void setUp() throws Exception { super.setUp(); action.setProfile(profile); when(mockProfileService.getById(profile.getId())).thenReturn(profile); } @Test public void testEnter() { assertEquals(ActionSupport.SUCCESS, action.enter()); } @Test public void testGetAnnualRegistrationListings() { AnnualRegistration registration1 = AnnualRegistrationFactory.getInstanceWithId().create(); registration1.setDueDate(null); AnnualRegistration registration2 = AnnualRegistrationFactory.getInstanceWithId().create(); registration2.setDueDate(new Date()); AnnualRegistration registration3 = AnnualRegistrationFactory.getInstanceWithId().create(); registration3.setDueDate(DateUtils.addYears(new Date(), 1)); profile.addRegistration(registration1); profile.addRegistration(registration2); profile.addRegistration(registration3); List<AnnualRegistrationListing> annualRegistrationListings = action.getAnnualRegistrationListings(); assertEquals(3, annualRegistrationListings.size()); checkEquals(registration1, annualRegistrationListings.get(0)); checkEquals(registration2, annualRegistrationListings.get(1)); checkEquals(registration3, annualRegistrationListings.get(2)); } private void checkEquals(AnnualRegistration registration, AnnualRegistrationListing listing) { assertEquals(registration.getId(), listing.getId()); assertEquals(registration.getAnnualRegistrationType().getDisplay(), listing.getType()); assertEquals(registration.getStatus(), listing.getStatus()); assertEquals(registration.getLastSubmissionDate(), listing.getSubmissionDate()); assertEquals(registration.getDueDate(), listing.getDueDate()); assertEquals(registration.getForms().size(), listing.getAnnualRegistrationFormListings().size()); for (AbstractRegistrationForm form : registration.getForms()) { checkEqual(form, getFormListing(listing.getAnnualRegistrationFormListings(), form)); } } private AnnualRegistrationFormListing getFormListing(List<AnnualRegistrationFormListing> listings, final AbstractRegistrationForm form) { return Iterables.find(listings, new Predicate<AnnualRegistrationFormListing>() { public boolean apply(AnnualRegistrationFormListing listing) { return listing.getId().equals(form.getId()); } }); } private void checkEqual(AbstractRegistrationForm form, AnnualRegistrationFormListing listing) { assertEquals(form.getId(), listing.getId()); assertEquals(form.getRegistration().getId(), listing.getRegistrationId()); assertEquals(form.getFormType().getDescription(), listing.getTitle()); assertEquals(form.getFormOptionality(), listing.getOptionality()); assertEquals(form.getFormStatusDate(), listing.getLastUpdateDate()); assertEquals(form.getFormStatus(), listing.getStatus()); } @Test public void testGetGridTableData() throws JSONException { AnnualRegistration registration1 = AnnualRegistrationFactory.getInstanceWithId().create(); AnnualRegistration registration2 = AnnualRegistrationFactory.getInstanceWithId().create(); profile.addRegistration(registration1); profile.addRegistration(registration2); String actualJson = action.getGridTableData(); checkJsonForRegistration(actualJson, registration1); checkJsonForRegistration(actualJson, registration2); } private void checkJsonForRegistration(String actualJson, AnnualRegistration registration) throws JSONException { assertTrue(actualJson.contains(registration.getId().toString())); assertTrue(actualJson.contains(registration.getAnnualRegistrationType().getDisplay())); assertTrue(actualJson.contains(registration.getStatus().getDisplay())); assertTrue(actualJson.contains(JSONUtil.serialize(registration.getLastSubmissionDate()))); assertTrue(actualJson.contains(JSONUtil.serialize(registration.getDueDate()))); for (AbstractRegistrationForm form : registration.getForms()) { checkJsonForRegistrationForm(actualJson, form); } } private void checkJsonForRegistrationForm(String actualJson, AbstractRegistrationForm form) throws JSONException { assertTrue(actualJson.contains(form.getId().toString())); assertTrue(actualJson.contains(form.getFormType().getDescription())); assertTrue(actualJson.contains(form.getFormOptionality().getDisplay())); assertTrue(actualJson.contains(JSONUtil.serialize(form.getFormStatusDate()))); assertTrue(actualJson.contains(form.getFormStatus().getDisplay())); } @Test public void testIsWithdrawButtonVisible() { FirebirdUser registrationCoordinator = FirebirdUserFactory.getInstance().createRegistrationCoordinator(); FirebirdWebTestUtility.setCurrentUser(action, registrationCoordinator); assertFalse(action.isWithdrawButtonVisible()); FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.setCtepUser(true); FirebirdWebTestUtility.setCurrentUser(action, investigator); assertTrue(action.isWithdrawButtonVisible()); investigator.getInvestigatorRole().setWithdrawalRequest(new InvestigatorWithdrawalRequest("I'm done")); assertFalse(action.isWithdrawButtonVisible()); } @Test public void testIsWithdrawButtonVisible_DisqualifiedInvestigator() { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.setCtepUser(true); FirebirdWebTestUtility.setCurrentUser(action, investigator); assertTrue(action.isWithdrawButtonVisible()); investigator.getInvestigatorRole().disqualifyInvestigator("reason"); assertFalse(action.isWithdrawButtonVisible()); } @Test public void testIsReactivateButtonVisible_InvestigatorWithWithdrawnStatus() throws Exception { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.getInvestigatorRole().setStatus(InvestigatorStatus.WITHDRAWN); FirebirdWebTestUtility.setCurrentUser(action, investigator); assertTrue(action.isReactivateButtonVisible()); } @Test public void testIsReactivateButtonVisible_InvestigatorWithActiveStatus() throws Exception { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); FirebirdWebTestUtility.setCurrentUser(action, investigator); assertFalse(action.isReactivateButtonVisible()); } @Test public void testIsReactivateButtonVisible_Coordinator() throws Exception { FirebirdUser registrationCoordinator = FirebirdUserFactory.getInstance().createRegistrationCoordinator(); FirebirdWebTestUtility.setCurrentUser(action, registrationCoordinator); assertFalse(action.isReactivateButtonVisible()); } @Test public void testIsReactivateButtonVisible_InProgressReactivatedRegistration() throws Exception { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.getInvestigatorRole().setStatus(InvestigatorStatus.WITHDRAWN); FirebirdWebTestUtility.setCurrentUser(action, investigator); addReactivatedRegistration(investigator, RegistrationStatus.IN_PROGRESS); assertFalse(action.isReactivateButtonVisible()); } private void addReactivatedRegistration(FirebirdUser investigator, RegistrationStatus status) { AnnualRegistration reactivatedRegistration = AnnualRegistrationFactory.getInstance().create(); reactivatedRegistration.setAnnualRegistrationType(AnnualRegistrationType.REACTIVATED); reactivatedRegistration.setStatus(status); investigator.getInvestigatorRole().getProfile().addRegistration(reactivatedRegistration); } @Test public void testIsReactivateButtonVisible_ApprovedReactivatedRegistration() throws Exception { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.getInvestigatorRole().setStatus(InvestigatorStatus.WITHDRAWN); FirebirdWebTestUtility.setCurrentUser(action, investigator); addReactivatedRegistration(investigator, RegistrationStatus.APPROVED); assertTrue(action.isReactivateButtonVisible()); } @Test public void testIsReactivateButtonVisible_DisqualifiedInvestigatorWithWithdrawnStatus() throws Exception { FirebirdUser investigator = FirebirdUserFactory.getInstance().createInvestigator(); investigator.getInvestigatorRole().setStatus(InvestigatorStatus.WITHDRAWN); FirebirdWebTestUtility.setCurrentUser(action, investigator); assertTrue(action.isReactivateButtonVisible()); investigator.getInvestigatorRole().disqualifyInvestigator("reason"); assertFalse(action.isReactivateButtonVisible()); } @Test public void testAnnualRegistrationListingOrdering() { AnnualRegistrationListing returnedListing = createAnnualRegistration(RegistrationStatus.RETURNED); AnnualRegistrationListing inProgressListing = createAnnualRegistration(RegistrationStatus.IN_PROGRESS); AnnualRegistrationListing completedListing = createAnnualRegistration(RegistrationStatus.COMPLETED); AnnualRegistrationListing submittedListing = createAnnualRegistration(RegistrationStatus.SUBMITTED); List<AnnualRegistrationListing> listings = Lists.newArrayList(completedListing, returnedListing, submittedListing, inProgressListing); Collections.sort(listings); assertEquals(submittedListing, listings.get(0)); assertEquals(returnedListing, listings.get(1)); assertEquals(inProgressListing, listings.get(2)); assertEquals(completedListing, listings.get(3)); } AnnualRegistrationListing createAnnualRegistration(RegistrationStatus status) { AnnualRegistration registration = AnnualRegistrationFactory.getInstance().create(); registration.setStatus(status); return action.new AnnualRegistrationListing(registration); } @Test public void testIsReadOnly() { FirebirdUser user = FirebirdUserFactory.getInstance().create(); user.setCtepUser(false); FirebirdWebTestUtility.setCurrentUser(action, user); assertTrue(action.isReadOnly()); user.setCtepUser(true); assertFalse(action.isReadOnly()); } @Test public void testIsCreateRegistrationAllowed_False() throws Exception { profile.getUser().setCtepUser(false); assertFalse(action.isCreateRegistrationAllowed()); } @Test public void testIsCreateRegistrationAllowed_True() throws Exception { profile.getUser().setCtepUser(true); assertTrue(action.isCreateRegistrationAllowed()); } @Test(expected = IllegalArgumentException.class) public void testCreateAnnualRegistration_NonCtepUser() throws Exception { profile.getUser().setCtepUser(false); action.createAnnualRegistration(); } @Test public void testCreateAnnualRegistration() throws Exception { profile.getUser().setCtepUser(true); assertEquals(ActionSupport.SUCCESS, action.createAnnualRegistration()); verify(mockAnnualRegistrationService).createRegistration(profile); } }