Skip to content

Implement Spectator Subsession Details Retrieval #66

Implement Spectator Subsession Details Retrieval

Implement Spectator Subsession Details Retrieval #66

GitHub Actions / .NET Tests succeeded Jun 13, 2024 in 0s

465 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
src/TestResults/Aydsko.iRacingData.IntegrationTests.trx 40s
src/TestResults/net48/Aydsko.iRacingData.UnitTests.trx 155✅ 59s
src/TestResults/net6.0/Aydsko.iRacingData.UnitTests.trx 155✅ 61s
src/TestResults/net8.0/Aydsko.iRacingData.UnitTests.trx 155✅ 40s

✅ src/TestResults/Aydsko.iRacingData.IntegrationTests.trx

No tests found

✅ src/TestResults/net48/Aydsko.iRacingData.UnitTests.trx

155 tests were completed in 59s with 155 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 71✅ 7s
Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests 2✅ 13ms
Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests 4✅ 2ms
Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests 8✅ 7ms
Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests 8✅ 2ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 4ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 37ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 193ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 10ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 12✅ 35ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 2s
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 84ms
Aydsko.iRacingData.UnitTests.UrlExtensionsTests 6✅ 3ms

✅ Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests

✅ GetBestLapStatisticsSuccessfulAsync
✅ GetCarAssetDetailsSuccessfulAsync
✅ GetCarClassesSuccessfulAsync
✅ GetCarsSuccessfulAsync
✅ GetCategoriesSuccessfulAsync
✅ GetClubHistoryLookupsSuccessfulAsync
✅ GetCountriesSuccessfulAsync
✅ GetCustomerLeagueSessionsAsync
✅ GetDivisionsSuccessfulAsync
✅ GetDriverAwardsSuccessfulAsync
✅ GetDriverInfoWithLicensesSuccessfulAsync
✅ GetDriverInfoWithoutLicensesSuccessfulAsync
✅ GetEventTypesSuccessfulAsync
✅ GetHostedSessionsCombinedSuccessfulAsync
✅ GetHostedSessionsSuccessfulAsync
✅ GetLeaguePointsSystemsSuccessfulAsync
✅ GetLeagueWithLicensesSucceedsAsync
✅ GetLeagueWithoutLicensesSucceedsAsync
✅ GetLicenseLookupsSuccessfulAsync
✅ GetLookupsSuccessfulAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListSeasonsSuccessfulAsync
✅ SearchDriversSuccessfulAsync
✅ SearchHostedResultsSuccessfulAsync
✅ SearchLeagueDirectorySuccessfulAsync
✅ SearchOfficialResultsSuccessfulAsync

✅ Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests

✅ Read Value: 11:29:57 to 11:30:57 27 Jan 2023
✅ Write Value: 11:29:57 to 11:30:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests

✅ Read Value: 11:19:12 27-Jan-2023
✅ Read Value: 22:29:57 27 Jan 2023
✅ Write Value: 11:19:12 27-Jan-2023
✅ Write Value: 22:29:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests

✅ Read Value: JSON Null value
✅ Read Value: JSON Number value of 1
✅ Read Value: JSON Number value of zero
✅ Read Value: JSON String value of 'ABC123'
✅ Write Value: JSON Null value
✅ Write Value: JSON Number value of 1
✅ Write Value: JSON Number value of zero
✅ Write Value: JSON String value of 'ABC123'

✅ Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests

✅ Read Value: 0 / 0:00.000
✅ Read Value: 600000 / 1:00.000
✅ Read Value: 834560 / 1:23.456
✅ Read Value: null / null
✅ Write Value: 0 / 0:00.000
✅ Write Value: 600000 / 1:00.000
✅ Write Value: 834560 / 1:23.456
✅ Write Value: null / null

✅ Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests

✅ Read Value: Value "" returns null
✅ Read Value: Value "Grand Prix" returns that
✅ Read Value: Value "International" returns that
✅ Read Value: Value "n/a" returns null
✅ Read Value: Value "n/A" returns null
✅ Read Value: Value "N/a" returns null
✅ Read Value: Value "N/A" returns null
✅ Write Value: Value "Grand Prix" returns that
✅ Write Value: Value "International" returns that
✅ Write Value: Value "N/A" returns null

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests

✅ Read Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Read Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Read Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Read Value: Value [630] returns [TimeSpan.FromHours(10.5)]
✅ Write Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Write Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Write Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Write Value: Value [630] returns [TimeSpan.FromHours(10.5)]

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests

✅ Read Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Read Value: Value 0 returns TimeSpan.Zero
✅ Read Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Read Value: Value 14400 returns TimeSpan.FromHours(4)
✅ Write Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Write Value: Value 0 returns TimeSpan.Zero
✅ Write Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Write Value: Value 14400 returns TimeSpan.FromHours(4)

✅ Aydsko.iRacingData.UnitTests.CookiePersistenceTests

✅ GivenACookieContainerWithCookiesAndNoRestoreOrSaveFunctionsThenTheCookiesAreUsedAsync
✅ GivenOptionsWithARestoreFuncTheFuncIsCalledToGetTheCookiesAsync
✅ GivenOptionsWithASaveActionTheSaveActionIsCalledWithTheCookiesAsync
✅ GivenOptionsWithNullDelegateValuesWhenAMethodIsCalledThenItWillSucceedAsync

✅ Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests

✅ GivenHungaroringTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenHungaroringTrackId_ThenGetTrackAssetScreenshotUrisAsyncReturnsCorrectResultsAsync
✅ GivenSuzukaTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.DictionaryExtensionTests

✅ CheckAddParameterIfNotNull<Boolean>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Boolean])
✅ CheckAddParameterIfNotNull<DateTime>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.DateTime])
✅ CheckAddParameterIfNotNull<EventType>(Aydsko.iRacingData.UnitTests.ExampleData`1[Aydsko.iRacingData.Common.EventType])
✅ CheckAddParameterIfNotNull<IEnumerable`1>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Collections.Generic.IEnumerable`1[System.String]])
✅ CheckAddParameterIfNotNull<Int32[]>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Int32[]])
✅ CheckAddParameterIfNotNull<String>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.String])

✅ Aydsko.iRacingData.UnitTests.PasswordEncodingTests

✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")

✅ Aydsko.iRacingData.UnitTests.ServicesTests

✅ LoginAndUserAgentDefaultWorksWhenResolvedFromServicesAsync
✅ LoginAndUserAgentWorksWhenResolvedFromServicesAsync

✅ Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests

✅ GivenHungaroringTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.UrlExtensionsTests

✅ ValidateToUrlWithQueryMethod("https://example.com?a=b",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[=&?, =?&=?&]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, System.String[]]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[])

✅ src/TestResults/net6.0/Aydsko.iRacingData.UnitTests.trx

155 tests were completed in 61s with 155 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 71✅ 5s
Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests 2✅ 3ms
Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests 4✅ 0ms
Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests 8✅ 0ms
Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests 8✅ 32ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 0ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 4ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 92ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 203ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 5ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 12✅ 13ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 1s
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 39ms
Aydsko.iRacingData.UnitTests.UrlExtensionsTests 6✅ 0ms

✅ Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests

✅ GetBestLapStatisticsSuccessfulAsync
✅ GetCarAssetDetailsSuccessfulAsync
✅ GetCarClassesSuccessfulAsync
✅ GetCarsSuccessfulAsync
✅ GetCategoriesSuccessfulAsync
✅ GetClubHistoryLookupsSuccessfulAsync
✅ GetCountriesSuccessfulAsync
✅ GetCustomerLeagueSessionsAsync
✅ GetDivisionsSuccessfulAsync
✅ GetDriverAwardsSuccessfulAsync
✅ GetDriverInfoWithLicensesSuccessfulAsync
✅ GetDriverInfoWithoutLicensesSuccessfulAsync
✅ GetEventTypesSuccessfulAsync
✅ GetHostedSessionsCombinedSuccessfulAsync
✅ GetHostedSessionsSuccessfulAsync
✅ GetLeaguePointsSystemsSuccessfulAsync
✅ GetLeagueWithLicensesSucceedsAsync
✅ GetLeagueWithoutLicensesSucceedsAsync
✅ GetLicenseLookupsSuccessfulAsync
✅ GetLookupsSuccessfulAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListSeasonsSuccessfulAsync
✅ SearchDriversSuccessfulAsync
✅ SearchHostedResultsSuccessfulAsync
✅ SearchLeagueDirectorySuccessfulAsync
✅ SearchOfficialResultsSuccessfulAsync

✅ Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests

✅ Read Value: 11:29:57 to 11:30:57 27 Jan 2023
✅ Write Value: 11:29:57 to 11:30:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests

✅ Read Value: 11:19:12 27-Jan-2023
✅ Read Value: 22:29:57 27 Jan 2023
✅ Write Value: 11:19:12 27-Jan-2023
✅ Write Value: 22:29:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests

✅ Read Value: JSON Null value
✅ Read Value: JSON Number value of 1
✅ Read Value: JSON Number value of zero
✅ Read Value: JSON String value of 'ABC123'
✅ Write Value: JSON Null value
✅ Write Value: JSON Number value of 1
✅ Write Value: JSON Number value of zero
✅ Write Value: JSON String value of 'ABC123'

✅ Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests

✅ Read Value: 0 / 0:00.000
✅ Read Value: 600000 / 1:00.000
✅ Read Value: 834560 / 1:23.456
✅ Read Value: null / null
✅ Write Value: 0 / 0:00.000
✅ Write Value: 600000 / 1:00.000
✅ Write Value: 834560 / 1:23.456
✅ Write Value: null / null

✅ Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests

✅ Read Value: Value "" returns null
✅ Read Value: Value "Grand Prix" returns that
✅ Read Value: Value "International" returns that
✅ Read Value: Value "n/a" returns null
✅ Read Value: Value "n/A" returns null
✅ Read Value: Value "N/a" returns null
✅ Read Value: Value "N/A" returns null
✅ Write Value: Value "Grand Prix" returns that
✅ Write Value: Value "International" returns that
✅ Write Value: Value "N/A" returns null

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests

✅ Read Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Read Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Read Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Read Value: Value [630] returns [TimeSpan.FromHours(10.5)]
✅ Write Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Write Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Write Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Write Value: Value [630] returns [TimeSpan.FromHours(10.5)]

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests

✅ Read Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Read Value: Value 0 returns TimeSpan.Zero
✅ Read Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Read Value: Value 14400 returns TimeSpan.FromHours(4)
✅ Write Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Write Value: Value 0 returns TimeSpan.Zero
✅ Write Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Write Value: Value 14400 returns TimeSpan.FromHours(4)

✅ Aydsko.iRacingData.UnitTests.CookiePersistenceTests

✅ GivenACookieContainerWithCookiesAndNoRestoreOrSaveFunctionsThenTheCookiesAreUsedAsync
✅ GivenOptionsWithARestoreFuncTheFuncIsCalledToGetTheCookiesAsync
✅ GivenOptionsWithASaveActionTheSaveActionIsCalledWithTheCookiesAsync
✅ GivenOptionsWithNullDelegateValuesWhenAMethodIsCalledThenItWillSucceedAsync

✅ Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests

✅ GivenHungaroringTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenHungaroringTrackId_ThenGetTrackAssetScreenshotUrisAsyncReturnsCorrectResultsAsync
✅ GivenSuzukaTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.DictionaryExtensionTests

✅ CheckAddParameterIfNotNull<Boolean>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Boolean])
✅ CheckAddParameterIfNotNull<DateTime>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.DateTime])
✅ CheckAddParameterIfNotNull<EventType>(Aydsko.iRacingData.UnitTests.ExampleData`1[Aydsko.iRacingData.Common.EventType])
✅ CheckAddParameterIfNotNull<IEnumerable`1>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Collections.Generic.IEnumerable`1[System.String]])
✅ CheckAddParameterIfNotNull<Int32[]>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Int32[]])
✅ CheckAddParameterIfNotNull<String>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.String])

✅ Aydsko.iRacingData.UnitTests.PasswordEncodingTests

✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")

✅ Aydsko.iRacingData.UnitTests.ServicesTests

✅ LoginAndUserAgentDefaultWorksWhenResolvedFromServicesAsync
✅ LoginAndUserAgentWorksWhenResolvedFromServicesAsync

✅ Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests

✅ GivenHungaroringTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.UrlExtensionsTests

✅ ValidateToUrlWithQueryMethod("https://example.com?a=b",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[=&?, =?&=?&]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, System.String[]]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[])

✅ src/TestResults/net8.0/Aydsko.iRacingData.UnitTests.trx

155 tests were completed in 40s with 155 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 71✅ 2s
Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests 2✅ 4ms
Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests 4✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 3ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 9ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 80ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 7ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 12✅ 33ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 62ms
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 37ms
Aydsko.iRacingData.UnitTests.UrlExtensionsTests 6✅ 1ms

✅ Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests

✅ GetBestLapStatisticsSuccessfulAsync
✅ GetCarAssetDetailsSuccessfulAsync
✅ GetCarClassesSuccessfulAsync
✅ GetCarsSuccessfulAsync
✅ GetCategoriesSuccessfulAsync
✅ GetClubHistoryLookupsSuccessfulAsync
✅ GetCountriesSuccessfulAsync
✅ GetCustomerLeagueSessionsAsync
✅ GetDivisionsSuccessfulAsync
✅ GetDriverAwardsSuccessfulAsync
✅ GetDriverInfoWithLicensesSuccessfulAsync
✅ GetDriverInfoWithoutLicensesSuccessfulAsync
✅ GetEventTypesSuccessfulAsync
✅ GetHostedSessionsCombinedSuccessfulAsync
✅ GetHostedSessionsSuccessfulAsync
✅ GetLeaguePointsSystemsSuccessfulAsync
✅ GetLeagueWithLicensesSucceedsAsync
✅ GetLeagueWithoutLicensesSucceedsAsync
✅ GetLicenseLookupsSuccessfulAsync
✅ GetLookupsSuccessfulAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListSeasonsSuccessfulAsync
✅ SearchDriversSuccessfulAsync
✅ SearchHostedResultsSuccessfulAsync
✅ SearchLeagueDirectorySuccessfulAsync
✅ SearchOfficialResultsSuccessfulAsync

✅ Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests

✅ Read Value: 11:29:57 to 11:30:57 27 Jan 2023
✅ Write Value: 11:29:57 to 11:30:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests

✅ Read Value: 11:19:12 27-Jan-2023
✅ Read Value: 22:29:57 27 Jan 2023
✅ Write Value: 11:19:12 27-Jan-2023
✅ Write Value: 22:29:57 27 Jan 2023

✅ Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests

✅ Read Value: JSON Null value
✅ Read Value: JSON Number value of 1
✅ Read Value: JSON Number value of zero
✅ Read Value: JSON String value of 'ABC123'
✅ Write Value: JSON Null value
✅ Write Value: JSON Number value of 1
✅ Write Value: JSON Number value of zero
✅ Write Value: JSON String value of 'ABC123'

✅ Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests

✅ Read Value: 0 / 0:00.000
✅ Read Value: 600000 / 1:00.000
✅ Read Value: 834560 / 1:23.456
✅ Read Value: null / null
✅ Write Value: 0 / 0:00.000
✅ Write Value: 600000 / 1:00.000
✅ Write Value: 834560 / 1:23.456
✅ Write Value: null / null

✅ Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests

✅ Read Value: Value "" returns null
✅ Read Value: Value "Grand Prix" returns that
✅ Read Value: Value "International" returns that
✅ Read Value: Value "n/a" returns null
✅ Read Value: Value "n/A" returns null
✅ Read Value: Value "N/a" returns null
✅ Read Value: Value "N/A" returns null
✅ Write Value: Value "Grand Prix" returns that
✅ Write Value: Value "International" returns that
✅ Write Value: Value "N/A" returns null

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests

✅ Read Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Read Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Read Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Read Value: Value [630] returns [TimeSpan.FromHours(10.5)]
✅ Write Value: Value [-240] returns [TimeSpan.FromHours(-4)]
✅ Write Value: Value [0,0] returns [TimeSpan.Zero,TimeSpan.Zero]
✅ Write Value: Value [240,0] returns [TimeSpan.FromHours(4),TimeSpan.Zero]
✅ Write Value: Value [630] returns [TimeSpan.FromHours(10.5)]

✅ Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests

✅ Read Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Read Value: Value 0 returns TimeSpan.Zero
✅ Read Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Read Value: Value 14400 returns TimeSpan.FromHours(4)
✅ Write Value: Value -14400 returns TimeSpan.FromHours(-4)
✅ Write Value: Value 0 returns TimeSpan.Zero
✅ Write Value: Value 14400 returns TimeSpan.FromHours(10.5)
✅ Write Value: Value 14400 returns TimeSpan.FromHours(4)

✅ Aydsko.iRacingData.UnitTests.CookiePersistenceTests

✅ GivenACookieContainerWithCookiesAndNoRestoreOrSaveFunctionsThenTheCookiesAreUsedAsync
✅ GivenOptionsWithARestoreFuncTheFuncIsCalledToGetTheCookiesAsync
✅ GivenOptionsWithASaveActionTheSaveActionIsCalledWithTheCookiesAsync
✅ GivenOptionsWithNullDelegateValuesWhenAMethodIsCalledThenItWillSucceedAsync

✅ Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests

✅ GivenHungaroringTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenHungaroringTrackId_ThenGetTrackAssetScreenshotUrisAsyncReturnsCorrectResultsAsync
✅ GivenSuzukaTrack_ThenGetTrackAssetScreenshotUrisReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.DictionaryExtensionTests

✅ CheckAddParameterIfNotNull<Boolean>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Boolean])
✅ CheckAddParameterIfNotNull<DateTime>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.DateTime])
✅ CheckAddParameterIfNotNull<EventType>(Aydsko.iRacingData.UnitTests.ExampleData`1[Aydsko.iRacingData.Common.EventType])
✅ CheckAddParameterIfNotNull<IEnumerable`1>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Collections.Generic.IEnumerable`1[System.String]])
✅ CheckAddParameterIfNotNull<Int32[]>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.Int32[]])
✅ CheckAddParameterIfNotNull<String>(Aydsko.iRacingData.UnitTests.ExampleData`1[System.String])

✅ Aydsko.iRacingData.UnitTests.PasswordEncodingTests

✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsNotCalledIfCookiesAreSuccessfullyRestoredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaMethodWithPasswordIsEncodedParamAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","MyPassWord",False,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=",True,"xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=",True,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ ValidateLoginRequestViaOptionsAsync("[email protected]","SuperSecretPassword",False,"nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")

✅ Aydsko.iRacingData.UnitTests.ServicesTests

✅ LoginAndUserAgentDefaultWorksWhenResolvedFromServicesAsync
✅ LoginAndUserAgentWorksWhenResolvedFromServicesAsync

✅ Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests

✅ GivenHungaroringTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync
✅ GivenSuzukaTrackId_ThenGetScreenshotsByTrackIdReturnsCorrectResultsAsync

✅ Aydsko.iRacingData.UnitTests.UrlExtensionsTests

✅ ValidateToUrlWithQueryMethod("https://example.com?a=b",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[=&?, =?&=?&]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar], [baz, bat]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, bar]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[[foo, System.String[]]])
✅ ValidateToUrlWithQueryMethod("https://example.com",[])