public async Task WebHookSubscription_RelevantEvent()
        {
            await Test(
                builder => { builder.UseComponent(new WebHookComponent()); },
                async() =>
            {
                var wh = await CreateWebHookSubscriptionAsync(@"{
    ""Path"": ""/Root/Content"",
    ""ContentTypes"": [ 
        {
            ""Name"": ""Folder"", 
            ""Events"": [ ""Create"", ""Delete"", ""MoveToTrash"", ""RestoreFromTrash"" ] 
        }
    ] 
}");

                var parent1 = await Node.LoadNodeAsync("/Root/Content", CancellationToken.None);
                var node1   = new Folder(parent1);
                var event1  = new NodeCreatedEvent(new TestNodeEventArgs(node1, NodeEvent.Created));
                var event2  = new TestEvent1(new TestNodeEventArgs(node1, NodeEvent.Created));
                var event3  = new NodeForcedDeletedEvent(new TestNodeEventArgs(node1, NodeEvent.DeletedPhysically));
                var event4  = new NodeDeletedEvent(new TestNodeEventArgs(node1, NodeEvent.Deleted));
                var event5  = new NodeRestoredEvent(new TestNodeEventArgs(node1, NodeEvent.Restored));

                Assert.AreEqual(WebHookEventType.Create, wh.GetRelevantEventTypes(event1).Single());
                Assert.AreEqual(0, wh.GetRelevantEventTypes(event2).Length);
                Assert.AreEqual(WebHookEventType.Delete, wh.GetRelevantEventTypes(event3).Single());
                Assert.AreEqual(WebHookEventType.MoveToTrash, wh.GetRelevantEventTypes(event4).Single());
                Assert.AreEqual(WebHookEventType.RestoreFromTrash, wh.GetRelevantEventTypes(event5).Single());
            });
        }
        public async Task WebHookSubscription_RelevantEvent_All()
        {
            await Test(
                builder => { builder.UseComponent(new WebHookComponent()); },
                async() =>
            {
                // TriggersForAllEvents is TRUE
                var wh = await CreateWebHookSubscriptionAsync(@"{
    ""Path"": ""/Root/Content"",
""TriggersForAllEvents"": true,
    ""ContentTypes"": [ 
        {
            ""Name"": ""Folder"", 
            ""Events"": [ ""Pending"" ] 
        }
    ] 
}");

                var parent1 = await Node.LoadNodeAsync("/Root/Content", CancellationToken.None);
                var node1   = new Folder(parent1);
                var event1  = new NodeCreatedEvent(new TestNodeEventArgs(node1, NodeEvent.Created));
                var event2  = new NodeForcedDeletedEvent(new TestNodeEventArgs(node1, NodeEvent.DeletedPhysically));

                // triggered for ALL events: only the appropriate events should be returned
                var re1 = wh.GetRelevantEventTypes(event1);
                Assert.AreEqual(2, re1.Length);
                Assert.IsTrue(re1.Contains(WebHookEventType.Create));
                Assert.IsTrue(re1.Contains(WebHookEventType.Approve));     // automatic approve

                Assert.AreEqual(WebHookEventType.Delete, wh.GetRelevantEventTypes(event2).Single());

                // TriggersForAllEvents is FALSE, but All is selected for the type.
                wh = await CreateWebHookSubscriptionAsync(@"{
    ""Path"": ""/Root/Content"",
""TriggersForAllEvents"": false,
    ""ContentTypes"": [ 
        {
            ""Name"": ""Folder"", 
            ""Events"": [ ""All"" ] 
        }
    ] 
}");
                // triggered for ALL events of the type: only the appropriate events should be returned
                re1 = wh.GetRelevantEventTypes(event1);
                Assert.AreEqual(2, re1.Length);
                Assert.IsTrue(re1.Contains(WebHookEventType.Create));
                Assert.IsTrue(re1.Contains(WebHookEventType.Approve));     // automatic approve

                Assert.AreEqual(WebHookEventType.Delete, wh.GetRelevantEventTypes(event2).Single());
            });
        }
예제 #3
0
        public async Task WebHook_Basic()
        {
            await Test(
                builder => { builder.UseComponent(new WebHookComponent()); },
                async() =>
            {
                var provider = BuildServiceProvider();
                var ep       = provider.GetRequiredService <IEventProcessor>();
                var whc      = (TestWebHookClient)provider.GetRequiredService <IWebHookClient>();

                var parent1 = await Node.LoadNodeAsync("/Root/Content", CancellationToken.None);
                var parent2 = await Node.LoadNodeAsync("/Root/System", CancellationToken.None);
                var node1   = new Folder(parent1);
                var node2   = new Folder(parent2);

                // create mock events
                var event1 = new NodeCreatedEvent(new TestNodeEventArgs(node1, NodeEvent.Created));
                var event2 = new NodeCreatedEvent(new TestNodeEventArgs(node2, NodeEvent.Created));
                var event3 = new NodeForcedDeletedEvent(new TestNodeEventArgs(node1, NodeEvent.DeletedPhysically));

                // ACTION: fire mock events
                await ep.ProcessEventAsync(event1, CancellationToken.None);
                await ep.ProcessEventAsync(event2, CancellationToken.None);
                await ep.ProcessEventAsync(event3, CancellationToken.None);

                // test webhook client should contain the event log
                Assert.AreEqual(2, whc.Requests.Count);

                var request1 = whc.Requests[0];

                Assert.AreEqual(node1.Id, request1.NodeId);
                Assert.AreEqual(node1.Path, request1.Path);
                Assert.AreEqual("Create", request1.EventName);

                var request2 = whc.Requests[1];

                Assert.AreEqual(node1.Id, request2.NodeId);
                Assert.AreEqual(node1.Path, request2.Path);
                Assert.AreEqual("Delete", request2.EventName);
            });
        }