public async Task DefaultHeaders_Success() { object responseData = new[] { new { result = 2 } }; var handler = new FuncHandler() { PreProcess = (req, ct) => { // Make sure the default headers are in place Assert.IsTrue(req.Headers.Contains("Keen-Sdk")); Assert.AreEqual(KeenUtil.GetSdkVersion(), req.Headers.GetValues("Keen-Sdk").Single()); Assert.IsTrue(req.Headers.Contains("Authorization")); var key = req.Headers.GetValues("Authorization").Single(); Assert.IsTrue(SettingsEnv.ReadKey == key || SettingsEnv.WriteKey == key || SettingsEnv.MasterKey == key); }, ProduceResultAsync = (req, ct) => { return(CreateJsonStringResponseAsync(responseData)); }, DeferToDefault = false }; var client = new KeenClient(SettingsEnv, new TestKeenHttpClientProvider() { ProvideKeenHttpClient = (url) => KeenHttpClientFactory.Create(url, new HttpClientCache(), null, new DelegatingHandlerMock(handler)) }); // Try out all the endpoints Assert.DoesNotThrow(() => client.GetSchemas()); // Remaining operations expect an object, not an array of objects responseData = new { result = 2 }; var @event = new { AProperty = "AValue" }; Assert.DoesNotThrow(() => client.AddEvent("AddEventTest", @event)); Assert.DoesNotThrow(() => client.AddEvents("AddEventTest", new[] { @event })); Assert.DoesNotThrow(() => client.DeleteCollection("DeleteColTest")); Assert.IsNotNull(client.GetSchema("AddEventTest")); // Currently all the queries/extraction go through the same KeenWebApiRequest() call. var count = await client.QueryAsync( QueryType.Count(), "testCollection", "", QueryRelativeTimeframe.ThisMonth()); Assert.IsNotNull(count); Assert.AreEqual("2", count); }
public async Task QueryFilter_NotContains_Success() { var queriesUrl = HttpTests.GetUriForResource(SettingsEnv, KeenConstants.QueriesResource); var handler = new FuncHandler() { PreProcess = (req, ct) => { var queryStr = req.RequestUri.Query; // Make sure our filter properties are in the query string Assert.IsTrue(queryStr.Contains("propertyName") && queryStr.Contains("four") && queryStr.Contains(QueryFilter.FilterOperator.NotContains())); }, ProduceResultAsync = (req, ct) => { return(HttpTests.CreateJsonStringResponseAsync(new { result = 2 })); }, DeferToDefault = false }; // NOTE : This example shows use of UrlToMessageHandler, but since we only make one // request to a single endpoint, we could just directly use the FuncHandler here. var urlHandler = new UrlToMessageHandler( new Dictionary <Uri, IHttpMessageHandler> { { queriesUrl, handler } }) { DeferToDefault = false }; var client = new KeenClient(SettingsEnv, new TestKeenHttpClientProvider() { ProvideKeenHttpClient = (url) => KeenHttpClientFactory.Create(url, new HttpClientCache(), null, new DelegatingHandlerMock(urlHandler)) }); var filters = new List <QueryFilter> { new QueryFilter("propertyName", QueryFilter.FilterOperator.NotContains(), "four") }; var count = await client.QueryAsync( QueryType.Count(), "testCollection", "", QueryRelativeTimeframe.ThisMonth(), filters); Assert.IsNotNull(count); Assert.AreEqual("2", count); }
public async Task QueryFilter_NullPropertyValue_Success() { // TODO : Consolidate this FuncHandler/KeenClient setup into a helper method. var handler = new FuncHandler() { PreProcess = (req, ct) => { var queryStr = req.RequestUri.Query; // Make sure our filter properties are in the query string Assert.IsTrue(queryStr.Contains("propertyName") && queryStr.Contains("null") && queryStr.Contains(QueryFilter.FilterOperator.Equals())); }, ProduceResultAsync = (req, ct) => { return(HttpTests.CreateJsonStringResponseAsync(new { result = 2 })); }, DeferToDefault = false }; var client = new KeenClient(SettingsEnv, new TestKeenHttpClientProvider() { ProvideKeenHttpClient = (url) => KeenHttpClientFactory.Create(url, new HttpClientCache(), null, new DelegatingHandlerMock(handler)) }); var filters = new List <QueryFilter> { new QueryFilter("propertyName", QueryFilter.FilterOperator.Equals(), null) }; var count = await client.QueryAsync( QueryType.Count(), "testCollection", "", QueryRelativeTimeframe.ThisMonth(), filters); Assert.IsNotNull(count); Assert.AreEqual("2", count); }
public async Task Funnel_ValidTimeframeInSteps_Success() { var client = new KeenClient(SettingsEnv); IEnumerable <FunnelStep> funnelsteps = new[] { new FunnelStep { EventCollection = FunnelColA, ActorProperty = "id", Timeframe = QueryRelativeTimeframe.ThisMonth(), }, new FunnelStep { EventCollection = FunnelColB, ActorProperty = "id", Timeframe = new QueryAbsoluteTimeframe(DateTime.Now.AddDays(-30), DateTime.Now), }, }; 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 <IQueryTimeframe>(t => null == t), It.Is <string>(t => t == "") )) .Returns(Task.FromResult(expected)); client.Queries = queryMock.Object; } var reply = (await client.QueryFunnelAsync(funnelsteps, null)); 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(); } }