Skip to content

Allow Beta Package Creation #117

Allow Beta Package Creation

Allow Beta Package Creation #117

GitHub Actions / .NET Tests succeeded Nov 2, 2024 in 0s

492 passed, 0 failed and 0 skipped

Tests passed successfully

Report Passed Failed Skipped Time
src/TestResults/Aydsko.iRacingData.IntegrationTests.trx 43s
src/TestResults/net48/Aydsko.iRacingData.UnitTests.trx 164✅ 58s
src/TestResults/net6.0/Aydsko.iRacingData.UnitTests.trx 164✅ 48s
src/TestResults/net8.0/Aydsko.iRacingData.UnitTests.trx 164✅ 41s

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

No tests found

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

164 tests were completed in 58s with 164 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 78✅ 6s
Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests 2✅ 18ms
Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests 4✅ 2ms
Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests 8✅ 10ms
Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 2ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 6ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 40ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 158ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 9ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 14✅ 47ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 459ms
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 83ms
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
✅ GetLookupWithExpiredAuthWorksAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileFailsOnLoginWithGatewayTimeoutAsync
✅ GetMemberProfileFailsWithGatewayTimeoutAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonSuperSessionStandingsSuccessfulAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedDueToLegacyAuthenticationSettingThrowsErrorsAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListHostedSessionsCombinedSuccessfulAsync
✅ ListHostedSessionsSuccessfulAsync
✅ 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

✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ 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

164 tests were completed in 48s with 164 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 78✅ 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✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 0ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 3ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 4ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 5ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 80ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 5ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 14✅ 18ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 551ms
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 43ms
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
✅ GetLookupWithExpiredAuthWorksAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileFailsOnLoginWithGatewayTimeoutAsync
✅ GetMemberProfileFailsWithGatewayTimeoutAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonSuperSessionStandingsSuccessfulAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedDueToLegacyAuthenticationSettingThrowsErrorsAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListHostedSessionsCombinedSuccessfulAsync
✅ ListHostedSessionsSuccessfulAsync
✅ 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

✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ 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

164 tests were completed in 41s with 164 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Aydsko.iRacingData.UnitTests.CapturedResponseValidationTests 78✅ 3s
Aydsko.iRacingData.UnitTests.Converters.ServiceStatusHistoryItemArrayConverterConverterTests 2✅ 23ms
Aydsko.iRacingData.UnitTests.Converters.StatusTimeStampConverterTests 4✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.StringFromStringOrNumberConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.Converters.TenThousandthSecondDurationConverterTests 8✅ 23ms
Aydsko.iRacingData.UnitTests.Converters.TrackConfigNameNaConverterTests 10✅ 0ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanArrayConverterTests 8✅ 2ms
Aydsko.iRacingData.UnitTests.Converters.UtcOffsetToTimeSpanConverterTests 8✅ 1ms
Aydsko.iRacingData.UnitTests.CookiePersistenceTests 4✅ 7ms
Aydsko.iRacingData.UnitTests.DataClientTrackAssetScreenshotUrisTests 4✅ 124ms
Aydsko.iRacingData.UnitTests.DictionaryExtensionTests 6✅ 5ms
Aydsko.iRacingData.UnitTests.PasswordEncodingTests 14✅ 18ms
Aydsko.iRacingData.UnitTests.ServicesTests 2✅ 60ms
Aydsko.iRacingData.UnitTests.TrackScreenshotServiceTests 2✅ 51ms
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
✅ GetLookupWithExpiredAuthWorksAsync
✅ GetMemberChartDataSuccessfulAsync
✅ GetMemberDivisionSuccessfulAsync
✅ GetMemberInfoDuringMaintenanceThrowsAsync
✅ GetMemberInfoSucceedsAsync
✅ GetMemberParticipationCreditsSucceedsAsync
✅ GetMemberProfileFailsOnLoginWithGatewayTimeoutAsync
✅ GetMemberProfileFailsWithGatewayTimeoutAsync
✅ GetMemberProfileSuccessfulAsync
✅ GetMemberRecapSuccessfulAsync
✅ GetMemberRecentRacesSucceedsAsync
✅ GetMemberSummarySuccessfulAsync
✅ GetMemberYearlyStatisticsSuccessfulAsync
✅ GetPastSeasonsForSeriesSuccessfulAsync
✅ GetRaceGuideSuccessfulAsync
✅ GetSeasonDriverStandingsSuccessfulAsync
✅ GetSeasonQualifyResultsSuccessfulAsync
✅ GetSeasonResultsHandlesBadRequestAsync
✅ GetSeasonSuperSessionStandingsSuccessfulAsync
✅ GetSeasonsWithoutSeriesSuccessfulAsync
✅ GetSeasonsWithSeriesSuccessfulAsync
✅ GetSeasonTeamStandingsSuccessfulAsync
✅ GetSeasonTimeTrialResultsSuccessfulAsync
✅ GetSeasonTimeTrialStandingsSuccessfulAsync
✅ GetSeriesAssetsSuccessfulAsync
✅ GetSeriesSuccessfulAsync
✅ GetServiceStatusSuccessfulAsync
✅ GetSingleDriverSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetSingleDriverSubsessionLapsSuccessfulAsync
✅ GetSpectatorSubsessionDetailsSuccessfulAsync
✅ GetSpectatorSubsessionIdentifiersAsync
✅ GetStatisticsSeriesSuccessfulAsync
✅ GetSubsessionEventLogForbiddenThrowsErrorsAsync
✅ GetSubsessionEventLogSuccessfulAsync
✅ GetSubSessionLapChartSuccessfulAsync
✅ GetSubSessionResultForbiddenThrowsErrorsAsync
✅ GetSubSessionResultForLeagueSuccessfulAsync
✅ GetSubSessionResultForTeamSuccessfulAsync
✅ GetSubSessionResultSuccessfulAsync
✅ GetSubSessionResultUnauthorizedDueToLegacyAuthenticationSettingThrowsErrorsAsync
✅ GetSubSessionResultUnauthorizedThrowsErrorsAsync
✅ GetSubSessionResultWithWeatherSuccessfulAsync
✅ GetTeamSubsessionLapsForbiddenThrowsErrorsAsync
✅ GetTeamSubsessionLapsSuccessfulAsync
✅ GetTeamSuccessfulAsync
✅ GetTimeAttackMemberSeasonResultsSuccessfulAsync
✅ GetTimeAttackSeriesSuccessfulAsync
✅ GetTrackAssetsSuccessfulAsync
✅ GetTracksSuccessfulAsync
✅ GetWeatherForecastAsync
✅ GetWorldRecordStatisticsSuccessfulAsync
✅ ListHostedSessionsCombinedSuccessfulAsync
✅ ListHostedSessionsSuccessfulAsync
✅ 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

✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","MyPassWord","xGKecAR27ALXNuMLsGaG0v5Q9pSs2tZTZRKNgmHMg+Q=")
✅ LoginIsCalledIfCookiesAreExpiredAsync("[email protected]","SuperSecretPassword","nXmEFCdpHheD1R3XBVkm6VQavR7ZLbW7SRmzo/MfFso=")
✅ 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",[])