internal Queries(IProjectSettings prjSettings, IKeenHttpClientProvider keenHttpClientProvider) { if (null == prjSettings) { throw new ArgumentNullException(nameof(prjSettings), "Project Settings must be provided."); } if (null == keenHttpClientProvider) { throw new ArgumentNullException(nameof(keenHttpClientProvider), "A KeenHttpClient provider must be provided."); } if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) || !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute)) { throw new KeenException( "A properly formatted KeenUrl must be provided via Project Settings."); } var serverBaseUrl = new Uri(prjSettings.KeenUrl); _keenHttpClient = keenHttpClientProvider.GetForUrl(serverBaseUrl); _queryRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId, KeenConstants.QueriesResource); // TODO : The Python SDK has changed to not automatically falling back, but rather // throwing so that client devs learn to use the most appropriate key. So here we // really could or should just demand the ReadKey. _key = string.IsNullOrWhiteSpace(prjSettings.MasterKey) ? prjSettings.ReadKey : prjSettings.MasterKey; }
internal Event(IProjectSettings prjSettings, IKeenHttpClientProvider keenHttpClientProvider) { if (null == prjSettings) { throw new ArgumentNullException(nameof(prjSettings), "Project Settings must be provided."); } if (null == keenHttpClientProvider) { throw new ArgumentNullException(nameof(keenHttpClientProvider), "A KeenHttpClient provider must be provided."); } if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) || !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute)) { throw new KeenException( "A properly formatted KeenUrl must be provided via Project Settings."); } var serverBaseUrl = new Uri(prjSettings.KeenUrl); _keenHttpClient = keenHttpClientProvider.GetForUrl(serverBaseUrl); _eventsRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId, KeenConstants.EventsResource); _readKey = prjSettings.ReadKey; _writeKey = prjSettings.WriteKey; }
public void Results_Throws() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError); } var client = new KeenClient(SettingsEnv, httpClientProvider); Assert.Throws <KeenException>(() => client.QueryDataset(null, _indexBy, _timeframe)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, null, _timeframe)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, null)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, _timeframe)); var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000", null, Environment.GetEnvironmentVariable("KEEN_WRITE_KEY") ?? "", Environment.GetEnvironmentVariable("KEEN_READ_KEY") ?? "", Environment.GetEnvironmentVariable("KEEN_SERVER_URL") ?? KeenConstants.ServerAddress + "/" + KeenConstants.ApiVersion + "/"), httpClientProvider); Assert.Throws <KeenException>(() => brokenClient.QueryDataset(_datasetName, _indexBy, _timeframe)); }
public void CreateDataset_Throws_ServerError() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForDeleteAsync("{}", HttpStatusCode.InternalServerError); } var client = new KeenClient(SettingsEnv, httpClientProvider); Assert.Throws <KeenException>(() => client.CreateDataset(null)); }
public void ListDefinitions_Throws_ServerError() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError); } var client = new KeenClient(SettingsEnv, httpClientProvider); Assert.Throws <KeenException>(() => client.ListDatasetDefinitions()); }
public void Delete_Success() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForDeleteAsync(string.Empty); } var client = new KeenClient(SettingsEnv, httpClientProvider); client.DeleteDataset("datasetName"); }
public void Definition_Success() { var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/GetDatasetDefinition.json"); IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse); } var client = new KeenClient(SettingsEnv, httpClientProvider); var dataset = client.GetDatasetDefinition(_datasetName); AssertDatasetIsPopulated(dataset); }
public void Results_Success() { var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/GetDatasetResults.json"); IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse); } var client = new KeenClient(SettingsEnv, httpClientProvider); var dataset = client.QueryDataset(_datasetName, _indexBy, _timeframe); Assert.IsNotNull(dataset); Assert.IsNotNull(dataset["result"]); }
public void Results_Throws_ServerError() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync("{}", HttpStatusCode.InternalServerError); } var client = new KeenClient(SettingsEnv, httpClientProvider); Assert.Throws <KeenException>(() => client.QueryDataset(null, _indexBy, _timeframe)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, null, _timeframe)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, null)); Assert.Throws <KeenException>(() => client.QueryDataset(_datasetName, _indexBy, _timeframe)); }
public void DeleteDataset_Throws_WrongKey() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForDeleteAsync(string.Empty); } var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000", null, Environment.GetEnvironmentVariable(KeenConstants.KeenWriteKey) ?? "", Environment.GetEnvironmentVariable(KeenConstants.KeenReadKey) ?? "", GetServerUrl()), httpClientProvider); Assert.Throws <KeenException>(() => brokenClient.DeleteDataset(_datasetName)); }
public void ListDefinitions_Throws_WrongKey() { var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/ListDatasetDefinitions.json"); IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse); } var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000", Environment.GetEnvironmentVariable(KeenConstants.KeenMasterKey) ?? "", Environment.GetEnvironmentVariable(KeenConstants.KeenWriteKey) ?? "", null, GetServerUrl()), httpClientProvider); Assert.Throws <KeenException>(() => brokenClient.ListDatasetDefinitions()); }
private KeenClient(IProjectSettings prjSettings, IEventCache eventCache, IKeenHttpClientProvider keenHttpClientProvider) { // Preconditions if (null == prjSettings) { throw new KeenException("An IProjectSettings instance is required."); } if (string.IsNullOrWhiteSpace(prjSettings.ProjectId)) { throw new KeenException("A Project ID is required."); } if ((string.IsNullOrWhiteSpace(prjSettings.MasterKey) && string.IsNullOrWhiteSpace(prjSettings.WriteKey) && string.IsNullOrWhiteSpace(prjSettings.ReadKey))) { throw new KeenException("An API key is required."); } if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl)) { throw new KeenException("A URL for the server address is required."); } _prjSettings = prjSettings; if (null != eventCache) { EventCache = eventCache; } // Use the default provider if none was passed in. keenHttpClientProvider = (keenHttpClientProvider ?? new KeenHttpClientProvider()); // These interfaces normally should not need to be set by client code, so the default // implementation is set up here. These may be overridden by injecting an // implementation via their respective properties. EventCollection = new EventCollection(_prjSettings, keenHttpClientProvider); Event = new Event(_prjSettings, keenHttpClientProvider); Queries = new Queries(_prjSettings, keenHttpClientProvider); }
public void ListAllDefinitions_Success() { var apiResponse = File.ReadAllText($"{GetApiResponsesPath()}/ListDatasetDefinitions.json"); IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForGetAsync(apiResponse); } var client = new KeenClient(SettingsEnv, httpClientProvider); var datasetCollection = client.ListAllDatasetDefinitions(); Assert.IsNotNull(datasetCollection); Assert.IsTrue(datasetCollection.Any()); foreach (var item in datasetCollection) { AssertDatasetIsPopulated(item); } }
internal EventCollection(IProjectSettings prjSettings, IKeenHttpClientProvider keenHttpClientProvider) { if (null == prjSettings) { throw new ArgumentNullException(nameof(prjSettings), "Project Settings must be provided."); } if (null == keenHttpClientProvider) { throw new ArgumentNullException(nameof(keenHttpClientProvider), "A KeenHttpClient provider must be provided."); } if (string.IsNullOrWhiteSpace(prjSettings.KeenUrl) || !Uri.IsWellFormedUriString(prjSettings.KeenUrl, UriKind.Absolute)) { throw new KeenException( "A properly formatted KeenUrl must be provided via Project Settings."); } var serverBaseUrl = new Uri(prjSettings.KeenUrl); _keenHttpClient = keenHttpClientProvider.GetForUrl(serverBaseUrl); _eventsRelativeUrl = KeenHttpClient.GetRelativeUrl(prjSettings.ProjectId, KeenConstants.EventsResource); // TODO : It's possible we may want to change back to dynamically grabbing the keys // from a stored IProjectSettings so client code can lazily assign keys. It creates a // minor potential race condition, but will allow for scenarios like creating a // KeenClient instance with only a master key in order to generate/acquire access keys // to then set as the other keys. Otherwise a new KeenClient must be created or at // least a new instance of the IEventCollection/IEvent/IQueries implementations. _readKey = prjSettings.ReadKey; _writeKey = prjSettings.WriteKey; _masterKey = prjSettings.MasterKey; }
public void CreateDataset_Throws() { IKeenHttpClientProvider httpClientProvider = null; if (UseMocks) { httpClientProvider = GetMockHttpClientProviderForDeleteAsync("{}", HttpStatusCode.InternalServerError); } var client = new KeenClient(SettingsEnv, httpClientProvider); Assert.Throws <KeenException>(() => client.CreateDataset(null)); var brokenClient = new KeenClient(new ProjectSettingsProvider("5011efa95f546f2ce2000000", null, Environment.GetEnvironmentVariable("KEEN_WRITE_KEY") ?? "", Environment.GetEnvironmentVariable("KEEN_READ_KEY") ?? "", Environment.GetEnvironmentVariable("KEEN_SERVER_URL") ?? KeenConstants.ServerAddress + "/" + KeenConstants.ApiVersion + "/"), httpClientProvider); Assert.Throws <KeenException>(() => brokenClient.CreateDataset(CreateDatasetDefinition())); }
public KeenClient(IProjectSettings prjSettings, IKeenHttpClientProvider keenHttpClientProvider) : this(prjSettings, null, keenHttpClientProvider) { }