@Test
 public void testExecute_WithNullConfirmCode() throws Exception {
   Site parentSite = TestUtil.createSite();
   DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
   ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
   action.setSettingsId(settings.getChildSiteSettingsId());
   action.setConfirmCode(null);
   ForwardResolution resolutionMock = (ForwardResolution) action.show();
   Assert.assertEquals(
       "/account/registration/registrationLinkNotValid.jsp", resolutionMock.getPath());
 }
  @Test
  public void testExecute_WithSecondState() throws Exception {
    User user = TestUtil.createUser();
    user.setActiveted(null);
    Site parentSite = TestUtil.createSite();
    DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
    ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
    settings.setCreatedDate(new Date());
    settings.setUserId(user.getUserId());
    settings.setConfirmCode("confirm");
    action.setSettingsId(settings.getChildSiteSettingsId());
    action.setConfirmCode("confirm");

    DraftChildSiteRegistration childSiteRegistration =
        TestUtil.createChildSiteRegistration("name", "comment");
    childSiteRegistration.setBlueprintsId(Arrays.asList(1, 2));
    settings.setRequiredToUseSiteBlueprint(true);
    settings.setSitePaymentSettings(new SitePaymentSettings());
    settings.setChildSiteRegistration(childSiteRegistration);

    Assert.assertNull(user.getActiveted());
    Assert.assertNull(new UsersManager().getLoginedUser());

    ForwardResolution resolutionMock = (ForwardResolution) action.show();
    Assert.assertNotNull(new UsersManager().getLoginedUser());
    Assert.assertEquals(user, new UsersManager().getLoginedUser());
    Assert.assertEquals(
        "/account/registration/childSiteRigistrationConfirmationSecondState.jsp",
        resolutionMock.getPath());

    Assert.assertNotNull(user.getActiveted());
    Assert.assertNotNull(new UsersManager().getLoginedUser());
    Assert.assertEquals(user, new UsersManager().getLoginedUser());
    Assert.assertNull(action.getTellFriendHtml());
  }
 @Test
 public void testExecute_WithExpiredSettings() throws Exception {
   User user = TestUtil.createUser();
   user.setActiveted(null);
   Site parentSite = TestUtil.createSite();
   DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
   ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
   settings.setCreatedDate(
       new Date((System.currentTimeMillis() - TimeInterval.TEN_DAYS.getMillis() * 2) + 1));
   settings.setUserId(user.getUserId());
   settings.setConfirmCode("confirm");
   action.setSettingsId(settings.getChildSiteSettingsId());
   action.setConfirmCode("confirm");
   ForwardResolution resolutionMock = (ForwardResolution) action.show();
   Assert.assertEquals(
       "/account/registration/registrationLinkExpired.jsp", resolutionMock.getPath());
 }
 @Test
 public void testExecute_WithActiveUserAndCreatedChildSite() throws Exception {
   final Date activationDate = new Date();
   User user = TestUtil.createUser();
   user.setActiveted(activationDate);
   Site parentSite = TestUtil.createSite();
   DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
   ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
   Site childSite = TestUtil.createSite();
   settings.setSite(childSite);
   settings.setUserId(user.getUserId());
   settings.setConfirmCode("confirm");
   settings.setCreatedDate(new Date());
   settings.setAccessLevel(SiteAccessLevel.ADMINISTRATOR);
   action.setSettingsId(settings.getChildSiteSettingsId());
   action.setConfirmCode("confirm");
   ResolutionMock resolutionMock = (ResolutionMock) action.show();
   Assert.assertEquals(SiteEditPageAction.class, resolutionMock.getRedirectByAction());
   Assert.assertEquals("siteId", resolutionMock.getRedirectByActionParameters()[0].getName());
   Assert.assertEquals(
       childSite.getSiteId(), resolutionMock.getRedirectByActionParameters()[0].getValue());
 }
 @Test
 public void testExecute_WithActiveUser_secondState() throws Exception {
   final Date activationDate = new Date();
   User user = TestUtil.createUser();
   user.setActiveted(activationDate);
   Site parentSite = TestUtil.createSite();
   DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
   ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
   settings.setUserId(user.getUserId());
   settings.setConfirmCode("confirm");
   settings.setCreatedDate(new Date());
   settings.setAccessLevel(SiteAccessLevel.ADMINISTRATOR);
   action.setSettingsId(settings.getChildSiteSettingsId());
   action.setConfirmCode("confirm");
   ForwardResolution resolutionMock = (ForwardResolution) action.show();
   Assert.assertNotNull(new UsersManager().getLoginedUser());
   Assert.assertEquals(user, new UsersManager().getLoginedUser());
   Assert.assertEquals(
       "/account/registration/childSiteRigistrationConfirmationSecondState.jsp",
       resolutionMock.getPath());
 }
  @Test
  public void testExecute_WithFirstState() throws Exception {
    ServiceLocator.getConfigStorage().get().setUserSitesUrl("web-deva.com");
    User user = TestUtil.createUser();
    user.setActiveted(null);
    Site parentSite = TestUtil.createSite();
    DraftChildSiteRegistration registration = TestUtil.createChildSiteRegistration(parentSite);
    ChildSiteSettings settings = TestUtil.createChildSiteSettings(registration, parentSite);
    settings.setCreatedDate(new Date());
    settings.setUserId(user.getUserId());
    settings.setConfirmCode("confirm");
    settings.setAccessLevel(SiteAccessLevel.ADMINISTRATOR);

    FilledForm filledForm = TestUtil.createFilledForm(registration.getFormId());
    FilledFormItem filledFormItemDomainName =
        TestUtil.createFilledFormItem(FormItemName.YOUR_OWN_DOMAIN_NAME);
    List<String> values = Arrays.asList("domainName");
    filledFormItemDomainName.setValues(values);

    FilledFormItem filledFormItemSiteName =
        TestUtil.createFilledFormItem(FormItemName.YOUR_PAGE_SITE_NAME);
    List<String> siteNameValues = Arrays.asList("siteName");
    filledFormItemSiteName.setValues(siteNameValues);

    filledForm.setFilledFormItems(Arrays.asList(filledFormItemDomainName, filledFormItemSiteName));
    settings.setFilledFormId(filledForm.getFilledFormId());

    action.setSettingsId(settings.getChildSiteSettingsId());
    action.setConfirmCode("confirm");

    DraftChildSiteRegistration childSiteRegistration =
        TestUtil.createChildSiteRegistration("name", "comment");
    Site blueprint = TestUtil.createBlueprint();
    childSiteRegistration.setBlueprintsId(Arrays.asList(blueprint.getSiteId()));

    settings.setRequiredToUseSiteBlueprint(true);
    final SitePaymentSettings sitePaymentSettings = new SitePaymentSettings();
    sitePaymentSettings.setSiteStatus(SiteStatus.ACTIVE);
    settings.setSitePaymentSettings(sitePaymentSettings);
    settings.setChildSiteRegistration(childSiteRegistration);

    Assert.assertNull(user.getActiveted());
    Assert.assertNull(new UsersManager().getLoginedUser());
    Assert.assertNull(ServiceLocator.getPersistance().getSiteBySubDomain("domainname"));

    ForwardResolution resolutionMock = (ForwardResolution) action.show();
    Assert.assertNotNull(new UsersManager().getLoginedUser());
    Assert.assertEquals(user, new UsersManager().getLoginedUser());
    Assert.assertEquals(
        "/account/registration/childSiteRigistrationConfirmationFirstState.jsp",
        resolutionMock.getPath());

    Assert.assertNotNull(user.getActiveted());
    Assert.assertNotNull(new UsersManager().getLoginedUser());
    Assert.assertEquals(user, new UsersManager().getLoginedUser());
    Site site = ServiceLocator.getPersistance().getSiteBySubDomain("domainname");
    Assert.assertNotNull(site);
    Assert.assertNotNull(new UserRightManager(user).toSite(site).getSiteAccessType());
    Assert.assertEquals(
        settings.getAccessLevel(), new UserRightManager(user).toSite(site).getSiteAccessType());
    Assert.assertEquals("domainname", site.getSubDomain());
    Assert.assertEquals("http://domainname.web-deva.com", action.getUrl());
    Assert.assertNotNull(action.getTellFriendHtml());
    Assert.assertEquals(2, site.getPages().size());

    Assert.assertEquals("siteName", site.getTitle());
    Assert.assertEquals(blueprint, site.getBlueprintParent());
  }
  @RemoteMethod
  public String goToPaypalCSR(final PaypalRequest request) throws Exception {
    final PaymentReason paymentReason = PaymentReason.CHILD_SITE_CREATION;

    // Modifying redirect url
    // Check on hash presence. We sould remove all old hash.
    if (request.getRedirectToUrl().contains("#")) {
      request.setRedirectToUrl(
          request.getRedirectToUrl().substring(0, request.getRedirectToUrl().indexOf("#")));
    }

    if (request.getPageBreakIndex() > request.getTotalPageBreaks()) {
      // If payment page is last page then update return url with setting that will show message
      // about registration completion.
      request.setRedirectToUrl(
          request.getRedirectToUrl() + "#showSuccessMessageLastPage" + request.getWidgetId());
    } else {
      // Upadting return from paypal url with correct form page.
      request.setRedirectToUrl(
          request.getRedirectToUrl()
              + (request.getRedirectToUrl().contains("?") ? "&" : "?")
              + "pageBreaksToPass="******"&filledFormToUpdateId="
              + request.getFilledFormToUpdateId()
              + "&childSiteUserId="
              + request.getChildSiteUserId()
              + "&settingsId="
              + request.getSettingsId()
              + "#showSuccessMessage"
              + request.getWidgetId());
    }

    final PaypalPaymentInfoRequest paymentInfoRequest =
        new PaypalPaymentInfoRequest(
            request.getOwnerId(),
            PaymentSettingsOwnerType.CHILD_SITE_SETTINGS,
            request.getChargeType(),
            request.getRedirectToUrl(),
            createRedirectOnErrorUrl(request),
            paymentReason,
            request.getChildSiteUserId());
    final int requestId =
        ServiceLocator.getPaypalPaymentInfoRequestStorage().put(paymentInfoRequest);

    final ChildSiteSettings childSiteSettings =
        ServiceLocator.getPersistance().getChildSiteSettingsById(request.getSettingsId());
    // Here we should check, which paypal we should use: default Web-Deva`s or own. Tolik
    final PayPal payPal =
        (PayPal) new PaymentSettingsOwnerManager(childSiteSettings).getAppropriatePaymentSystem();

    final String networkName = childSiteSettings.getChildSiteRegistration().getName();
    final String applicationUrl =
        "http://" + ServiceLocator.getConfigStorage().get().getApplicationUrl();
    final String token =
        payPal.setCustomerBillingAgreement(
            applicationUrl + "/account/createProfile.action?requestId=" + requestId,
            request.getRedirectToUrl()
                + (request.getRedirectToUrl().contains("?") ? "&" : "?")
                + "pageBreaksToPass="******"&filledFormToUpdateId="
                + request.getFilledFormToUpdateId(),
            (networkName + " fee for child site"),
            paymentReason,
            null,
            request.getOwnerId(),
            request.getChildSiteUserId());

    return (payPal.getPaypalLink() + token);
  }