Renamed the Tests Class to specify intent.
Copied the requirements as comments in the tests class.
Added a constructor to inject inventory items via constructor injection.
Added the no argument constructor to be used by the Main program
Added a FindItemByName method to find an item by name. This will be used in the automated tests.
Added Tests to test the behaviour SellIn lowering
Relevant sections from the spec:
At the end of each day our system lowers both (SellIn, Quality) values for every item
"Sulfuras", being a legendary item, never has to be sold
Refactored the tests to remove the duplication in Item Creation
Refactored the Automated Tests to
Remove the duplication in Program Creation and UpdateQuality execution steps.
Refactored the Automated Tests to use CreateItem methods instead of readonly private variables
Added Automated Tests to test the behaviours
At the end of each day our system lowers both (SellIn, *Quality*) values for every item
"Sulfuras", being a legendary item, never has to be sold or decreases in *Quality*
Mapped the required line to the automated test.
Added automated tests for
The Quality of an item is never negative
Added Automated Tests for
Once the sell by date has passed, Quality degrades twice as fast
Refactored Automated tests to
Introduce item name constants for removing item name duplication.
Added automated test to test behaviour
- "Aged Brie" actually increases in Quality the older it gets
Added Automated Test to test the behaviour
The Quality of an item is never more than 50
Added automated tests for back stage pass aging behaviour
Added automated tests to test the behaviour
	- "Backstage passes", like aged brie, increases in Quality as it's SellIn value approaches;
		Quality increases by 2 when there are 10 days or less
		and by 3 when there are 5 days or less
		but Quality drops to 0 after the concert
Added Missing Test Attributes to automated tests and fixed the quality numbers to make the tests pass
// - Once the sell by date has passed, Quality degrades twice as fast
// - "Aged Brie" actually increases in Quality the older it gets
- Combining both "Aged Brie" past the sell by date increases in value twice as fast.
Almost missed this test, after seeing the source i realized that this could be a test.
Or it could be perhaps a bug in the source code.
Added an automated test for Backstage pass aging corner case when quality = 47
Refactored the for loop to foreach loop.
Removed the if (item.Name != "Sulfuras, Hand of Ragnaros") check in 3
places by adding a guard condition that continues the loop.
Removed the duplicate checks for quality max limit by localizing the checks to an incrementquality method.
This removed 4 if conditions from the original implementation.
Removed the duplicate checks for Quality cannot be negative by localizing them to their own methods.
This removed two if conditions from the original implementation.
Changed implementation of the business rule
// "Backstage passes", like aged brie, increases in Quality as it's SellIn value approaches;
        // but Quality drops to 0 after the concert
 from
item.Quality = item.Quality - item.Quality; to
item.Quality = 0;
Which is more obvious
Refactored the code in if (item.SellIn < 0)that handles quality of items past the sell by date
So that it matches the if condition above if (item.Name != "Aged Brie" && item.Name != "Backstage passes to a TAFKAL80ETC concert") and its else part.