Skip to content

Adds Git protection rules (#859) #1504

Adds Git protection rules (#859)

Adds Git protection rules (#859) #1504

GitHub Actions / Windows .Net 8.0 unit test results succeeded Jun 27, 2024 in 1s

435 passed, 0 failed and 0 skipped

Tests passed successfully

✅ ./TestResults/Win_net8.0_20240627032333.trx

435 tests were completed in 30s with 435 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
Octo.Tests.Commands.AutomationEnvironmentProviderFixture 2✅ 117ms
Octopus.Client.Tests.Conventions.AccountTypeConventions 1✅ 13ms
Octopus.Client.Tests.Conventions.ClientConventions 22✅ 57ms
Octopus.Client.Tests.Conventions.RepositorySymmetryConventions 2✅ 1ms
Octopus.Client.Tests.DefaultLinkResolverFixture 24✅ 2ms
Octopus.Client.Tests.Exceptions.OctopusExceptionFactoryFixture 42✅ 53ms
Octopus.Client.Tests.Extensions.DateTimeExtensionsFixture 9✅ 86ms
Octopus.Client.Tests.Extensions.TypeExtensionMethodsFixture 3✅ 3ms
Octopus.Client.Tests.HttpRequestRouting.GivenAGetPayload 10✅ 501ms
Octopus.Client.Tests.HttpRequestRouting.GivenAPostPayload 8✅ 197ms
Octopus.Client.Tests.Integration.OctopusClient.AntiforgeryTokenTests 2✅ 387ms
Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersAzureDevOpsTests 2✅ 19ms
Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersBambooTests 2✅ 15ms
Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersTeamCityTests 2✅ 15ms
Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersUnspecifiedTests 2✅ 13ms
Octopus.Client.Tests.Integration.OctopusClient.ErrorHandlingTests 1✅ 22ms
Octopus.Client.Tests.Integration.OctopusClient.FileTests 2✅ 28ms
Octopus.Client.Tests.Integration.OctopusClient.HttpMethodTests 4✅ 53ms
Octopus.Client.Tests.Integration.OctopusClient.NonJsonReturnTypeTests 3✅ 25ms
Octopus.Client.Tests.Integration.OctopusClient.SslTests 2✅ 5s
Octopus.Client.Tests.Integration.OctopusClient.StatusTests 7✅ 51ms
Octopus.Client.Tests.Integration.OctopusClient.StreamTests 1✅ 6ms
Octopus.Client.Tests.Integration.OctopusClient.TimeoutTests 2✅ 5s
Octopus.Client.Tests.Integration.OctopusClient.UserAgentTests 2✅ 17ms
Octopus.Client.Tests.Integration.Repository.MachineRepositoryTest 3✅ 125ms
Octopus.Client.Tests.Integration.Repository.TenantRepositoryTest 2✅ 21ms
Octopus.Client.Tests.Integration.Repository.UnauthorisedTest 1✅ 13ms
Octopus.Client.Tests.Model.InterruptionResourceFixture 4✅ 4ms
Octopus.Client.Tests.Model.InterruptionTypeFixture 2✅ 0ms
Octopus.Client.Tests.Model.NonEmptyCollectionItemAttributeFixture 3✅ 1ms
Octopus.Client.Tests.Model.PasswordComplexityAttributeFixture 10✅ 1ms
Octopus.Client.Tests.Model.SemanticVersionMaskFixture 62✅ 23ms
Octopus.Client.Tests.Model.TenantVariableResourceFixture 6✅ 15ms
Octopus.Client.Tests.Model.Versioning.VersionComparerFixture 23✅ 2ms
Octopus.Client.Tests.OctopusClientsCanBeMockedFixture 2✅ 64ms
Octopus.Client.Tests.OctopusRepositoryConventionFixture 1✅ 1ms
Octopus.Client.Tests.Operations.RegisterKubernetesClusterOperationFixture 7✅ 78ms
Octopus.Client.Tests.Operations.RegisterMachineOperationFixture 12✅ 77ms
Octopus.Client.Tests.PublicSurfaceAreaFixture 1✅ 70ms
Octopus.Client.Tests.Repositories.Async.BasicRepositoryFixture 16✅ 15ms
Octopus.Client.Tests.Repositories.Async.ProjectTriggerRepositoryTest 1✅ 9ms
Octopus.Client.Tests.Repositories.Async.TaskRepositoryTests 3✅ 11s
Octopus.Client.Tests.Repositories.BasicRepositoryFixture 15✅ 9ms
Octopus.Client.Tests.Repositories.OctopusAsyncRepositoryTests 1✅ 1ms
Octopus.Client.Tests.Repositories.OctopusRepositoryTests 2✅ 4ms
Octopus.Client.Tests.Repositories.ProjectBetaRepositoryTests 3✅ 6ms
Octopus.Client.Tests.Repositories.ProjectRepositoryFixture 3✅ 4ms
Octopus.Client.Tests.Repositories.ProjectRepositorySettingsFixture 1✅ 21ms
Octopus.Client.Tests.Repositories.VariableSetBetaRepositoryTests 4✅ 4ms
Octopus.Client.Tests.Serialization.ChannelVersionRuleResourceSerializationFixture 2✅ 15ms
Octopus.Client.Tests.Serialization.ControlConverterTests 2✅ 5ms
Octopus.Client.Tests.Serialization.CrossPlatformDateTimeZoneJsonConverterFixture 8✅ 46ms
Octopus.Client.Tests.Serialization.EndpointConverterFixture 11✅ 21ms
Octopus.Client.Tests.Serialization.FeedResourceConverterFixture 7✅ 13ms
Octopus.Client.Tests.Serialization.InheritedClassConverterFixture 3✅ 5ms
Octopus.Client.Tests.Serialization.MultiIsoDateTimeFormatConverterFixture 4✅ 4ms
Octopus.Client.Tests.Serialization.PermissionSerializationFixture 7✅ 15ms
Octopus.Client.Tests.Serialization.PermissiveInstantJsonConverterFixture 5✅ 3ms
Octopus.Client.Tests.Serialization.TentacleConfigurationConverterFixture 2✅ 3ms
Octopus.Client.Tests.Serialization.TinyTypeSerializationFixture 2✅ 6ms
Octopus.Client.Tests.Serialization.VersioningStrategyResourceSerializationFixture 4✅ 9ms
Octopus.Client.Tests.ServerVersionCheckFixture 8✅ 0ms
Octopus.Client.Tests.Spaces.MixedScopeSpaceContextExtensionTests 3✅ 9ms
Octopus.Client.Tests.Spaces.SpaceIdAsyncTests 10✅ 18ms
Octopus.Client.Tests.UrlTemplateTests 12✅ 3ms

✅ Octo.Tests.Commands.AutomationEnvironmentProviderFixture

✅ EnvironmentIsKnownIfBuildVariablesHaveValues
✅ EnvironmentIsUnknownIfBuildVariablesDontHaveValues

✅ Octopus.Client.Tests.Conventions.AccountTypeConventions

✅ AllAccountResourceTypeCanBeMappedToAnAccountType

✅ Octopus.Client.Tests.Conventions.ClientConventions

✅ AllAsyncRepositoriesShouldBeAvailableViaIOctopusAsyncRepository
✅ AllAsyncRepositoryInterfacesShouldFollowTheseConventions
✅ AllRepositoriesShouldExposePublicMembersViaTheirInterfaces
✅ AllRepositoriesShouldImplementNonGenericSimpleInterface
✅ AllResourcePropertiesShouldHavePublicGetters
✅ AllResourcePropertiesShouldHavePublicSetters
✅ AllResourcesShouldLiveInTheCorrectParentNamespace
✅ AllSyncRepositoriesShouldBeAvailableViaIOctopusRepository
✅ AllSyncRepositoryInterfacesShouldFollowTheseConventions
✅ AsyncRepositoriesThatGetNamedResourcesShouldUsuallyImplementIFindByName
✅ AsyncRepositoriesThatImplementCreateShouldAlsoImplementDelete
✅ AsyncRepositoriesThatImplementCreateShouldAlsoImplementModify
✅ MostAsyncRepositoriesThatGetResourcesShouldImplementIPaginate
✅ MostSyncRepositoriesThatGetResourcesShouldImplementIPaginate
✅ RepositoriesShouldBeNamedLikeTheirResourceType
✅ RepositoriesShouldNotRepresentMultipleResourceTypes
✅ SomeINamedResourcesShouldNeverBeIFindByNameToAvoidGettingTheWrongAnswer
✅ SyncRepositoriesThatGetNamedResourcesShouldUsuallyImplementIFindByName
✅ SyncRepositoriesThatImplementCreateShouldAlsoImplementDelete
✅ SyncRepositoriesThatImplementCreateShouldAlsoImplementModify
✅ ThereShouldBeAsyncRepositories
✅ TopLevelResourcesWithAPublicNamePropertyShouldProbablyImplementINamedResource

✅ Octopus.Client.Tests.Conventions.RepositorySymmetryConventions

✅ IOctopusAsyncRepositoryExposesTheSamePropertiesAsIOctopusRepository
✅ IOctopusRepositoryExposesTheSamePropertiesAsIOctopusAsyncRepository

✅ Octopus.Client.Tests.DefaultLinkResolverFixture

✅ ShouldResolveWhenApiSuffixGiven("~/","http://octopus/")
✅ ShouldResolveWhenApiSuffixGiven("~/api","http://octopus/api")
✅ ShouldResolveWhenApiSuffixGiven("~/api/foo","http://octopus/api/foo")
✅ ShouldResolveWhenApiSuffixGiven("~/api/foo/bar","http://octopus/api/foo/bar")
✅ ShouldResolveWhenNestedVirtualDirectoryApiSuffixGiven("~/","http://octopus/vdir1/vdir2/")
✅ ShouldResolveWhenNestedVirtualDirectoryApiSuffixGiven("~/api","http://octopus/vdir1/vdir2/api")
✅ ShouldResolveWhenNestedVirtualDirectoryApiSuffixGiven("~/api/foo","http://octopus/vdir1/vdir2/api/foo")
✅ ShouldResolveWhenNestedVirtualDirectoryApiSuffixGiven("~/api/foo/bar","http://octopus/vdir1/vdir2/api/foo/bar")
✅ ShouldResolveWhenNestedVirtualDirectorySuffixGiven("~/","http://octopus/vdir1/vdir2/")
✅ ShouldResolveWhenNestedVirtualDirectorySuffixGiven("~/api","http://octopus/vdir1/vdir2/api")
✅ ShouldResolveWhenNestedVirtualDirectorySuffixGiven("~/api/foo","http://octopus/vdir1/vdir2/api/foo")
✅ ShouldResolveWhenNestedVirtualDirectorySuffixGiven("~/api/foo/bar","http://octopus/vdir1/vdir2/api/foo/bar")
✅ ShouldResolveWhenNoSuffixGiven("~/","http://octopus/")
✅ ShouldResolveWhenNoSuffixGiven("~/api","http://octopus/api")
✅ ShouldResolveWhenNoSuffixGiven("~/api/foo","http://octopus/api/foo")
✅ ShouldResolveWhenNoSuffixGiven("~/api/foo/bar","http://octopus/api/foo/bar")
✅ ShouldResolveWhenVirtualDirectoryApiSuffixGiven("~/","http://octopus/vdir/")
✅ ShouldResolveWhenVirtualDirectoryApiSuffixGiven("~/api","http://octopus/vdir/api")
✅ ShouldResolveWhenVirtualDirectoryApiSuffixGiven("~/api/foo","http://octopus/vdir/api/foo")
✅ ShouldResolveWhenVirtualDirectoryApiSuffixGiven("~/api/foo/bar","http://octopus/vdir/api/foo/bar")
✅ ShouldResolveWhenVirtualDirectorySuffixGiven("~/","http://octopus/vdir/")
✅ ShouldResolveWhenVirtualDirectorySuffixGiven("~/api","http://octopus/vdir/api")
✅ ShouldResolveWhenVirtualDirectorySuffixGiven("~/api/foo","http://octopus/vdir/api/foo")
✅ ShouldResolveWhenVirtualDirectorySuffixGiven("~/api/foo/bar","http://octopus/vdir/api/foo/bar")

✅ Octopus.Client.Tests.Exceptions.OctopusExceptionFactoryFixture

✅ CreatedOctopusMethodNotAllowedFoundException_ShouldContainPayloadInformation("",Octopus.Client.Exceptions.OctopusMethodNotAllowedFoundException)
✅ CreatedOctopusMethodNotAllowedFoundException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusMethodNotAllowedFoundException: Error Message)
✅ CreatedOctopusResourceNotFoundException_ShouldContainPayloadInformation("",Octopus.Client.Exceptions.OctopusResourceNotFoundException)
✅ CreatedOctopusResourceNotFoundException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusResourceNotFoundException: Error Message)
✅ CreatedOctopusSecurityException_ShouldContainPayloadInformation("",Octopus.Client.Exceptions.OctopusSecurityException)
✅ CreatedOctopusSecurityException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"HelpText\": \"Help Text\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusSecurityException: Error Message)
✅ CreatedOctopusSecurityException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusSecurityException: Error Message)
✅ CreatedOctopusServerException_ShouldContainPayloadInformation("",Octopus.Client.Exceptions.OctopusServerException)
✅ CreatedOctopusServerException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"HelpText\": \"Help Text\",\r\n  \"FullException\": \"Full Exception\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusServerException: Full Exception)
✅ CreatedOctopusServerException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"HelpText\": \"Help Text\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusServerException: Error Message)
✅ CreatedOctopusServerException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusServerException: Error Message)
✅ CreatedOctopusValidationException_ShouldContainPayloadInformation("",Octopus.Client.Exceptions.OctopusValidationException: 


)
✅ CreatedOctopusValidationException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Errors\": [\r\n    \"Additional Errors\"\r\n  ],\r\n  \"HelpText\": \"Help Text\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusValidationException: Error Message

 - Additional Errors
)
✅ CreatedOctopusValidationException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"HelpText\": \"Help Text\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusValidationException: Error Message


)
✅ CreatedOctopusValidationException_ShouldContainPayloadInformation("{\r\n  \"ErrorMessage\": \"Error Message\",\r\n  \"Random\": \"not relevant\"\r\n}",Octopus.Client.Exceptions.OctopusValidationException: Error Message


)
✅ Http400or409Response_WithNoPayLoad_ShouldCreateOctopusValidationException(BadRequest)
✅ Http400or409Response_WithNoPayLoad_ShouldCreateOctopusValidationException(Conflict)
✅ Http401or403Response_WithNoPayLoad_ShouldCreateOctopusSecurityException(Forbidden)
✅ Http401or403Response_WithNoPayLoad_ShouldCreateOctopusSecurityException(Unauthorized)
✅ Http404Response_WithNoPayLoad_ShouldCreateOctopusResourceNotFoundException
✅ Http405Response_WithNoPayLoad_ShouldCreateOctopusMethodNotAllowedFoundException
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(ExpectationFailed)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(Found)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(Gone)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(LengthRequired)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(MovedPermanently)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(MultipleChoices)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(NotAcceptable)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(NotModified)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(PaymentRequired)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(PreconditionFailed)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(ProxyAuthenticationRequired)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(RedirectKeepVerb)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(RequestedRangeNotSatisfiable)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(RequestEntityTooLarge)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(RequestTimeout)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(RequestUriTooLong)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(SeeOther)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(UnsupportedMediaType)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(Unused)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(UpgradeRequired)
✅ HttpResponseWithStatusCodeExcluding_400_401_403_404_405_409_AndNoPayload_ShouldCreateOctopusServerException(UseProxy)

✅ Octopus.Client.Tests.Extensions.DateTimeExtensionsFixture

✅ ToDateTimeZoneOrNull("Africa/Bissau","Africa/Bissau")
✅ ToDateTimeZoneOrNull("Australia/Brisbane","Australia/Brisbane")
✅ ToDateTimeZoneOrNull("E. Australia Standard Time","Australia/Brisbane")
✅ ToDateTimeZoneOrNull("Etc/GMT+8","Etc/GMT+8")
✅ ToDateTimeZoneOrNull("Invalid",null)
✅ ToDateTimeZoneOrNull("Pacific Standard Time (Mexico)","America/Tijuana")
✅ ToDateTimeZoneOrNull("UTC-09","UTC-09")
✅ ToDateTimeZoneOrNull("UTC","UTC")
✅ TzdbZoneToWindowsTimeZoneId

✅ Octopus.Client.Tests.Extensions.TypeExtensionMethodsFixture

✅ IsClosedTypeOfOpenGenericShouldBe(Octopus.Client.Tests.Extensions.TypeExtensionMethodsFixture+SomeInt,Octopus.TinyTypes.TinyType`1[T])
✅ IsClosedTypeOfOpenGenericShouldBe(Octopus.TinyTypes.TinyType`1[System.Int32],Octopus.TinyTypes.TinyType`1[T])
✅ IsClosedTypeOfOpenGenericShouldBe(System.Int32,Octopus.TinyTypes.TinyType`1[T])

✅ Octopus.Client.Tests.HttpRequestRouting.GivenAGetPayload

✅ InvalidRoutesShouldThrow(, , )
✅ InvalidRoutesShouldThrow(, , False)
✅ InvalidRoutesShouldThrow(, 13, False)
✅ InvalidRoutesShouldThrow(, 42, )
✅ TheHttpMethodShouldBeCorrect
✅ ValidRoutesShouldResolve(!@#$%^&*()+/\, , ,"/api/some-request/!%40%23%24%25%5E%26*()%2B%2F%5C")
✅ ValidRoutesShouldResolve(foo, , ,"/api/some-request/foo")
✅ ValidRoutesShouldResolve(foo, , False,"/api/some-request/foo?baz=False")
✅ ValidRoutesShouldResolve(foo, 13, False,"/api/some-request/foo?bar=13&baz=False")
✅ ValidRoutesShouldResolve(foo, 42, ,"/api/some-request/foo?bar=42")

✅ Octopus.Client.Tests.HttpRequestRouting.GivenAPostPayload

✅ InvalidRoutesShouldThrow(, , )
✅ InvalidRoutesShouldThrow(, , False)
✅ InvalidRoutesShouldThrow(, 13, False)
✅ InvalidRoutesShouldThrow(, 42, )
✅ ValidRoutesShouldResolve(foo, , ,"/api/some-command/foo")
✅ ValidRoutesShouldResolve(foo, , False,"/api/some-command/foo")
✅ ValidRoutesShouldResolve(foo, 13, False,"/api/some-command/foo/13/False")
✅ ValidRoutesShouldResolve(foo, 42, ,"/api/some-command/foo/42")

✅ Octopus.Client.Tests.Integration.OctopusClient.AntiforgeryTokenTests

✅ AsyncClient_ShouldCopyAntiforgeryCookieToHeader
✅ SyncClient_ShouldCopyAntiforgeryCookieToHeader

✅ Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersAzureDevOpsTests

✅ AsyncClient_ShouldProvideBuildServer_WithCorrectValue
✅ SyncClient_ShouldProvideBuildServer_WithCorrectValue

✅ Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersBambooTests

✅ AsyncClient_ShouldProvideBuildServer_WithCorrectValue
✅ SyncClient_ShouldProvideBuildServer_WithCorrectValue

✅ Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersTeamCityTests

✅ AsyncClient_ShouldProvideBuildServer_WithCorrectValue
✅ SyncClient_ShouldProvideBuildServer_WithCorrectValue

✅ Octopus.Client.Tests.Integration.OctopusClient.BuildServerHeadersUnspecifiedTests

✅ AsyncClient_ShouldProvideBuildServer_WithCorrectValue
✅ SyncClient_ShouldProvideBuildServer_WithCorrectValue

✅ Octopus.Client.Tests.Integration.OctopusClient.ErrorHandlingTests

✅ ShouldHandleValidationError

✅ Octopus.Client.Tests.Integration.OctopusClient.FileTests

✅ PostFile
✅ PostFileSync

✅ Octopus.Client.Tests.Integration.OctopusClient.HttpMethodTests

✅ DeleteReachesTheServer
✅ GetReturnsAValue
✅ PostingAObjectWorks
✅ PuttingAObjectWorks

✅ Octopus.Client.Tests.Integration.OctopusClient.NonJsonReturnTypeTests

✅ GetByteArray
✅ GetContent
✅ GetStream

✅ Octopus.Client.Tests.Integration.OctopusClient.SslTests

✅ InvalidSslCertificateIsIgnoredWhenTheOptionIsOn
✅ InvalidSslCertificateIsRejected

✅ Octopus.Client.Tests.Integration.OctopusClient.StatusTests

✅ Status400
✅ Status401
✅ Status403
✅ Status404
✅ Status405
✅ Status409
✅ Status500

✅ Octopus.Client.Tests.Integration.OctopusClient.StreamTests

✅ PostStream

✅ Octopus.Client.Tests.Integration.OctopusClient.TimeoutTests

✅ CancellationThrowsOperationCanceledException
✅ ConfiguredTimeoutWorks

✅ Octopus.Client.Tests.Integration.OctopusClient.UserAgentTests

✅ AsyncClient_ShouldProvideUserAgent_WithNameAndVersion
✅ SyncClient_ShouldProvideUserAgent_WithNameAndVersion

✅ Octopus.Client.Tests.Integration.Repository.MachineRepositoryTest

✅ AsyncGetTasksReturnsAllPages
✅ StepPackageEndpointInputs_IsSerializedAsObject
✅ SyncGetTasksReturnsAllPages

✅ Octopus.Client.Tests.Integration.Repository.TenantRepositoryTest

✅ AsyncGetTasksReturnsAllPages
✅ SyncGetTasksReturnsAllPages

✅ Octopus.Client.Tests.Integration.Repository.UnauthorisedTest

✅ IfTheServerReturnsAnUnauthorisedResultASecurityExceptionShouldBeThrown

✅ Octopus.Client.Tests.Model.InterruptionResourceFixture

✅ InterruptionTypeCanBeDeserialized
✅ InterruptionTypeIsDefaultedOnConstruction
✅ InterruptionTypeIsDerivedFromTheTitleWhenItIsNotSupplied("Stop, drop and roll","ManualIntervention")
✅ InterruptionTypeIsDerivedFromTheTitleWhenItIsNotSupplied("The deployment requires failure guidance","GuidedFailure")

✅ Octopus.Client.Tests.Model.InterruptionTypeFixture

✅ DifferentValuesAreNotEqual
✅ IsNotCaseSensitive

✅ Octopus.Client.Tests.Model.NonEmptyCollectionItemAttributeFixture

✅ CollectionWithBlankStringShouldFail
✅ CollectionWithSomethingInItShouldPass
✅ EmptyCollectionShouldPass

✅ Octopus.Client.Tests.Model.PasswordComplexityAttributeFixture

✅ ShouldPassOrFail("",True)
✅ ShouldPassOrFail("a",False)
✅ ShouldPassOrFail("abc",False)
✅ ShouldPassOrFail("abdefgh",False)
✅ ShouldPassOrFail("correct horse battery stable",True)
✅ ShouldPassOrFail("password",False)
✅ ShouldPassOrFail("Password",False)
✅ ShouldPassOrFail("Password01!",True)
✅ ShouldPassOrFail("Password01",True)
✅ ShouldPassOrFail("Tr0ub4dor&3",True)

✅ Octopus.Client.Tests.Model.SemanticVersionMaskFixture

✅ ShouldApplyMask("0.i","0.0","0.1")
✅ ShouldApplyMask("1.1.i","1.1.1234","1.1.1235")
✅ ShouldApplyMask("1.2.0-alpha.c.i.i","1.2.0-alpha.2.3.4","1.2.0-alpha.2.4.0")
✅ ShouldApplyMask("1.2.0-alpha.i","1.2.3","1.2.0-alpha.1")
✅ ShouldApplyMask("1.2.c-alpha.i","1.2.3-alpha.4","1.2.3-alpha.5")
✅ ShouldApplyMask("1.c.i","1.1.5","1.1.6")
✅ ShouldApplyMask("1.c.i","1.1","1.1.1")
✅ ShouldApplyMask("1.i.1","1.1.5","1.2.1")
✅ ShouldApplyMask("1.i.c","1.1.5","1.2.0")
✅ ShouldApplyMask("1.i.i","1.1.5","1.2.0")
✅ ShouldApplyMask("1.i","1.0","1.1")
✅ ShouldApplyMask("1.i","1.1.5","1.2.0")
✅ ShouldApplyMask("2.19.i-channel","2.19.30-baz","2.19.31-channel")
✅ ShouldApplyMask("2.19.i-channel","2.19.30","2.19.31-channel")
✅ ShouldApplyMask("2.19.i","2.19.30-baz","2.19.31")
✅ ShouldApplyMask("c.c.i","1.0.1","1.0.2")
✅ ShouldBeMask("1.-i",False)
✅ ShouldBeMask("1.0-foo",False)
✅ ShouldBeMask("1.0.0-alpha.1",False)
✅ ShouldBeMask("1.0.0-alpha.beta.1",False)
✅ ShouldBeMask("1.0.0-alpha.beta9.i",True)
✅ ShouldBeMask("1.0.0-alpha.i",True)
✅ ShouldBeMask("1.0.0-alpha.i+foo",False)
✅ ShouldBeMask("1.0.0-foo",False)
✅ ShouldBeMask("1.0.0.0-foo",False)
✅ ShouldBeMask("1.0.0.0",False)
✅ ShouldBeMask("1.0.0.i",True)
✅ ShouldBeMask("1.0.0",False)
✅ ShouldBeMask("1.0.c-alpha.beta9.i",True)
✅ ShouldBeMask("1.0.c.i",True)
✅ ShouldBeMask("1.0.i",True)
✅ ShouldBeMask("1.0",False)
✅ ShouldBeMask("1.1.2-i",False)
✅ ShouldBeMask("1.i",True)
✅ ShouldBeMask("127.0.0.1-localhost",False)
✅ ShouldBeMask("127.c.0.i-localhost",True)
✅ ShouldBeMask("c.c.0",True)
✅ ShouldBeMask("c.c.c.i",True)
✅ ShouldBeMask("c.c.i.0",True)
✅ ShouldBeMask("c.c",True)
✅ ShouldBeMask("i.i.0",True)
✅ ShouldBeMask("i.i.i.i",True)
✅ ShouldBeMask("i.i.i",True)
✅ ShouldBeMask("i.i",True)
✅ ShouldCreateZeroedVersionWhenNoCurrentPresent("1.c.i","1.0.0")
✅ ShouldCreateZeroedVersionWhenNoCurrentPresent("c.i.1-foo","0.0.1-foo")
✅ ShouldCreateZeroedVersionWhenNoCurrentPresent("c.i","0.0")
✅ ShouldGetTheCorrectLatestVersion("1.i.i",["1.1.1", "2.2.1", "2.2.3", "2.3"],"1.1.1")
✅ ShouldGetTheCorrectLatestVersion("2.19.i-channel",["2.19.30-baz", "2.19.31", "2.20.0"],"2.19.31")
✅ ShouldGetTheCorrectLatestVersion("2.19.i",["2.19.30-baz", "2.19.29", "2.20.0"],"2.19.30-baz")
✅ ShouldGetTheCorrectLatestVersion("2.2.c",["1.1.1", "2.2.1", "2.2.3", "2.2"],"2.2.3")
✅ ShouldGetTheCorrectLatestVersion("2.2.i",["1.1.1", "2.2.1", "2.2.3", "2.2"],"2.2.3")
✅ ShouldGetTheCorrectLatestVersion("2.3.i",["1.1.1", "2.2.1", "2.2.3", "2.3"],"2.3")
✅ ShouldGetTheCorrectLatestVersion("2.i.i",["1.1.1", "2.2.1", "2.2.3", "2.3"],"2.3")
✅ ShouldGetTheCorrectLatestVersion("2.i",["2.19.2"],"2.19.2")
✅ ShouldGetTheCorrectLatestVersion("4.i.1-tagx",["4.0.1-tagx", "4.1", "5.0.0"],"4.1")
✅ ShouldNotMatchAnyVersions("0.1.1",["1.1.1", "2.2.1", "2.2.3", "2.3"])
✅ ShouldNotMatchAnyVersions("1.2.i",["1.1.1", "2.2.1", "2.2.3", "2.3"])
✅ ShouldNotMatchAnyVersions("2.19",["2.19.2"])
✅ ShouldNotMatchAnyVersions("2.2.4.i",["1.1.1", "2.2.1", "2.2.3", "2.3"])
✅ ShouldNotMatchAnyVersions("2.2.4.i",[])
✅ ShouldNotMatchAnyVersions("4.1.1",["1.1.1", "2.2.1", "2.2.3", "2.3"])

✅ Octopus.Client.Tests.Model.TenantVariableResourceFixture

✅ GettingLibraryVariable_Works
✅ GettingProjectVariable_Works
✅ SettingLibraryVariable_Works
✅ SettingProjectVariable_Works
✅ TryGettingLibraryVariable_Works
✅ TryGettingProjectVariable_Works

✅ Octopus.Client.Tests.Model.Versioning.VersionComparerFixture

✅ VersionComparisonDefaultEqual("1.0.0-BETA.X.y.5.77.0+AA","1.0.0-beta.x.y.5.77.0+aa")
✅ VersionComparisonDefaultEqual("1.0.0-BETA","1.0.0-beta")
✅ VersionComparisonDefaultEqual("1.0.0-BETA+AA","1.0.0-beta+aa")
✅ VersionComparisonDefaultEqual("1.0.0-BETA+AA","1.0.0-beta+aa")
✅ VersionComparisonDefaultEqual("1.0.0","1.0.0")
✅ VersionComparisonDefaultLess("0.0.0","1.0.0")
✅ VersionComparisonDefaultLess("1.0.0-BETA.X.y.5.77.0+AA","1.0.0-beta.x.y.5.79.0+aa")
✅ VersionComparisonDefaultLess("1.0.0-BETA.X.y.5.79.0+AA","1.0.0-beta.x.y.5.790.0+abc")
✅ VersionComparisonDefaultLess("1.0.0-BETA","1.0.0-beta.1+AA")
✅ VersionComparisonDefaultLess("1.0.0-BETA","1.0.0-beta2")
✅ VersionComparisonDefaultLess("1.0.0-beta+AA","1.0.0+aa")
✅ VersionComparisonDefaultLess("1.0.0","1.0.1")
✅ VersionComparisonDefaultLess("1.0.0","1.1.0")
✅ VersionComparisonDefaultLess("1.999.9999","2.1.1")
✅ VersionComparisonDefaultNotEqual("0.0.0","1.0.0")
✅ VersionComparisonDefaultNotEqual("1.0.0-BETA.X.y.5.77.0+AA","1.0.0-beta.x.y.5.79.0+aa")
✅ VersionComparisonDefaultNotEqual("1.0.0-BETA","1.0.0-beta2")
✅ VersionComparisonDefaultNotEqual("1.0.0-BETA+AA","1.0.0-beta")
✅ VersionComparisonDefaultNotEqual("1.0.0+AA","1.0.0-beta+aa")
✅ VersionComparisonDefaultNotEqual("1.0.0+AA","1.0.0+BB")
✅ VersionComparisonDefaultNotEqual("1.0.1","1.0.0")
✅ VersionComparisonDefaultNotEqual("1.0.1","1.0.0")
✅ VersionComparisonDefaultNotEqual("1.1.0","1.0.0")

✅ Octopus.Client.Tests.OctopusClientsCanBeMockedFixture

✅ WeShouldBeAbleToCreateAMockAsyncClient
✅ WeShouldBeAbleToCreateAMockClient

✅ Octopus.Client.Tests.OctopusRepositoryConventionFixture

✅ EnsureAllRepositoryPropertiesHaveBeenAdded

✅ Octopus.Client.Tests.Operations.RegisterKubernetesClusterOperationFixture

✅ ShouldCreateNewListeningKubernetesTentacle
✅ ShouldCreateNewPollingKubernetesTentacle
✅ ShouldCreateWhenCantDeserializeMachines
✅ ShouldNotOverwriteMachinePolicyToNull
✅ ShouldOnlyUpdateEndpointConnectionConfigurationOnExistingMachine
✅ ShouldOverwriteMachinePolicyWhenPassed
✅ ShouldUpdateExistingMachineWhenForceIsEnabled

✅ Octopus.Client.Tests.Operations.RegisterMachineOperationFixture

✅ ShouldCreateNewMachine
✅ ShouldCreateWhenCantDeserializeMachines
✅ ShouldDeduplicateEnvironments
✅ ShouldNotOverwriteMachinePolicyToNull
✅ ShouldNotUpdateExistingMachine
✅ ShouldOverwriteMachinePolicyWhenPassed
✅ ShouldThrowIfAnyEnvironmentNotFound
✅ ShouldThrowIfEnvironmentNameNotFound
✅ ShouldThrowIfEnvironmentNameNotFoundEvenWhenEnvironmentsHasValid
✅ ShouldThrowIfEnvironmentNotFoundByIdOrSlug
✅ ShouldThrowIfEnvironmentNotFoundBySlug
✅ ShouldUpdateExistingMachineWhenForceIsEnabled

✅ Octopus.Client.Tests.PublicSurfaceAreaFixture

✅ ThePublicSurfaceAreaShouldNotRegress

✅ Octopus.Client.Tests.Repositories.Async.BasicRepositoryFixture

✅ SpaceRepo_GetSpaceResource
✅ SpaceRepo_MixedResourceWithNoSpaceId_Ok
✅ SpaceRepo_MixedResourceWithSpaceIdSet_MatchingSpaceIdOk
✅ SpaceRepo_MixedResourceWithSpaceIdSet_NonMatchingSpaceIdThrows
✅ SpaceRepo_ResourceWithNoSpaceId_Ok
✅ SpaceRepo_ResourceWithSpaceIdSet_MatchingSpaceIdOk
✅ SpaceRepo_ResourceWithSpaceIdSet_NonMatchingSpaceIdThrows
✅ SystemRepo_GetSystemResource
✅ SystemRepo_MixedResourceNoSpaceId_Ok
✅ SystemRepo_SystemResourceNoSpaceId_Ok
✅ UnspecifiedRepo_MixedResourceNoSpaceId_Ok
✅ UnspecifiedRepo_MixedResourceWithSpaceId_Ok
✅ UnspecifiedRepo_SpaceResourceNoSpaceId_Ok
✅ UnspecifiedRepo_SpaceResourceNoSpaceIdServerVersionBeforeSpaces_Ok
✅ UnspecifiedRepo_SpaceResourceSpaceId_Ok
✅ UnspecifiedRepo_SystemResource_Ok

✅ Octopus.Client.Tests.Repositories.Async.ProjectTriggerRepositoryTest

✅ ShouldThrowExceptionForOlderServerVersions

✅ Octopus.Client.Tests.Repositories.Async.TaskRepositoryTests

✅ WaitForCompletion_CancelsInATimelyManner
✅ WaitForCompletionReportsProgress_ActionOverload
✅ WaitForCompletionReportsProgress_TaskOverload

✅ Octopus.Client.Tests.Repositories.BasicRepositoryFixture

✅ SpaceRepo_GetSpaceResource
✅ SpaceRepo_MixedResourceWithNoSpaceId_Ok
✅ SpaceRepo_MixedResourceWithSpaceIdSet_MatchingSpaceIdOk
✅ SpaceRepo_MixedResourceWithSpaceIdSet_NonMatchingSpaceIdThrows
✅ SpaceRepo_ResourceWithNoSpaceId_Ok
✅ SpaceRepo_ResourceWithSpaceIdSet_MatchingSpaceIdOk
✅ SpaceRepo_ResourceWithSpaceIdSet_NonMatchingSpaceIdThrows
✅ SystemRepo_GetSystemResource
✅ UnspecifiedRepo_MixedResourceNoSpaceId_Ok
✅ UnspecifiedRepo_MixedResourceWithSpaceId_Ok
✅ UnspecifiedRepo_SpaceResourceNoSpaceId_Ok
✅ UnspecifiedRepo_SpaceResourceNoSpaceIdDefaultSpaceMissing_Throws
✅ UnspecifiedRepo_SpaceResourceNoSpaceIdServerVersionBeforeSpaces_Ok
✅ UnspecifiedRepo_SpaceResourceSpaceId_Ok
✅ UnspecifiedRepo_SystemResource_Ok

✅ Octopus.Client.Tests.Repositories.OctopusAsyncRepositoryTests

✅ AllPropertiesAreNotNullExceptDelayInitialised

✅ Octopus.Client.Tests.Repositories.OctopusRepositoryTests

✅ AllPropertiesAreNotNullForDefaultSpaceRepository
✅ AllPropertiesAreNotNullForSystemOnlyRepository

✅ Octopus.Client.Tests.Repositories.ProjectBetaRepositoryTests

✅ MigrateVariablesToGit_CalledWithAllValues_PostsToClient
✅ MigrateVariablesToGit_DoesNotHaveMigrateLink_ThrowsError
✅ MigrateVariablesToGit_GitProjectWithVariablesAlreadyInGit_ThrowsError

✅ Octopus.Client.Tests.Repositories.ProjectRepositoryFixture

✅ ConvertToGit_HasConvertToGitAndConvertToVcsLink_UsesConvertToGitLink
✅ ConvertToGit_OnlyHasConvertToGitLink_UsesConvertToGitLink
✅ ConvertToGit_OnlyHasConvertToVcsLink_UsesConvertToVcsLink

✅ Octopus.Client.Tests.Repositories.ProjectRepositorySettingsFixture

✅ ProjectSettingsAreDeserializedCorrectly

✅ Octopus.Client.Tests.Repositories.VariableSetBetaRepositoryTests

✅ Get_ProjectDoesNotHaveGitVariables_UsesVariablesUrl
✅ Get_ProjectHasGitVariablesAndPassedGitRef_UsesVariablesUrl
✅ Get_ProjectHasGitVariablesButNotPassedGitRef_UsesSensitiveVariablesUrl
✅ Get_ProjectIsInTheDatabase_UsesVariablesUrl

✅ Octopus.Client.Tests.Serialization.ChannelVersionRuleResourceSerializationFixture

✅ ActionPackagesAreSerializedIntoLegacyActionsCollection
✅ LegacyActionsCollectionIsDeserializedIntoActionPackages_WhenTalkingToOlderServer

✅ Octopus.Client.Tests.Serialization.ControlConverterTests

✅ CanDeserializePreV3_1_6VariableValue
✅ CanDeserializeVariableValue

✅ Octopus.Client.Tests.Serialization.CrossPlatformDateTimeZoneJsonConverterFixture

✅ ShouldDeserializeDateTime
✅ ShouldDeserializeDateTimeOffset("2022-08-24T12:54:46Z",True)
✅ ShouldDeserializeDateTimeOffset("2022-08-24T20:54:46.477+8:00",True)
✅ ShouldDeserializeDateTimeOffset("2022-08-24T20:54:46",False)
✅ ShouldDeserializeDateTimeWithKindOfUtc
✅ ShouldDeserializeDateTimeZone("Australia/Brisbane")
✅ ShouldDeserializeDateTimeZone("E. Australia Standard Time")
✅ ShouldDeserializeLocalDate

✅ Octopus.Client.Tests.Serialization.EndpointConverterFixture

✅ AzureCloudService
✅ AzureServiceFabric
✅ AzureWebApp
✅ CloudRegion
✅ KubernetesApi
✅ KUbernetesTentacle
✅ ListeningTentacle
✅ OfflineDrop
✅ PollingTentacle
✅ Ssh
✅ StepPackage

✅ Octopus.Client.Tests.Serialization.FeedResourceConverterFixture

✅ ArtifactoryGenericFeedTypesDeserialize
✅ BuiltInFeedTypesDeserialize
✅ DockerFeedTypesDeserialize
✅ GitHubFeedTypesDeserialize
✅ MavenFeedTypesDeserialize
✅ MissingFeedTypeDeserializesAsFeedNuGet
✅ NuGetFeedTypesDeserialize

✅ Octopus.Client.Tests.Serialization.InheritedClassConverterFixture

✅ EnumDiscriminator
✅ StringDiscriminator
✅ TinyTypeDiscriminator

✅ Octopus.Client.Tests.Serialization.MultiIsoDateTimeFormatConverterFixture

✅ DateSerializesUsingDefaultFormat
✅ DeserializesBothFormats
✅ DeserializesNull
✅ FailureToParseReturnsNull

✅ Octopus.Client.Tests.Serialization.PermissionSerializationFixture

✅ DeserializesDictionaryKeyedOnPermissionsCorrectly
✅ DeserializesMultiplePermissionsCorrectly
✅ DeserializesPermissionsNotKnownToClientCorrectly
✅ DeserializesSinglePermissionCorrectly
✅ SerializesMultiplePermissionsCorrectly
✅ SerializesPermissionKeyedDictionaryCorrectly
✅ SerializesSinglePermissionCorrectly

✅ Octopus.Client.Tests.Serialization.PermissiveInstantJsonConverterFixture

✅ ShouldDeserializeInstantWithoutZone
✅ ShouldDeserializeInstantWithTimeZone
✅ ShouldDeserializeInstantWithUtcZone
✅ ShouldDeserializeNullInstant
✅ ShouldFailDeserializingAnInvalidInstant

✅ Octopus.Client.Tests.Serialization.TentacleConfigurationConverterFixture

✅ ListeningTentacle
✅ PollingTentacle

✅ Octopus.Client.Tests.Serialization.TinyTypeSerializationFixture

✅ DeserializesResourceTypesWithTinyTypeProperties
✅ SerializesResourceTypesWithTinyTypeProperties

✅ Octopus.Client.Tests.Serialization.VersioningStrategyResourceSerializationFixture

✅ DonorPackageIsSerializedIntoLegacyDonorPackageStepId_ForPrimaryPackage("Action 1","","Action 1")
✅ DonorPackageIsSerializedIntoLegacyDonorPackageStepId_ForPrimaryPackage("Action 1","Package 1","Action 1:Package 1")
✅ LegacyDonorPackageStepIdIsDeserializedIntoDonorPackage_WhenTalkingToOlderServer("Action 1:Package 1","Action 1","Package 1")
✅ LegacyDonorPackageStepIdIsDeserializedIntoDonorPackage_WhenTalkingToOlderServer("Action 1","Action 1",null)

✅ Octopus.Client.Tests.ServerVersionCheckFixture

✅ IsOlderThanClient_Development_False
✅ IsOlderThanClient_LowerVersion_True("2018.12.0")
✅ IsOlderThanClient_LowerVersion_True("2019.10.9")
✅ IsOlderThanClient_SameVersionOrAbove_False("2019.11.0-prerelease")
✅ IsOlderThanClient_SameVersionOrAbove_False("2019.11.0")
✅ IsOlderThanClient_SameVersionOrAbove_False("2019.11.1")
✅ IsOlderThanClient_SameVersionOrAbove_False("2019.12.0")
✅ IsOlderThanClient_SameVersionOrAbove_False("2020.0.0")

✅ Octopus.Client.Tests.Spaces.MixedScopeSpaceContextExtensionTests

✅ CannotSwitchSpaceContextWhenTheRepositoryScopeIsSpecified(Octopus.Client.RepositoryScope)
✅ CannotSwitchSpaceContextWhenTheRepositoryScopeIsSpecified(Octopus.Client.RepositoryScope)
✅ CanSwitchSpaceContextWhenRepositoryScopeIsUnspecified

✅ Octopus.Client.Tests.Spaces.SpaceIdAsyncTests

✅ Space1
✅ Space1
✅ Space2
✅ Space2
✅ Spacific spaces
✅ Specific space with system
✅ Specific spaces
✅ Specific spaces with system
✅ Specific spaces with system
✅ System only

✅ Octopus.Client.Tests.UrlTemplateTests

✅ MultipleOptionalQueryParameters_AllValuesProvided
✅ MultipleOptionalQueryParameters_SingleValueProvided
✅ NoParameters
✅ OptionalUrlAndQueryParameter_UrlAndQueryValueProvided
✅ OptionalUrlAndQueryParameter_UrlValueNotProvided
✅ ParameterProvidedThatIsNotInTemplate
✅ ParameterValueContainsNonAsciiCharacter_ShouldUrlEncodeValue
✅ ParameterValueContainsReservedCharacter_ShouldUrlEncodeValue
✅ ParameterValueContainsSmilyFace_ShouldUrlEncodeValue
✅ SingleQueryParameter
✅ SingleQueryParameterNoValueProvided
✅ SingleUrlParameter