/// <summary>
        /// Imports the data sets and returns a map of old ids to new ids.
        /// </summary>
        /// <param name="sessionData">The session data.</param>
        /// <param name="migrationData">Contains the data sets to import.</param>
        /// <param name="validationResults">A list of validation results.</param>
        /// <param name="migrationResults">A list to which import results will be appended.</param>
        /// <returns>A map of data set ids, where the old id is the key and the new id is the value.</returns>
        private Dictionary<string, string> ImportDataSets(SessionData sessionData, MigrationData migrationData, MigrationDataResults validationResults, MigrationDataResults migrationResults)
        {
            Dictionary<string, string> map = new Dictionary<string, string>();
            GenericDataSetList dataSetList = this.manager.GetDataSetList(sessionData.UserId, false);
            foreach (GenericDataSet dataSet in migrationData.DataSets)
            {
                var dataSetId = dataSet.Id;
                if (!validationResults.GetNotificationsFor(dataSet).CanImport)
                {
                    migrationResults.AddNotification(dataSet, MessageType.Information, string.Format(Messages.Import_DataSetSkipped, dataSet.Name));
                    continue;
                }

                // Match on dataset name and overwrite if one exists
                var match = dataSetList.FirstOrDefault(ds => ds.Name == dataSet.Name);
                if (match != null)
                {
                    dataSet.Id = match.Id;
                }

                GenericDataSet savedDataSet = this.manager.SaveDataSet(dataSet, sessionData.UserId);
                migrationResults.AddNotification(savedDataSet, MessageType.Information, string.Format(Messages.Import_DataSetSuccess, savedDataSet.Name));
                map.Add(dataSetId, savedDataSet.Id);
            }

            return map;
        }
            public void NoAccess()
            {
                SessionData sessionData = new SessionData { UserId = "NOACCESS" };
                const string formId = "4";

                this.ApplicationManager.CreateApplicationSecure(sessionData, formId, false);
            }
 public void TestInitialize()
 {
     this.Crypto = new RijndaelSymmetricCrypto("password", "rgb init vector.", 8, 8, 256, "verysalty", 3);
     this.sessionData = new SessionData { IpAddress = "127.0.0.1", SessionId = "1", UserAgent = "Google Chrome", UserId = "Batman" };
     this.ipReader = this.CreateMockIpReader(this.sessionData.IpAddress, new List<string>());
     this.userReader = this.CreateMockUserReader(this.sessionData.UserId);
 }
 public void GetRolesWithFormEntitlement()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "Administrator"
                               };
     this.Manager.GetRoleList(sessionData.UserId);
 }
 public void GetRolesNoFormEntitlement()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "SomeUser"
                               };
     this.Manager.GetRoleList(sessionData.UserId);
 }
 public void GetRoleWithFormEntitlement()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "Administrator"
                               };
     this.Manager.GetRole(sessionData.UserId, "existing-user");
 }
 public void GetRoleNoFormEntitlement()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "SomeUser"
                               };
     this.Manager.GetRole(sessionData.UserId, "existing-user");
 }
            public void Valid()
            {
                SessionData sessionData = new SessionData();
                const string formId = "5";

                RetrieveApplicationResponse response = this.ApplicationManager.CreateApplicationSecure(sessionData, formId, false);
                Assert.IsNotNull(response.Application);
            }
        /// <summary>
        /// Gets an attachment with matching <paramref name="fileIdentifier"/>.
        /// </summary>
        /// <param name="sessionData">The <see cref="SessionData"/> containing the application id.</param>
        /// <param name="applicationId">The application id.</param>
        /// <param name="controlName">The name of the attachment control.</param>
        /// <param name="fileIdentifier">The file identifier.</param>
        /// <returns>The attachment as a byte array.</returns>
        public QueryResult<byte[]> GetAttachment(SessionData sessionData, string applicationId, string controlName, string fileIdentifier)
        {
            if (this.CanAccessControl(sessionData, applicationId, controlName, AccessLevel.Read))
            {
                return this.attachmentAccess.GetAttachment(applicationId, controlName, fileIdentifier);
            }

            return null;
        }
 /// <summary>
 /// Creates a session data object.
 /// </summary>
 /// <param name="session">The authenticated session object.</param>
 /// <param name="context">The HTTP context.</param>
 /// <returns>
 /// A session data object.
 /// </returns>
 public static SessionData CreateSessionDataObject(this SecureSession session, HttpContext context)
 {
     SessionData sessionData = new SessionData
     {
         DeserializationSource = session.Token,
         UserId = session.AuthenticatedUser.Id,
         IpAddress = context.Request.UserHostAddress,
         UserAgent = context.Request.UserAgent
     };
     return sessionData;
 }
            public void ExistingApplicationNoAccess()
            {
                SessionData sessionData = new SessionData
                                          {
                    UserId = "NOACCESS"
                };

                using (new MemoryStream())
                {
                    this.AttachmentManager.GetAttachmentList(sessionData, "1", "file_upload");
                }
            }
        /// <summary>
        /// Perform an import.
        /// </summary>
        /// <param name="sessionData">The session data.</param>
        /// <param name="migrationData">The data to import.</param>
        /// <param name="validator">A validator for validating data prior to import.</param>
        /// <returns>The import process results.</returns>
        public MigrationDataResults Import(SessionData sessionData, MigrationData migrationData, MigrationDataValidator validator)
        {
            MigrationDataResults validationResults = validator.Validate(migrationData);
            MigrationDataResults migrationResults = new MigrationDataResults();

            OrganisationList allOrganisations = this.manager.GetOrganisationList(sessionData.UserId, true);
            Dictionary<string, string> orgMap = this.ImportOrganisations(sessionData.UserId, allOrganisations, migrationData.Organisations, validationResults, migrationResults);
            RoleList allRoles = this.manager.GetRoleList(sessionData.UserId);
            Dictionary<string, string> systemRoleMap = this.ImportRoles(sessionData.UserId, migrationData.Roles, allRoles, validationResults, migrationResults);
            this.ImportUsers(sessionData, migrationData.Users, allRoles, allOrganisations, systemRoleMap, orgMap, validationResults, migrationResults);
            this.ImportProducts(sessionData, migrationData, systemRoleMap, orgMap, validationResults, migrationResults);
            return migrationResults;
        }
 public void ExportUsers()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "Administrator"
                               };
     List<string> userIdList = new List<string>
                               {
                                   "53ba02dff9d8ee095cea1fdc"
                               };
     MigrationData data = this.Manager.Export(sessionData, new List<string>(), userIdList, false);
     Assert.AreEqual(0, data.Products.Count);
     Assert.AreEqual(1, data.Users.Count);
 }
 public void ExportProducts()
 {
     SessionData sessionData = new SessionData
                               {
                                   UserId = "Administrator"
                               };
     List<string> productIdList = new List<string>
                                  {
                                      "23b2b3a8f5de4380b18433e7",
                                      "53b0fcf6606fdc126c1d89f6"
                                  };
     MigrationData data = this.Manager.Export(sessionData, productIdList, new List<string>(), false);
     Assert.AreEqual(2, data.Products.Count);
     Assert.AreEqual(0, data.Users.Count);
 }
        /// <summary>
        /// Gets a list of file attachment identifiers for an application.
        /// </summary>
        /// <param name="sessionData">The iApply session data.</param>
        /// <param name="applicationId">The application id.</param>
        /// <param name="controlName">The name of the file upload control.</param>
        /// <returns>A list of file attachment identifiers for an application.</returns>
        public QueryResult<List<string>> GetAttachmentList(SessionData sessionData, string applicationId, string controlName)
        {
            if (this.CanAccessControl(sessionData, applicationId, controlName, AccessLevel.Read))
            {
                return this.attachmentAccess.GetAttachmentList(applicationId, controlName);
            }

            return null;
        }
        /// <summary>
        /// Validates the user is entitled to access the application.
        /// </summary>
        /// <param name="sessionData">The <see cref="SessionData"/> containing the application id.</param>
        /// <param name="applicationId">The application id.</param>
        /// <param name="controlName">The name of the attachment control.</param>
        /// <param name="minimumControlAccess">The minimum control access to check for.</param>
        /// <returns><see langword="true"/> if the user can access the application.</returns>
        /// <exception cref="SecurityException">The user is not authorized to access the application/control.</exception>
        private bool CanAccessControl(SessionData sessionData, string applicationId, string controlName, AccessLevel minimumControlAccess)
        {
            if (string.IsNullOrEmpty(applicationId))
            {
                throw new NullReferenceException();
            }

            User user = this.DataAccess.GetUserById(sessionData.UserId);
            if (user != null && user.IsAdministrator())
            {
                return true;
            }

            SecureSession secureSession = new SecureSession(sessionData.DeserializationSource, sessionData.SessionId, user);

            RetrieveApplicationResponse response = this.applicationManager.GetApplicationSecure(sessionData, applicationId);
            ControlList controlList = new ControlList() { response.Product.FormDefinition.Pages.AllControls.FindRecursive(c => c.Name == controlName) };
            ControlAccess controlsAccess = this.entitlementProvider.GetControlsAccess(secureSession, response.Application, controlList, this.DataAccess.GetRoleList(), response.Product.Version).First();

            // Will throw exception if there is an invalid access request.
            if (controlsAccess.AccessLevel < minimumControlAccess)
            {
                throw new SecurityException();
            }

            return true;
        }
            public void Draft()
            {
                SessionData sessionData = new SessionData { UserId = "user-1" };
                const string formId = "4";

                string jsonApplicationData = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.ApplicationData.APP-{0}.json", formId));
                ApplicationData applicationData = JsonConvert.DeserializeObject<ApplicationData>(jsonApplicationData);
                Application application = new Application(null, formId, null, null, applicationData);

                try
                {
                    // Submit as non-draft - should fail.
                    this.ApplicationManager.SubmitApplication(sessionData, application, string.Empty);
                }
                catch (ValidationException e)
                {
                    Assert.AreEqual(2, e.ValidationResults.Count);
                }

                // Submit as draft - should succeed.
                application = this.ApplicationManager.SaveApplication(sessionData, application).Item1;
                Assert.IsFalse(string.IsNullOrEmpty(application.Id));
                Assert.IsTrue(application.Draft);
            }
 /// <summary>
 /// Removes an attachment with matching <paramref name="fileIdentifier"/>.
 /// </summary>
 /// <param name="sessionData">The <see cref="SessionData"/> containing the application id.</param>
 /// <param name="applicationId">The application id.</param>
 /// <param name="controlName">The name of the attachment control.</param>
 /// <param name="fileIdentifier">The file identifier.</param>
 public void RemoveAttachment(SessionData sessionData, string applicationId, string controlName, string fileIdentifier)
 {
     if (this.CanAccessControl(sessionData, applicationId, controlName, AccessLevel.Write))
     {
         this.attachmentAccess.RemoveAttachment(applicationId, controlName, fileIdentifier);
     }
 }
        /// <summary>
        /// Saves a file attachment for an application.
        /// </summary>
        /// <param name="sessionData">The iApply session data.</param>
        /// <param name="applicationId">The application id.</param>
        /// <param name="controlName">The name of the file upload control.</param>
        /// <param name="fileIdentifier">The file identifier.</param>
        /// <param name="fileStream">The file stream.</param>
        /// <returns>A <see cref="DataAccessResult"/>.</returns>
        public DataAccessResult SaveAttachment(SessionData sessionData, string applicationId, string controlName, string fileIdentifier, Stream fileStream)
        {
            if (this.CanAccessControl(sessionData, applicationId, controlName, AccessLevel.Write))
            {
                return this.attachmentAccess.SaveAttachment(applicationId, controlName, fileIdentifier, fileStream);
            }

            return null;
        }
            public void SubmitToStateAsServiceAccount()
            {
                const string orgId = "org-1";
                const string formId = "20";

                var sessionData = new SessionData
                                  {
                                      UserId = "EventHandler"
                                  };

                Application application = new Application(orgId, formId, null);
                application.ApplicationData.SetValue("exit-organisation", "123456", true);
                application.WorkflowState = "New";

                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, "Automatic");
                Assert.AreEqual("Automatic", savedApplication.WorkflowState);
            }
            public void Valid()
            {
                SessionData sessionData = new SessionData();
                const string formId = "5";

                string jsonApplicationData = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.ApplicationData.APP-{0}.json", formId));
                ApplicationData applicationData = JsonConvert.DeserializeObject<ApplicationData>(jsonApplicationData);
                Application application = new Application(null, formId, null, null, applicationData) { WorkflowState = "test" };
                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, application.WorkflowState);
                Assert.IsNotNull(savedApplication);
            }
            public void SaveFormDetailsToNewApplication()
            {
                SessionData sessionData = new SessionData();
                const string formId = "14";

                Product p = this.ApplicationManager.GetProduct(formId);
                Application application = new Application(null, formId, null);
                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, string.Empty);

                Assert.AreEqual(formId, savedApplication.FormId);
                Assert.AreEqual(p.Version, savedApplication.FormVersion);
                Assert.AreEqual(p.LinkApplicationsToVersion, savedApplication.UseFormVersion);
            }
            public void SaveLinkedFormVersionToApplication()
            {
                SessionData sessionData = new SessionData();
                const string formId = "14";

                Application application = new Application(null, formId, null) { FormVersion = 1, UseFormVersion = true };

                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, string.Empty);

                Assert.AreEqual(application.FormVersion, savedApplication.FormVersion);
            }
            public void NoValidateHiddenPages()
            {
                SessionData sessionData = new SessionData { UserId = "NOACCESS" };
                const string formId = "6";

                string jsonApplicationData = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.ApplicationData.APP-{0}.json", formId));
                ApplicationData applicationData = JsonConvert.DeserializeObject<ApplicationData>(jsonApplicationData);
                Application application = new Application(null, formId, null, null, applicationData)
                                          {
                                              WorkflowState = "New"
                                          };
                this.ApplicationManager.SubmitApplication(sessionData, application, string.Empty);
            }
            public void OriginatorNoChangeNull()
            {
                SessionData sessionData = new SessionData();
                const string formId = "5";
                const string applicationId = "existing-app";
                Application application = new Application(null, formId, null, applicationId) { CreatedBy = new AuthenticatedApplicationUser { Id = "user-1" } };
                application.ApplicationData["field_1"] = "value";

                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, sessionData.UserId);

                Assert.AreEqual(application.CreatedBy.Id, savedApplication.CreatedBy.Id);
            }
            public void NewNoAccess()
            {
                SessionData sessionData = new SessionData { UserId = "NOACCESS" };
                const string formId = "4";

                string jsonApplicationData = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.ApplicationData.APP-{0}.json", formId));
                ApplicationData applicationData = JsonConvert.DeserializeObject<ApplicationData>(jsonApplicationData);
                Application application = new Application(null, formId, null, null, applicationData);
                this.ApplicationManager.SubmitApplication(sessionData, application, sessionData.UserId);
            }
            public void Invalid()
            {
                SessionData sessionData = new SessionData();
                const string formId = "6";

                string jsonApplicationData = AssemblyResourceReader.ReadAsString(string.Format("Test_Data.ApplicationData.APP-{0}.json", formId));
                ApplicationData applicationData = JsonConvert.DeserializeObject<ApplicationData>(jsonApplicationData);
                Application application = new Application(null, formId, null, null, applicationData);
                this.ApplicationManager.SubmitApplication(sessionData, application, string.Empty);
            }
            public void CreatedByNotAuthenticated()
            {
                SessionData sessionData = new SessionData();
                const string formId = "5";

                Application application = new Application(null, formId, null);
                application.ApplicationData["field_1"] = "value";
                Application savedApplication = this.ApplicationManager.SubmitApplication(sessionData, application, sessionData.UserId);
                Assert.AreEqual(sessionData.SessionId, savedApplication.CreatedBy.Id);
            }
 public void RefreshesCalculation()
 {
     SessionData sessionData = new SessionData();
     ApplicationData appData = new ApplicationData();
     appData["field1"] = "1";
     appData["field2"] = "1";
     appData["field3"] = "window!";
     Application submittedApp = new Application(appData) { FormId = "8" };
     Application savedApp = this.ApplicationManager.SaveApplication(sessionData, submittedApp).Item1;
     Assert.AreEqual(2, savedApp.ApplicationData.GetValue<int>("field3"));
 }
            public void RefreshesRepeaterCalculation()
            {
                SessionData sessionData = new SessionData();
                ApplicationData appData = new ApplicationData();

                Dictionary<string, object>[] repeater = new Dictionary<string, object>[2];
                appData["repeater1"] = repeater;
                repeater[0] = new Dictionary<string, object>();
                repeater[0]["field1"] = "1";
                repeater[0]["field2"] = "1";
                repeater[0]["field3"] = "window!";

                repeater[1] = new Dictionary<string, object>();
                repeater[1]["field1"] = "2";
                repeater[1]["field2"] = "2";
                repeater[1]["field3"] = "5";

                Application submittedApp = new Application(appData) { FormId = "9" };
                Application savedApp = this.ApplicationManager.SaveApplication(sessionData, submittedApp).Item1;
                Assert.AreEqual(2, savedApp.ApplicationData.GetValue<int>("repeater1[0].field3"));
                Assert.AreEqual(4, savedApp.ApplicationData.GetValue<int>("repeater1[1].field3"));
            }