public async Task Funnel_ValidTimeframe_Success() { var client = new KeenClient(SettingsEnv); var timeframe = QueryRelativeTimeframe.PreviousHour(); IEnumerable <FunnelStep> funnelsteps = new [] { new FunnelStep { EventCollection = FunnelColA, ActorProperty = "id", Timeframe = timeframe, }, 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.True(reply.Result.SequenceEqual(expected.Result)); Assert.NotNull(reply.Steps); Assert.AreEqual(reply.Steps.Count(), 2); if (null != queryMock) { queryMock.VerifyAll(); } }