public void WhenSearchForDeliveryResults_ThenReturnsMatchingResultsInOrder()
            {
                var subscription   = new WebhookSubscription();
                var subscriptionId = store.Add(subscription);

                var datum1  = SystemTime.UtcNow.ToNearestSecond();
                var datum2  = datum1.AddDays(1);
                var result1 = new SubscriptionDeliveryResult
                {
                    Id               = "aresultid1",
                    SubscriptionId   = subscriptionId,
                    AttemptedDateUtc = datum1
                };
                var result2 = new SubscriptionDeliveryResult
                {
                    Id               = "aresultid2",
                    SubscriptionId   = subscriptionId,
                    AttemptedDateUtc = datum2
                };

                store.Add(subscriptionId, result1);
                store.Add(subscriptionId, result2);

                var results = store.Search(subscriptionId, 1);

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Id, Is.EqualTo("aresultid2"));
            }
            public void WhenWrite_ThenPostsEventToSubscribersAndUpdatesResults()
            {
                var config = new SubscriptionRelayConfig();

                subscriptionCache.Setup(sc => sc.GetAll(It.IsAny <string>()))
                .Returns(new List <SubscriptionRelayConfig>
                {
                    config
                });
                var result = new SubscriptionDeliveryResult();

                serviceClient.Setup(sc => sc.Relay(config, It.IsAny <WebhookEvent>()))
                .Returns(result);

                processor.ProcessMessage(new WebhookEvent
                {
                    EventName = "aneventname",
                    Data      = new Dictionary <string, string> {
                        { "akey", "avalue" }
                    }
                });

                subscriptionService.Verify(ss => ss.UpdateResults(It.Is <List <SubscriptionDeliveryResult> >(results =>
                                                                                                             results.Count == 1 &&
                                                                                                             results[0] == result)));
            }
Esempio n. 3
0
 private static void AssertDeliveryResult(SubscriptionDeliveryResult result, HttpStatusCode statusCode, string statusDescription = null)
 {
     Assert.That(result.Id.IsEntityId);
     Assert.That(result.SubscriptionId, Is.EqualTo("asubscriptionid"));
     Assert.That(result.AttemptedDateUtc, Is.EqualTo(DateTime.UtcNow).Within(1).Seconds);
     Assert.That(result.StatusCode, Is.EqualTo(statusCode));
     Assert.That(result.StatusDescription, Is.EqualTo(statusDescription.HasValue() ? statusDescription : "astatusdescription"));
 }
 public void Initialize()
 {
     dto = new SubscriptionDeliveryResult
     {
         Id             = DataFormats.CreateEntityIdentifier(),
         SubscriptionId = DataFormats.CreateEntityIdentifier()
     };
     validator = new SubscriptionDeliveryResultValidator();
 }
        public void Add(string subscriptionId, SubscriptionDeliveryResult result)
        {
            Guard.AgainstNullOrEmpty(() => subscriptionId, subscriptionId);
            Guard.AgainstNull(() => result, result);

            using (var db = dbFactory.Open())
            {
                db.Insert(result);
            }
        }
Esempio n. 6
0
        public void Add(string subscriptionId, SubscriptionDeliveryResult result)
        {
            Guard.AgainstNullOrEmpty(() => subscriptionId, subscriptionId);
            Guard.AgainstNull(() => result, result);

            var subscription = Get(subscriptionId);

            if (subscription != null)
            {
                deliveryResults.TryAdd(result.Id, result);
            }
        }
Esempio n. 7
0
        /// <summary>
        ///     Converts the specified subscription DTO to a <see cref="SubscriptionDeliveryResultEntity" /> entity
        /// </summary>
        public static SubscriptionDeliveryResultEntity ToEntity(this SubscriptionDeliveryResult subscription)
        {
            Guard.AgainstNull(() => subscription, subscription);

            var res = subscription.ConvertTo <SubscriptionDeliveryResultEntity>();

            res.PartitionKey     = string.Empty;
            res.RowKey           = res.Id;
            res.StatusCode       = subscription.StatusCode.ToString();
            res.AttemptedDateUtc = subscription.AttemptedDateUtc.ToSafeAzureDateTime();
            return(res);
        }
Esempio n. 8
0
        public void Add(string subscriptionId, SubscriptionDeliveryResult result)
        {
            Guard.AgainstNullOrEmpty(() => subscriptionId, subscriptionId);
            Guard.AgainstNull(() => result, result);

            var subscription = GetSubscription(subscriptionId);

            if (subscription.Value != null)
            {
                var cacheKey = FormatHistoryCacheKey(subscription.Value.CreatedById, subscription.Value.Event, result.Id);
                CacheClient.Add(cacheKey, result);
            }
        }
            public void WhenSearchForDeliveryResults_ThenReturnsMatchingResults()
            {
                var subscription   = new WebhookSubscription();
                var subscriptionId = store.Add(subscription);
                var result         = new SubscriptionDeliveryResult
                {
                    Id             = "aresultid",
                    SubscriptionId = subscriptionId
                };

                store.Add(subscriptionId, result);

                var results = store.Search(subscriptionId, 1);

                Assert.That(results.Count, Is.EqualTo(1));
                Assert.That(results[0].Id, Is.EqualTo("aresultid"));
            }
            public void WhenAddHistory_ThenAddsHistory()
            {
                var datum = DateTime.UtcNow.ToNearestSecond();

                cacheClient.Setup(cc => cc.Get <object>("akey"))
                .Returns(new WebhookSubscription
                {
                    Id          = "asubscriptionid",
                    Event       = "aneventname",
                    CreatedById = "auserid"
                });
                var result = new SubscriptionDeliveryResult
                {
                    Id = "aresultid",
                    AttemptedDateUtc = datum
                };

                store.Add("asubscriptionid", result);

                cacheClient.Verify(cc => cc.Add(CacheClientSubscriptionStore.FormatHistoryCacheKey("auserid", "aneventname", "aresultid"), It.Is <SubscriptionDeliveryResult>(sub =>
                                                                                                                                                                              (sub.Id == "aresultid") &&
                                                                                                                                                                              (sub.AttemptedDateUtc == datum))));
            }
Esempio n. 11
0
            public void WhenWrite_ThenPostsEventToSubscribersAndUpdatesResults()
            {
                var config = new SubscriptionRelayConfig();

                subscriptionCache.Setup(sc => sc.GetAll(It.IsAny <string>()))
                .Returns(new List <SubscriptionRelayConfig>
                {
                    config
                });
                var data = new Dictionary <string, string> {
                    { "akey", "avalue" }
                };
                var result = new SubscriptionDeliveryResult();

                serviceClient.Setup(sc => sc.Relay(config, "aneventname", data))
                .Returns(result);

                sink.Write("aneventname", data);

                subscriptionService.Verify(ss => ss.UpdateResults(It.Is <List <SubscriptionDeliveryResult> >(results =>
                                                                                                             (results.Count == 1) &&
                                                                                                             (results[0] == result))));
            }
            public void WhenAddDeliveryResult_ThenAddResults()
            {
                var result = new SubscriptionDeliveryResult
                {
                    Id             = "aresultid",
                    SubscriptionId = "asubscriptionid"
                };

                subscriptionStorage.Setup(ss => ss.Find(It.IsAny <TableStorageQuery>()))
                .Returns(new List <WebhookSubscriptionEntity>
                {
                    new WebhookSubscriptionEntity
                    {
                        Id = "asubscriptionid"
                    }
                });

                store.Add("asubscriptionid", result);

                subscriptionStorage.Verify(ss => ss.Find(It.IsAny <TableStorageQuery>()));
                deliveryResultStorage.Verify(drs => drs.Add(It.Is <SubscriptionDeliveryResultEntity>(dre
                                                                                                     => dre.Id == "aresultid" &&
                                                                                                     dre.SubscriptionId == "asubscriptionid")));
            }
Esempio n. 13
0
            public void WhenWrite_ThenPostsEventToSubscribersAndUpdatesResults()
            {
                var config = new SubscriptionRelayConfig();

                subscriptionCache.Setup(sc => sc.GetAll(It.IsAny <string>()))
                .Returns(new List <SubscriptionRelayConfig>
                {
                    config
                });
                var result = new SubscriptionDeliveryResult();
                var whe    = new WebhookEvent
                {
                    EventName = "aneventname"
                };

                serviceClient.Setup(sc => sc.Relay(config, whe))
                .Returns(result);

                sink.Write(whe);

                subscriptionService.Verify(ss => ss.UpdateResults(It.Is <List <SubscriptionDeliveryResult> >(results =>
                                                                                                             results.Count == 1 &&
                                                                                                             results[0] == result)));
            }
        private static bool ExistsInStore(ISubscriptionStore store, List <SubscriptionDeliveryResult> results, SubscriptionDeliveryResult incoming)
        {
            var existing = store.Search(incoming.SubscriptionId, results.Count).Safe();

            return(existing.Any(exist => exist.Id.EqualsIgnoreCase(incoming.Id)));
        }
 public void Add(string subscriptionId, SubscriptionDeliveryResult result)
 {
     throw new NotImplementedException();
 }
            public void WhenUpdateSubscriptionHistoryWithRepeats_ThenReturnsSubscriptionHistory()
            {
                appHost.LoginUser(client, "asubscriber", WebhookFeature.DefaultSubscriberRoles);
                var subscription = client.Post(new CreateSubscription
                {
                    Name   = "aname",
                    Events = new List <string> {
                        "anevent1"
                    },
                    Config = new SubscriptionConfig
                    {
                        Url = "http://localhost:3333"
                    }
                }).Subscriptions
                                   .First();

                var datum1  = SystemTime.UtcNow.ToNearestSecond();
                var datum2  = datum1.AddDays(1);
                var datum3  = datum1.AddDays(2);
                var result1 = new SubscriptionDeliveryResult
                {
                    Id               = DataFormats.CreateEntityIdentifier(),
                    SubscriptionId   = subscription.Id,
                    AttemptedDateUtc = datum1
                };
                var result2 = new SubscriptionDeliveryResult
                {
                    Id               = DataFormats.CreateEntityIdentifier(),
                    SubscriptionId   = subscription.Id,
                    AttemptedDateUtc = datum2
                };

                appHost.LoginUser(client, "arelay", WebhookFeature.DefaultRelayRoles);
                client.Put(new UpdateSubscriptionHistory
                {
                    Results = new List <SubscriptionDeliveryResult>
                    {
                        result1,
                        result2
                    }
                });
                client.Put(new UpdateSubscriptionHistory
                {
                    Results = new List <SubscriptionDeliveryResult>
                    {
                        result1,
                        result2,
                        new SubscriptionDeliveryResult
                        {
                            Id               = DataFormats.CreateEntityIdentifier(),
                            SubscriptionId   = subscription.Id,
                            AttemptedDateUtc = datum3
                        }
                    }
                });

                appHost.LoginUser(client, "asubscriber", WebhookFeature.DefaultSubscriberRoles);
                var result = client.Get(new GetSubscription
                {
                    Id = subscription.Id
                }).History;

                Assert.That(result.Count, Is.EqualTo(3));
                Assert.That(result[0].AttemptedDateUtc, Is.EqualTo(datum3));
                Assert.That(result[1].AttemptedDateUtc, Is.EqualTo(datum2));
                Assert.That(result[2].AttemptedDateUtc, Is.EqualTo(datum1));
            }