QueryFunnelAsync() public method

Funnels count relevant events in succession. See API documentation for details.
public QueryFunnelAsync ( IEnumerable steps, QueryTimeframe timeframe = null, string timezone = "" ) : Task
steps IEnumerable Analysis steps for funnel.
timeframe QueryTimeframe Specifies window of time from which to select events for analysis. May be absolute or relative.
timezone string The timezone to use when specifying a relative timeframe. Optional, may be blank.
return Task
Example #1
0
        public async Task Funnel_Simple_Success()
        {
            var client = new KeenClient(SettingsEnv);

            IEnumerable<FunnelStep> funnelsteps = new List<FunnelStep>
            {
                new FunnelStep
                {
                    EventCollection = FunnelColA, 
                    ActorProperty = "id",
                },
                new FunnelStep
                {
                    EventCollection = FunnelColB, 
                    ActorProperty = "id"
                },
            };

            var expected = new FunnelResult
            {
                Steps = new []
                {
                    new FunnelResultStep
                    {
                        EventCollection = FunnelColA, 
                    },
                    new FunnelResultStep
                    {
                        EventCollection = FunnelColB, 
                    },
                },
                Result = new[] { 3, 2 }
            };


            Mock<IQueries> queryMock = null;
            if (UseMocks)
            {
                queryMock = new Mock<IQueries>();
                queryMock.Setup(m => m.Funnel(
                        It.Is<IEnumerable<FunnelStep>>(f => f.Equals(funnelsteps)),
                        It.Is<QueryTimeframe>(t => t == null),
                        It.Is<string>(t => t == "")
                      ))
                  .Returns(Task.FromResult(expected));

                client.Queries = queryMock.Object;
            }

            var reply = (await client.QueryFunnelAsync(funnelsteps));
            Assert.NotNull(reply);
            Assert.NotNull(reply.Result);
            Assert.NotNull(reply.Steps);
            Assert.AreEqual(reply.Steps.Count(), 2);

            if (null != queryMock)
                queryMock.VerifyAll();
        }
Example #2
0
        public async void Funnel_ValidTimeframe_Success()
        {
            var client = new KeenClient(settingsEnv);
            var filters = new List<QueryFilter>() { new QueryFilter("field1", QueryFilter.FilterOperator.GreaterThan(), "1") };

            var funnelColA = "FunnelTestA";
            var funnelColB = "FunnelTestB";
            var funnelColC = "FunnelTestC";

            try
            {
                if (!UseMocks)
                {
                    client.DeleteCollection(funnelColA);
                    client.DeleteCollection(funnelColB);
                    client.DeleteCollection(funnelColC);
                }
            }
            catch (Exception)
            {
            }

            var timeframe = new QueryAbsoluteTimeframe(DateTime.Now, DateTime.Now.AddSeconds(2));

            if (!UseMocks)
            {
                client.AddEvent(funnelColA, new { id = "1" });
                client.AddEvent(funnelColA, new { id = "2" });
                client.AddEvent(funnelColA, new { id = "3" });

                client.AddEvent(funnelColB, new { id = "1" });
                client.AddEvent(funnelColB, new { id = "2" });

                client.AddEvent(funnelColC, new { id = "1" });
            }
            IEnumerable<FunnelStep> funnelsteps = new List<FunnelStep>()
            {
                new FunnelStep(){ EventCollection = funnelColA, ActorProperty = "id" },
                new FunnelStep(){ EventCollection = funnelColB, ActorProperty = "id" },
                new FunnelStep(){ EventCollection = funnelColC, ActorProperty = "id" },
            };
            IEnumerable<int> result = new List<int>() { 3, 2, 1 };


            Mock<IQueries> queryMock = null;
            if (UseMocks)
            {
                queryMock = new Mock<IQueries>();
                queryMock.Setup(m => m.Funnel(
                        It.IsAny<string>(),
                        It.Is<IEnumerable<FunnelStep>>(f => f == funnelsteps),
                        It.Is<QueryTimeframe>(t => t == null),
                        It.Is<string>(t => t == "")
                      ))
                  .Returns(Task.FromResult(result));

                client.Queries = queryMock.Object;
            }

            var reply = (await client.QueryFunnelAsync(testCol, funnelsteps, null)).ToList();

            if (null != queryMock)
                queryMock.VerifyAll();
        }
Example #3
0
        public async void Funnel_ValidFilter_Success()
        {
            var client = new KeenClient(SettingsEnv);
            var filters = new List<QueryFilter> { new QueryFilter("id", QueryFilter.FilterOperator.GreaterThanOrEqual(), 0) };

            IEnumerable<FunnelStep> funnelsteps = new []
            {
                new FunnelStep
                {
                    EventCollection = FunnelColA, 
                    ActorProperty = "id",
                    Filters = filters,
                },
                new FunnelStep
                {
                    EventCollection = FunnelColB, 
                    ActorProperty = "id"
                },
            };

            var expected = new FunnelResult
            {
                Steps = new []
                {
                    new FunnelResultStep
                    {
                        EventCollection = FunnelColA, 
                        Filters = filters
                    },
                    new FunnelResultStep
                    {
                        EventCollection = FunnelColB, 
                    },
                },
                Result = new [] { 3, 2 }
            };


            Mock<IQueries> queryMock = null;
            if (UseMocks)
            {
                queryMock = new Mock<IQueries>();
                queryMock.Setup(m => m.Funnel(
                        It.Is<IEnumerable<FunnelStep>>(f => f.Equals(funnelsteps)),
                        It.Is<QueryTimeframe>(t => t == null),
                        It.Is<string>(t => t == "")
                      ))
                  .Returns(Task.FromResult(expected));

                client.Queries = queryMock.Object;
            }

            var reply = (await client.QueryFunnelAsync(funnelsteps));
            Assert.NotNull(reply);
            Assert.NotNull(reply.Result);
            Assert.True(reply.Result.SequenceEqual(expected.Result));
            Assert.NotNull(reply.Steps);
            Assert.AreEqual(reply.Steps.Count(), 2);

            if (null != queryMock)
                queryMock.VerifyAll();
        }