Skip to content

Commit

Permalink
Many tests reworked, a few to go
Browse files Browse the repository at this point in the history
Many tests reworked, a few to go.  Consolidated a lot of the hand crafted json objects into objects that get serialized as the purist JsonObject format was prone to errors - in some cases tests were passing even with bad typing.
  • Loading branch information
vaughanknight committed Jun 18, 2024
1 parent 92f8dbc commit 39e45a6
Show file tree
Hide file tree
Showing 13 changed files with 164 additions and 101 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ public async Task EmissionsForecasts_RequestedAtOptions_ReturnsExpectedData()
IgnoreTestForDataSource("data source does not implement '--requested-at'", DataSourceType.ElectricityMaps);

// Arrange
_dataSourceMocker.SetupBatchForecastMock();
_dataSourceMocker.SetupHistoricalBatchForecastMock();

// Act
var exitCode = await InvokeCliAsync($"emissions-forecasts -l eastus -r 2022-09-01");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public void SetupDataMock(DateTimeOffset start, DateTimeOffset end, string locat
SetupResponseGivenGetRequest(Paths.PastRange, pastRange);
}

public void SetupBatchForecastMock()
public void SetupHistoricalBatchForecastMock()
{
throw new NotImplementedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void SetupForecastMock()
throw new NotImplementedException();
}

public void SetupBatchForecastMock()
public void SetupHistoricalBatchForecastMock()
{
throw new NotImplementedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public void Initialize() { }
public void Reset() { }
public void Dispose() { }

public void SetupBatchForecastMock()
public void SetupHistoricalBatchForecastMock()
{
throw new NotImplementedException();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ public WattTimeDataSourceMocker()
{
_server = WireMockServer.Start();
Environment.SetEnvironmentVariable("DataSources__Configurations__WattTime__BaseURL", _server.Url!);
Environment.SetEnvironmentVariable("DataSources__Configurations__WattTime__AuthenticationBaseUrl", _server.Url!);

Initialize();
}

Expand Down Expand Up @@ -111,7 +113,7 @@ public void SetupForecastMock()
SetupResponseGivenGetRequest(Paths.Forecast, JsonSerializer.Serialize(forecastResponse));
}

public void SetupBatchForecastMock()
public void SetupHistoricalBatchForecastMock()
{
var start = new DateTimeOffset(2021, 9, 1, 8, 30, 0, TimeSpan.Zero);
var end = start + TimeSpan.FromDays(1.0);
Expand Down Expand Up @@ -142,14 +144,29 @@ public void SetupBatchForecastMock()
GeneratedAt = new DateTimeOffset(2022, 1, 1, 0, 0, 0, TimeSpan.Zero)
};

var forecastBatchData = new List<ForecastEmissionsDataResponse> {
new ForecastEmissionsDataResponse()
//var forecastBatchData = new List<ForecastEmissionsDataResponse> {
// new ForecastEmissionsDataResponse()
// {
// Data = forecastData,
// Meta = meta
// }
//};

var historicalForecastResponse = new HistoricalForecastEmissionsDataResponse()
{
Data = new List<HistoricalEmissionsData>()
{
Data = forecastData,
Meta = meta
}
new HistoricalEmissionsData()
{
Forecast = forecastData,
GeneratedAt = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero)
}
},
Meta = meta
};
SetupResponseGivenGetRequest(Paths.Forecast, JsonSerializer.Serialize(forecastBatchData));


SetupResponseGivenGetRequest(Paths.ForecastHistorical, JsonSerializer.Serialize(historicalForecastResponse));
}

public void Initialize()
Expand Down Expand Up @@ -180,7 +197,7 @@ private void SetupResponseGivenGetRequest(string path, string body)
);
}
private void SetupBaMock(RegionResponse? content = null) =>
SetupResponseGivenGetRequest(Paths.BalancingAuthorityFromLocation, JsonSerializer.Serialize(content ?? defaultRegion));
SetupResponseGivenGetRequest(Paths.RegionFromLocation, JsonSerializer.Serialize(content ?? defaultRegion));

private void SetupLoginMock(LoginResult? content = null) =>
SetupResponseGivenGetRequest(Paths.Login, JsonSerializer.Serialize(content ?? defaultLoginResult));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,9 @@ public Task<ForecastEmissionsDataResponse> GetCurrentForecastAsync(RegionRespons
var parameters = new Dictionary<string, string>()
{
{ QueryStrings.Region, region },
{ QueryStrings.SignalType, SignalTypes.co2_moer },
{ QueryStrings.StartTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) },
{ QueryStrings.EndTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) }
{ QueryStrings.EndTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) },
{ QueryStrings.SignalType, SignalTypes.co2_moer }
};

var tags = new Dictionary<string, string>()
Expand Down Expand Up @@ -215,7 +215,7 @@ private async Task<Stream> GetStreamWithAuthRetryAsync(string uriPath)

private async Task EnsureTokenAsync()
{
if (this._client.DefaultRequestHeaders.Authorization == null)
if (this._authenticationClient.DefaultRequestHeaders.Authorization == null)
{
await this.UpdateAuthTokenAsync();
}
Expand Down Expand Up @@ -249,7 +249,7 @@ private async Task UpdateAuthTokenAsync()
private void SetBasicAuthenticationHeader()
{
var authToken = Encoding.UTF8.GetBytes($"{this._configuration.Username}:{this._configuration.Password}");
this._client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
//this._client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
this._authenticationClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
}

Expand Down Expand Up @@ -311,7 +311,7 @@ private async Task<RegionResponse> GetBalancingAuthorityFromCacheAsync(string la
{ QueryStrings.Longitude, longitude },
{ QueryStrings.SignalType, SignalTypes.co2_moer }
};
var result = await this.MakeRequestGetStreamAsync(Paths.BalancingAuthorityFromLocation, parameters, tags);
var result = await this.MakeRequestGetStreamAsync(Paths.RegionFromLocation, parameters, tags);
var baValue = await JsonSerializer.DeserializeAsync<RegionResponse>(result, _options) ?? throw new WattTimeClientException($"Error getting Balancing Authority for latitude {latitude} and longitude {longitude}");
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(_configuration.BalancingAuthorityCacheTTL);
entry.Value = baValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ internal class Paths
public const string Forecast = "forecast";

public const string ForecastHistorical = "forecast/historical";
public const string BalancingAuthorityFromLocation = "region-from-loc";
public const string RegionFromLocation = "region-from-loc";
public const string Login = "login";
public const string Historical = "historical";
}
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,12 @@ public async Task<IEnumerable<EmissionsData>> GetCarbonIntensityAsync(Location l
Logger.LogInformation($"Getting carbon intensity for location {location} for period {periodStartTime} to {periodEndTime}.");
var balancingAuthority = await this.GetBalancingAuthority(location);
var (newStartTime, newEndTime) = IntervalHelper.ExtendTimeByWindow(periodStartTime, periodEndTime, MinSamplingWindow);
var historialResponse = await this.WattTimeClient.GetDataAsync(balancingAuthority, newStartTime, newEndTime);
var historicalResponse = await this.WattTimeClient.GetDataAsync(balancingAuthority, newStartTime, newEndTime);
if (Logger.IsEnabled(LogLevel.Debug))
{
Logger.LogDebug($"Found {historialResponse.Data.Count()} total forecasts for location {location} for period {periodStartTime} to {periodEndTime}.");
Logger.LogDebug($"Found {historicalResponse.Data.Count()} total forecasts for location {location} for period {periodStartTime} to {periodEndTime}.");
}
var windowData = ConvertToEmissionsData(historialResponse);
var windowData = ConvertToEmissionsData(historicalResponse);
var filteredData = IntervalHelper.FilterByDuration(windowData, periodStartTime, periodEndTime);

if (!filteredData.Any())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,81 +1,126 @@
using CarbonAware.DataSources.WattTime.Constants;
using CarbonAware.DataSources.WattTime.Model;
using System;
using System.Text.Json.Nodes;
using System.Collections.Generic;
using System.Text.Json;

namespace CarbonAware.DataSources.WattTime.Client.Tests;

internal static class TestData
{
internal static string GetGridDataJsonString()
public class TestDataConstants
{
var json = new JsonArray(
new JsonObject
{
["ba"] = "ba",
["datatype"] = "dt",
["frequency"] = 300,
["market"] = "mkt",
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
["value"] = 999.99,
["version"] = "1.0"
}
);
public const string Region = "TEST_REGION";
public const string RegionFullName = "Test Region Full Name";
public const string Market = "mkt";
public static DateTimeOffset GeneratedAt = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero);
public static DateTimeOffset PointTime = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero);
public static DateTime Date = new DateTime(2099, 1, 1, 0, 0, 0);
public const float Value = 999.99f;
public const string Version = "1.0";
}

internal static string GetGridDataResponseJsonString()
{
return JsonSerializer.Serialize(_GetGridDataResponse());
}
private static GridEmissionsDataResponse _GetGridDataResponse()
{
var gridEmissionDataResponse = new GridEmissionsDataResponse()
{
Meta = _GetGridDataMetaResponse(),
Data = _GetGridEmissionDataPoints()
};
return gridEmissionDataResponse;
}

private static GridEmissionsMetaData _GetGridDataMetaResponse()
{
var gridEmissionsMetaData = new GridEmissionsMetaData()
{
Region = TestDataConstants.Region,
GeneratedAt = TestDataConstants.GeneratedAt,
GeneratedAtPeriodSeconds = 30,
Model = new GridEmissionsModelData()
{
Date = TestDataConstants.Date,
Type = SignalTypes.co2_moer
},
DataPointPeriodSeconds = 30,
SignalType = SignalTypes.co2_moer,
Units = "co2_moer"
};

return gridEmissionsMetaData;
}
private static List<GridEmissionDataPoint> _GetGridEmissionDataPoints()
{
return new List<GridEmissionDataPoint>()
{
_GetGridEmissionDataPoint()
};
}

return json.ToString();
private static GridEmissionDataPoint _GetGridEmissionDataPoint()
{
return new GridEmissionDataPoint()
{
Frequency = 300,
Market = TestDataConstants.Market,
PointTime = TestDataConstants.PointTime,
Value = TestDataConstants.Value,
Version = TestDataConstants.Version
};
}

internal static string GetCurrentForecastJsonString()
{
return JsonSerializer.Serialize(_GetCurrentForecastEmissionsDataResponse());
}

var json = new JsonObject
private static ForecastEmissionsDataResponse _GetCurrentForecastEmissionsDataResponse()
{
return new ForecastEmissionsDataResponse()
{
["generated_at"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
["forecast"] = new JsonArray
{
new JsonObject
{
["ba"] = "ba",
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
["value"] = 999.99,
["version"] = "1.0"
}
}
Data = _GetGridEmissionDataPoints(),
Meta = _GetGridDataMetaResponse()
};
}


return json.ToString();
internal static string GetHistoricalForecastDataJsonString()
{
return JsonSerializer.Serialize(_GetHistoricalForecastEmissionsDataResponse());
}

internal static string GetForecastByDateJsonString()
private static HistoricalForecastEmissionsDataResponse _GetHistoricalForecastEmissionsDataResponse()
{
var json = new JsonArray
return new HistoricalForecastEmissionsDataResponse()
{
new JsonObject
Meta = _GetGridDataMetaResponse(),
Data = new List<HistoricalEmissionsData>
{
["generated_at"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
["forecast"] = new JsonArray
new HistoricalEmissionsData()
{
new JsonObject
{
["ba"] = "ba",
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
["value"] = 999.99,
["version"] = "1.0"
}
Forecast = _GetGridEmissionDataPoints(),
GeneratedAt = TestDataConstants.GeneratedAt
}
}
};
}

return json.ToString();
internal static string GetRegionJsonString()
{
return JsonSerializer.Serialize(_GetRegion());
}

internal static string GetBalancingAuthorityJsonString()
private static RegionResponse _GetRegion()
{
var json = new JsonObject
return new RegionResponse()
{
["id"] = "12345",
["abbrev"] = "TEST_BA",
["name"] = "Test Balancing Authority"
Region = TestDataConstants.Region,
RegionFullName = TestDataConstants.RegionFullName,
SignalType = SignalTypes.co2_moer
};

return json.ToString();
}
}
Loading

0 comments on commit 39e45a6

Please sign in to comment.