Skip to content

Commit 39e45a6

Browse files
committed
Many tests reworked, a few to go
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.
1 parent 92f8dbc commit 39e45a6

File tree

13 files changed

+164
-101
lines changed

13 files changed

+164
-101
lines changed

src/CarbonAware.CLI/test/integrationTests/Commands/EmissionsForecasts/EmissionsForecastsCommandTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public async Task EmissionsForecasts_RequestedAtOptions_ReturnsExpectedData()
9999
IgnoreTestForDataSource("data source does not implement '--requested-at'", DataSourceType.ElectricityMaps);
100100

101101
// Arrange
102-
_dataSourceMocker.SetupBatchForecastMock();
102+
_dataSourceMocker.SetupHistoricalBatchForecastMock();
103103

104104
// Act
105105
var exitCode = await InvokeCliAsync($"emissions-forecasts -l eastus -r 2022-09-01");

src/CarbonAware.DataSources/CarbonAware.DataSources.ElectricityMaps/mock/ElectricityMapDataSourceMocker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void SetupDataMock(DateTimeOffset start, DateTimeOffset end, string locat
126126
SetupResponseGivenGetRequest(Paths.PastRange, pastRange);
127127
}
128128

129-
public void SetupBatchForecastMock()
129+
public void SetupHistoricalBatchForecastMock()
130130
{
131131
throw new NotImplementedException();
132132
}

src/CarbonAware.DataSources/CarbonAware.DataSources.ElectricityMapsFree/mock/ElectricityMapsFreeDataSourceMocker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public void SetupForecastMock()
4949
throw new NotImplementedException();
5050
}
5151

52-
public void SetupBatchForecastMock()
52+
public void SetupHistoricalBatchForecastMock()
5353
{
5454
throw new NotImplementedException();
5555
}

src/CarbonAware.DataSources/CarbonAware.DataSources.Json/mock/JsonDataSourceMocker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void Initialize() { }
4242
public void Reset() { }
4343
public void Dispose() { }
4444

45-
public void SetupBatchForecastMock()
45+
public void SetupHistoricalBatchForecastMock()
4646
{
4747
throw new NotImplementedException();
4848
}

src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/mock/WattTimeDataSourceMocker.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public WattTimeDataSourceMocker()
2626
{
2727
_server = WireMockServer.Start();
2828
Environment.SetEnvironmentVariable("DataSources__Configurations__WattTime__BaseURL", _server.Url!);
29+
Environment.SetEnvironmentVariable("DataSources__Configurations__WattTime__AuthenticationBaseUrl", _server.Url!);
30+
2931
Initialize();
3032
}
3133

@@ -111,7 +113,7 @@ public void SetupForecastMock()
111113
SetupResponseGivenGetRequest(Paths.Forecast, JsonSerializer.Serialize(forecastResponse));
112114
}
113115

114-
public void SetupBatchForecastMock()
116+
public void SetupHistoricalBatchForecastMock()
115117
{
116118
var start = new DateTimeOffset(2021, 9, 1, 8, 30, 0, TimeSpan.Zero);
117119
var end = start + TimeSpan.FromDays(1.0);
@@ -142,14 +144,29 @@ public void SetupBatchForecastMock()
142144
GeneratedAt = new DateTimeOffset(2022, 1, 1, 0, 0, 0, TimeSpan.Zero)
143145
};
144146

145-
var forecastBatchData = new List<ForecastEmissionsDataResponse> {
146-
new ForecastEmissionsDataResponse()
147+
//var forecastBatchData = new List<ForecastEmissionsDataResponse> {
148+
// new ForecastEmissionsDataResponse()
149+
// {
150+
// Data = forecastData,
151+
// Meta = meta
152+
// }
153+
//};
154+
155+
var historicalForecastResponse = new HistoricalForecastEmissionsDataResponse()
156+
{
157+
Data = new List<HistoricalEmissionsData>()
147158
{
148-
Data = forecastData,
149-
Meta = meta
150-
}
159+
new HistoricalEmissionsData()
160+
{
161+
Forecast = forecastData,
162+
GeneratedAt = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero)
163+
}
164+
},
165+
Meta = meta
151166
};
152-
SetupResponseGivenGetRequest(Paths.Forecast, JsonSerializer.Serialize(forecastBatchData));
167+
168+
169+
SetupResponseGivenGetRequest(Paths.ForecastHistorical, JsonSerializer.Serialize(historicalForecastResponse));
153170
}
154171

155172
public void Initialize()
@@ -180,7 +197,7 @@ private void SetupResponseGivenGetRequest(string path, string body)
180197
);
181198
}
182199
private void SetupBaMock(RegionResponse? content = null) =>
183-
SetupResponseGivenGetRequest(Paths.BalancingAuthorityFromLocation, JsonSerializer.Serialize(content ?? defaultRegion));
200+
SetupResponseGivenGetRequest(Paths.RegionFromLocation, JsonSerializer.Serialize(content ?? defaultRegion));
184201

185202
private void SetupLoginMock(LoginResult? content = null) =>
186203
SetupResponseGivenGetRequest(Paths.Login, JsonSerializer.Serialize(content ?? defaultLoginResult));

src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Client/WattTimeClient.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,9 @@ public Task<ForecastEmissionsDataResponse> GetCurrentForecastAsync(RegionRespons
122122
var parameters = new Dictionary<string, string>()
123123
{
124124
{ QueryStrings.Region, region },
125-
{ QueryStrings.SignalType, SignalTypes.co2_moer },
126125
{ QueryStrings.StartTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) },
127-
{ QueryStrings.EndTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) }
126+
{ QueryStrings.EndTime, requestedAt.ToUniversalTime().ToString("O", CultureInfo.InvariantCulture) },
127+
{ QueryStrings.SignalType, SignalTypes.co2_moer }
128128
};
129129

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

216216
private async Task EnsureTokenAsync()
217217
{
218-
if (this._client.DefaultRequestHeaders.Authorization == null)
218+
if (this._authenticationClient.DefaultRequestHeaders.Authorization == null)
219219
{
220220
await this.UpdateAuthTokenAsync();
221221
}
@@ -249,7 +249,7 @@ private async Task UpdateAuthTokenAsync()
249249
private void SetBasicAuthenticationHeader()
250250
{
251251
var authToken = Encoding.UTF8.GetBytes($"{this._configuration.Username}:{this._configuration.Password}");
252-
this._client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
252+
//this._client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
253253
this._authenticationClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(AuthenticationHeaderTypes.Basic, Convert.ToBase64String(authToken));
254254
}
255255

@@ -311,7 +311,7 @@ private async Task<RegionResponse> GetBalancingAuthorityFromCacheAsync(string la
311311
{ QueryStrings.Longitude, longitude },
312312
{ QueryStrings.SignalType, SignalTypes.co2_moer }
313313
};
314-
var result = await this.MakeRequestGetStreamAsync(Paths.BalancingAuthorityFromLocation, parameters, tags);
314+
var result = await this.MakeRequestGetStreamAsync(Paths.RegionFromLocation, parameters, tags);
315315
var baValue = await JsonSerializer.DeserializeAsync<RegionResponse>(result, _options) ?? throw new WattTimeClientException($"Error getting Balancing Authority for latitude {latitude} and longitude {longitude}");
316316
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(_configuration.BalancingAuthorityCacheTTL);
317317
entry.Value = baValue;

src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Constants/Paths.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ internal class Paths
66
public const string Forecast = "forecast";
77

88
public const string ForecastHistorical = "forecast/historical";
9-
public const string BalancingAuthorityFromLocation = "region-from-loc";
9+
public const string RegionFromLocation = "region-from-loc";
1010
public const string Login = "login";
1111
public const string Historical = "historical";
1212
}

src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/WattTimeDataSource.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ public async Task<IEnumerable<EmissionsData>> GetCarbonIntensityAsync(Location l
6262
Logger.LogInformation($"Getting carbon intensity for location {location} for period {periodStartTime} to {periodEndTime}.");
6363
var balancingAuthority = await this.GetBalancingAuthority(location);
6464
var (newStartTime, newEndTime) = IntervalHelper.ExtendTimeByWindow(periodStartTime, periodEndTime, MinSamplingWindow);
65-
var historialResponse = await this.WattTimeClient.GetDataAsync(balancingAuthority, newStartTime, newEndTime);
65+
var historicalResponse = await this.WattTimeClient.GetDataAsync(balancingAuthority, newStartTime, newEndTime);
6666
if (Logger.IsEnabled(LogLevel.Debug))
6767
{
68-
Logger.LogDebug($"Found {historialResponse.Data.Count()} total forecasts for location {location} for period {periodStartTime} to {periodEndTime}.");
68+
Logger.LogDebug($"Found {historicalResponse.Data.Count()} total forecasts for location {location} for period {periodStartTime} to {periodEndTime}.");
6969
}
70-
var windowData = ConvertToEmissionsData(historialResponse);
70+
var windowData = ConvertToEmissionsData(historicalResponse);
7171
var filteredData = IntervalHelper.FilterByDuration(windowData, periodStartTime, periodEndTime);
7272

7373
if (!filteredData.Any())
Lines changed: 93 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,126 @@
1+
using CarbonAware.DataSources.WattTime.Constants;
2+
using CarbonAware.DataSources.WattTime.Model;
13
using System;
2-
using System.Text.Json.Nodes;
4+
using System.Collections.Generic;
5+
using System.Text.Json;
36

47
namespace CarbonAware.DataSources.WattTime.Client.Tests;
58

69
internal static class TestData
710
{
8-
internal static string GetGridDataJsonString()
11+
public class TestDataConstants
912
{
10-
var json = new JsonArray(
11-
new JsonObject
12-
{
13-
["ba"] = "ba",
14-
["datatype"] = "dt",
15-
["frequency"] = 300,
16-
["market"] = "mkt",
17-
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
18-
["value"] = 999.99,
19-
["version"] = "1.0"
20-
}
21-
);
13+
public const string Region = "TEST_REGION";
14+
public const string RegionFullName = "Test Region Full Name";
15+
public const string Market = "mkt";
16+
public static DateTimeOffset GeneratedAt = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero);
17+
public static DateTimeOffset PointTime = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero);
18+
public static DateTime Date = new DateTime(2099, 1, 1, 0, 0, 0);
19+
public const float Value = 999.99f;
20+
public const string Version = "1.0";
21+
}
22+
23+
internal static string GetGridDataResponseJsonString()
24+
{
25+
return JsonSerializer.Serialize(_GetGridDataResponse());
26+
}
27+
private static GridEmissionsDataResponse _GetGridDataResponse()
28+
{
29+
var gridEmissionDataResponse = new GridEmissionsDataResponse()
30+
{
31+
Meta = _GetGridDataMetaResponse(),
32+
Data = _GetGridEmissionDataPoints()
33+
};
34+
return gridEmissionDataResponse;
35+
}
36+
37+
private static GridEmissionsMetaData _GetGridDataMetaResponse()
38+
{
39+
var gridEmissionsMetaData = new GridEmissionsMetaData()
40+
{
41+
Region = TestDataConstants.Region,
42+
GeneratedAt = TestDataConstants.GeneratedAt,
43+
GeneratedAtPeriodSeconds = 30,
44+
Model = new GridEmissionsModelData()
45+
{
46+
Date = TestDataConstants.Date,
47+
Type = SignalTypes.co2_moer
48+
},
49+
DataPointPeriodSeconds = 30,
50+
SignalType = SignalTypes.co2_moer,
51+
Units = "co2_moer"
52+
};
53+
54+
return gridEmissionsMetaData;
55+
}
56+
private static List<GridEmissionDataPoint> _GetGridEmissionDataPoints()
57+
{
58+
return new List<GridEmissionDataPoint>()
59+
{
60+
_GetGridEmissionDataPoint()
61+
};
62+
}
2263

23-
return json.ToString();
64+
private static GridEmissionDataPoint _GetGridEmissionDataPoint()
65+
{
66+
return new GridEmissionDataPoint()
67+
{
68+
Frequency = 300,
69+
Market = TestDataConstants.Market,
70+
PointTime = TestDataConstants.PointTime,
71+
Value = TestDataConstants.Value,
72+
Version = TestDataConstants.Version
73+
};
2474
}
2575

2676
internal static string GetCurrentForecastJsonString()
2777
{
78+
return JsonSerializer.Serialize(_GetCurrentForecastEmissionsDataResponse());
79+
}
2880

29-
var json = new JsonObject
81+
private static ForecastEmissionsDataResponse _GetCurrentForecastEmissionsDataResponse()
82+
{
83+
return new ForecastEmissionsDataResponse()
3084
{
31-
["generated_at"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
32-
["forecast"] = new JsonArray
33-
{
34-
new JsonObject
35-
{
36-
["ba"] = "ba",
37-
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
38-
["value"] = 999.99,
39-
["version"] = "1.0"
40-
}
41-
}
85+
Data = _GetGridEmissionDataPoints(),
86+
Meta = _GetGridDataMetaResponse()
4287
};
88+
}
89+
4390

44-
return json.ToString();
91+
internal static string GetHistoricalForecastDataJsonString()
92+
{
93+
return JsonSerializer.Serialize(_GetHistoricalForecastEmissionsDataResponse());
4594
}
4695

47-
internal static string GetForecastByDateJsonString()
96+
private static HistoricalForecastEmissionsDataResponse _GetHistoricalForecastEmissionsDataResponse()
4897
{
49-
var json = new JsonArray
98+
return new HistoricalForecastEmissionsDataResponse()
5099
{
51-
new JsonObject
100+
Meta = _GetGridDataMetaResponse(),
101+
Data = new List<HistoricalEmissionsData>
52102
{
53-
["generated_at"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
54-
["forecast"] = new JsonArray
103+
new HistoricalEmissionsData()
55104
{
56-
new JsonObject
57-
{
58-
["ba"] = "ba",
59-
["point_time"] = new DateTimeOffset(2099, 1, 1, 0, 0, 0, TimeSpan.Zero),
60-
["value"] = 999.99,
61-
["version"] = "1.0"
62-
}
105+
Forecast = _GetGridEmissionDataPoints(),
106+
GeneratedAt = TestDataConstants.GeneratedAt
63107
}
64108
}
65109
};
110+
}
66111

67-
return json.ToString();
112+
internal static string GetRegionJsonString()
113+
{
114+
return JsonSerializer.Serialize(_GetRegion());
68115
}
69116

70-
internal static string GetBalancingAuthorityJsonString()
117+
private static RegionResponse _GetRegion()
71118
{
72-
var json = new JsonObject
119+
return new RegionResponse()
73120
{
74-
["id"] = "12345",
75-
["abbrev"] = "TEST_BA",
76-
["name"] = "Test Balancing Authority"
121+
Region = TestDataConstants.Region,
122+
RegionFullName = TestDataConstants.RegionFullName,
123+
SignalType = SignalTypes.co2_moer
77124
};
78-
79-
return json.ToString();
80125
}
81126
}

0 commit comments

Comments
 (0)