From e35a3b91b90344ea27aa777117b35fc516b713f5 Mon Sep 17 00:00:00 2001 From: Shri Humrudha Date: Sun, 30 Jan 2022 13:21:24 -0800 Subject: [PATCH 1/9] INIT: Foundation Service Initialization --- ADotNet/Services/Releases/IReleaseService.cs | 13 +++++++++ ADotNet/Services/Releases/ReleaseService.cs | 29 ++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 ADotNet/Services/Releases/IReleaseService.cs create mode 100644 ADotNet/Services/Releases/ReleaseService.cs diff --git a/ADotNet/Services/Releases/IReleaseService.cs b/ADotNet/Services/Releases/IReleaseService.cs new file mode 100644 index 0000000..9c89411 --- /dev/null +++ b/ADotNet/Services/Releases/IReleaseService.cs @@ -0,0 +1,13 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +namespace ADotNet.Services.Releases +{ + public interface IReleaseService + { + void SerializeWriteToFile(string path, object releasePipeline); + } +} diff --git a/ADotNet/Services/Releases/ReleaseService.cs b/ADotNet/Services/Releases/ReleaseService.cs new file mode 100644 index 0000000..6bdddb8 --- /dev/null +++ b/ADotNet/Services/Releases/ReleaseService.cs @@ -0,0 +1,29 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using System; +using ADotNet.Brokers.IOs; +using ADotNet.Brokers.Serializers; + +namespace ADotNet.Services.Releases +{ + public class ReleaseService : IReleaseService + { + private readonly IYamlBroker yamlBroker; + private readonly IFilesBroker filesBroker; + + public ReleaseService( + IYamlBroker yamlBroker, + IFilesBroker filesBroker) + { + this.yamlBroker = yamlBroker; + this.filesBroker = filesBroker; + } + + public void SerializeWriteToFile(string path, object releasePipeline) => + throw new NotImplementedException(); + } +} From dd0f98bcff22fd3849a517709f646fd32e36a7bf Mon Sep 17 00:00:00 2001 From: Hassan Habib Date: Sun, 30 Jan 2022 13:40:27 -0800 Subject: [PATCH 2/9] ShouldSerializeWriteReleasePipeline -> FAIL --- .../GithubPipelines/GithubReleasePipeline.cs | 12 ++++++++++++ .../Releases/ReleaseServiceTests.cs | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs create mode 100644 AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs diff --git a/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs b/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs new file mode 100644 index 0000000..e738d10 --- /dev/null +++ b/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ADotNet.Models.Pipelines.Releases.GithubPipelines +{ + internal class GithubReleasePipeline + { + } +} diff --git a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs new file mode 100644 index 0000000..8dc7018 --- /dev/null +++ b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs @@ -0,0 +1,18 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AdoNet.Tests.Unit.Services.Foundations.Releases +{ + public class ReleaseServiceTests + { + } +} From ae401567dcefad2b41ca74e467515c4af082db27 Mon Sep 17 00:00:00 2001 From: Hassan Habib Date: Sun, 30 Jan 2022 13:40:27 -0800 Subject: [PATCH 3/9] ShouldSerializeWriteReleasePipeline -> FAIL --- .../GithubPipelines/GithubReleasePipeline.cs | 12 +++++ .../Releases/ReleaseServiceTests.cs | 44 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs create mode 100644 AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs diff --git a/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs b/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs new file mode 100644 index 0000000..8d323b5 --- /dev/null +++ b/ADotNet/Models/Pipelines/Releases/GithubPipelines/GithubReleasePipeline.cs @@ -0,0 +1,12 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +namespace ADotNet.Models.Pipelines.Releases.GithubPipelines +{ + public class GithubReleasePipeline + { + } +} diff --git a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs new file mode 100644 index 0000000..8835c15 --- /dev/null +++ b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.cs @@ -0,0 +1,44 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using ADotNet.Brokers.IOs; +using ADotNet.Brokers.Serializers; +using ADotNet.Models.Pipelines.Releases.GithubPipelines; +using ADotNet.Services.Releases; +using Moq; +using Tynamix.ObjectFiller; + +namespace AdoNet.Tests.Unit.Services.Foundations.Releases +{ + public partial class ReleaseServiceTests + { + private readonly Mock yamlBrokerMock; + private readonly Mock filesBrokerMock; + private readonly IReleaseService releaseService; + + public ReleaseServiceTests() + { + this.yamlBrokerMock = new Mock(); + this.filesBrokerMock = new Mock(); + + this.releaseService = new ReleaseService( + yamlBroker: this.yamlBrokerMock.Object, + filesBroker: this.filesBrokerMock.Object); + } + + private static string CreateRandomString() => + new MnemonicString(wordCount: GetRandomNumber()).GetValue(); + + private static GithubReleasePipeline CreateRandomReleasePipeline() => + CreateGithubReleasePipelineFiller().Create(); + + private static int GetRandomNumber() => + new IntRange(min: 2, max: 10).GetValue(); + + private static Filler CreateGithubReleasePipelineFiller() => + new Filler(); + } +} From 30f54e7ac2ac7bc9416ccaf943917a298cda1fe7 Mon Sep 17 00:00:00 2001 From: Hassan Habib Date: Sun, 30 Jan 2022 13:43:30 -0800 Subject: [PATCH 4/9] ShouldSerializeWriteReleasePipeline -> FAIL --- .../Releases/ReleaseServiceTests.Logic.cs | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Logic.cs diff --git a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Logic.cs b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Logic.cs new file mode 100644 index 0000000..528d9fd --- /dev/null +++ b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Logic.cs @@ -0,0 +1,53 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using ADotNet.Models.Pipelines.Releases.GithubPipelines; +using Moq; +using Xunit; + +namespace AdoNet.Tests.Unit.Services.Foundations.Releases +{ + public partial class ReleaseServiceTests + { + [Fact] + public void ShouldSerializeWriteReleasePipeline() + { + // given + string randomSerializedPipeline = CreateRandomString(); + string serializedGithubPipeline = randomSerializedPipeline; + string randomPath = CreateRandomString(); + string inputPath = randomPath; + + GithubReleasePipeline randomGithubReleasePipeline = + CreateRandomReleasePipeline(); + + GithubReleasePipeline inputGithubReleasePipeline = + randomGithubReleasePipeline; + + this.yamlBrokerMock.Setup(broker => + broker.SerializeToYaml(inputGithubReleasePipeline)) + .Returns(serializedGithubPipeline); + + // when + this.releaseService.SerializeWriteToFile( + inputPath, + inputGithubReleasePipeline); + + // then + + this.yamlBrokerMock.Verify(broker => + broker.SerializeToYaml(inputGithubReleasePipeline), + Times.Once); + + this.filesBrokerMock.Verify(broker => + broker.WriteToFile(inputPath, serializedGithubPipeline), + Times.Once); + + this.yamlBrokerMock.VerifyNoOtherCalls(); + this.filesBrokerMock.VerifyNoOtherCalls(); + } + } +} From e4e36c955a068ce4cfd9bbe9c9ab9a21d518366e Mon Sep 17 00:00:00 2001 From: Shri Humrudha Date: Sun, 30 Jan 2022 13:46:30 -0800 Subject: [PATCH 5/9] ShouldSerializeWriteReleasePipeline -> PASS --- ADotNet/Services/Releases/ReleaseService.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ADotNet/Services/Releases/ReleaseService.cs b/ADotNet/Services/Releases/ReleaseService.cs index 6bdddb8..0290e6d 100644 --- a/ADotNet/Services/Releases/ReleaseService.cs +++ b/ADotNet/Services/Releases/ReleaseService.cs @@ -23,7 +23,14 @@ public ReleaseService( this.filesBroker = filesBroker; } - public void SerializeWriteToFile(string path, object releasePipeline) => - throw new NotImplementedException(); + public void SerializeWriteToFile(string path, object releasePipeline) + { + string serializedPipeline = + this.yamlBroker.SerializeToYaml(releasePipeline); + + this.filesBroker.WriteToFile( + path, + data: serializedPipeline); + } } } From 6d7c1ae545251b0af2d4e7f46f60f8c94819e767 Mon Sep 17 00:00:00 2001 From: Shri Humrudha Date: Sun, 30 Jan 2022 14:01:19 -0800 Subject: [PATCH 6/9] ShouldThrowValidationExceptionOnSerializeWriteIfPathIsNull -> FAIL --- ADotNet/ADotNet.csproj | 1 + .../Exceptions/NullReleasePathException.cs | 22 +++++++++ .../Exceptions/ReleaseValidationException.cs | 23 +++++++++ AdoNet.Tests.Unit/AdoNet.Tests.Unit.csproj | 8 +-- .../ReleaseServiceTests.Validations.cs | 49 +++++++++++++++++++ 5 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePathException.cs create mode 100644 ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/ReleaseValidationException.cs create mode 100644 AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs diff --git a/ADotNet/ADotNet.csproj b/ADotNet/ADotNet.csproj index 129acae..09445c3 100644 --- a/ADotNet/ADotNet.csproj +++ b/ADotNet/ADotNet.csproj @@ -42,6 +42,7 @@ + diff --git a/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePathException.cs b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePathException.cs new file mode 100644 index 0000000..f3e359c --- /dev/null +++ b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePathException.cs @@ -0,0 +1,22 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xeptions; + +namespace ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions +{ + public class NullReleasePathException : Xeption + { + public NullReleasePathException() + : base(message: "Release path is null.") + { } + } +} diff --git a/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/ReleaseValidationException.cs b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/ReleaseValidationException.cs new file mode 100644 index 0000000..d5660de --- /dev/null +++ b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/ReleaseValidationException.cs @@ -0,0 +1,23 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Xeptions; + +namespace ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions +{ + public class ReleaseValidationException : Xeption + { + public ReleaseValidationException(Xeption innerException) + : base(message: "Release validation error occurred, fix the errors and try again.", + innerException) + { } + } +} diff --git a/AdoNet.Tests.Unit/AdoNet.Tests.Unit.csproj b/AdoNet.Tests.Unit/AdoNet.Tests.Unit.csproj index f21e38f..06df49c 100644 --- a/AdoNet.Tests.Unit/AdoNet.Tests.Unit.csproj +++ b/AdoNet.Tests.Unit/AdoNet.Tests.Unit.csproj @@ -7,16 +7,16 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs new file mode 100644 index 0000000..ce34a93 --- /dev/null +++ b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs @@ -0,0 +1,49 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using System; +using ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions; +using Moq; +using Xunit; + +namespace AdoNet.Tests.Unit.Services.Foundations.Releases +{ + public partial class ReleaseServiceTests + { + [Fact] + public void ShouldThrowValidationExceptionOnSerializeWriteIfPathIsNull() + { + // given + string invalidPath = null; + string someReleasePipeline = CreateRandomString(); + + var nullReleasePathException = + new NullReleasePathException(); + + var expectedReleaseValidationException = + new ReleaseValidationException( + nullReleasePathException); + + // when + Action serializeWriteAction = () => + this.releaseService.SerializeWriteToFile(invalidPath, someReleasePipeline); + + // then + Assert.Throws(serializeWriteAction); + + this.yamlBrokerMock.Verify(broker => + broker.SerializeToYaml(It.IsAny()), + Times.Never); + + this.filesBrokerMock.Verify(broker => + broker.WriteToFile(It.IsAny(), It.IsAny()), + Times.Never); + + this.yamlBrokerMock.VerifyNoOtherCalls(); + this.filesBrokerMock.VerifyNoOtherCalls(); + } + } +} From ed5c818910a48b31eb8cc1f7493e421916145415 Mon Sep 17 00:00:00 2001 From: Hassan Habib Date: Sun, 30 Jan 2022 14:06:26 -0800 Subject: [PATCH 7/9] ShouldThrowValidationExceptionOnSerializeWriteIfPathIsNull -> PASS --- .../Releases/ReleaseService.Exceptions.cs | 27 +++++++++++++++++++ .../Releases/ReleaseService.Validations.cs | 21 +++++++++++++++ ADotNet/Services/Releases/ReleaseService.cs | 13 +++++---- 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 ADotNet/Services/Releases/ReleaseService.Exceptions.cs create mode 100644 ADotNet/Services/Releases/ReleaseService.Validations.cs diff --git a/ADotNet/Services/Releases/ReleaseService.Exceptions.cs b/ADotNet/Services/Releases/ReleaseService.Exceptions.cs new file mode 100644 index 0000000..6f00a8e --- /dev/null +++ b/ADotNet/Services/Releases/ReleaseService.Exceptions.cs @@ -0,0 +1,27 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions; + +namespace ADotNet.Services.Releases +{ + public partial class ReleaseService + { + private delegate void ReturningNothingFunction(); + + private void TryCatch(ReturningNothingFunction returningNothingFunction) + { + try + { + returningNothingFunction(); + } + catch (NullReleasePathException nullReleasePathException) + { + throw new ReleaseValidationException(nullReleasePathException); + } + } + } +} diff --git a/ADotNet/Services/Releases/ReleaseService.Validations.cs b/ADotNet/Services/Releases/ReleaseService.Validations.cs new file mode 100644 index 0000000..af79b83 --- /dev/null +++ b/ADotNet/Services/Releases/ReleaseService.Validations.cs @@ -0,0 +1,21 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions; + +namespace ADotNet.Services.Releases +{ + public partial class ReleaseService + { + private static void ValidateInputs(string path) + { + if (path is null) + { + throw new NullReleasePathException(); + } + } + } +} diff --git a/ADotNet/Services/Releases/ReleaseService.cs b/ADotNet/Services/Releases/ReleaseService.cs index 0290e6d..f20117f 100644 --- a/ADotNet/Services/Releases/ReleaseService.cs +++ b/ADotNet/Services/Releases/ReleaseService.cs @@ -10,7 +10,7 @@ namespace ADotNet.Services.Releases { - public class ReleaseService : IReleaseService + public partial class ReleaseService : IReleaseService { private readonly IYamlBroker yamlBroker; private readonly IFilesBroker filesBroker; @@ -23,14 +23,17 @@ public ReleaseService( this.filesBroker = filesBroker; } - public void SerializeWriteToFile(string path, object releasePipeline) + public void SerializeWriteToFile(string path, object releasePipeline) => + TryCatch(() => { - string serializedPipeline = + ValidateInputs(path); + + string serializedPipeline = this.yamlBroker.SerializeToYaml(releasePipeline); this.filesBroker.WriteToFile( - path, + path, data: serializedPipeline); - } + }); } } From f48f06a6300442b37c2f3ad5b733acab2aed5bcc Mon Sep 17 00:00:00 2001 From: Hassan Habib Date: Sun, 30 Jan 2022 14:09:40 -0800 Subject: [PATCH 8/9] ShouldThrowValidationExceptionOnSerializeWriteIfPipelineIsNull -> FAIL --- .../NullReleasePipelineException.cs | 17 ++++++++ .../ReleaseServiceTests.Validations.cs | 40 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePipelineException.cs diff --git a/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePipelineException.cs b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePipelineException.cs new file mode 100644 index 0000000..dba76f3 --- /dev/null +++ b/ADotNet/Models/Pipelines/Releases/GithubPipelines/Exceptions/NullReleasePipelineException.cs @@ -0,0 +1,17 @@ +// --------------------------------------------------------------- +// Copyright (c) Hassan Habib All rights reserved. +// Licensed under the MIT License. +// See License.txt in the project root for license information. +// --------------------------------------------------------------- + +using Xeptions; + +namespace ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions +{ + public class NullReleasePipelineException : Xeption + { + public NullReleasePipelineException() + : base(message: "Release pipeline is null.") + { } + } +} diff --git a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs index ce34a93..bbda7b9 100644 --- a/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs +++ b/AdoNet.Tests.Unit/Services/Foundations/Releases/ReleaseServiceTests.Validations.cs @@ -5,6 +5,7 @@ // --------------------------------------------------------------- using System; +using ADotNet.Models.Pipelines.Releases.GithubPipelines; using ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions; using Moq; using Xunit; @@ -18,7 +19,9 @@ public void ShouldThrowValidationExceptionOnSerializeWriteIfPathIsNull() { // given string invalidPath = null; - string someReleasePipeline = CreateRandomString(); + + GithubReleasePipeline someReleasePipeline = + CreateRandomReleasePipeline(); var nullReleasePathException = new NullReleasePathException(); @@ -45,5 +48,40 @@ public void ShouldThrowValidationExceptionOnSerializeWriteIfPathIsNull() this.yamlBrokerMock.VerifyNoOtherCalls(); this.filesBrokerMock.VerifyNoOtherCalls(); } + + [Fact] + public void ShouldThrowValidationExceptionOnSerializeWriteIfPipelineIsNull() + { + // given + GithubReleasePipeline invalidGithubReleasePipeline = null; + string somePath = CreateRandomString(); + + var nullReleasePipelineException = + new NullReleasePipelineException(); + + var expectedReleaseValidationException = + new ReleaseValidationException( + nullReleasePipelineException); + + // when + Action serializeWriteAction = () => + this.releaseService.SerializeWriteToFile( + somePath, + invalidGithubReleasePipeline); + + // then + Assert.Throws(serializeWriteAction); + + this.yamlBrokerMock.Verify(broker => + broker.SerializeToYaml(It.IsAny()), + Times.Never); + + this.filesBrokerMock.Verify(broker => + broker.WriteToFile(It.IsAny(), It.IsAny()), + Times.Never); + + this.yamlBrokerMock.VerifyNoOtherCalls(); + this.filesBrokerMock.VerifyNoOtherCalls(); + } } } From 6bb9cd3b44f4f8b65632b9ec8ae915fe1e7665bb Mon Sep 17 00:00:00 2001 From: Shri Humrudha Date: Sun, 30 Jan 2022 14:12:24 -0800 Subject: [PATCH 9/9] ShouldThrowValidationExceptionOnSerializeWriteIfPipelineIsNull -> PASS --- .../Services/Releases/ReleaseService.Exceptions.cs | 4 ++++ .../Services/Releases/ReleaseService.Validations.cs | 11 ++++++++--- ADotNet/Services/Releases/ReleaseService.cs | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/ADotNet/Services/Releases/ReleaseService.Exceptions.cs b/ADotNet/Services/Releases/ReleaseService.Exceptions.cs index 6f00a8e..ea5c0d9 100644 --- a/ADotNet/Services/Releases/ReleaseService.Exceptions.cs +++ b/ADotNet/Services/Releases/ReleaseService.Exceptions.cs @@ -22,6 +22,10 @@ private void TryCatch(ReturningNothingFunction returningNothingFunction) { throw new ReleaseValidationException(nullReleasePathException); } + catch (NullReleasePipelineException nullReleasePipelineException) + { + throw new ReleaseValidationException(nullReleasePipelineException); + } } } } diff --git a/ADotNet/Services/Releases/ReleaseService.Validations.cs b/ADotNet/Services/Releases/ReleaseService.Validations.cs index af79b83..89d5fed 100644 --- a/ADotNet/Services/Releases/ReleaseService.Validations.cs +++ b/ADotNet/Services/Releases/ReleaseService.Validations.cs @@ -4,17 +4,22 @@ // See License.txt in the project root for license information. // --------------------------------------------------------------- +using ADotNet.Models.Pipelines.Releases.GithubPipelines; using ADotNet.Models.Pipelines.Releases.GithubPipelines.Exceptions; namespace ADotNet.Services.Releases { public partial class ReleaseService { - private static void ValidateInputs(string path) + private static void ValidateInputs(string path, object pipeline) { - if (path is null) + switch(path, pipeline) { - throw new NullReleasePathException(); + case (null, _): + throw new NullReleasePathException(); + + case (_, null): + throw new NullReleasePipelineException(); } } } diff --git a/ADotNet/Services/Releases/ReleaseService.cs b/ADotNet/Services/Releases/ReleaseService.cs index f20117f..a4ebd9a 100644 --- a/ADotNet/Services/Releases/ReleaseService.cs +++ b/ADotNet/Services/Releases/ReleaseService.cs @@ -26,7 +26,7 @@ public ReleaseService( public void SerializeWriteToFile(string path, object releasePipeline) => TryCatch(() => { - ValidateInputs(path); + ValidateInputs(path, releasePipeline); string serializedPipeline = this.yamlBroker.SerializeToYaml(releasePipeline);