예제 #1
0
        public static Notification Notify(NotificationDto notificationDto, string sendingApplicationName)
        {
            var dataContext = new FoghornEntities();

            var sendingApplication =
                dataContext.SendingApplications.FirstOrDefault(x => x.SendingApplicationName == sendingApplicationName);

            if (sendingApplication == null)
            {
                var exception =
                    new ArgumentException("sendingApplicationName must match a previously registered SendingApplication",
                                          "sendingApplicationName");
                Logger.ErrorException(FailureMessage, exception);
                throw exception;
            }

            if (notificationDto == null)
            {
                var exception = new ArgumentException("notification must not be null", "notificationDto");
                Logger.ErrorException(FailureMessage, exception);
                throw exception;
            }

            if (notificationDto.Priority > 2) notificationDto.Priority = 2;
            if (notificationDto.Priority < -2) notificationDto.Priority = -2;

            var growlNotification = new Growl.Connector.Notification(sendingApplication.SendingApplicationName,
                                                                     notificationDto.NotificationTypeName,
                                                                     notificationDto.NotificationId.ToString(
                                                                         CultureInfo.InvariantCulture),
                                                                     notificationDto.NotificationTitle,
                                                                     notificationDto.NotificationMessage)
                {
                    Sticky = notificationDto.Sticky,
                    Priority = (Priority) notificationDto.Priority
                };

            var notification = notificationDto.ToEntity();
            foreach (var subscriber in sendingApplication.Subscribers)
            {
                var port = subscriber.Port.HasValue ? subscriber.Port.Value : Settings.Default.GrowlDefaultPort;
                var growlConnector = new GrowlConnector(subscriber.Password, subscriber.HostName, port);
                growlConnector.Notify(growlNotification);
                subscriber.NotificationsSent.Add(notification);
            }

            notification.SentDateTime = DateTime.UtcNow;
            notification.NotificationType =
                dataContext.NotificationTypes.FirstOrDefault(
                    x => x.NotificationTypeName == notificationDto.NotificationTypeName);
            dataContext.Notifications.Add(notification);
            dataContext.SaveChanges();
            return notification;
        }
예제 #2
0
 public void TestNotify_SetUpConfigurationAndCallNotify_NotificationSentAndLogged()
 {
     TestRegisterSubscription_ApplicationExists_SubscriberRegistered();
     var service = new FoghornService();
     var notificationDto = new NotificationDto
         {
             NotificationMessage = "This is the message of the test notification.",
             NotificationTypeName = NotificationName + "1",
             NotificationTitle = "Notification Title",
             Sticky = true,
             Priority = 2
         };
     var notificationDtoReturned = service.Notify(notificationDto, ApplicationTestName);
     var notificationId = notificationDtoReturned.NotificationId;
     var dataContext = new FoghornEntities();
     var checkNotification = dataContext.Notifications.FirstOrDefault(x => x.NotificationId == notificationId);
     Assert.NotNull(checkNotification);
 }
예제 #3
0
        public void TestRegisterSendingApplication_3NotificationTypes_ApplicationAndNotificationsInDatabase()
        {
            var dataContext = new FoghornEntities();

            DeleteTestApplications(dataContext);
            var service = new FoghornService();
            RegisterTestApplication(service);

            Assert.True(_testApplicationId > 0);

            var application =
                dataContext.SendingApplications.FirstOrDefault(x => x.SendingApplicationName == ApplicationTestName);
            Assert.NotNull(application);
            Assert.Equal(NumNotificationTypes, application.NotificationTypes.Count);
            Assert.True(application.NotificationTypes.First().NotificationTypeName.StartsWith(NotificationName));
            Assert.Equal(_testApplicationId, application.SendingApplicationId);
        }
예제 #4
0
 private void DeleteTestApplications(FoghornEntities dataContext)
 {
     var testApplications =
         dataContext.SendingApplications.Where(x => x.SendingApplicationName.StartsWith(ApplicationTestName));
     foreach (var sendingApplication in testApplications)
     {
         var subscribersToRemove = sendingApplication.Subscribers;
         foreach (var subscriber in subscribersToRemove)
         {
             var notifications = subscriber.NotificationsSent.ToList();
             foreach (var notification in notifications)
             {
                 dataContext.Notifications.Remove(notification);
             }
         }
         dataContext.SendingApplications.Remove(sendingApplication);
     }
     dataContext.SaveChanges();
     _testApplicationId = 0;
 }
예제 #5
0
 public void TestRegisterSubscription_ApplicationExists_SubscriberRegistered()
 {
     var service = new FoghornService();
     if (_testApplicationId <= 0)
     {
         RegisterTestApplication(service);
     }
     var subscriberDto = new SubscriberDto
         {
             HostName = "localhost",
             Password = "******",
             SubscriberName = ApplicationTestName + "TestSubscriber",
         };
     var subscriberId = service.RegisterSubscription(subscriberDto, ApplicationTestName);
     var dataContext = new FoghornEntities();
     var subscriber = dataContext.Subscribers.FirstOrDefault(x => x.SubscriberId == subscriberId);
     Assert.NotNull(subscriber);
 }