From 02d7c78e63f1a21b9c444c035e7b3a2e65f72ede Mon Sep 17 00:00:00 2001 From: Emmanuel Date: Wed, 28 Apr 2021 00:28:22 +0200 Subject: [PATCH] Update - Added a Readme.md file - Separated Unit Tests from main project - Checked to ensure --- csharp/ApprovalTest.cs | 48 +++++----- csharp/GildedRoseTest.cs | 34 +++---- csharp/Program.cs | 3 +- csharp/ReadMe.md | 31 ++++++ csharp/csharp.sln | 13 ++- csharpTests/GildedRoseTests.cs | 125 +++++++++++++++++++++++++ csharpTests/Properties/AssemblyInfo.cs | 36 +++++++ csharpTests/csharpUnitTests.csproj | 106 +++++++++++++++++++++ csharpTests/packages.config | 5 + 9 files changed, 357 insertions(+), 44 deletions(-) create mode 100644 csharp/ReadMe.md create mode 100644 csharpTests/GildedRoseTests.cs create mode 100644 csharpTests/Properties/AssemblyInfo.cs create mode 100644 csharpTests/csharpUnitTests.csproj create mode 100644 csharpTests/packages.config diff --git a/csharp/ApprovalTest.cs b/csharp/ApprovalTest.cs index 5334147e..9b0ad586 100644 --- a/csharp/ApprovalTest.cs +++ b/csharp/ApprovalTest.cs @@ -1,28 +1,28 @@ -using System; -using System.IO; -using System.Text; -using ApprovalTests; -using ApprovalTests.Reporters; -using NUnit.Framework; +//using System; +//using System.IO; +//using System.Text; +//using ApprovalTests; +//using ApprovalTests.Reporters; +//using NUnit.Framework; -namespace csharp -{ - [UseReporter(typeof(DiffReporter))] - [TestFixture] - public class ApprovalTest - { - [Test] - public void ThirtyDays() - { +//namespace csharp +//{ +// [UseReporter(typeof(DiffReporter))] +// [TestFixture] +// public class ApprovalTest +// { +// [Test] +// public void ThirtyDays() +// { - StringBuilder fakeoutput = new StringBuilder(); - Console.SetOut(new StringWriter(fakeoutput)); - Console.SetIn(new StringReader("a\n")); +// StringBuilder fakeoutput = new StringBuilder(); +// Console.SetOut(new StringWriter(fakeoutput)); +// Console.SetIn(new StringReader("a\n")); - Program.Main(new string[] { }); - var output = fakeoutput.ToString(); +// Program.Main(new string[] { }); +// var output = fakeoutput.ToString(); - Approvals.Verify(output); - } - } -} +// Approvals.Verify(output); +// } +// } +//} diff --git a/csharp/GildedRoseTest.cs b/csharp/GildedRoseTest.cs index 911df1be..a5aa65f4 100644 --- a/csharp/GildedRoseTest.cs +++ b/csharp/GildedRoseTest.cs @@ -1,18 +1,18 @@ -using NUnit.Framework; -using System.Collections.Generic; +//using NUnit.Framework; +//using System.Collections.Generic; -namespace csharp -{ - [TestFixture] - public class GildedRoseTest - { - [Test] - public void foo() - { - IList Items = new List { new Item { Name = "foo", SellIn = 0, Quality = 0 } }; - GildedRose app = new GildedRose(Items); - app.UpdateQuality(); - Assert.AreEqual("fixme", Items[0].Name); - } - } -} +//namespace csharp +//{ +// [TestFixture] +// public class GildedRoseTest +// { +// [Test] +// public void foo() +// { +// IList Items = new List { new Item { Name = "foo", SellIn = 0, Quality = 0 } }; +// GildedRose app = new GildedRose(Items); +// app.UpdateQuality(); +// Assert.AreEqual("fixme", Items[0].Name); +// } +// } +//} diff --git a/csharp/Program.cs b/csharp/Program.cs index 36313e27..c4c5c537 100644 --- a/csharp/Program.cs +++ b/csharp/Program.cs @@ -7,7 +7,7 @@ namespace csharp { public static void Main(string[] args) { - Console.WriteLine("OMGHAI!"); + //Console.WriteLine("OMGHAI!"); IList Items = new List{ new Item {Name = "+5 Dexterity Vest", SellIn = 10, Quality = 20}, @@ -50,6 +50,7 @@ namespace csharp } Console.WriteLine(""); app.UpdateQuality(); + Console.Read(); } } } diff --git a/csharp/ReadMe.md b/csharp/ReadMe.md new file mode 100644 index 00000000..867ac568 --- /dev/null +++ b/csharp/ReadMe.md @@ -0,0 +1,31 @@ +# Gilded Rose Refactoring Kata + +Introduction: +I will try as much as I can to write my thought processes here as it's one of the requirements. +I will just write the relevant parts and not my whole thoughts. That would be weird since I was thinking of lunch just before I started. :D + + +SIDE COMMENTS: +- I can't exactly do a full TDD since the application is already written. TDD requires tests before development but this is a refactoring. +- One of the things I would ideally change if it was not explicitly said to not to is the fact that it uses strings to check. that can be really erroneous. + If I had my way, I would include IDs of some sort. + +1: +One of the first things I want to do is just get the program to run. so am not fixing anything except what will make the program run. +- The program seems to run fine. except I could not see the results so added a little line to see what was printed. over than that. it looks good. + Makes sense why they kept using it. It works! :/ + +2: +After this I want to include some Unit tests to ensure all parts are working as they should. This may require some fixing. Not sure. +- First thing I did was separate the tests from the main application. I do not want to have the possibility of a memory leak or bulky apps +- Original unit tests were written in NUnit and I chose to use MSTest. Why? no reason! Just a choice. +- First Unit Test returned 3 errors. +Test Duration Traits Error Message +UpdateQualityTestForAgedBrie_SellDateIsLessThan5_IncreaseQualityByThree Failed 1 sec Assert.AreEqual failed. Expected:<3>. Actual:<1>. +UpdateQualityTestForAgedBrie_SellDateIsLessThan10ButGreaterThan5_IncreaseQualityByTwo Failed 2 sec Assert.AreEqual failed. Expected:<2>. Actual:<1>. +UpdateQualityTestForAgedBrie_AfterConcert_DropToZero Failed 12.7 sec Assert.AreEqual failed. Expected:<0>. Actual:<12>. + +At least we now know what to work on :facepalm + +3: +Then when all tests are good. I can start working with an aim of not breaking any tests. diff --git a/csharp/csharp.sln b/csharp/csharp.sln index 62ff78a8..643e77ab 100644 --- a/csharp/csharp.sln +++ b/csharp/csharp.sln @@ -1,10 +1,12 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30804.86 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharp", "csharp.csproj", "{176C0214-9136-4079-8DAB-11D7420C3881}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "csharpUnitTests", "..\csharpTests\csharpUnitTests.csproj", "{4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -15,8 +17,15 @@ Global {176C0214-9136-4079-8DAB-11D7420C3881}.Debug|Any CPU.Build.0 = Debug|Any CPU {176C0214-9136-4079-8DAB-11D7420C3881}.Release|Any CPU.ActiveCfg = Release|Any CPU {176C0214-9136-4079-8DAB-11D7420C3881}.Release|Any CPU.Build.0 = Release|Any CPU + {4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {543CC0C1-1FB8-452A-9DA4-E85F26F9E349} + EndGlobalSection EndGlobal diff --git a/csharpTests/GildedRoseTests.cs b/csharpTests/GildedRoseTests.cs new file mode 100644 index 00000000..21740927 --- /dev/null +++ b/csharpTests/GildedRoseTests.cs @@ -0,0 +1,125 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using csharp; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace csharp.Tests +{ + [TestClass()] + public class GildedRoseTests + { + + [TestMethod()] + public void DefaultTest() // Test that came with app + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 0, Quality = 0 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual("Aged Brie", Items[0].Name); + } + + [TestMethod()] + public void UpdateQualityTestForAgedBrie_SellDateIsLessThan10ButGreaterThan5_IncreaseQualityByTwo() + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 10, Quality = 0 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(2, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTestForAgedBrie_SellDateIsLessThan5_IncreaseQualityByThree() + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 5, Quality = 0 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(3, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTestForAgedBrie_AfterConcert_DropToZero() + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 0, Quality = 10 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(0, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_SellDatePassed_DecreaseQualityTwice() + { + IList Items = new List { new Item { Name = "Backstage passes to a TAFKAL80ETC concert", SellIn = 0, Quality = 2 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(0, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_QualityOfItemIsNeverNegative_MinimumValue0() + { + IList Items = new List { new Item { Name = "+5 Dexterity Vest", SellIn = 0, Quality = 0 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(0, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_QualityOfItemNeverAboveDefinedValue_MaximumValue50() + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 1, Quality = 49 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(50, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_LegendaryItems_NeverAltar() + { + IList Items = new List { new Item { Name = "Sulfuras, Hand of Ragnaros", SellIn = 0, Quality = 80 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(80, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_LegendaryItems_MaximumValue80() + { + IList Items = new List { new Item { Name = "Sulfuras, Hand of Ragnaros", SellIn = 1, Quality = 80 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(80, Items[0].Quality); + } + + [TestMethod()] + public void UpdateQualityTest_ReduceSellIn_By1Daily() + { + IList Items = new List { new Item { Name = "Aged Brie", SellIn = 1, Quality = 30 } }; + GildedRose app = new GildedRose(Items); + + app.UpdateQuality(); + + Assert.AreEqual(0, Items[0].SellIn); + } + } +} \ No newline at end of file diff --git a/csharpTests/Properties/AssemblyInfo.cs b/csharpTests/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..38da50c5 --- /dev/null +++ b/csharpTests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("csharpTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("csharpTests")] +[assembly: AssemblyCopyright("Copyright © 2021")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4ca6c3a0-b59a-4ec3-ae4a-4f85100563c8")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/csharpTests/csharpUnitTests.csproj b/csharpTests/csharpUnitTests.csproj new file mode 100644 index 00000000..3d8f2e64 --- /dev/null +++ b/csharpTests/csharpUnitTests.csproj @@ -0,0 +1,106 @@ + + + + + Debug + AnyCPU + {4CA6C3A0-B59A-4EC3-AE4A-4F85100563C8} + Library + Properties + csharpTests + csharpTests + v4.5.2 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages + False + UnitTest + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\csharp\packages\MSTest.TestFramework.2.1.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll + + + ..\csharp\packages\MSTest.TestFramework.2.1.1\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll + + + + + + + + + + + + + + + + + + + + + {176C0214-9136-4079-8DAB-11D7420C3881} + csharp + + + + + + + False + + + False + + + False + + + False + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + + \ No newline at end of file diff --git a/csharpTests/packages.config b/csharpTests/packages.config new file mode 100644 index 00000000..3cf4963c --- /dev/null +++ b/csharpTests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file