From d11314dceaf8a8237427394a4d414e96b7466161 Mon Sep 17 00:00:00 2001 From: Mathias Lorenzen Date: Tue, 3 Oct 2017 10:14:22 +0200 Subject: [PATCH 1/4] open/closed and factory for file writer. --- src/TestabilityKata/Program.cs | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/src/TestabilityKata/Program.cs b/src/TestabilityKata/Program.cs index 7063ab2..a89759e 100644 --- a/src/TestabilityKata/Program.cs +++ b/src/TestabilityKata/Program.cs @@ -9,7 +9,9 @@ public static void Main(string[] args) { new Program( new Logger( - new MailSender()), + new MailSender(), + new CustomFileWriterFactory( + new MailSender())), new MailSender()) .Run(); } @@ -51,11 +53,14 @@ public class Logger //see the next step for that. private readonly MailSender mailSender; + private readonly CustomFileWriterFactory customFileWriterFactory; public Logger( - MailSender mailSender) + MailSender mailSender, + CustomFileWriterFactory customFileWriterFactory) { this.mailSender = mailSender; + this.customFileWriterFactory = customFileWriterFactory; } public void Log(LogLevel logLevel, string logText) @@ -66,7 +71,7 @@ public void Log(LogLevel logLevel, string logText) { //also log to file - var writer = new CustomFileWriter(mailSender, @"C:\" + logLevel + "-annoying-log-file.txt"); + var writer = customFileWriterFactory.Create(@"C:\" + logLevel + "-annoying-log-file.txt"); writer.AppendLine(logText); //send e-mail about error @@ -88,6 +93,24 @@ public void SendMail(string recipient, string content) } } + public class CustomFileWriterFactory + { + private readonly MailSender mailSender; + + public CustomFileWriterFactory( + MailSender mailSender) + { + this.mailSender = mailSender; + } + + public CustomFileWriter Create(string filePath) + { + return new CustomFileWriter( + mailSender, + filePath); + } + } + public class CustomFileWriter { private readonly MailSender mailSender; From 2c9e004e172f35294b1a8f900ed4ae54d8bc45de Mon Sep 17 00:00:00 2001 From: Mathias Lorenzen Date: Tue, 3 Oct 2017 10:43:48 +0200 Subject: [PATCH 2/4] extracted interfaces. --- src/TestabilityKata/ICustomFileWriter.cs | 9 +++++ .../ICustomFileWriterFactory.cs | 7 ++++ src/TestabilityKata/ILogger.cs | 7 ++++ src/TestabilityKata/IMailSender.cs | 7 ++++ src/TestabilityKata/IProgram.cs | 7 ++++ src/TestabilityKata/Program.cs | 36 +++++++++---------- 6 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 src/TestabilityKata/ICustomFileWriter.cs create mode 100644 src/TestabilityKata/ICustomFileWriterFactory.cs create mode 100644 src/TestabilityKata/ILogger.cs create mode 100644 src/TestabilityKata/IMailSender.cs create mode 100644 src/TestabilityKata/IProgram.cs diff --git a/src/TestabilityKata/ICustomFileWriter.cs b/src/TestabilityKata/ICustomFileWriter.cs new file mode 100644 index 0000000..2f2715f --- /dev/null +++ b/src/TestabilityKata/ICustomFileWriter.cs @@ -0,0 +1,9 @@ +namespace TestabilityKata +{ + public interface ICustomFileWriter + { + string FilePath { get; } + + void AppendLine(string line); + } +} \ No newline at end of file diff --git a/src/TestabilityKata/ICustomFileWriterFactory.cs b/src/TestabilityKata/ICustomFileWriterFactory.cs new file mode 100644 index 0000000..6c048c2 --- /dev/null +++ b/src/TestabilityKata/ICustomFileWriterFactory.cs @@ -0,0 +1,7 @@ +namespace TestabilityKata +{ + public interface ICustomFileWriterFactory + { + ICustomFileWriter Create(string filePath); + } +} \ No newline at end of file diff --git a/src/TestabilityKata/ILogger.cs b/src/TestabilityKata/ILogger.cs new file mode 100644 index 0000000..c2e8a99 --- /dev/null +++ b/src/TestabilityKata/ILogger.cs @@ -0,0 +1,7 @@ +namespace TestabilityKata +{ + public interface ILogger + { + void Log(LogLevel logLevel, string logText); + } +} \ No newline at end of file diff --git a/src/TestabilityKata/IMailSender.cs b/src/TestabilityKata/IMailSender.cs new file mode 100644 index 0000000..89209c3 --- /dev/null +++ b/src/TestabilityKata/IMailSender.cs @@ -0,0 +1,7 @@ +namespace TestabilityKata +{ + public interface IMailSender + { + void SendMail(string recipient, string content); + } +} \ No newline at end of file diff --git a/src/TestabilityKata/IProgram.cs b/src/TestabilityKata/IProgram.cs new file mode 100644 index 0000000..944bf3b --- /dev/null +++ b/src/TestabilityKata/IProgram.cs @@ -0,0 +1,7 @@ +namespace TestabilityKata +{ + public interface IProgram + { + void Run(); + } +} \ No newline at end of file diff --git a/src/TestabilityKata/Program.cs b/src/TestabilityKata/Program.cs index a89759e..b4646e3 100644 --- a/src/TestabilityKata/Program.cs +++ b/src/TestabilityKata/Program.cs @@ -3,7 +3,7 @@ namespace TestabilityKata { - public class Program + public class Program : IProgram { public static void Main(string[] args) { @@ -16,12 +16,12 @@ public static void Main(string[] args) .Run(); } - private readonly Logger logger; - private readonly MailSender mailSender; + private readonly ILogger logger; + private readonly IMailSender mailSender; public Program( - Logger logger, - MailSender mailSender) + ILogger logger, + IMailSender mailSender) { this.logger = logger; this.mailSender = mailSender; @@ -47,17 +47,17 @@ public enum LogLevel Error } - public class Logger + public class Logger : ILogger { //we can't do CustomFileWriter yet, because its file name depends on the log level. //see the next step for that. - private readonly MailSender mailSender; - private readonly CustomFileWriterFactory customFileWriterFactory; + private readonly IMailSender mailSender; + private readonly ICustomFileWriterFactory customFileWriterFactory; public Logger( - MailSender mailSender, - CustomFileWriterFactory customFileWriterFactory) + IMailSender mailSender, + ICustomFileWriterFactory customFileWriterFactory) { this.mailSender = mailSender; this.customFileWriterFactory = customFileWriterFactory; @@ -81,7 +81,7 @@ public void Log(LogLevel logLevel, string logText) } } - public class MailSender + public class MailSender : IMailSender { public void SendMail(string recipient, string content) { @@ -93,17 +93,17 @@ public void SendMail(string recipient, string content) } } - public class CustomFileWriterFactory + public class CustomFileWriterFactory : ICustomFileWriterFactory { - private readonly MailSender mailSender; + private readonly IMailSender mailSender; public CustomFileWriterFactory( - MailSender mailSender) + IMailSender mailSender) { this.mailSender = mailSender; } - public CustomFileWriter Create(string filePath) + public ICustomFileWriter Create(string filePath) { return new CustomFileWriter( mailSender, @@ -111,14 +111,14 @@ public CustomFileWriter Create(string filePath) } } - public class CustomFileWriter + public class CustomFileWriter : ICustomFileWriter { - private readonly MailSender mailSender; + private readonly IMailSender mailSender; public string FilePath { get; } public CustomFileWriter( - MailSender mailSender, + IMailSender mailSender, string filePath) { this.mailSender = mailSender; From a9608cb7953a75bc7c62f011b169fa8d1605e2af Mon Sep 17 00:00:00 2001 From: Mathias Lorenzen Date: Tue, 19 Oct 2021 10:50:13 +0200 Subject: [PATCH 3/4] indentation. --- src/TestabilityKata/Program.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/TestabilityKata/Program.cs b/src/TestabilityKata/Program.cs index 7da5f4a..83a2050 100644 --- a/src/TestabilityKata/Program.cs +++ b/src/TestabilityKata/Program.cs @@ -128,7 +128,7 @@ public void AppendLine(string line) lock(typeof(CustomFileWriter)) { if (!File.Exists(FilePath)) { - mailSender.SendMail("mathias.lorenzen@mailinator.com", "The file " + FilePath + " was created since it didn't exist."); + mailSender.SendMail("mathias.lorenzen@mailinator.com", "The file " + FilePath + " was created since it didn't exist."); File.WriteAllText(FilePath, ""); } From cdf0b18012c1efb055ddcfe43920c0af975ad9a4 Mon Sep 17 00:00:00 2001 From: Mathias Date: Wed, 15 Jun 2022 08:30:33 +0200 Subject: [PATCH 4/4] Updated packages. --- .../TestabilityKata.Tests.csproj | 12 ++++++------ src/TestabilityKata/TestabilityKata.csproj | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/TestabilityKata.Tests/TestabilityKata.Tests.csproj b/src/TestabilityKata.Tests/TestabilityKata.Tests.csproj index f8c14f3..14ce7f0 100644 --- a/src/TestabilityKata.Tests/TestabilityKata.Tests.csproj +++ b/src/TestabilityKata.Tests/TestabilityKata.Tests.csproj @@ -1,17 +1,17 @@ - netcoreapp2.0 + net6.0 false - - - - - + + + + + diff --git a/src/TestabilityKata/TestabilityKata.csproj b/src/TestabilityKata/TestabilityKata.csproj index ce1697a..41f1d5a 100644 --- a/src/TestabilityKata/TestabilityKata.csproj +++ b/src/TestabilityKata/TestabilityKata.csproj @@ -2,7 +2,7 @@ Exe - netcoreapp2.0 + net6.0