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() ); }
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); }
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); }
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)); }
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)); }
/// <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); }
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))); }); }
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); }