From bcbcba00495874a962f4672019ab4b94510d2803 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 28 May 2024 22:28:12 -0700
Subject: [PATCH 1/4] Bump
Microsoft.AspNetCore.Components.WebAssembly.DevServer (#231)
---
samples/GitStatus.Web/GitStatus.Web.csproj | 46 +++++++++++-----------
1 file changed, 23 insertions(+), 23 deletions(-)
diff --git a/samples/GitStatus.Web/GitStatus.Web.csproj b/samples/GitStatus.Web/GitStatus.Web.csproj
index 2fc4ddd..a2e9d14 100644
--- a/samples/GitStatus.Web/GitStatus.Web.csproj
+++ b/samples/GitStatus.Web/GitStatus.Web.csproj
@@ -1,23 +1,23 @@
-
-
-
- $(LatestSupportedNetVersion)
- service-worker-assets.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ $(LatestSupportedNetVersion)
+ service-worker-assets.js
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 38259e6d23ccd0c69a2469ad34f2d91c2ba197d7 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 28 May 2024 22:30:50 -0700
Subject: [PATCH 2/4] Bump Microsoft.AspNetCore.Components.WebAssembly and
System.Text.Json (#232)
---
samples/GitStatus.Web/GitStatus.Web.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/GitStatus.Web/GitStatus.Web.csproj b/samples/GitStatus.Web/GitStatus.Web.csproj
index a2e9d14..5734d6b 100644
--- a/samples/GitStatus.Web/GitStatus.Web.csproj
+++ b/samples/GitStatus.Web/GitStatus.Web.csproj
@@ -6,7 +6,7 @@
-
+
From 9d85050f467dc6b2df2e1009785bb882379db524 Mon Sep 17 00:00:00 2001
From: Brandon Minnick <13558917+brminnick@users.noreply.github.com>
Date: Mon, 23 Sep 2024 05:42:09 -0700
Subject: [PATCH 3/4] Migrate to shields.io
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5e67457..374ca06 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,7 @@
| GitHubApiStatus | GitHubApiStatus.Extensions |
| --------------- | -------------------------- |
-| [](https://www.nuget.org/packages/GitHubApiStatus/) | [](https://www.nuget.org/packages/GitHubApiStatus.Extensions/) |
+| [](https://www.nuget.org/packages/GitHubApiStatus/) [](https://www.nuget.org/packages/GitHubApiStatus/) | [](https://www.nuget.org/packages/GitHubApiStatus.Extensions/) [](https://www.nuget.org/packages/GitHubApiStatus.Extensions/) |
GitHubApiStatus makes it easy to understand GitHub's API Rate Limit!
From 26c5ae40ca86fabc02000ad9d569d059b66cedc2 Mon Sep 17 00:00:00 2001
From: Brandon Minnick <13558917+brminnick@users.noreply.github.com>
Date: Thu, 14 Nov 2024 15:22:45 -0800
Subject: [PATCH 4/4] Support .NET 9 (#233)
* Update for .NET 9
* Fix Errors
* Update Unit Test forNUnit FluentAssertions
* Fix Failing Unit Tests
* Update build.yml
* Add `AfterAllTests()`
* Ensure IGitHubApiStatusService inherits from IDisposable
* Update tests for `IDisposable`
* Update for .NET 9 GA
* Update GitStatus.Mobile.csproj
* Update GitHubApiStatusServiceExtensionsTests.cs
* Update build.yml
* Add `partial`
* Update GitStatus.Mobile.csproj
---
.github/workflows/build.yml | 81 ++++----
.github/workflows/unittests.yml | 3 +-
Directory.Build.props | 95 ++++++---
GitHubApiStatus.sln | 18 +-
GitStatus.Common/Constants/GitHubConstants.cs | 9 +
GitStatus.Common/GitStatus.Common.csproj | 7 +
global.json | 7 +-
samples/GitStatus.API/GitStatus.API.csproj | 12 +-
samples/GitStatus.API/Program.cs | 14 +-
.../GitStatus.ConsoleApp.csproj | 4 +-
samples/GitStatus.ConsoleApp/Program.cs | 2 +-
samples/GitStatus.Mobile/App.cs | 10 +-
samples/GitStatus.Mobile/AppShell.cs | 2 +-
.../GitStatus.Mobile/GitStatus.Mobile.csproj | 31 +--
samples/GitStatus.Mobile/MauiProgram.cs | 4 +-
.../Pages/Base/BaseContentPage.cs | 2 +-
.../Pages/Base/BaseStatusPage.cs | 4 +-
.../Pages/GraphQLApiStatusPage.cs | 2 +-
.../Pages/RestApiStatusPage.cs | 2 +-
.../ViewModels/Base/BaseStatusViewModel.cs | 11 +-
.../ViewModels/Base/BaseViewModel.cs | 2 +-
.../ViewModels/GraphQLApiStatusViewModel.cs | 16 +-
.../ViewModels/RestApiStatusViewModel.cs | 16 +-
.../Constants/GitHubConstants.cs | 9 -
.../GitStatus.Shared.projitems | 17 --
.../GitStatus.Shared/GitStatus.Shared.shproj | 11 -
samples/GitStatus.Web/GitStatus.Web.csproj | 12 +-
samples/GitStatus.Web/Program.cs | 8 +-
...itHubApiStatus.Extensions.UnitTests.csproj | 15 +-
.../GitHubApiStatusServiceExtensionsTests.cs | 193 +++++++++---------
.../MockGitHubApiStatusService.cs | 7 +-
.../GitHubApiStatus.Extensions.csproj | 118 +++++------
.../GitHubApiStatus.UnitTests.csproj | 12 +-
.../Tests/Base/BaseTest.cs | 31 ++-
...tApiRateLimitsTests_NoCancellationToken.cs | 146 ++++++-------
...piRateLimitsTests_WithCancellationToken.cs | 148 +++++++-------
.../Tests/GetRateLimitRestDateTimeTests.cs | 22 +-
.../Tests/GetRateLimitTests.cs | 9 +-
.../Tests/GetRateLimitTimeRemainingTests.cs | 16 +-
.../Tests/GetRemainingRequestCountTests.cs | 10 +-
.../GitHubApiStatusServiceConstructorTests.cs | 74 ++++---
.../HasReachedMaximumApiCallLimitTests.cs | 13 +-
.../HttpResponseHeadersExtensionsTests.cs | 26 ++-
.../Tests/IsAbuseRateLimitTest.cs | 88 ++++----
...IsResponseFromAuthenticatedRequestTests.cs | 16 +-
.../Tests/ProductHeaderValueTests.cs | 52 +++--
.../SetAuthenticationHeaderValueTests.cs | 41 ++--
src/GitHubApiStatus/GitHubApiStatus.csproj | 181 ++++++++--------
.../Interfaces/IGitHubApiRateLimitResponse.cs | 2 +-
.../Interfaces/IGitHubApiRateLimits.cs | 12 +-
.../Interfaces/IGitHubApiStatusService.cs | 2 +-
.../Interfaces/IRateLimitStatus.cs | 10 +-
.../Services/GitHubApiStatusService.cs | 2 +-
53 files changed, 912 insertions(+), 745 deletions(-)
create mode 100644 GitStatus.Common/Constants/GitHubConstants.cs
create mode 100644 GitStatus.Common/GitStatus.Common.csproj
delete mode 100644 samples/GitStatus.Shared/Constants/GitHubConstants.cs
delete mode 100644 samples/GitStatus.Shared/GitStatus.Shared.projitems
delete mode 100644 samples/GitStatus.Shared/GitStatus.Shared.shproj
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 6a79cc4..51d5d90 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,12 +13,12 @@ jobs:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: "8.0.x"
+ dotnet-version: '9.0.x'
- name: Install .NET MAUI Workload
run: |
@@ -32,18 +32,18 @@ jobs:
MobileProjectDirectory=`dirname $MobileProject`
echo $MobileProjectDirectory
- dotnet build $MobileProjectDirectory -f:net8.0-android -c Release
+ dotnet build $MobileProjectDirectory -f:net9.0-android -c Release
iOS:
- runs-on: macos-13
+ runs-on: macos-15
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: "8.0.x"
+ dotnet-version: '9.0.x'
- name: Install .NET MAUI Workload
run: |
@@ -62,18 +62,18 @@ jobs:
MobileProjectDirectory=`dirname $MobileProject`
echo $MobileProjectDirectory
- dotnet build $MobileProjectDirectory -f:net8.0-ios -c Release
+ dotnet build $MobileProjectDirectory -f:net9.0-ios -c Release
MacCatalyst:
- runs-on: macos-13
+ runs-on: macos-15
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: "8.0.x"
+ dotnet-version: '9.0.x'
- name: Install .NET MAUI Workload
run: |
@@ -92,23 +92,23 @@ jobs:
MobileProjectDirectory=`dirname $MobileProject`
echo $MobileProjectDirectory
- dotnet build $MobileProjectDirectory -f:net8.0-maccatalyst -c Release
+ dotnet build $MobileProjectDirectory -f:net9.0-maccatalyst -c Release
Windows:
runs-on: windows-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - uses: actions/setup-java@v3
+ - uses: actions/setup-java@v4
with:
distribution: 'microsoft'
- java-version: '11'
+ java-version: '17'
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: "8.0.x"
+ dotnet-version: '9.0.x'
- name: Install .NET MAUI Workload
run: |
@@ -116,18 +116,18 @@ jobs:
- name: Build Windows App
run: |
- dotnet build ./samples/GitStatus.Mobile/ -c Release -f net8.0-windows10.0.19041.0
+ dotnet build ./samples/GitStatus.Mobile/ -c Release -f net9.0-windows10.0.19041.0
API:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: '8.0.x'
+ dotnet-version: '9.0.x'
- name: Build API App
run: |
@@ -143,12 +143,12 @@ jobs:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: '8.0.x'
+ dotnet-version: '9.0.x'
- name: Build Console App
run: |
@@ -164,12 +164,12 @@ jobs:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: '8.0.x'
+ dotnet-version: '9.0.x'
- name: Build Web App
run: |
@@ -185,12 +185,13 @@ jobs:
runs-on: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- - name: Setup .NET v8.0
- uses: actions/setup-dotnet@v3
+ - name: Setup .NET v9.0
+ uses: actions/setup-dotnet@v4
with:
- dotnet-version: '8.0.x'
+ dotnet-version: '9.0.x'
+
- name: Build Web App
run: |
diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml
index ecdd347..dbd99a9 100644
--- a/.github/workflows/unittests.yml
+++ b/.github/workflows/unittests.yml
@@ -10,7 +10,7 @@ on:
jobs:
UnitTests:
- runs-on: macos-latest
+ runs-on: macos-15
env:
GitHubPersonalAccessToken: ${{ secrets.GitHubPersonalAccessToken }}
@@ -22,6 +22,7 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
+ 9.0.x
8.0.x
7.0.x
6.0.x
diff --git a/Directory.Build.props b/Directory.Build.props
index bd4676f..cd17588 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -2,41 +2,90 @@
enable
- NETSDK1023
- false
- latest
+ 4.0.0
+ preview
+ true
enable
+ net9.0
true
true
- net8.0
true
false
+
+
+ 9.0.10
+ true
true
+ true
+
+
+ enable
+ all
+
+
+ false
+ false
- nullable,CS0419,CS1570,CS1571,CS1572,CS1573,CS1574,CS1580,CS1581,CS1584,CS1587,CS1589,CS1590,CS1591,CS1592,CS1598,CS1658,CS1710,CS1711,CS1712,CS1723,CS1734,xUnit1012,xUnit2021
+ CS1734: XML comment has a paramref tag, but there is no parameter by that name
+ CsWinRT1028: Class implements WinRT interfaces but isn't marked partial
+ CsWinRT1030: Class implements WinRT interfaces that require unsafe code
+ XC0045: Binding: Property not found
+ XC0103: Consider attributing the markup extension with [RequireService] or [AcceptEmptyServiceProvider] if it doesn't require any
+ NU1900 Error communicating with package source, while getting vulnerability information.
+ NU1901 Package with low severity detected
+ NU1902 Package with moderate severity detected
+ NU1903 Package with high severity detected
+ NU1904 Package with critical severity detected
+ NU1905 An audit source does not provide a vulnerability database
+ NUnit*: NUnit Analyzers
+ IL2***: Trim Warnings
+ IL3***: AOT Warnings-->
+
+ nullable,
+ CS0419,CS0618,CS1570,CS1571,CS1572,CS1573,CS1574,CS1580,CS1581,CS1584,CS1587,CS1589,CS1590,CS1591,CS1592,CS1598,CS1658,CS1710,CS1711,CS1712,CS1723,CS1734,
+ CsWinRT1028,CsWinRT1030,
+ XC0045,XC0103,
+ NU1900,NU1901,NU1902,NU1903,NU1904,NU1905,
+ NUnit1001,NUnit1002,NUnit1003,NUnit1004,NUnit1005,NUnit1006,NUnit1007,NUnit1008,NUnit1009,NUnit1010,NUnit1011,NUnit1012,NUnit1013,NUnit1014,NUnit1015,NUnit1016,NUnit1017,NUnit1018,NUnit1019,NUnit1020,NUnit1021,NUnit1022,NUnit1023,NUnit1024,NUnit1025,NUnit1026,NUnit1027,NUnit1028,NUnit1029,NUnit1030,NUnit1031,NUnit1032,NUnit1033,
+ NUnit2001,NUnit2002,NUnit2003,NUnit2004,NUnit2005,NUnit2006,NUnit2007,NUnit2008,NUnit2009,NUnit2010,NUnit2011,NUnit2012,NUnit2013,NUnit2014,NUnit2015,NUnit2016,NUnit2017,NUnit2018,NUnit2019,NUnit2020,NUnit2021,NUnit2022,NUnit2023,NUnit2024,NUnit2025,NUnit2026,NUnit2027,NUnit2028,NUnit2029,NUnit2030,NUnit2031,NUnit2032,NUnit2033,NUnit2034,NUnit2035,NUnit2036,NUnit2037,NUnit2038,NUnit2039,NUnit2040,NUnit2041,NUnit2042,NUnit2043,NUnit2044,NUnit2045,NUnit2046,NUnit2047,NUnit2048,NUnit2049,NUnit2050,
+ NUnit3001,NUnit3002,NUnit3003,NUnit3004,
+ NUnit4001,
+ IL2001,IL2002,IL2003,IL2004,IL2005,IL2006,IL2007,IL2008,IL2009,
+ IL2010,IL2011,IL2012,IL2013,IL2014,IL2015,IL2016,IL2017,IL2018,IL2019,
+ IL2020,IL2021,IL2022,IL2023,IL2024,IL2025,IL2026,IL2027,IL2028,IL2029,
+ IL2030,IL2031,IL2032,IL2033,IL2034,IL2035,IL2036,IL2037,IL2038,IL2039,
+ IL2040,IL2041,IL2042,IL2043,IL2044,IL2045,IL2046,IL2047,IL2048,IL2049,
+ IL2050,IL2051,IL2052,IL2053,IL2054,IL2055,IL2056,IL2057,IL2058,IL2059,
+ IL2060,IL2061,IL2062,IL2063,IL2064,IL2065,IL2066,IL2067,IL2068,IL2069,
+ IL2070,IL2071,IL2072,IL2073,IL2074,IL2075,IL2076,IL2077,IL2078,IL2079,
+ IL2080,IL2081,IL2082,IL2083,IL2084,IL2085,IL2086,IL2087,IL2088,IL2089,
+ IL2090,IL2091,IL2092,IL2093,IL2094,IL2095,IL2096,IL2097,IL2098,IL2099,
+ IL2100,IL2101,IL2102,IL2103,IL2104,IL2105,IL2106,IL2107,IL2108,IL2109,
+ IL2110,IL2111,IL2112,IL2113,IL2114,IL2115,IL2116,IL2117,IL2118,IL2119,
+ IL2120,IL2121,IL2122,
+ IL3050,IL3051,IL3052,IL3053,IL3054,IL3055,IL3056
+
-
+
\ No newline at end of file
diff --git a/GitHubApiStatus.sln b/GitHubApiStatus.sln
index 454d4a0..6a5c236 100644
--- a/GitHubApiStatus.sln
+++ b/GitHubApiStatus.sln
@@ -14,8 +14,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Console", "Console", "{1D17
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitStatus.ConsoleApp", "samples\GitStatus.ConsoleApp\GitStatus.ConsoleApp.csproj", "{BE045971-4CE8-4C59-BAEB-0BF3A42A9C0A}"
EndProject
-Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "GitStatus.Shared", "samples\GitStatus.Shared\GitStatus.Shared.shproj", "{EE691483-A8A2-4071-9C75-E70F0250E5D2}"
-EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web", "Web", "{6DE141A9-EDFE-464D-BB27-2CFB182118AD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitHubApiStatus.Extensions", "src\GitHubApiStatus.Extensions\GitHubApiStatus.Extensions.csproj", "{AE935942-772A-4A9D-A1E1-2BC99D41F4C9}"
@@ -38,6 +36,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GitStatus.Mobile", "samples\GitStatus.Mobile\GitStatus.Mobile.csproj", "{F6B5ED4D-EEF5-46AC-94CA-064D292B0E00}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GitStatus.Common", "GitStatus.Common\GitStatus.Common.csproj", "{927E2323-6227-4CE2-AF69-9A4290635040}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -144,6 +144,18 @@ Global
{F6B5ED4D-EEF5-46AC-94CA-064D292B0E00}.Release|iPhone.Build.0 = Release|Any CPU
{F6B5ED4D-EEF5-46AC-94CA-064D292B0E00}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F6B5ED4D-EEF5-46AC-94CA-064D292B0E00}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|Any CPU.Build.0 = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|iPhone.Build.0 = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {927E2323-6227-4CE2-AF69-9A4290635040}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -153,7 +165,6 @@ Global
{A52818B8-0C2C-49C5-9389-D8790237ADCE} = {E2BF43DD-5550-414E-9F01-7F7E5492CCB1}
{1D178B33-C69B-47E7-AF90-B460B34BCC37} = {E2BF43DD-5550-414E-9F01-7F7E5492CCB1}
{BE045971-4CE8-4C59-BAEB-0BF3A42A9C0A} = {1D178B33-C69B-47E7-AF90-B460B34BCC37}
- {EE691483-A8A2-4071-9C75-E70F0250E5D2} = {E2BF43DD-5550-414E-9F01-7F7E5492CCB1}
{6DE141A9-EDFE-464D-BB27-2CFB182118AD} = {E2BF43DD-5550-414E-9F01-7F7E5492CCB1}
{A5FF2946-AE9A-4FE4-8650-75719BA23D5B} = {6DE141A9-EDFE-464D-BB27-2CFB182118AD}
{70DBA7CC-2319-4B3F-8F83-97B3368AC890} = {AF841AED-C887-4B39-868A-02242D30780B}
@@ -169,7 +180,6 @@ Global
samples\GitStatus.Shared\GitStatus.Shared.projitems*{9a30833a-01c9-44ed-b8e2-032a4846574f}*SharedItemsImports = 5
samples\GitStatus.Shared\GitStatus.Shared.projitems*{a5ff2946-ae9a-4fe4-8650-75719ba23d5b}*SharedItemsImports = 5
samples\GitStatus.Shared\GitStatus.Shared.projitems*{be045971-4ce8-4c59-baeb-0bf3a42a9c0a}*SharedItemsImports = 5
- samples\GitStatus.Shared\GitStatus.Shared.projitems*{ee691483-a8a2-4071-9c75-e70f0250e5d2}*SharedItemsImports = 13
samples\GitStatus.Shared\GitStatus.Shared.projitems*{f6b5ed4d-eef5-46ac-94ca-064d292b0e00}*SharedItemsImports = 5
EndGlobalSection
EndGlobal
diff --git a/GitStatus.Common/Constants/GitHubConstants.cs b/GitStatus.Common/Constants/GitHubConstants.cs
new file mode 100644
index 0000000..aeb835b
--- /dev/null
+++ b/GitStatus.Common/Constants/GitHubConstants.cs
@@ -0,0 +1,9 @@
+namespace GitStatus.Common;
+
+public static class GitHubConstants
+{
+ public const string AuthScheme = "bearer";
+ public const string PersonalAccessToken = "";
+ public const string GitHubRestApiUrl = "https://api.github.com";
+ public const string GitHubGraphQLApiUrl = "https://api.github.com/graphql";
+}
\ No newline at end of file
diff --git a/GitStatus.Common/GitStatus.Common.csproj b/GitStatus.Common/GitStatus.Common.csproj
new file mode 100644
index 0000000..ac40717
--- /dev/null
+++ b/GitStatus.Common/GitStatus.Common.csproj
@@ -0,0 +1,7 @@
+
+
+
+ net8.0;$(LatestSupportedTFM)
+
+
+
diff --git a/global.json b/global.json
index e972eb1..3cd0899 100644
--- a/global.json
+++ b/global.json
@@ -1,6 +1,7 @@
{
"sdk": {
- "version": "8.0.300",
- "rollForward": "latestFeature"
+ "version": "9.0.100-rc.2.24474.11",
+ "rollForward": "latestFeature",
+ "allowPrerelease": true
}
-}
+}
\ No newline at end of file
diff --git a/samples/GitStatus.API/GitStatus.API.csproj b/samples/GitStatus.API/GitStatus.API.csproj
index 9ed3672..c9b4557 100644
--- a/samples/GitStatus.API/GitStatus.API.csproj
+++ b/samples/GitStatus.API/GitStatus.API.csproj
@@ -1,14 +1,14 @@
- $(LatestSupportedNetVersion)
+ $(LatestSupportedTFM)
v4
Exe
<_FunctionsSkipCleanOutput>true
-
-
+
+
@@ -21,9 +21,7 @@
-
-
-
+
+
-
diff --git a/samples/GitStatus.API/Program.cs b/samples/GitStatus.API/Program.cs
index def431a..f82f979 100644
--- a/samples/GitStatus.API/Program.cs
+++ b/samples/GitStatus.API/Program.cs
@@ -1,11 +1,11 @@
using System.Net.Http.Headers;
-using GitHubApiStatus.Extensions;
-using GitStatus.Shared;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Hosting;
-
-namespace GitStatus.API;
+using GitHubApiStatus.Extensions;
+using GitStatus.Common;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace GitStatus.API;
class Program
{
diff --git a/samples/GitStatus.ConsoleApp/GitStatus.ConsoleApp.csproj b/samples/GitStatus.ConsoleApp/GitStatus.ConsoleApp.csproj
index 9a4a43a..51346d7 100644
--- a/samples/GitStatus.ConsoleApp/GitStatus.ConsoleApp.csproj
+++ b/samples/GitStatus.ConsoleApp/GitStatus.ConsoleApp.csproj
@@ -2,11 +2,11 @@
Exe
- $(LatestSupportedNetVersion)
+ $(LatestSupportedTFM)
GitStatus.ConsoleApp
+
-
\ No newline at end of file
diff --git a/samples/GitStatus.ConsoleApp/Program.cs b/samples/GitStatus.ConsoleApp/Program.cs
index 82f4925..050b0aa 100644
--- a/samples/GitStatus.ConsoleApp/Program.cs
+++ b/samples/GitStatus.ConsoleApp/Program.cs
@@ -1,6 +1,6 @@
using System.Net.Http.Headers;
using GitHubApiStatus;
-using GitStatus.Shared;
+using GitStatus.Common;
namespace GitStatus.ConsoleApp;
diff --git a/samples/GitStatus.Mobile/App.cs b/samples/GitStatus.Mobile/App.cs
index ab574e8..06dca60 100644
--- a/samples/GitStatus.Mobile/App.cs
+++ b/samples/GitStatus.Mobile/App.cs
@@ -1,6 +1,12 @@
namespace GitStatus;
-class App : Application
+partial class App(AppShell appShell) : Application
{
- public App(AppShell appShell) => MainPage = appShell;
+ readonly AppShell _appShell = appShell;
+
+ protected override Window CreateWindow(IActivationState? activationState)
+ {
+ base.CreateWindow(activationState);
+ return new(_appShell);
+ }
}
\ No newline at end of file
diff --git a/samples/GitStatus.Mobile/AppShell.cs b/samples/GitStatus.Mobile/AppShell.cs
index 01615f2..b20087e 100644
--- a/samples/GitStatus.Mobile/AppShell.cs
+++ b/samples/GitStatus.Mobile/AppShell.cs
@@ -1,6 +1,6 @@
namespace GitStatus;
-class AppShell : Shell
+partial class AppShell : Shell
{
public AppShell(GraphQLApiStatusPage graphQLApiStatusPage, RestApiStatusPage restApiStatusPage)
{
diff --git a/samples/GitStatus.Mobile/GitStatus.Mobile.csproj b/samples/GitStatus.Mobile/GitStatus.Mobile.csproj
index c636636..65177ff 100644
--- a/samples/GitStatus.Mobile/GitStatus.Mobile.csproj
+++ b/samples/GitStatus.Mobile/GitStatus.Mobile.csproj
@@ -1,9 +1,9 @@
-
+
- $(LatestSupportedNetVersion)-android;$(LatestSupportedNetVersion)-ios;$(LatestSupportedNetVersion)-maccatalyst
- $(TargetFrameworks);$(LatestSupportedNetVersion)-windows10.0.19041.0
+ $(LatestSupportedTFM)-android;$(LatestSupportedTFM)-ios;$(LatestSupportedTFM)-maccatalyst
+ $(TargetFrameworks);$(LatestSupportedTFM)-windows10.0.19041.0
-
+
Exe
GitStatus
true
@@ -21,15 +21,20 @@
1.0
1
- 14.2
- 14.0
+ 15.0
+ 15.0
21.0
10.0.17763.0
10.0.17763.0
6.5
+
+ true
+
+
+ CsWinRT1028
-
+
false
@@ -48,16 +53,14 @@
-
-
-
-
-
+
+
+
+
+
-
-
diff --git a/samples/GitStatus.Mobile/MauiProgram.cs b/samples/GitStatus.Mobile/MauiProgram.cs
index 8f552e6..7b2e724 100644
--- a/samples/GitStatus.Mobile/MauiProgram.cs
+++ b/samples/GitStatus.Mobile/MauiProgram.cs
@@ -1,8 +1,8 @@
-using System.Net.Http.Headers;
+using System.Net.Http.Headers;
using CommunityToolkit.Maui;
using CommunityToolkit.Maui.Markup;
using GitHubApiStatus.Extensions;
-using GitStatus.Shared;
+using GitStatus.Common;
namespace GitStatus;
diff --git a/samples/GitStatus.Mobile/Pages/Base/BaseContentPage.cs b/samples/GitStatus.Mobile/Pages/Base/BaseContentPage.cs
index 4d0f499..b15d9a9 100644
--- a/samples/GitStatus.Mobile/Pages/Base/BaseContentPage.cs
+++ b/samples/GitStatus.Mobile/Pages/Base/BaseContentPage.cs
@@ -3,7 +3,7 @@
namespace GitStatus;
-abstract class BaseContentPage : ContentPage
+abstract partial class BaseContentPage : ContentPage
{
protected BaseContentPage(in string title = "", bool shouldUseSafeArea = true)
{
diff --git a/samples/GitStatus.Mobile/Pages/Base/BaseStatusPage.cs b/samples/GitStatus.Mobile/Pages/Base/BaseStatusPage.cs
index 5969ba9..413c359 100644
--- a/samples/GitStatus.Mobile/Pages/Base/BaseStatusPage.cs
+++ b/samples/GitStatus.Mobile/Pages/Base/BaseStatusPage.cs
@@ -2,7 +2,7 @@
namespace GitStatus;
-abstract class BaseStatusPage : BaseContentPage where T : BaseStatusViewModel
+abstract partial class BaseStatusPage : BaseContentPage where T : BaseStatusViewModel
{
protected BaseStatusPage(T statusViewModel, string title) : base(statusViewModel, title)
{
@@ -21,7 +21,7 @@ protected BaseStatusPage(T statusViewModel, string title) : base(statusViewModel
.Bind(Button.CommandProperty, static (BaseStatusViewModel vm) => vm.GetStatusCommand, mode: BindingMode.OneTime),
new ActivityIndicator { Color = Colors.Black }.Center()
- .Bind(IsVisibleProperty, nameof(BaseStatusViewModel.IsBusy))
+ .Bind(IsVisibleProperty, static (BaseStatusViewModel vm) => vm.IsBusy)
.Bind(ActivityIndicator.IsRunningProperty, static (BaseStatusViewModel vm) => vm.IsBusy)
}
}.Center();
diff --git a/samples/GitStatus.Mobile/Pages/GraphQLApiStatusPage.cs b/samples/GitStatus.Mobile/Pages/GraphQLApiStatusPage.cs
index 621c3a0..5bc1707 100644
--- a/samples/GitStatus.Mobile/Pages/GraphQLApiStatusPage.cs
+++ b/samples/GitStatus.Mobile/Pages/GraphQLApiStatusPage.cs
@@ -1,6 +1,6 @@
namespace GitStatus;
-class GraphQLApiStatusPage : BaseStatusPage
+partial class GraphQLApiStatusPage : BaseStatusPage
{
public GraphQLApiStatusPage(GraphQLApiStatusViewModel graphQLApiStatusViewModel) : base(graphQLApiStatusViewModel, "GraphQL API Status")
{
diff --git a/samples/GitStatus.Mobile/Pages/RestApiStatusPage.cs b/samples/GitStatus.Mobile/Pages/RestApiStatusPage.cs
index 152a433..3387ab9 100644
--- a/samples/GitStatus.Mobile/Pages/RestApiStatusPage.cs
+++ b/samples/GitStatus.Mobile/Pages/RestApiStatusPage.cs
@@ -1,6 +1,6 @@
namespace GitStatus;
-class RestApiStatusPage : BaseStatusPage
+partial class RestApiStatusPage : BaseStatusPage
{
public RestApiStatusPage(RestApiStatusViewModel restApiStatusViewModel) : base(restApiStatusViewModel, "REST API Status")
{
diff --git a/samples/GitStatus.Mobile/ViewModels/Base/BaseStatusViewModel.cs b/samples/GitStatus.Mobile/ViewModels/Base/BaseStatusViewModel.cs
index 81fa312..8ec8d6b 100644
--- a/samples/GitStatus.Mobile/ViewModels/Base/BaseStatusViewModel.cs
+++ b/samples/GitStatus.Mobile/ViewModels/Base/BaseStatusViewModel.cs
@@ -5,11 +5,16 @@ namespace GitStatus;
abstract partial class BaseStatusViewModel : BaseViewModel
{
+ protected BaseStatusViewModel()
+ {
+ StatusLabelText = string.Empty;
+ }
+
[ObservableProperty]
- string _statusLabelText = string.Empty;
+ public partial string StatusLabelText { get; protected set; }
- [ObservableProperty, NotifyCanExecuteChangedFor(nameof(GetStatusCommand))]
- bool _isBusy;
+ [ObservableProperty, NotifyPropertyChangedFor(nameof(IsNotBusy)), NotifyCanExecuteChangedFor(nameof(GetStatusCommand))]
+ public partial bool IsBusy { get; protected set; }
public bool IsNotBusy => !IsBusy;
diff --git a/samples/GitStatus.Mobile/ViewModels/Base/BaseViewModel.cs b/samples/GitStatus.Mobile/ViewModels/Base/BaseViewModel.cs
index 9137840..d79492a 100644
--- a/samples/GitStatus.Mobile/ViewModels/Base/BaseViewModel.cs
+++ b/samples/GitStatus.Mobile/ViewModels/Base/BaseViewModel.cs
@@ -2,6 +2,6 @@
namespace GitStatus;
-abstract class BaseViewModel : ObservableObject
+abstract partial class BaseViewModel : ObservableObject
{
}
\ No newline at end of file
diff --git a/samples/GitStatus.Mobile/ViewModels/GraphQLApiStatusViewModel.cs b/samples/GitStatus.Mobile/ViewModels/GraphQLApiStatusViewModel.cs
index d4e50b3..dd0cdc0 100644
--- a/samples/GitStatus.Mobile/ViewModels/GraphQLApiStatusViewModel.cs
+++ b/samples/GitStatus.Mobile/ViewModels/GraphQLApiStatusViewModel.cs
@@ -1,12 +1,10 @@
-using GitHubApiStatus;
-
-namespace GitStatus;
-
-class GraphQLApiStatusViewModel : BaseStatusViewModel
-{
- readonly IGitHubApiStatusService _gitHubApiStatusService;
+using GitHubApiStatus;
+
+namespace GitStatus;
- public GraphQLApiStatusViewModel(IGitHubApiStatusService gitHubApiStatusService) => _gitHubApiStatusService = gitHubApiStatusService;
+partial class GraphQLApiStatusViewModel(IGitHubApiStatusService gitHubApiStatusService) : BaseStatusViewModel
+{
+ readonly IGitHubApiStatusService _gitHubApiStatusService = gitHubApiStatusService;
protected override async Task GetStatus()
{
@@ -14,5 +12,5 @@ protected override async Task GetStatus()
var apiRateLimitStatuses = await _gitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token).ConfigureAwait(false);
StatusLabelText = apiRateLimitStatuses.GraphQLApi.ToString();
- }
+ }
}
\ No newline at end of file
diff --git a/samples/GitStatus.Mobile/ViewModels/RestApiStatusViewModel.cs b/samples/GitStatus.Mobile/ViewModels/RestApiStatusViewModel.cs
index 7f36717..f66f425 100644
--- a/samples/GitStatus.Mobile/ViewModels/RestApiStatusViewModel.cs
+++ b/samples/GitStatus.Mobile/ViewModels/RestApiStatusViewModel.cs
@@ -1,12 +1,10 @@
-using GitHubApiStatus;
-
-namespace GitStatus;
-
-class RestApiStatusViewModel : BaseStatusViewModel
-{
- readonly IGitHubApiStatusService _gitHubApiStatusService;
+using GitHubApiStatus;
+
+namespace GitStatus;
- public RestApiStatusViewModel(IGitHubApiStatusService gitHubApiStatusService) => _gitHubApiStatusService = gitHubApiStatusService;
+partial class RestApiStatusViewModel(IGitHubApiStatusService gitHubApiStatusService) : BaseStatusViewModel
+{
+ readonly IGitHubApiStatusService _gitHubApiStatusService = gitHubApiStatusService;
protected override async Task GetStatus()
{
@@ -14,5 +12,5 @@ protected override async Task GetStatus()
var apiRateLimitStatuses = await _gitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token).ConfigureAwait(false);
StatusLabelText = apiRateLimitStatuses.RestApi.ToString();
- }
+ }
}
\ No newline at end of file
diff --git a/samples/GitStatus.Shared/Constants/GitHubConstants.cs b/samples/GitStatus.Shared/Constants/GitHubConstants.cs
deleted file mode 100644
index f02bbe0..0000000
--- a/samples/GitStatus.Shared/Constants/GitHubConstants.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace GitStatus.Shared;
-
-static class GitHubConstants
-{
- public const string AuthScheme = "bearer";
- public const string PersonalAccessToken = "";
- public const string GitHubRestApiUrl = "https://api.github.com";
- public const string GitHubGraphQLApiUrl = "https://api.github.com/graphql";
-}
\ No newline at end of file
diff --git a/samples/GitStatus.Shared/GitStatus.Shared.projitems b/samples/GitStatus.Shared/GitStatus.Shared.projitems
deleted file mode 100644
index 6488d25..0000000
--- a/samples/GitStatus.Shared/GitStatus.Shared.projitems
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
- $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
- true
- {EE691483-A8A2-4071-9C75-E70F0250E5D2}
-
-
- GitStatus.Shared
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/GitStatus.Shared/GitStatus.Shared.shproj b/samples/GitStatus.Shared/GitStatus.Shared.shproj
deleted file mode 100644
index fe9e2e3..0000000
--- a/samples/GitStatus.Shared/GitStatus.Shared.shproj
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
- {EE691483-A8A2-4071-9C75-E70F0250E5D2}
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/samples/GitStatus.Web/GitStatus.Web.csproj b/samples/GitStatus.Web/GitStatus.Web.csproj
index 5734d6b..a4b20e3 100644
--- a/samples/GitStatus.Web/GitStatus.Web.csproj
+++ b/samples/GitStatus.Web/GitStatus.Web.csproj
@@ -1,13 +1,13 @@
- $(LatestSupportedNetVersion)
+ $(LatestSupportedTFM)
service-worker-assets.js
-
-
+
+
@@ -15,9 +15,7 @@
-
-
-
+
+
-
diff --git a/samples/GitStatus.Web/Program.cs b/samples/GitStatus.Web/Program.cs
index 0cf9da4..3c1c483 100644
--- a/samples/GitStatus.Web/Program.cs
+++ b/samples/GitStatus.Web/Program.cs
@@ -1,8 +1,8 @@
-using System.Net.Http.Headers;
-using GitHubApiStatus.Extensions;
-using GitStatus.Shared;
+using System.Net.Http.Headers;
+using GitHubApiStatus.Extensions;
+using GitStatus.Common;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
-
+
namespace GitStatus.Web;
public class Program
diff --git a/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatus.Extensions.UnitTests.csproj b/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatus.Extensions.UnitTests.csproj
index 292851c..9b3d447 100644
--- a/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatus.Extensions.UnitTests.csproj
+++ b/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatus.Extensions.UnitTests.csproj
@@ -1,21 +1,20 @@
- net6.0;net7.0;net8.0
+ net8.0;net9.0
false
-
-
-
-
-
-
+
+
+
+
+
+
-
diff --git a/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatusServiceExtensionsTests.cs b/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatusServiceExtensionsTests.cs
index 5c4d66d..7a02ca7 100644
--- a/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatusServiceExtensionsTests.cs
+++ b/src/GitHubApiStatus.Extensions.UnitTests/GitHubApiStatusServiceExtensionsTests.cs
@@ -1,153 +1,164 @@
-using System.Net.Http.Headers;
-using GitStatus.Shared;
-using Microsoft.Extensions.DependencyInjection;
-using NUnit.Framework;
+using System.Net.Http.Headers;
+using GitStatus.Common;
+using Microsoft.Extensions.DependencyInjection;
+using NUnit.Framework;
-namespace GitHubApiStatus.Extensions.UnitTests;
+namespace GitHubApiStatus.Extensions.UnitTests;
class GitHubApiStatusServiceExtensionsTests
{
[Test]
public void NullProductHeaderValue()
- {
- //Arrange
+ {
+ //Arrange
var services = new ServiceCollection();
ProductHeaderValue? productHeaderValue = null;
- var authenticationHeaderValue = GetAuthenticationHeaderValue();
-
- //Act
-
- //Assett
-#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue));
-#pragma warning restore CS8604 // Possible null reference argument.
+ var authenticationHeaderValue = GetAuthenticationHeaderValue();
+
+ //Act
+
+ //Assert
+#pragma warning disable CS8604 // Possible null reference argument.
+ Assert.That(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue), Throws.TypeOf());
+#pragma warning restore CS8604 // Possible null reference argument.
}
[Test]
public void EmptyProductHeaderValue()
- {
- //Arrange
-
- //Act
-
- //Assett
- Assert.Throws(() => new ProductHeaderValue(""));
+ {
+ //Arrange
+
+ //Act
+
+ //Assert
+ Assert.That(() => new ProductHeaderValue(""), Throws.TypeOf());
}
+ [Test]
public void WhiteSpaceProductHeaderValue()
- {
- //Arrange
-
- //Act
-
- //Assett
- Assert.Throws(() => new ProductHeaderValue(" "));
+ {
+ //Arrange
+
+ //Act
+
+ //Assert
+ #if NET9_0_OR_GREATER
+ Assert.That(() => new ProductHeaderValue(" "), Throws.TypeOf());
+ #else
+ Assert.That(() => new ProductHeaderValue(" "), Throws.TypeOf());
+ #endif
}
[Test]
public void NullAuthenticationHeaderValue()
- {
- //Arrange
+ {
+ //Arrange
var services = new ServiceCollection();
var productHeaderValue = GetProductHeaderValue();
- AuthenticationHeaderValue? authenticationHeaderValue = null;
-
- //Act
-
- //Assett
-#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue));
-#pragma warning restore CS8604 // Possible null reference argument.
+ AuthenticationHeaderValue? authenticationHeaderValue = null;
+
+ //Act
+
+ //Assert
+#pragma warning disable CS8604 // Possible null reference argument.
+ Assert.That(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue), Throws.TypeOf());
+#pragma warning restore CS8604 // Possible null reference argument.
}
[TestCase("Basic")]
[TestCase("Oauth")]
[TestCase("Digest")]
public void InvalidSchemeAuthenticationHeaderValue(string scheme)
- {
- //Arrange
+ {
+ //Arrange
var services = new ServiceCollection();
var productHeaderValue = GetProductHeaderValue();
- var authenticationHeaderValue = new AuthenticationHeaderValue(scheme, GitHubConstants.PersonalAccessToken);
-
- //Act
-
- //Assett
- Assert.Throws(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue));
+ var authenticationHeaderValue = new AuthenticationHeaderValue(scheme, GitHubConstants.PersonalAccessToken);
+
+ //Act
+
+ //Assert
+ Assert.That(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue), Throws.TypeOf());
}
[TestCase(null)]
[TestCase("")]
[TestCase(" ")]
- public void InvalidParameterAuthenticationHeaderValue(string parameter)
- {
- //Arrange
+ public void InvalidParameterAuthenticationHeaderValue(string? parameter)
+ {
+ //Arrange
var services = new ServiceCollection();
var productHeaderValue = GetProductHeaderValue();
- var authenticationHeaderValue = new AuthenticationHeaderValue(GitHubConstants.AuthScheme, parameter);
-
- //Act
-
- //Assett
- Assert.Throws(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue));
+ var authenticationHeaderValue = new AuthenticationHeaderValue(GitHubConstants.AuthScheme, parameter);
+
+ //Act
+
+ //Assert
+ Assert.That(() => services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue), Throws.TypeOf());
}
[Test]
public async Task AddGitHubApiStatusService()
- {
- //Arrange
+ {
+ //Arrange
var services = new ServiceCollection();
var productHeaderValue = GetProductHeaderValue();
var authenticationHeaderValue = GetAuthenticationHeaderValue();
services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue);
- var container = services.BuildServiceProvider();
-
- //Act
- var gitHubApiStatusServce = container.GetRequiredService();
-
- var apiRateLimits = await gitHubApiStatusServce.GetApiRateLimits(CancellationToken.None).ConfigureAwait(false);
-
- //Assert
- Assert.IsNotNull(gitHubApiStatusServce);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ var container = services.BuildServiceProvider();
+
+ //Act
+ var gitHubApiStatusService = container.GetRequiredService();
+
+ var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits(CancellationToken.None).ConfigureAwait(false);
+
+ //Assert
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
[Test]
public async Task AddMockGitHubApiStatusService()
- {
- //Arrange
+ {
+ //Arrange
var services = new ServiceCollection();
var productHeaderValue = GetProductHeaderValue();
var authenticationHeaderValue = GetAuthenticationHeaderValue();
services.AddGitHubApiStatusService(authenticationHeaderValue, productHeaderValue);
- var container = services.BuildServiceProvider();
-
- //Act
+ var container = services.BuildServiceProvider();
+
+ //Act
var gitHubApiStatusServce = container.GetRequiredService();
- var apiRateLimits = await gitHubApiStatusServce.GetApiRateLimits(CancellationToken.None).ConfigureAwait(false);
-
- //Assert
- Assert.IsNotNull(gitHubApiStatusServce);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ var apiRateLimits = await gitHubApiStatusServce.GetApiRateLimits(CancellationToken.None).ConfigureAwait(false);
+
+ //Assert
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusServce, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
static AuthenticationHeaderValue GetAuthenticationHeaderValue() => new(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken);
static ProductHeaderValue GetProductHeaderValue() => new(nameof(GitHubApiStatus));
-}
\ No newline at end of file
+}
diff --git a/src/GitHubApiStatus.Extensions.UnitTests/MockGitHubApiStatusService.cs b/src/GitHubApiStatus.Extensions.UnitTests/MockGitHubApiStatusService.cs
index 2356de5..6d76fd1 100644
--- a/src/GitHubApiStatus.Extensions.UnitTests/MockGitHubApiStatusService.cs
+++ b/src/GitHubApiStatus.Extensions.UnitTests/MockGitHubApiStatusService.cs
@@ -3,7 +3,7 @@
namespace GitHubApiStatus.Extensions;
-public class MockGitHubApiStatusService(HttpClient httpClient) : IGitHubApiStatusService
+public sealed class MockGitHubApiStatusService(HttpClient httpClient) : IGitHubApiStatusService
{
public bool IsProductHeaderValueValid => true;
public bool IsAuthenticationHeaderValueSet => true;
@@ -37,4 +37,9 @@ public bool IsAbuseRateLimit(in HttpResponseHeaders httpResponseHeaders, [NotNul
delta = null;
return false;
}
+
+ public void Dispose()
+ {
+ httpClient.Dispose();
+ }
}
\ No newline at end of file
diff --git a/src/GitHubApiStatus.Extensions/GitHubApiStatus.Extensions.csproj b/src/GitHubApiStatus.Extensions/GitHubApiStatus.Extensions.csproj
index afdd360..ab9fcb1 100644
--- a/src/GitHubApiStatus.Extensions/GitHubApiStatus.Extensions.csproj
+++ b/src/GitHubApiStatus.Extensions/GitHubApiStatus.Extensions.csproj
@@ -1,60 +1,62 @@
-
-
- netstandard2.0;netstandard2.1;net6.0;net8.0
- true
- GitHubApiStatus.Extensions.snk
- GitHubApiStatus.Extensions
- GitHubApiStatus.Extensions
- GitHubApiStatus.Extensions
- true
- true
- true
- snupkg
-
-Extentions for GitHub API Rate Limit Status
-- Implements Microsoft.Extensions.DependencyInjection
-- Implements Microsoft.Extensions.Http
-
- github, git, api, rate, rate limit
- Extensions for GitHub API Rate Limit Status
-
-Extentions for GitHub API Rate Limit Status
-- Implements Microsoft.Extensions.DependencyInjection
-- Implements Microsoft.Extensions.Http
-
-
-New In This Release:
-- Add .NET 8.0
-- (Breaking) Add System.Diagnostics.CodeAnalysis to IGitHubApiStatusService
-
- 3.0.0
- https://github.com/brminnick/GitHubApiStatus
- $(AssemblyName) ($(TargetFramework))
- 1.0.0.0
- 1.0.0.0
- $(Version)$(VersionSuffix)
- Brandon Minnick
- Brandon Minnick
- en
- ©Copyright 2020 Brandon Minnick. All rights reserved.
- false
- $(DefineConstants);
- false
- false
- MIT
- https://github.com/brminnick/GitHubApiStatus
- portable
- Release;Debug
- false
-
-
-
-
-
-
-
-
-
-
+
+ netstandard2.0;netstandard2.1;net8.0;net9.0
+ true
+ GitHubApiStatus.Extensions.snk
+ GitHubApiStatus.Extensions
+ GitHubApiStatus.Extensions
+ GitHubApiStatus.Extensions
+ true
+ true
+ true
+ snupkg
+
+ Extentions for GitHub API Rate Limit Status
+ - Implements Microsoft.Extensions.DependencyInjection
+ - Implements Microsoft.Extensions.Http
+
+ github, git, api, rate, rate limit
+ Extensions for GitHub API Rate Limit Status
+
+ Extentions for GitHub API Rate Limit Status
+ - Implements Microsoft.Extensions.DependencyInjection
+ - Implements Microsoft.Extensions.Http
+
+
+ New In This Release:
+ - Add .NET 9.0
+
+ $(NuGetVersion)
+ https://github.com/brminnick/GitHubApiStatus
+ $(AssemblyName) ($(TargetFramework))
+ 1.0.0.0
+ 1.0.0.0
+ $(Version)$(VersionSuffix)
+ Brandon Minnick
+ Brandon Minnick
+ en
+ ©Copyright 2020 Brandon Minnick. All rights reserved.
+ false
+ $(DefineConstants);
+ false
+ false
+ MIT
+ https://github.com/brminnick/GitHubApiStatus
+ portable
+ Release;Debug
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/GitHubApiStatus.UnitTests/GitHubApiStatus.UnitTests.csproj b/src/GitHubApiStatus.UnitTests/GitHubApiStatus.UnitTests.csproj
index 7026b59..4a98ec6 100644
--- a/src/GitHubApiStatus.UnitTests/GitHubApiStatus.UnitTests.csproj
+++ b/src/GitHubApiStatus.UnitTests/GitHubApiStatus.UnitTests.csproj
@@ -1,20 +1,20 @@
- net6.0;net7.0;net8.0
+ net8.0;net9.0
false
-
-
+
+
+
+
-
+
-
-
diff --git a/src/GitHubApiStatus.UnitTests/Tests/Base/BaseTest.cs b/src/GitHubApiStatus.UnitTests/Tests/Base/BaseTest.cs
index 8ded9f3..71ca84f 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/Base/BaseTest.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/Base/BaseTest.cs
@@ -1,7 +1,7 @@
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using Newtonsoft.Json;
using NUnit.Framework;
@@ -11,17 +11,32 @@ abstract class BaseTest
{
const string _authorizationHeaderKey = "Authorization";
- static readonly HttpClient _client = CreateGitHubHttpClient(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken), new ProductHeaderValue(nameof(GitHubApiStatus)));
+ HttpClient _client = CreateGitHubHttpClient(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken), new ProductHeaderValue(nameof(GitHubApiStatus)));
- protected IGitHubApiStatusService GitHubApiStatusService { get; } = new GitHubApiStatusService(_client);
+ protected IGitHubApiStatusService GitHubApiStatusService { get; private set; } = new GitHubApiStatusService();
[SetUp]
- protected virtual Task BeforeEachTest() => Task.CompletedTask;
+ protected virtual Task BeforeEachTest()
+ {
+ _client = CreateGitHubHttpClient(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken), new ProductHeaderValue(nameof(GitHubApiStatus)));
+ GitHubApiStatusService = new GitHubApiStatusService(_client);
+ return Task.CompletedTask;
+ }
[TearDown]
protected virtual Task AfterEachTest()
{
GitHubApiStatusService.SetAuthenticationHeaderValue(new AuthenticationHeaderValue(GitHubConstants.AuthScheme, GitHubConstants.PersonalAccessToken));
+ _client.Dispose();
+ GitHubApiStatusService.Dispose();
+ return Task.CompletedTask;
+ }
+
+ [OneTimeTearDown]
+ protected virtual Task AfterAllTests()
+ {
+ _client.Dispose();
+ GitHubApiStatusService.Dispose();
return Task.CompletedTask;
}
@@ -58,13 +73,13 @@ protected static HttpClient CreateGitHubHttpClient(in AuthenticationHeaderValue
return client;
}
- protected static Task SendValidRestApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/repos/brminnick/GitHubApiStatus");
+ protected Task SendValidRestApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/repos/brminnick/GitHubApiStatus");
- protected static Task SendValidSearchApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/search/code");
+ protected Task SendValidSearchApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/search/code");
- protected static Task SendValidCodeScanningApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/repos/brminnick/GitHubApiStatus/code-scanning/alerts");
+ protected Task SendValidCodeScanningApiRequest() => _client.GetAsync($"{GitHubConstants.GitHubRestApiUrl}/repos/brminnick/GitHubApiStatus/code-scanning/alerts");
- protected static Task SendValidGraphQLApiRequest()
+ protected Task SendValidGraphQLApiRequest()
{
var graphQLRequest = new GraphQLRequest("query { user(login: \"brminnick\"){ name, company, createdAt}}");
var serializedGraphQLRequest = JsonConvert.SerializeObject(graphQLRequest);
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_NoCancellationToken.cs b/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_NoCancellationToken.cs
index 6f5686e..1f6c570 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_NoCancellationToken.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_NoCancellationToken.cs
@@ -1,5 +1,5 @@
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using NUnit.Framework;
namespace GitHubApiStatus.UnitTests;
@@ -26,28 +26,30 @@ public async Task GetApiRateLimits_ValidRestApiRequest()
restApiStatus_Final = gitHubApiRateLimits_Final.RestApi;
//Assert
- Assert.IsNotNull(restApiStatus_Initial);
- Assert.AreEqual(5000, restApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(restApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(restApiStatus_Initial.RemainingRequestCount, restApiStatus_Initial.RateLimit);
- Assert.AreEqual(restApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), restApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(restApiStatus_Final);
- Assert.AreEqual(5000, restApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(restApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(restApiStatus_Final.RemainingRequestCount, restApiStatus_Final.RateLimit);
- Assert.AreEqual(restApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), restApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(restApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(restApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.AreEqual(restApiStatus_Initial.RateLimit, restApiStatus_Final.RateLimit);
- Assert.IsTrue(restApiStatus_Initial.RateLimitReset_DateTime == restApiStatus_Final.RateLimitReset_DateTime || restApiStatus_Initial.RateLimitReset_DateTime == restApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1)));
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, restApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds);
- Assert.AreEqual(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, restApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.Greater(restApiStatus_Initial.RemainingRequestCount, restApiStatus_Final.RemainingRequestCount);
-
+ Assert.Multiple(() =>
+ {
+ Assert.That(restApiStatus_Initial, Is.Not.Null);
+ Assert.That(restApiStatus_Initial.RateLimit, Is.EqualTo(5000));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(restApiStatus_Initial.RateLimit));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(restApiStatus_Final, Is.Not.Null);
+ Assert.That(restApiStatus_Final.RateLimit, Is.EqualTo(5000));
+ Assert.That(restApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(restApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(restApiStatus_Final.RateLimit));
+ Assert.That(restApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(restApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(restApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(restApiStatus_Initial.RateLimit, Is.EqualTo(restApiStatus_Final.RateLimit));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(restApiStatus_Final.RateLimitReset_DateTime).Or.EqualTo(restApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1))));
+ Assert.That(restApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, Is.GreaterThanOrEqualTo(restApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds));
+ Assert.That(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(restApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.GreaterThan(restApiStatus_Final.RemainingRequestCount));
+ });
}
[Test]
@@ -70,27 +72,30 @@ public async Task GetApiRateLimits_ValidGraphQLApiRequest()
graphQLApiStatus_Final = gitHubApiRateLimits_Final.GraphQLApi;
//Assert
- Assert.IsNotNull(graphQLApiStatus_Initial);
- Assert.AreEqual(5000, graphQLApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(graphQLApiStatus_Initial.RemainingRequestCount, graphQLApiStatus_Initial.RateLimit);
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(graphQLApiStatus_Final);
- Assert.AreEqual(5000, graphQLApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(graphQLApiStatus_Final.RemainingRequestCount, graphQLApiStatus_Final.RateLimit);
- Assert.AreEqual(graphQLApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimit, graphQLApiStatus_Final.RateLimit);
- Assert.IsTrue(graphQLApiStatus_Initial.RateLimitReset_DateTime == graphQLApiStatus_Final.RateLimitReset_DateTime || graphQLApiStatus_Initial.RateLimitReset_DateTime == graphQLApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1)));
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, graphQLApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds);
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.Greater(graphQLApiStatus_Initial.RemainingRequestCount, graphQLApiStatus_Final.RemainingRequestCount);
+ Assert.Multiple(() =>
+ {
+ Assert.That(graphQLApiStatus_Initial, Is.Not.Null);
+ Assert.That(graphQLApiStatus_Initial.RateLimit, Is.EqualTo(5000));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(graphQLApiStatus_Initial.RateLimit));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(graphQLApiStatus_Final, Is.Not.Null);
+ Assert.That(graphQLApiStatus_Final.RateLimit, Is.EqualTo(5000));
+ Assert.That(graphQLApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(graphQLApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(graphQLApiStatus_Final.RateLimit));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(graphQLApiStatus_Initial.RateLimit, Is.EqualTo(graphQLApiStatus_Final.RateLimit));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_DateTime).Or.EqualTo(graphQLApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1))));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, Is.GreaterThanOrEqualTo(graphQLApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.GreaterThan(graphQLApiStatus_Final.RemainingRequestCount));
+ });
}
[Test]
@@ -113,30 +118,33 @@ public async Task GetApiRateLimits_ValidSearchApiRequest()
searchApiStatus_Final = gitHubApiRateLimits_Final.SearchApi;
//Assert
- Assert.IsNotNull(searchApiStatus_Initial);
- Assert.AreEqual(30, searchApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(searchApiStatus_Initial.RemainingRequestCount, searchApiStatus_Initial.RateLimit);
- Assert.AreEqual(searchApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(searchApiStatus_Final);
- Assert.AreEqual(30, searchApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(searchApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(searchApiStatus_Final.RemainingRequestCount, searchApiStatus_Final.RateLimit);
- Assert.AreEqual(searchApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), searchApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- if (searchApiStatus_Final.RateLimitReset_DateTime == searchApiStatus_Initial.RateLimitReset_DateTime)
+ Assert.Multiple(() =>
{
- Assert.AreEqual(searchApiStatus_Initial.RateLimit, searchApiStatus_Final.RateLimit);
- Assert.IsTrue(searchApiStatus_Initial.RateLimitReset_DateTime == searchApiStatus_Final.RateLimitReset_DateTime || searchApiStatus_Initial.RateLimitReset_DateTime == searchApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1)));
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, searchApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds);
- Assert.AreEqual(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, searchApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RemainingRequestCount, searchApiStatus_Final.RemainingRequestCount);
- }
+ Assert.That(searchApiStatus_Initial, Is.Not.Null);
+ Assert.That(searchApiStatus_Initial.RateLimit, Is.EqualTo(30));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(searchApiStatus_Initial.RateLimit));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(searchApiStatus_Final, Is.Not.Null);
+ Assert.That(searchApiStatus_Final.RateLimit, Is.EqualTo(30));
+ Assert.That(searchApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(searchApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(searchApiStatus_Final.RateLimit));
+ Assert.That(searchApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ if (searchApiStatus_Final.RateLimitReset_DateTime == searchApiStatus_Initial.RateLimitReset_DateTime)
+ {
+ Assert.That(searchApiStatus_Initial.RateLimit, Is.EqualTo(searchApiStatus_Final.RateLimit));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(searchApiStatus_Final.RateLimitReset_DateTime).Or.EqualTo(searchApiStatus_Final.RateLimitReset_DateTime.Subtract(TimeSpan.FromSeconds(1))));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_TimeRemaining.TotalMilliseconds, Is.GreaterThanOrEqualTo(searchApiStatus_Final.RateLimitReset_TimeRemaining.TotalMilliseconds));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(searchApiStatus_Final.RemainingRequestCount));
+ }
+ });
}
[Test]
@@ -150,6 +158,6 @@ public void GetApiRateLimits_InvalidBearerToken()
//Assert
var httpRequestException = Assert.ThrowsAsync(() => gitHubApiStatusService.GetApiRateLimits());
- Assert.IsTrue(httpRequestException?.Message.Contains("Unauthorized"));
+ Assert.That(httpRequestException?.Message, Does.Contain("Unauthorized"));
}
-}
\ No newline at end of file
+}
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_WithCancellationToken.cs b/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_WithCancellationToken.cs
index 505c01f..781b22c 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_WithCancellationToken.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetApiRateLimitsTests_WithCancellationToken.cs
@@ -1,6 +1,6 @@
using System.Net.Http;
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using NUnit.Framework;
namespace GitHubApiStatus.UnitTests;
@@ -27,28 +27,30 @@ public async Task GetApiRateLimits_ValidRestApiRequest()
restApiStatus_Final = gitHubApiRateLimits_Final.RestApi;
//Assert
- Assert.IsNotNull(restApiStatus_Initial);
- Assert.AreEqual(5000, restApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(restApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(restApiStatus_Initial.RemainingRequestCount, restApiStatus_Initial.RateLimit);
- Assert.AreEqual(restApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), restApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(restApiStatus_Final);
- Assert.AreEqual(5000, restApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(restApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(restApiStatus_Final.RemainingRequestCount, restApiStatus_Final.RateLimit);
- Assert.AreEqual(restApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), restApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(restApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(restApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.AreEqual(restApiStatus_Initial.RateLimit, restApiStatus_Final.RateLimit);
- Assert.AreEqual(restApiStatus_Initial.RateLimitReset_DateTime, restApiStatus_Final.RateLimitReset_DateTime);
- Assert.GreaterOrEqual(restApiStatus_Initial.RateLimitReset_TimeRemaining, restApiStatus_Final.RateLimitReset_TimeRemaining);
- Assert.AreEqual(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, restApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.Greater(restApiStatus_Initial.RemainingRequestCount, restApiStatus_Final.RemainingRequestCount);
-
+ Assert.Multiple(() =>
+ {
+ Assert.That(restApiStatus_Initial, Is.Not.Null);
+ Assert.That(restApiStatus_Initial.RateLimit, Is.EqualTo(5000));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(restApiStatus_Initial.RateLimit));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(restApiStatus_Final, Is.Not.Null);
+ Assert.That(restApiStatus_Final.RateLimit, Is.EqualTo(5000));
+ Assert.That(restApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(restApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(restApiStatus_Final.RateLimit));
+ Assert.That(restApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(restApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(restApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(restApiStatus_Initial.RateLimit, Is.EqualTo(restApiStatus_Final.RateLimit));
+ Assert.That(restApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(restApiStatus_Final.RateLimitReset_DateTime));
+ Assert.That(restApiStatus_Initial.RateLimitReset_TimeRemaining, Is.GreaterThanOrEqualTo(restApiStatus_Final.RateLimitReset_TimeRemaining));
+ Assert.That(restApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(restApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(restApiStatus_Initial.RemainingRequestCount, Is.GreaterThan(restApiStatus_Final.RemainingRequestCount));
+ });
}
[Test]
@@ -71,27 +73,30 @@ public async Task GetApiRateLimits_ValidGraphQLApiRequest()
graphQLApiStatus_Final = gitHubApiRateLimits_Final.GraphQLApi;
//Assert
- Assert.IsNotNull(graphQLApiStatus_Initial);
- Assert.AreEqual(5000, graphQLApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(graphQLApiStatus_Initial.RemainingRequestCount, graphQLApiStatus_Initial.RateLimit);
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(graphQLApiStatus_Final);
- Assert.AreEqual(5000, graphQLApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(graphQLApiStatus_Final.RemainingRequestCount, graphQLApiStatus_Final.RateLimit);
- Assert.AreEqual(graphQLApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimit, graphQLApiStatus_Final.RateLimit);
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimitReset_DateTime, graphQLApiStatus_Final.RateLimitReset_DateTime);
- Assert.GreaterOrEqual(graphQLApiStatus_Initial.RateLimitReset_TimeRemaining, graphQLApiStatus_Final.RateLimitReset_TimeRemaining);
- Assert.AreEqual(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.Greater(graphQLApiStatus_Initial.RemainingRequestCount, graphQLApiStatus_Final.RemainingRequestCount);
+ Assert.Multiple(() =>
+ {
+ Assert.That(graphQLApiStatus_Initial, Is.Not.Null);
+ Assert.That(graphQLApiStatus_Initial.RateLimit, Is.EqualTo(5000));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(graphQLApiStatus_Initial.RateLimit));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(graphQLApiStatus_Final, Is.Not.Null);
+ Assert.That(graphQLApiStatus_Final.RateLimit, Is.EqualTo(5000));
+ Assert.That(graphQLApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(graphQLApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(graphQLApiStatus_Final.RateLimit));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(graphQLApiStatus_Initial.RateLimit, Is.EqualTo(graphQLApiStatus_Final.RateLimit));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_DateTime));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_TimeRemaining, Is.GreaterThanOrEqualTo(graphQLApiStatus_Final.RateLimitReset_TimeRemaining));
+ Assert.That(graphQLApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(graphQLApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(graphQLApiStatus_Initial.RemainingRequestCount, Is.GreaterThan(graphQLApiStatus_Final.RemainingRequestCount));
+ });
}
[Test]
@@ -114,30 +119,33 @@ public async Task GetApiRateLimits_ValidSearchApiRequest()
searchApiStatus_Final = gitHubApiRateLimits_Final.SearchApi;
//Assert
- Assert.IsNotNull(searchApiStatus_Initial);
- Assert.AreEqual(30, searchApiStatus_Initial.RateLimit);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RemainingRequestCount, 0);
- Assert.LessOrEqual(searchApiStatus_Initial.RemainingRequestCount, searchApiStatus_Initial.RateLimit);
- Assert.AreEqual(searchApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- Assert.IsNotNull(searchApiStatus_Final);
- Assert.AreEqual(30, searchApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(searchApiStatus_Final.RemainingRequestCount, 0);
- Assert.LessOrEqual(searchApiStatus_Final.RemainingRequestCount, searchApiStatus_Final.RateLimit);
- Assert.AreEqual(searchApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), searchApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Final.RateLimitReset_DateTime, startTime);
- Assert.GreaterOrEqual(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds, startTime.ToUnixTimeSeconds());
-
- if (searchApiStatus_Final.RateLimitReset_DateTime == searchApiStatus_Initial.RateLimitReset_DateTime)
+ Assert.Multiple(() =>
{
- Assert.AreEqual(searchApiStatus_Initial.RateLimit, searchApiStatus_Final.RateLimit);
- Assert.GreaterOrEqual(searchApiStatus_Final.RateLimitReset_DateTime, searchApiStatus_Initial.RateLimitReset_DateTime);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RateLimitReset_TimeRemaining, searchApiStatus_Final.RateLimitReset_TimeRemaining);
- Assert.AreEqual(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, searchApiStatus_Final.RateLimitReset_UnixEpochSeconds);
- Assert.GreaterOrEqual(searchApiStatus_Initial.RemainingRequestCount, searchApiStatus_Final.RemainingRequestCount);
- }
+ Assert.That(searchApiStatus_Initial, Is.Not.Null);
+ Assert.That(searchApiStatus_Initial.RateLimit, Is.EqualTo(30));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.LessThanOrEqualTo(searchApiStatus_Initial.RateLimit));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ Assert.That(searchApiStatus_Final, Is.Not.Null);
+ Assert.That(searchApiStatus_Final.RateLimit, Is.EqualTo(30));
+ Assert.That(searchApiStatus_Final.RemainingRequestCount, Is.GreaterThanOrEqualTo(0));
+ Assert.That(searchApiStatus_Final.RemainingRequestCount, Is.LessThanOrEqualTo(searchApiStatus_Final.RateLimit));
+ Assert.That(searchApiStatus_Final.RateLimitReset_DateTime.ToUnixTimeSeconds(), Is.EqualTo(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Final.RateLimitReset_DateTime, Is.GreaterThanOrEqualTo(startTime));
+ Assert.That(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds, Is.GreaterThanOrEqualTo(startTime.ToUnixTimeSeconds()));
+
+ if (searchApiStatus_Final.RateLimitReset_DateTime == searchApiStatus_Initial.RateLimitReset_DateTime)
+ {
+ Assert.That(searchApiStatus_Initial.RateLimit, Is.EqualTo(searchApiStatus_Final.RateLimit));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_DateTime, Is.EqualTo(searchApiStatus_Final.RateLimitReset_DateTime));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_TimeRemaining, Is.GreaterThanOrEqualTo(searchApiStatus_Final.RateLimitReset_TimeRemaining));
+ Assert.That(searchApiStatus_Initial.RateLimitReset_UnixEpochSeconds, Is.EqualTo(searchApiStatus_Final.RateLimitReset_UnixEpochSeconds));
+ Assert.That(searchApiStatus_Initial.RemainingRequestCount, Is.GreaterThanOrEqualTo(searchApiStatus_Final.RemainingRequestCount));
+ }
+ });
}
[Test]
@@ -150,7 +158,7 @@ public void GetApiRateLimits_CancelledRequest()
//Act
//Assert
- Assert.ThrowsAsync(() => GitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token));
+ Assert.That(() => GitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token), Throws.TypeOf());
}
[Test]
@@ -164,6 +172,6 @@ public void GetApiRateLimits_InvalidBearerToken()
//Assert
var httpRequestException = Assert.ThrowsAsync(() => GitHubApiStatusService.GetApiRateLimits(cancellationTokenSource.Token));
- Assert.IsTrue(httpRequestException?.Message.Contains("Unauthorized"));
+ Assert.That(httpRequestException?.Message, Does.Contain("Unauthorized"));
}
-}
\ No newline at end of file
+}
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitRestDateTimeTests.cs b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitRestDateTimeTests.cs
index a7ab37d..4d6a3a8 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitRestDateTimeTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitRestDateTimeTests.cs
@@ -20,12 +20,15 @@ public void GetRateLimitResetDateTime_ValidHttpResponseHeaders()
//Act
rateLimitResetDateTime_Actual = GitHubApiStatusService.GetRateLimitResetDateTime(validHttpResponseHeaders);
- //Assert Test all values except Milliseconds, because GitHub API
- Assert.AreEqual(rateLimitResetDateTime_Expected.Second, rateLimitResetDateTime_Actual.Second);
- Assert.AreEqual(rateLimitResetDateTime_Expected.Minute, rateLimitResetDateTime_Actual.Minute);
- Assert.AreEqual(rateLimitResetDateTime_Expected.Hour, rateLimitResetDateTime_Actual.Hour);
- Assert.AreEqual(rateLimitResetDateTime_Expected.DayOfYear, rateLimitResetDateTime_Actual.DayOfYear);
- Assert.AreEqual(rateLimitResetDateTime_Expected.Year, rateLimitResetDateTime_Actual.Year);
+ //Assert
+ Assert.Multiple(() =>
+ {
+ Assert.That(rateLimitResetDateTime_Expected.Second, Is.EqualTo(rateLimitResetDateTime_Actual.Second));
+ Assert.That(rateLimitResetDateTime_Expected.Minute, Is.EqualTo(rateLimitResetDateTime_Actual.Minute));
+ Assert.That(rateLimitResetDateTime_Expected.Hour, Is.EqualTo(rateLimitResetDateTime_Actual.Hour));
+ Assert.That(rateLimitResetDateTime_Expected.DayOfYear, Is.EqualTo(rateLimitResetDateTime_Actual.DayOfYear));
+ Assert.That(rateLimitResetDateTime_Expected.Year, Is.EqualTo(rateLimitResetDateTime_Actual.Year));
+ });
}
[Test]
@@ -37,7 +40,7 @@ public void GetRateLimitResetDateTime_InvalidHttpResponseHeaders()
//Act
//Assert
- Assert.Throws(() => GitHubApiStatusService.GetRateLimitResetDateTime(invalidHttpResponseMessage.Headers));
+ Assert.That(() => GitHubApiStatusService.GetRateLimitResetDateTime(invalidHttpResponseMessage.Headers), Throws.TypeOf());
}
[Test]
@@ -50,7 +53,8 @@ public void GetRateLimitResetDateTime_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.GetRateLimitResetDateTime(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.GetRateLimitResetDateTime(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTests.cs b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTests.cs
index ad249f2..6cb3fc6 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTests.cs
@@ -19,7 +19,7 @@ public void GetRateLimit_ValidHttpResponseHeaders()
rateLimit_Actual = GitHubApiStatusService.GetRateLimit(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(rateLimit_Expected, rateLimit_Actual);
+ Assert.That(rateLimit_Actual, Is.EqualTo(rateLimit_Expected));
}
[Test]
@@ -31,7 +31,7 @@ public void GetRateLimit_InvalidHttpResponseHeaders()
//Act
//Assert
- Assert.Throws(() => GitHubApiStatusService.GetRateLimit(invalidHttpResponseMessage.Headers));
+ Assert.That(() => GitHubApiStatusService.GetRateLimit(invalidHttpResponseMessage.Headers), Throws.TypeOf());
}
[Test]
@@ -44,7 +44,8 @@ public void GetRateLimit_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.GetRateLimit(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.GetRateLimit(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTimeRemainingTests.cs b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTimeRemainingTests.cs
index 4fee797..cb18c28 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTimeRemainingTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetRateLimitTimeRemainingTests.cs
@@ -16,15 +16,17 @@ public void GetRemainingRequestCount_ValidHttpResponseHeaders()
var rateLimitTimeRemaining_Expected = TimeSpan.FromMinutes(45);
var rateLimitResetDateTime = DateTimeOffset.UtcNow.Add(rateLimitTimeRemaining_Expected);
-
var validHttpResponseHeaders = CreateHttpResponseHeaders(rateLimit, rateLimitResetDateTime, rateLimit - 5);
//Act
rateLimitTimeRemaining_Actual = GitHubApiStatusService.GetRateLimitTimeRemaining(validHttpResponseHeaders);
//Assert
- Assert.Greater(rateLimitTimeRemaining_Expected, rateLimitTimeRemaining_Actual);
- Assert.Less(rateLimitTimeRemaining_Expected.Subtract(TimeSpan.FromSeconds(2)), rateLimitTimeRemaining_Actual);
+ Assert.Multiple(() =>
+ {
+ Assert.That(rateLimitTimeRemaining_Expected, Is.GreaterThan(rateLimitTimeRemaining_Actual));
+ Assert.That(rateLimitTimeRemaining_Expected.Subtract(TimeSpan.FromSeconds(2)), Is.LessThan(rateLimitTimeRemaining_Actual));
+ });
}
[Test]
@@ -36,7 +38,7 @@ public void GetRemainingRequestCount_InvalidHttpResponseHeaders()
//Act
//Assert
- Assert.Throws(() => GitHubApiStatusService.GetRateLimitTimeRemaining(invalidHttpResponseMessage.Headers));
+ Assert.That(() => GitHubApiStatusService.GetRateLimitTimeRemaining(invalidHttpResponseMessage.Headers), Throws.TypeOf());
}
[Test]
@@ -49,7 +51,9 @@ public void GetRemainingRequestCount_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.GetRateLimitTimeRemaining(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.GetRateLimitTimeRemaining(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GetRemainingRequestCountTests.cs b/src/GitHubApiStatus.UnitTests/Tests/GetRemainingRequestCountTests.cs
index baf7ba1..99d6628 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GetRemainingRequestCountTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GetRemainingRequestCountTests.cs
@@ -21,7 +21,7 @@ public void GetRemainingRequestCount_ValidHttpResponseHeaders()
remainingRequestCount_Actual = GitHubApiStatusService.GetRemainingRequestCount(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(remainingRequestCount_Expected, remainingRequestCount_Actual);
+ Assert.That(remainingRequestCount_Actual, Is.EqualTo(remainingRequestCount_Expected));
}
[Test]
@@ -33,7 +33,7 @@ public void GetRemainingRequestCount_InvalidHttpResponseHeaders()
//Act
//Assert
- Assert.Throws(() => GitHubApiStatusService.GetRemainingRequestCount(invalidHttpResponseMessage.Headers));
+ Assert.That(() => GitHubApiStatusService.GetRemainingRequestCount(invalidHttpResponseMessage.Headers), Throws.TypeOf());
}
[Test]
@@ -46,7 +46,9 @@ public void GetRemainingRequestCount_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.GetRemainingRequestCount(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.GetRemainingRequestCount(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/GitHubApiStatusServiceConstructorTests.cs b/src/GitHubApiStatus.UnitTests/Tests/GitHubApiStatusServiceConstructorTests.cs
index 44c65b8..b2a7af2 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/GitHubApiStatusServiceConstructorTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/GitHubApiStatusServiceConstructorTests.cs
@@ -1,5 +1,5 @@
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using NUnit.Framework;
namespace GitHubApiStatus.UnitTests;
@@ -15,7 +15,7 @@ public void DefaultConstructorTest()
//Act
//Assert
- Assert.ThrowsAsync(() => githubApiStatusService.GetApiRateLimits());
+ Assert.That(() => githubApiStatusService.GetApiRateLimits(), Throws.TypeOf());
}
[Test]
@@ -28,7 +28,7 @@ public void NullAuthenticationHeaderValue()
//Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => new GitHubApiStatusService(null, productHeaderValue));
+ Assert.That(() => new GitHubApiStatusService(null, productHeaderValue), Throws.TypeOf());
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
}
@@ -42,7 +42,7 @@ public void NullProductHeaderValue()
//Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => new GitHubApiStatusService(authenticationHeaderValue, null));
+ Assert.That(() => new GitHubApiStatusService(authenticationHeaderValue, null), Throws.TypeOf());
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
}
@@ -55,7 +55,7 @@ public void NullHttpClient()
//Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => new GitHubApiStatusService(null));
+ Assert.That(() => new GitHubApiStatusService(null), Throws.TypeOf());
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
}
@@ -71,7 +71,7 @@ public void InvalidSchemeAuthenticationHeaderValue(string scheme)
//Act
//Assert
- Assert.Throws(() => new GitHubApiStatusService(authenticationHeaderValue, productHeaderValue));
+ Assert.That(() => new GitHubApiStatusService(authenticationHeaderValue, productHeaderValue), Throws.TypeOf());
}
[Test]
@@ -86,14 +86,17 @@ public async Task BEARERSchemeAuthenticationHeaderValue()
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
//Assert
- Assert.IsNotNull(gitHubApiStatusService);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
[Test]
@@ -107,14 +110,17 @@ public async Task BEARERSchemeHttpClient()
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
//Assert
- Assert.IsNotNull(gitHubApiStatusService);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
[Test]
@@ -130,13 +136,19 @@ public async Task ValidProductHeaderValue()
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
//Assert
- Assert.IsNotNull(gitHubApiStatusService);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
-}
\ No newline at end of file
+}
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/HasReachedMaximumApiCallLimitTests.cs b/src/GitHubApiStatus.UnitTests/Tests/HasReachedMaximumApiCallLimitTests.cs
index cadb5c5..74cdf90 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/HasReachedMaximumApiCallLimitTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/HasReachedMaximumApiCallLimitTests.cs
@@ -22,7 +22,7 @@ public void HasReachedMaximumApiCallLimitTests_ValidHttpResponseHeaders_True()
hasReachedMaximumApiCallLimit_Actual = GitHubApiStatusService.HasReachedMaximumApiCallLimit(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(hasReachedMaximumApiCallLimit_Expected, hasReachedMaximumApiCallLimit_Actual);
+ Assert.That(hasReachedMaximumApiCallLimit_Actual, Is.EqualTo(hasReachedMaximumApiCallLimit_Expected));
}
[Test]
@@ -41,7 +41,7 @@ public void HasReachedMaximumApiCallLimitTests_ValidHttpResponseHeaders_False()
hasReachedMaximumApiCallLimit_Actual = GitHubApiStatusService.HasReachedMaximumApiCallLimit(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(hasReachedMaximumApiCallLimit_Expected, hasReachedMaximumApiCallLimit_Actual);
+ Assert.That(hasReachedMaximumApiCallLimit_Actual, Is.EqualTo(hasReachedMaximumApiCallLimit_Expected));
}
[Test]
@@ -53,7 +53,7 @@ public void HasReachedMaximumApiCallLimitTests_InvalidHttpResponseHeaders()
//Act
//Assert
- Assert.Throws(() => GitHubApiStatusService.HasReachedMaximumApiCallLimit(invalidHttpResponseMessage.Headers));
+ Assert.That(() => GitHubApiStatusService.HasReachedMaximumApiCallLimit(invalidHttpResponseMessage.Headers), Throws.TypeOf());
}
[Test]
@@ -66,7 +66,10 @@ public void HasReachedMaximumApiCallLimitTests_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.HasReachedMaximumApiCallLimit(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.HasReachedMaximumApiCallLimit(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/HttpResponseHeadersExtensionsTests.cs b/src/GitHubApiStatus.UnitTests/Tests/HttpResponseHeadersExtensionsTests.cs
index 25a7b19..21df5cc 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/HttpResponseHeadersExtensionsTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/HttpResponseHeadersExtensionsTests.cs
@@ -19,8 +19,11 @@ public void DoesContainGitHubRateLimitHeaderTest()
doesContainGitHubRateLimitHeader_false = invalidHttpResponseHeaders.DoesContainGitHubRateLimitHeader();
//Assert
- Assert.IsTrue(doesContainGitHubRateLimitHeader_true);
- Assert.IsFalse(doesContainGitHubRateLimitHeader_false);
+ Assert.Multiple(() =>
+ {
+ Assert.That(doesContainGitHubRateLimitHeader_true, Is.True);
+ Assert.That(doesContainGitHubRateLimitHeader_false, Is.False);
+ });
}
[Test]
@@ -37,8 +40,11 @@ public void DoesContainGitHubRateLimitResetHeaderTest()
doesContainGitHubRateLimitResetHeader_false = invalidHttpResponseHeaders.DoesContainGitHubRateLimitResetHeader();
//Assert
- Assert.IsTrue(doesContainGitHubRateLimitResetHeader_true);
- Assert.IsFalse(doesContainGitHubRateLimitResetHeader_false);
+ Assert.Multiple(() =>
+ {
+ Assert.That(doesContainGitHubRateLimitResetHeader_true, Is.True);
+ Assert.That(doesContainGitHubRateLimitResetHeader_false, Is.False);
+ });
}
[Test]
@@ -55,7 +61,13 @@ public void DoesContainGitHubRateLimitRemainingHeaderTest()
doesContainGitHubRateLimitRemainingHeader_false = invalidHttpResponseHeaders.DoesContainGitHubRateLimitRemainingHeader();
//Assert
- Assert.IsTrue(doesContainGitHubRateLimitRemainingHeader_true);
- Assert.IsFalse(doesContainGitHubRateLimitRemainingHeader_false);
+ Assert.Multiple(() =>
+ {
+ Assert.That(doesContainGitHubRateLimitRemainingHeader_true, Is.True);
+ Assert.That(doesContainGitHubRateLimitRemainingHeader_false, Is.False);
+ });
}
-}
\ No newline at end of file
+}
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/IsAbuseRateLimitTest.cs b/src/GitHubApiStatus.UnitTests/Tests/IsAbuseRateLimitTest.cs
index d04b275..3049dae 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/IsAbuseRateLimitTest.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/IsAbuseRateLimitTest.cs
@@ -1,47 +1,57 @@
using NUnit.Framework;
-
+
namespace GitHubApiStatus.UnitTests;
+
+class IsAbuseRateLimitTest : BaseTest
+{
+ [Test]
+ public void IsAbuseRateLimit()
+ {
+ //Arrange
+ var httpResponseHeaders = CreateHttpResponseHeaders(500, DateTimeOffset.UtcNow, 0, isAbuseRateLimit: true);
-class IsAbuseRateLimitTest : BaseTest
-{
- [Test]
- public void IsAbuseRateLimit()
- {
- //Arrange
- var httpResponseHeaders = CreateHttpResponseHeaders(500, DateTimeOffset.UtcNow, 0, isAbuseRateLimit: true);
-
- //Act
- var isAbuseRateLimit = GitHubApiStatusService.IsAbuseRateLimit(httpResponseHeaders, out var delta);
-
- //Assert
- Assert.IsTrue(isAbuseRateLimit);
- Assert.IsNotNull(delta);
- }
-
- [Test]
- public void IsNotAbuseRateLimit()
- {
- //Arrange
- var httpResponseHeaders = CreateHttpResponseHeaders(500, DateTimeOffset.UtcNow, 0);
-
- //Act
- var isAbuseRateLimit = GitHubApiStatusService.IsAbuseRateLimit(httpResponseHeaders, out TimeSpan? delta);
-
- //Assert
- Assert.IsFalse(isAbuseRateLimit);
- Assert.IsNull(delta);
- }
+ //Act
+ var isAbuseRateLimit = GitHubApiStatusService.IsAbuseRateLimit(httpResponseHeaders, out var delta);
- [Test]
- public void NullHttpResponseHeaders()
- {
- //Arrange
+ //Assert
+ Assert.Multiple(() =>
+ {
+ Assert.That(isAbuseRateLimit, Is.True);
+ Assert.That(delta, Is.Not.Null);
+ });
+ }
- //Act
+ [Test]
+ public void IsNotAbuseRateLimit()
+ {
+ //Arrange
+ var httpResponseHeaders = CreateHttpResponseHeaders(500, DateTimeOffset.UtcNow, 0);
+
+ //Act
+ var isAbuseRateLimit = GitHubApiStatusService.IsAbuseRateLimit(httpResponseHeaders, out TimeSpan? delta);
+
+ //Assert
+ Assert.Multiple(() =>
+ {
+ Assert.That(isAbuseRateLimit, Is.False);
+ Assert.That(delta, Is.Null);
+ });
+ }
- //Assert
+ [Test]
+ public void NullHttpResponseHeaders()
+ {
+ //Arrange
+
+ //Act
+
+ //Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => GitHubApiStatusService.IsAbuseRateLimit(null, out _));
+ Assert.That(() => GitHubApiStatusService.IsAbuseRateLimit(null, out _), Throws.TypeOf());
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
- }
-}
\ No newline at end of file
+ }
+}
+
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/IsResponseFromAuthenticatedRequestTests.cs b/src/GitHubApiStatus.UnitTests/Tests/IsResponseFromAuthenticatedRequestTests.cs
index d356653..c94cc70 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/IsResponseFromAuthenticatedRequestTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/IsResponseFromAuthenticatedRequestTests.cs
@@ -16,14 +16,13 @@ public void IsResponseFromAuthenticatedRequest_ValidHttpResponseHeaders_True()
const int rateLimitRemaining = 0;
const bool isUserAuthenticated_Expected = true;
-
var validHttpResponseHeaders = CreateHttpResponseHeaders(rateLimit, DateTimeOffset.UtcNow, rateLimitRemaining, isAuthenticated: isUserAuthenticated_Expected);
//Act
isUserAuthenticated_Actual = GitHubApiStatusService.IsResponseFromAuthenticatedRequest(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(isUserAuthenticated_Expected, isUserAuthenticated_Actual);
+ Assert.That(isUserAuthenticated_Actual, Is.EqualTo(isUserAuthenticated_Expected));
}
[Test]
@@ -36,14 +35,13 @@ public void IsResponseFromAuthenticatedRequest_ValidHttpResponseHeaders_False()
const int rateLimitRemaining = 10;
const bool isUserAuthenticated_Expected = false;
-
var validHttpResponseHeaders = CreateHttpResponseHeaders(rateLimit, DateTimeOffset.UtcNow, rateLimitRemaining, isAuthenticated: isUserAuthenticated_Expected);
//Act
isUserAuthenticated_Actual = GitHubApiStatusService.IsResponseFromAuthenticatedRequest(validHttpResponseHeaders);
//Assert
- Assert.AreEqual(isUserAuthenticated_Expected, isUserAuthenticated_Actual);
+ Assert.That(isUserAuthenticated_Actual, Is.EqualTo(isUserAuthenticated_Expected));
}
[Test]
@@ -56,7 +54,7 @@ public void IsResponseFromAuthenticatedRequest_InvalidHttpResponseHeaders()
var isUserAuthenticated = GitHubApiStatusService.IsResponseFromAuthenticatedRequest(invalidHttpResponseMessage.Headers);
//Assert
- Assert.IsFalse(isUserAuthenticated);
+ Assert.That(isUserAuthenticated, Is.False);
}
[Test]
@@ -69,7 +67,11 @@ public void IsResponseFromAuthenticatedRequest_NullHttpResponseHeaders()
//Assert
#pragma warning disable CS8604 // Possible null reference argument.
- Assert.Throws(() => GitHubApiStatusService.IsResponseFromAuthenticatedRequest(nullHttpResponseHeaders));
+ Assert.That(() => GitHubApiStatusService.IsResponseFromAuthenticatedRequest(nullHttpResponseHeaders), Throws.TypeOf());
#pragma warning restore CS8604 // Possible null reference argument.
}
-}
\ No newline at end of file
+}
+
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/ProductHeaderValueTests.cs b/src/GitHubApiStatus.UnitTests/Tests/ProductHeaderValueTests.cs
index fefcac1..d606b6b 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/ProductHeaderValueTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/ProductHeaderValueTests.cs
@@ -1,5 +1,5 @@
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using NUnit.Framework;
namespace GitHubApiStatus.UnitTests;
@@ -16,9 +16,12 @@ public void NullProductHeaderValueTest()
//Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => gitHubApiStatusService.AddProductHeaderValue(null));
+ Assert.Multiple(() =>
+ {
+ Assert.That(() => gitHubApiStatusService.AddProductHeaderValue(null), Throws.TypeOf());
+ Assert.That(gitHubApiStatusService.IsProductHeaderValueValid, Is.False);
+ });
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.IsFalse(gitHubApiStatusService.IsProductHeaderValueValid);
}
[Test]
@@ -32,12 +35,19 @@ public void NullNameTest()
//Assert
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#if NET8_0_OR_GREATER
- Assert.Throws(() => gitHubApiStatusService.AddProductHeaderValue(new ProductHeaderValue(null)));
+ Assert.Multiple(() =>
+ {
+ Assert.That(() => gitHubApiStatusService.AddProductHeaderValue(new ProductHeaderValue(null)), Throws.TypeOf());
+ Assert.That(gitHubApiStatusService.IsProductHeaderValueValid, Is.False);
+ });
#else
- Assert.Throws(() => gitHubApiStatusService.AddProductHeaderValue(new ProductHeaderValue(null)));
+ Assert.Multiple(() =>
+ {
+ Assert.That(() => gitHubApiStatusService.AddProductHeaderValue(new ProductHeaderValue(null)), Throws.TypeOf());
+ Assert.That(gitHubApiStatusService.IsProductHeaderValueValid, Is.False);
+ });
#endif
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.IsFalse(gitHubApiStatusService.IsProductHeaderValueValid);
}
[Test]
@@ -52,15 +62,23 @@ public async Task ValidProductHeaderValueTest()
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
//Assert
- Assert.IsNotNull(gitHubApiStatusService);
- Assert.IsTrue(gitHubApiStatusService.IsProductHeaderValueValid);
-
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(gitHubApiStatusService.IsProductHeaderValueValid, Is.True);
+
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
-}
\ No newline at end of file
+}
+
+
+
+
+
diff --git a/src/GitHubApiStatus.UnitTests/Tests/SetAuthenticationHeaderValueTests.cs b/src/GitHubApiStatus.UnitTests/Tests/SetAuthenticationHeaderValueTests.cs
index 9c673fe..b16f6f2 100644
--- a/src/GitHubApiStatus.UnitTests/Tests/SetAuthenticationHeaderValueTests.cs
+++ b/src/GitHubApiStatus.UnitTests/Tests/SetAuthenticationHeaderValueTests.cs
@@ -1,5 +1,5 @@
using System.Net.Http.Headers;
-using GitStatus.Shared;
+using GitStatus.Common;
using NUnit.Framework;
namespace GitHubApiStatus.UnitTests;
@@ -15,10 +15,13 @@ public void NullAuthenticationHeaderValue()
//Act
//Assert
+ Assert.Multiple(() =>
+ {
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.Throws(() => gitHubApiStatusService.SetAuthenticationHeaderValue(null));
+ Assert.That(() => gitHubApiStatusService.SetAuthenticationHeaderValue(null), Throws.TypeOf());
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
- Assert.IsFalse(gitHubApiStatusService.IsAuthenticationHeaderValueSet);
+ Assert.That(gitHubApiStatusService.IsAuthenticationHeaderValueSet, Is.False);
+ });
}
[TestCase("Basic")]
@@ -33,13 +36,13 @@ public void InvalidSchemeAuthenticationHeaderValue(string scheme)
//Act
//Assert
- Assert.Throws(() => gitHubApiStatusService.SetAuthenticationHeaderValue(authenticationHeaderValue));
+ Assert.That(() => gitHubApiStatusService.SetAuthenticationHeaderValue(authenticationHeaderValue), Throws.TypeOf());
}
[TestCase(null)]
[TestCase("")]
[TestCase(" ")]
- public void InvalidParameterAuthenticationHeaderValue(string parameter)
+ public void InvalidParameterAuthenticationHeaderValue(string? parameter)
{
//Arrange
var gitHubApiStatusService = new GitHubApiStatusService();
@@ -48,7 +51,7 @@ public void InvalidParameterAuthenticationHeaderValue(string parameter)
//Act
//Assert
- Assert.Throws(() => gitHubApiStatusService.SetAuthenticationHeaderValue(authenticationHeaderValue));
+ Assert.That(() => gitHubApiStatusService.SetAuthenticationHeaderValue(authenticationHeaderValue), Throws.TypeOf());
}
[Test]
@@ -66,13 +69,21 @@ public async Task BEARERSchemeAuthenticationHeaderValue()
var apiRateLimits = await gitHubApiStatusService.GetApiRateLimits().ConfigureAwait(false);
//Assert
- Assert.IsNotNull(gitHubApiStatusService);
- Assert.IsNotNull(apiRateLimits);
- Assert.IsNotNull(apiRateLimits.AppManifestConfiguration);
- Assert.IsNotNull(apiRateLimits.CodeScanningUpload);
- Assert.IsNotNull(apiRateLimits.GraphQLApi);
- Assert.IsNotNull(apiRateLimits.RestApi);
- Assert.IsNotNull(apiRateLimits.SearchApi);
- Assert.IsNotNull(apiRateLimits.SourceImport);
+ Assert.Multiple(() =>
+ {
+ Assert.That(gitHubApiStatusService, Is.Not.Null);
+ Assert.That(apiRateLimits, Is.Not.Null);
+ Assert.That(apiRateLimits.AppManifestConfiguration, Is.Not.Null);
+ Assert.That(apiRateLimits.CodeScanningUpload, Is.Not.Null);
+ Assert.That(apiRateLimits.GraphQLApi, Is.Not.Null);
+ Assert.That(apiRateLimits.RestApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SearchApi, Is.Not.Null);
+ Assert.That(apiRateLimits.SourceImport, Is.Not.Null);
+ });
}
-}
\ No newline at end of file
+}
+
+
+
+
+
diff --git a/src/GitHubApiStatus/GitHubApiStatus.csproj b/src/GitHubApiStatus/GitHubApiStatus.csproj
index fc6f414..92a0fbd 100644
--- a/src/GitHubApiStatus/GitHubApiStatus.csproj
+++ b/src/GitHubApiStatus/GitHubApiStatus.csproj
@@ -1,98 +1,91 @@
-
-
- netstandard1.3;netstandard2.0;netstandard2.1;net6.0;net8.0
- true
- GitHubApiStatus.snk
- GitHubApiStatus
- GitHubApiStatus
- GitHubApiStatus
- true
- true
- true
- snupkg
-
-GitHub API Rate Limit Status
+
+ netstandard1.3;netstandard2.0;netstandard2.1;net8.0;net9.0
+ true
+ GitHubApiStatus.snk
+ GitHubApiStatus
+ GitHubApiStatus
+ GitHubApiStatus
+ true
+ true
+ true
+ snupkg
+
+ GitHub API Rate Limit Status
-Calculate the GitHub API Rate Limits for the following GitHub APIs
-- REST API
-- Seach API
-- GraphQL API
-- Source Import API
-- Code Scanning Upload API
-- App Manifest Configuration API
-
- github, git, api, rate, rate limit
- GitHub API Rate Limit Status
-
-GitHub API Rate Limit Status
+ Calculate the GitHub API Rate Limits for the following GitHub APIs
+ - REST API
+ - Seach API
+ - GraphQL API
+ - Source Import API
+ - Code Scanning Upload API
+ - App Manifest Configuration API
+
+ github, git, api, rate, rate limit
+ GitHub API Rate Limit Status
+
+ GitHub API Rate Limit Status
-Calculate the GitHub API Rate Limits for the following GitHub APIs
-- REST API
-- Seach API
-- GraphQL API
-- Source Import API
-- Code Scanning Upload API
-- App Manifest Configuration API
-
-
-New In This Release:
-- Add .NET 8.0
-- (Breaking) Add System.Diagnostics.CodeAnalysis to IGitHubApiStatusService
-
- 3.0.0
- https://github.com/brminnick/GitHubApiStatus
- $(AssemblyName) ($(TargetFramework))
- 1.0.0.0
- 1.0.0.0
- $(Version)$(VersionSuffix)
- Brandon Minnick
- Brandon Minnick
- en
- ©Copyright 2020 Brandon Minnick. All rights reserved.
- false
- $(DefineConstants);
- false
- false
- MIT
- https://github.com/brminnick/GitHubApiStatus
- portable
- Release;Debug
- false
-
-
- true
- portable
- bin\Release\netstandard1.0\GitHubApiStatus.xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ Calculate the GitHub API Rate Limits for the following GitHub APIs
+ - REST API
+ - Seach API
+ - GraphQL API
+ - Source Import API
+ - Code Scanning Upload API
+ - App Manifest Configuration API
+
+
+ New In This Release:
+ - Add .NET 9.0
+
+ $(NuGetVersion)
+ https://github.com/brminnick/GitHubApiStatus
+ $(AssemblyName) ($(TargetFramework))
+ 1.0.0.0
+ 1.0.0.0
+ $(Version)$(VersionSuffix)
+ Brandon Minnick
+ Brandon Minnick
+ en
+ ©Copyright 2020 Brandon Minnick. All rights reserved.
+ false
+ $(DefineConstants);
+ false
+ false
+ MIT
+ https://github.com/brminnick/GitHubApiStatus
+ portable
+ Release;Debug
+ false
+
+
+ true
+ portable
+ bin\Release\netstandard1.0\GitHubApiStatus.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimitResponse.cs b/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimitResponse.cs
index e21b926..c9741a6 100644
--- a/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimitResponse.cs
+++ b/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimitResponse.cs
@@ -2,5 +2,5 @@
interface IGitHubApiRateLimitResponse
{
- public IGitHubApiRateLimits Results { get; }
+ IGitHubApiRateLimits Results { get; }
}
\ No newline at end of file
diff --git a/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimits.cs b/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimits.cs
index 987fe1a..f7046cd 100644
--- a/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimits.cs
+++ b/src/GitHubApiStatus/Interfaces/IGitHubApiRateLimits.cs
@@ -8,30 +8,30 @@ public interface IGitHubApiRateLimits
///
/// REST API Rate Limit Status
///
- public IRateLimitStatus RestApi { get; }
+ IRateLimitStatus RestApi { get; }
///
/// Search API Rate Limit Status
///
- public IRateLimitStatus SearchApi { get; }
+ IRateLimitStatus SearchApi { get; }
///
/// GraphQL API Rate Limit Status
///
- public IRateLimitStatus GraphQLApi { get; }
+ IRateLimitStatus GraphQLApi { get; }
///
/// Source Import API Rate Limit Status
///
- public IRateLimitStatus SourceImport { get; }
+ IRateLimitStatus SourceImport { get; }
///
/// Code Scanning API Rate Limit Status
///
- public IRateLimitStatus CodeScanningUpload { get; }
+ IRateLimitStatus CodeScanningUpload { get; }
///
/// App Manifest Configuration API Rate Limit Status
///
- public IRateLimitStatus AppManifestConfiguration { get; }
+ IRateLimitStatus AppManifestConfiguration { get; }
}
\ No newline at end of file
diff --git a/src/GitHubApiStatus/Interfaces/IGitHubApiStatusService.cs b/src/GitHubApiStatus/Interfaces/IGitHubApiStatusService.cs
index bafee4e..9ab8c7e 100644
--- a/src/GitHubApiStatus/Interfaces/IGitHubApiStatusService.cs
+++ b/src/GitHubApiStatus/Interfaces/IGitHubApiStatusService.cs
@@ -6,7 +6,7 @@ namespace GitHubApiStatus;
///
/// Interface for GitHubApiStatusService
///
-public interface IGitHubApiStatusService
+public interface IGitHubApiStatusService : IDisposable
{
///
/// Determines if GitHubApiClient.DefaultRequestHeaders.UserAgent is Valid
diff --git a/src/GitHubApiStatus/Interfaces/IRateLimitStatus.cs b/src/GitHubApiStatus/Interfaces/IRateLimitStatus.cs
index 2c83a0f..536409a 100644
--- a/src/GitHubApiStatus/Interfaces/IRateLimitStatus.cs
+++ b/src/GitHubApiStatus/Interfaces/IRateLimitStatus.cs
@@ -8,25 +8,25 @@ public interface IRateLimitStatus
///
/// Time Remaining until Rate Limit Reset
///
- public TimeSpan RateLimitReset_TimeRemaining { get; }
+ TimeSpan RateLimitReset_TimeRemaining { get; }
///
/// GitHub API Rate Limit
///
- public int RateLimit { get; }
+ int RateLimit { get; }
///
/// Remaining Request Count to GitHub API
///
- public int RemainingRequestCount { get; }
+ int RemainingRequestCount { get; }
///
/// Rate Limit Reset Time Stamp in Unix Epoch Seconds
///
- public long RateLimitReset_UnixEpochSeconds { get; }
+ long RateLimitReset_UnixEpochSeconds { get; }
///
/// Rate Limit Reset Time Stamp
///
- public DateTimeOffset RateLimitReset_DateTime { get; }
+ DateTimeOffset RateLimitReset_DateTime { get; }
}
\ No newline at end of file
diff --git a/src/GitHubApiStatus/Services/GitHubApiStatusService.cs b/src/GitHubApiStatus/Services/GitHubApiStatusService.cs
index 9936749..ef4fc73 100644
--- a/src/GitHubApiStatus/Services/GitHubApiStatusService.cs
+++ b/src/GitHubApiStatus/Services/GitHubApiStatusService.cs
@@ -16,7 +16,7 @@ namespace GitHubApiStatus;
///
/// GitHub API Status Service
///
-public class GitHubApiStatusService : IGitHubApiStatusService, IDisposable
+public class GitHubApiStatusService : IGitHubApiStatusService
{
///
/// GitHub Http Response Rate Limit Header Key