Exemplo n.º 1
0
        public void GetByUnitName_ReturnsGeneralSettings()
        {
            string userSettingJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"UserSettings.json");
            var    userSettings    = JsonConvert.DeserializeObject <List <UserSetting> >(userSettingJson).Where(u => u.User.Id == TESTING_USER_ID);

            string testingUnitName = Setting.UnitOptions.General.ToString();

            UserSettingRepository.Setup(s => s.GetAll()).Returns(userSettings);

            UserSettingRepository
            .Setup(s => s.GetByUnitName(Setting.UnitOptions.General.ToString()))
            .Returns(userSettings.Where(s => s.Setting.UnitName == Setting.UnitOptions.General.ToString()));

            UserSettingRepository
            .Setup(s => s.GetByUnitName(Setting.UnitOptions.Notifications.ToString()))
            .Returns(userSettings.Where(s => s.Setting.UnitName == Setting.UnitOptions.Notifications.ToString()));


            var resultUserSettings = UserSettingService.GetByUnitName(testingUnitName);


            Assert.NotNull(resultUserSettings);
            Assert.Equal(
                userSettings.Count(s => s.Setting.UnitName == Setting.UnitOptions.General.ToString()),
                resultUserSettings.Count()
                );
        }
Exemplo n.º 2
0
        public async Task Update_ReturnsUpdatedSettings()
        {
            string settingsJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Settings.json");
            var    settings     = JsonConvert.DeserializeObject <List <Setting> >(settingsJson);

            string userSettingsJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"UserSettings.json");
            var    userSetting      = JsonConvert.DeserializeObject <List <UserSetting> >(userSettingsJson).First(s => s.User.Id == TESTING_USER_ID);

            string settingName  = Setting.SettingOptions.ShowBalance.ToString();
            string settingValue = false.ToString().ToLower();

            var newUserSetting = new UserSetting
            {
                Id    = userSetting.Id,
                Name  = userSetting.Name,
                Value = settingValue
            };

            UserSettingRepository.Setup(s => s.GetByName(newUserSetting.Name)).Returns(userSetting);

            UserSettingRepository.Setup(s => s.Update(userSetting)).ReturnsAsync(userSetting);

            SettingRepository.Setup(s => s.GetByKey(settingName)).Returns(settings.First(c => c.Name == settingName));


            var resultUserSetting = await UserSettingService.Update(newUserSetting);


            Assert.NotNull(resultUserSetting);
            Assert.NotNull(resultUserSetting.User);
            Assert.NotNull(resultUserSetting.Setting);
            Assert.Equal(TESTING_USER_ID, resultUserSetting.User.Id);
            Assert.Equal(settingName, resultUserSetting.Setting.Name);
            Assert.Equal(settingValue, resultUserSetting.Value);
        }
 public UnitOfWork(PanacheSoftwareServiceFoundationContext context, IUserProvider userProvider) : base(context, userProvider)
 {
     LanguageHeaders = new LanguageHeaderRepository(context);
     LanguageCodes   = new LanguageCodeRepository(context);
     LanguageItems   = new LanguageItemRepository(context);
     SettingHeaders  = new SettingHeaderRepository(context);
     UserSettings    = new UserSettingRepository(context);
     TenantSettings  = new TenantSettingRepository(context, userProvider);
 }
Exemplo n.º 4
0
        public async Task Delete_ReturnsDeletedSetting()
        {
            string userSettingsJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"UserSettings.json");
            var    userSetting      = JsonConvert.DeserializeObject <List <UserSetting> >(userSettingsJson).First(s => s.User.Id == TESTING_USER_ID);

            UserSettingRepository.Setup(s => s.GetByKey(userSetting.Id)).Returns(userSetting);

            UserSettingRepository.Setup(s => s.Delete(userSetting.Id)).ReturnsAsync(userSetting);


            var resultUserSetting = await UserSettingService.Delete(userSetting.Id);


            Assert.NotNull(resultUserSetting);
            Assert.Equal(userSetting.Name, resultUserSetting.Name);
            Assert.Equal(userSetting.Value, resultUserSetting.Value);
        }
Exemplo n.º 5
0
        public JsonResult FinishedProcess(string id)
        {
            bool result = false;

            if (this.CheckToken(id))
            {
                UserSettingRepository setting = new UserSettingRepository(SessionCustom);
                setting.Entity.KeyWord = "send-finished-process";
                List <UserSetting> userSettings = setting.GetAll().Where(us => us.Value.Equals("true")).ToList();

                int total = 0;
                ContentRepository content = new ContentRepository(SessionCustom);
                content.Pulses(0, 0, out total, null, CurrentLanguage.LanguageId);
                List <Pulse> pulses       = content.Pulses(0, total, out total, null, CurrentLanguage.LanguageId);
                List <Pulse> pulsesFilter = null;

                DateTime nowDate = DateTime.Now.Date;
                pulsesFilter = pulses.Where(p => p.EndDate.HasValue && (p.EndDate.Value.Date - nowDate).TotalDays == 0).ToList();

                if (userSettings.Count > 0)
                {
                    foreach (UserSetting userSetting in userSettings)
                    {
                        foreach (Pulse pulse in pulsesFilter)
                        {
                            Business.Utilities.Notification.NewNotification(userSetting.UserId.Value, Domain.Entities.Basic.EmailNotificationType.FINISHED_PROCESS, null, null, string.Concat("/", pulse.Friendlyurlid), pulse.ContentId, pulse.ContentId.Value, null, null, null, this.SessionCustom, this.HttpContext, this.CurrentLanguage);
                        }
                    }
                }

                foreach (Pulse pulse in pulsesFilter)
                {
                    Business.Utilities.Notification.StartFinishedProcess(string.Concat("/", pulse.Friendlyurlid), pulse.ContentId.Value, this.HttpContext, this.CurrentLanguage);
                }

                result = true;
            }

            return(this.Json(new { result = result }, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 6
0
        public JsonResult FinishingProcess(string id)
        {
            bool result = false;

            if (this.CheckToken(id))
            {
                UserSettingRepository setting = new UserSettingRepository(SessionCustom);
                setting.Entity.KeyWord = "send-finishing-process";
                List <UserSetting> userSettings = setting.GetAll().Where(us => us.Value.Equals("true")).ToList();

                setting.Entity.KeyWord = "value-finishing-process";
                List <UserSetting> userSettingsValue = setting.GetAll();

                DateTime nowDate = DateTime.Now.Date;

                ContentRepository content = new ContentRepository(SessionCustom);
                int total = 0;
                content.Pulses(0, 0, out total, null, CurrentLanguage.LanguageId);
                List <Pulse> pulses       = content.Pulses(0, total, out total, null, CurrentLanguage.LanguageId);
                List <Pulse> pulsesFilter = null;

                if (userSettings.Count > 0)
                {
                    UserSetting userSettingValue = null;
                    int         days             = 0;
                    foreach (UserSetting userSetting in userSettings)
                    {
                        userSettingValue = userSettingsValue.Where(usv => usv.UserId == userSetting.UserId).FirstOrDefault();
                        if (userSettingValue != null)
                        {
                            if (int.TryParse(userSettingValue.Value, out days))
                            {
                                pulsesFilter = pulses.Where(p => p.EndDate.HasValue && (p.EndDate.Value.Date - nowDate).TotalDays == days).ToList();
                                foreach (Pulse pulse in pulsesFilter)
                                {
                                    Business.Utilities.Notification.NewNotification(userSettingValue.UserId.Value, Domain.Entities.Basic.EmailNotificationType.FINISHING_PROCESS, null, null, string.Concat("/", pulse.Friendlyurlid), pulse.ContentId, pulse.ContentId.Value, null, null, null, this.SessionCustom, this.HttpContext, this.CurrentLanguage);
                                }
                            }
                        }
                    }
                }

                int finishingId = (int)Domain.Entities.Basic.SystemNotificationType.FINISHING_PROCESS;

                SystemNotificationTemplateRepository system = new SystemNotificationTemplateRepository(SessionCustom);
                system.Entity.ContentId = finishingId;
                system.LoadByKey();
                if (system.Entity.SendValue.HasValue && system.Entity.SendValue.Value > 0)
                {
                    pulsesFilter = pulses.Where(p => p.EndDate.HasValue && (p.EndDate.Value.Date - nowDate).TotalDays == system.Entity.SendValue.Value).ToList();
                    foreach (Pulse pulse in pulsesFilter)
                    {
                        Business.Utilities.Notification.StartFinishingProcess(string.Concat("/", pulse.Friendlyurlid), pulse.ContentId.Value, this.HttpContext, this.CurrentLanguage);
                    }
                }

                result = true;
            }

            return(this.Json(new { result = result }, JsonRequestBehavior.AllowGet));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Creates a new email or system notification
        /// </summary>
        /// <param name="targetUserId">target user id</param>
        /// <param name="emailType">email notification type</param>
        /// <param name="systemType">system notification type</param>
        /// <param name="actionUserId">action user id</param>
        /// <param name="url">target URL</param>
        /// <param name="processId">process id</param>
        /// <param name="elementId">element id</param>
        /// <param name="reason">text reason</param>
        /// <param name="rank">user rank</param>
        /// <param name="previousRank">user previous rank</param>
        /// <param name="session">SQL session</param>
        /// <param name="context">HTTP context</param>
        /// <param name="language">current language object</param>
        /// <returns>true if the notification was created false if not</returns>
        public static bool NewNotification(
            int targetUserId,
            Domain.Entities.Basic.EmailNotificationType?emailType,
            Domain.Entities.Basic.SystemNotificationType?systemType,
            int?actionUserId,
            string url,
            int?processId,
            int elementId,
            string reason,
            string rank,
            string previousRank,
            ISession session,
            HttpContextBase context,
            Domain.Entities.Language language)
        {
            //// i.   [yo/], nombre del usuario que recibe la notificación.
            //// ii.  [usuario/], nombre del usuario que realiza la acción.
            //// iii. [url]html[/url], vincula la selección al contenido de la notificación.
            //// iv.  [tipo/], muestra el tipo del proceso (reto o pregunta).
            //// v.   [proceso/], muestra el nombre del reto o pregunta.
            //// vi.  [n/], muestra el valor numérico configurado.
            //// vii. [rango/], muestra el rango del usuario.
            //// viii.[rango-anterior/], muestra el rango anterior del usuario

            string         targetName = null, targetEmail = null, actionName = null, processType = null, processName = null, subject = null, senderName = null;
            int            userlanguage   = 0;
            UserRepository userRepository = new UserRepository(session);

            userRepository.Entity.UserId = targetUserId;
            userRepository.LoadByKey();
            userlanguage = userRepository.Entity.LanguageId.Value;
            targetName   = userRepository.Entity.Names;
            targetEmail  = userRepository.Entity.Email;
            bool targetActive = userRepository.Entity.Active.Value;
            bool result       = false;

            if (targetActive)
            {
                if (actionUserId.HasValue)
                {
                    userRepository.Entity.UserId = actionUserId;
                    userRepository.LoadByKey();
                    actionName = userRepository.Entity.Names;
                }
                else
                {
                    actionName = "Ciudadano";
                }

                if (processId.HasValue)
                {
                    FrontEndManagement objman = new FrontEndManagement(session, context, FrontEndManagement.Type.Content, language);
                    objman.BindInfo(processId.Value, targetUserId);

                    processName = objman.Content.Name;
                    if (objman.Detail is Business.FrontEnd.Question)
                    {
                        Business.FrontEnd.Question detail = (Business.FrontEnd.Question)objman.Detail;
                        switch (detail.ObjQuestion.Type)
                        {
                        case Domain.Entities.Question.TypeQuestion.Abierta:
                            processType = "Pregunta Abierta";
                            break;

                        case Domain.Entities.Question.TypeQuestion.Seleccion_Multiple:
                            processType = "Seleccion Multiple";
                            break;

                        case Domain.Entities.Question.TypeQuestion.Ubicacion:
                            processType = "Ubicacion";
                            break;
                        }
                    }
                    else if (objman.Detail is Business.FrontEnd.Challenge)
                    {
                        Business.FrontEnd.Challenge detail = (Business.FrontEnd.Challenge)objman.Detail;
                        switch (detail.ObjChallenge.Type)
                        {
                        case Domain.Entities.Challenge.TypeChallenge.Participacion_Ciudadana:
                            processType = "Participacion ciudadana";
                            break;

                        case Domain.Entities.Challenge.TypeChallenge.Reto_Ciudad:
                            processType = "Reto ciudad";
                            break;
                        }
                    }
                }

                StringBuilder builder = new StringBuilder();
                if (systemType.HasValue)
                {
                    SystemNotificationTemplateRepository notificationRepository = new SystemNotificationTemplateRepository(session);
                    notificationRepository.Entity.ContentId = (int)systemType;
                    notificationRepository.LoadByKey();

                    if (userlanguage == (int)Domain.Entities.Enums.LanguageEnum.Spanish)
                    {
                        builder.Append(notificationRepository.Entity.Description);
                    }
                    else
                    {
                        builder.Append(notificationRepository.Entity.DescriptionIngles);
                    }
                }
                else if (emailType.HasValue)
                {
                    EmailNotificationTemplateRepository notificationRepository = new EmailNotificationTemplateRepository(session);
                    notificationRepository.Entity.ContentId = (int)emailType;
                    notificationRepository.LoadByKey();
                    senderName = notificationRepository.Entity.SenderName;

                    if (userlanguage == (int)Domain.Entities.Enums.LanguageEnum.Spanish)
                    {
                        builder.Append(notificationRepository.Entity.Description);
                    }
                    else
                    {
                        builder.Append(notificationRepository.Entity.DescriptionIngles);
                    }

                    ContentRepository contentRepository = new ContentRepository(session);
                    contentRepository.Entity.ContentId = (int)emailType;
                    contentRepository.LoadByKey();

                    if (userlanguage == (int)Domain.Entities.Enums.LanguageEnum.Spanish)
                    {
                        subject = contentRepository.Entity.Shortdescription;
                    }
                    else
                    {
                        subject = contentRepository.Entity.ShortdescriptionIngles;
                    }
                }

                builder.Replace("[yo/]", targetName)
                .Replace("[usuario/]", actionName)
                .Replace("[tipo/]", processType)
                .Replace("[proceso/]", processName)
                .Replace("[url]", string.Concat("<a href='", url, "'>"))
                .Replace("[/url]", string.Concat("</a>"))
                .Replace("[url/]", string.Concat("<a href='", url, "'>", url, "</a>"))
                .Replace("[razon/]", reason)
                .Replace("[rango/]", rank)
                .Replace("[rango-anterior/]", previousRank);
                ////.Replace("[n/]", number) biene desde base de datos solo para unos pocos de email

                if (systemType.HasValue)
                {
                    result = SaveSystemNotification(actionUserId, targetUserId, builder.ToString(), url, (int)systemType, elementId, session);
                }
                else if (emailType.HasValue)
                {
                    bool   send     = false;
                    bool   token    = false;
                    string keyWord  = string.Empty;
                    string keyValue = string.Empty;
                    switch (emailType)
                    {
                    case Domain.Entities.Basic.EmailNotificationType.RECEIVE_N_IDEA_LIKE:
                        keyWord  = "send-receive-n-idea-like";
                        keyValue = "value-receive-n-idea-like";
                        token    = true;
                        break;

                    case Domain.Entities.Basic.EmailNotificationType.NEW_PROCESS:
                        keyWord = "send-new-process";
                        token   = true;
                        break;

                    case Domain.Entities.Basic.EmailNotificationType.FINISHING_PROCESS:
                        keyWord  = "send-finishing-process";
                        keyValue = "value-finishing-process";
                        token    = true;
                        break;

                    case Domain.Entities.Basic.EmailNotificationType.FINISHED_PROCESS:
                        keyWord = "send-finished-process";
                        token   = true;
                        break;

                    case Domain.Entities.Basic.EmailNotificationType.IDEA_BLOCKED:
                        keyWord = "send-idea-blocked";
                        token   = true;
                        break;

                    case Domain.Entities.Basic.EmailNotificationType.USER_LEAVE_ADMIN:
                    case Domain.Entities.Basic.EmailNotificationType.USER_LEAVE_USER:
                    case Domain.Entities.Basic.EmailNotificationType.ADMIN_KICKOUT_ADMIN:
                    case Domain.Entities.Basic.EmailNotificationType.ADMIN_KICKOUT_USER:
                    case Domain.Entities.Basic.EmailNotificationType.PROMOTION:
                    case Domain.Entities.Basic.EmailNotificationType.POSTULATESTORY:
                    case Domain.Entities.Basic.EmailNotificationType.PUBLICATEDESTORY:
                    case Domain.Entities.Basic.EmailNotificationType.REJECTEDSTORY:
                        send = true;
                        break;
                    }

                    if (!send)
                    {
                        UserSettingRepository setting = new UserSettingRepository(session);
                        setting.Entity.UserId  = targetUserId;
                        setting.Entity.KeyWord = keyWord;
                        setting.Load();
                        send = Convert.ToBoolean(setting.Entity.Value);

                        if (send && !string.IsNullOrEmpty(keyValue) && !string.IsNullOrEmpty(targetEmail))
                        {
                            send                   = false;
                            setting.Entity         = new Domain.Entities.UserSetting();
                            setting.Entity.UserId  = targetUserId;
                            setting.Entity.KeyWord = keyValue;
                            setting.Load();

                            int value = 0;
                            if (int.TryParse(setting.Entity.Value, out value) && value != 0)
                            {
                                if (emailType == Domain.Entities.Basic.EmailNotificationType.RECEIVE_N_IDEA_LIKE)
                                {
                                    IdeaRepository idea = new IdeaRepository(session);
                                    idea.Entity.IdeaId = elementId;
                                    idea.LoadByKey();
                                    if (value == idea.Entity.Likes)
                                    {
                                        builder.Replace("[n/]", value.ToString());
                                        send = true;
                                    }
                                }
                                else if (emailType == Domain.Entities.Basic.EmailNotificationType.FINISHING_PROCESS || emailType == Domain.Entities.Basic.EmailNotificationType.FINISHED_PROCESS)
                                {
                                    // ya biene validado desde el automatic
                                    builder.Replace("[n/]", value.ToString());
                                    send = true;
                                }
                            }
                        }
                    }

                    if (send && !string.IsNullOrEmpty(targetEmail))
                    {
                        string key = string.Empty;
                        if (token)
                        {
                            key = GetNotificationToken(targetUserId, emailType.Value, session);
                        }

                        result = SendEmailNotification(builder.ToString(), subject, senderName, targetUserId, targetEmail, url, key, session);
                    }
                }
            }

            return(result);
        }
Exemplo n.º 8
0
        public MySettingsController()
        {
            Get("/api/v1/me/setting/get", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "key" }),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var settingKey = GetRequestStr("key");

                if (!AllowedValues.GetAllowed().ContainsKey(settingKey))
                {
                    new HttpError(HttpStatusCode.UnprocessableEntity, "This setting key is not allowed");
                }

                var me      = UserRepository.Find(CurrentRequest.UserId);
                var setting = UserSetting.Find(me, settingKey);

                setting ??= UserSettingRepository.SetSetting(me, settingKey, "");

                return(HttpResponse.Item("setting", new UserSettingTransformer().Transform(setting)));
            });

            Get("/api/v1/me/settings/get", _ => {
                var me = UserRepository.Find(CurrentRequest.UserId);

                var settings = UserSettingRepository.Get(me);

                return(HttpResponse.Item("settings", new UserSettingTransformer().Many(settings)));
            });

            Patch("/api/v1/me/setting/set", _ => {
                var errors = ValidationProcessor.Process(Request, new IValidatorRule[] {
                    new ShouldHaveParameters(new[] { "key", "value" }),
                }, true);
                if (errors.Count > 0)
                {
                    return(HttpResponse.Errors(errors));
                }

                var settingKey = GetRequestStr("key");

                if (!AllowedValues.GetAllowed().ContainsKey(settingKey))
                {
                    return(HttpResponse.Error(
                               new HttpError(HttpStatusCode.UnprocessableEntity, "This setting key is not allowed")
                               ));
                }

                var settingValue = GetRequestStr("value");

                if (
                    AllowedValues.GetAllowed()[settingKey] != null &&
                    !AllowedValues.GetAllowed()[settingKey].Contains(settingValue)
                    )
                {
                    return(HttpResponse.Error(new HttpError(HttpStatusCode.Forbidden,
                                                            "This setting value is not allowed")));
                }

                var me = UserRepository.Find(CurrentRequest.UserId);

                var setting = UserSettingRepository.SetSetting(
                    me, settingKey, GetRequestStr("value")
                    );

                return(HttpResponse.Item("setting", new UserSettingTransformer().Transform(setting)));
            });
        }
Exemplo n.º 9
0
        public async Task Update_ReturnsUpdatedAndCreatedSettings()
        {
            string settingsJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Settings.json");
            var    settings     = JsonConvert.DeserializeObject <List <Setting> >(settingsJson);

            string usersJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"Users.json");
            var    user      = JsonConvert.DeserializeObject <List <User> >(usersJson).First(s => s.Id == TESTING_USER_ID);

            string userSettingsJson = File.ReadAllText(TestConfiguration.MockDataFolderPath + @"UserSettings.json");
            var    userSetting      = JsonConvert.DeserializeObject <List <UserSetting> >(userSettingsJson).First(s => s.User.Id == TESTING_USER_ID);

            string settingName     = Setting.SettingOptions.TurnNotificationsSoundOn.ToString();
            string settingUnitName = Setting.UnitOptions.Notifications.ToString();
            string settingValue    = true.ToString().ToLower();

            var updatingUserSetting = new UserSetting
            {
                Id    = userSetting.Id,
                Name  = userSetting.Name,
                Value = settingValue,
                User  = userSetting.User
            };

            var newUserSetting = new UserSetting
            {
                Name  = settingName,
                Value = settingValue
            };

            UserRepository.Setup(u => u.GetByKey(TESTING_USER_ID)).Returns(user);

            UserSettingRepository.Setup(s => s.GetByName(newUserSetting.Name)).Returns((UserSetting)null);

            UserSettingRepository.Setup(s => s.GetByName(updatingUserSetting.Name)).Returns(userSetting);

            UserSettingRepository
            .Setup(s => s.Create(new List <UserSetting> {
                newUserSetting
            }))
            .ReturnsAsync(new List <UserSetting> {
                newUserSetting
            });

            UserSettingRepository
            .Setup(s => s.Update(new List <UserSetting> {
                updatingUserSetting
            }))
            .ReturnsAsync(new List <UserSetting> {
                updatingUserSetting
            });

            SettingRepository.Setup(s => s.GetByKey(settingName)).Returns(settings.First(c => c.Name == settingName));


            var resultUserSettings = await UserSettingService.Update(new List <UserSetting>
            {
                newUserSetting,
                updatingUserSetting
            });


            Assert.NotNull(resultUserSettings);
            // I can't assert this because inside service it creates a new list so I can't mock repository methods results
            //Assert.Equal(2, resultUserSettings.Count());
            Assert.NotNull(newUserSetting.User);
            Assert.NotNull(newUserSetting.Setting);
            Assert.Equal(TESTING_USER_ID, newUserSetting.User.Id);
            Assert.Equal(settingName, newUserSetting.Setting.Name);
            Assert.Equal(settingUnitName, newUserSetting.Setting.UnitName);
            Assert.Equal(settingValue, newUserSetting.Value);
            Assert.NotNull(userSetting.User);
            Assert.NotNull(userSetting.Setting);
            Assert.Equal(TESTING_USER_ID, userSetting.User.Id);
            Assert.Equal(updatingUserSetting.Value, userSetting.Value);
        }