From 8ada77006c400f8834554f496cefa9556a3162ed Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 14:21:24 -0500 Subject: [PATCH 1/6] Exercise #1 --- Refactoring/Store.cs | 2 +- UnitTestProject/StoreTests.cs | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Refactoring/Store.cs b/Refactoring/Store.cs index d9a7c78..48fcad6 100644 --- a/Refactoring/Store.cs +++ b/Refactoring/Store.cs @@ -32,7 +32,7 @@ public void Purchase(string productId, int quantity) throw new OutOfStockException(); } - product.Quantity = product.Quantity - quantity+1; + product.Quantity = product.Quantity - quantity; user.Balance = user.Balance - product.Price * quantity; dataManager.SaveUser(user); diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index 9f0b866..ef21513 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -60,12 +60,23 @@ public void Test_PurchaseThrowsNoErrorForValidFunds() public void Test_PurchaseRemovesProductFromStore() { //Arrange + const string TEST_PRODUCT_ID = "1"; - //Act + var users = new List(); + users.Add(createTestUser("Test User", "", 99.99)); + + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 9.99, 10)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + + //Act + store.Purchase(TEST_PRODUCT_ID, 9); //Assert //(choose the appropriate statement(s)) - //Assert.AreEqual(1, products[0].Quantity); + Assert.AreEqual(1, products[0].Quantity); //Assert.AreSame(1, products[0].Quantity); //Assert.IsTrue(products[0].Quantity == 1); } From fb22ab93ce83e4ad8856b802a5a28aeaaf191b9e Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 14:51:23 -0500 Subject: [PATCH 2/6] Exercise #2 --- UnitTestProject/StoreTests.cs | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index ef21513..54a7752 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -85,18 +85,40 @@ public void Test_PurchaseRemovesProductFromStore() public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLow() { //Arrange + const string TEST_PRODUCT_ID = "1"; - //Act + var users = new List(); + users.Add(createTestUser("Test User", "", 1.00)); + + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.01, 10)); + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + + //Act //Assert + Assert.Throws(() => store.Purchase(TEST_PRODUCT_ID, 1)); } [Test] + [ExpectedException(typeof(InsufficientFundsException))] public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() { - //Arrange + //Arrange + const string TEST_PRODUCT_ID = "1"; - //Act + var users = new List(); + users.Add(createTestUser("Test User", "", 1.00)); + + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.01, 10)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + + //Act + store.Purchase(TEST_PRODUCT_ID, 1); //Assert } From 420ffbc9d4c940f618a76fe6221de51cfe681ac8 Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 14:57:55 -0500 Subject: [PATCH 3/6] Exercise #3 --- UnitTestProject/IntegrationTests.cs | 2 +- UnitTestProject/StoreTests.cs | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/UnitTestProject/IntegrationTests.cs b/UnitTestProject/IntegrationTests.cs index f526b8a..ddb4fb9 100644 --- a/UnitTestProject/IntegrationTests.cs +++ b/UnitTestProject/IntegrationTests.cs @@ -10,7 +10,7 @@ namespace UnitTestProject { [TestFixture] - //[Ignore("Disable integration tests")] + [Ignore("Disable integration tests")] public class IntegrationTests { private List users; diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index 54a7752..85b552f 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -123,6 +123,28 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() //Assert } + [Test] + [ExpectedException(typeof(OutOfStockException))] + public void Test_PurchaseThrowsExceptionWhenOutOfStock() + { + //Arrange + const string TEST_PRODUCT_ID = "1"; + + var users = new List(); + users.Add(createTestUser("Test User", "", 5.00)); + + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.00, 1)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + + //Act + store.Purchase(TEST_PRODUCT_ID, 2); + + //Assert + } + // THE BELOW CODE IS REQUIRED TO PREVENT THE TESTS FROM MODIFYING THE USERS/PRODUCTS ON FILE // This is not a good unit testing pattern - the unit test dependency on the file system should From 41117af68c9667cbbf4d05f352e51f8c50a70eaa Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 15:04:03 -0500 Subject: [PATCH 4/6] Exercise #4 --- UnitTestProject/StoreTests.cs | 43 +++++++++++++---------------------- 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index 85b552f..99cf35a 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -34,6 +34,19 @@ private Product createTestProduct(string id, string name, double price, int quan return testProduct; } + private Store createTestStore(double userBalance, string TEST_PRODUCT_ID, double price, int quantity) + { + var users = new List(); + users.Add(createTestUser("Test User", "", userBalance)); + + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", price, quantity)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + return store; + } + [Test] public void Test_PurchaseThrowsNoErrorForValidFunds() { @@ -86,15 +99,7 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLow() { //Arrange const string TEST_PRODUCT_ID = "1"; - - var users = new List(); - users.Add(createTestUser("Test User", "", 1.00)); - - var products = new List(); - products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.01, 10)); - - var dataManager = new DataManager(users, products); - var store = new Store(users[0], dataManager); + var store = createTestStore(1.00, TEST_PRODUCT_ID, 1.01, 10); //Act //Assert @@ -107,15 +112,7 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() { //Arrange const string TEST_PRODUCT_ID = "1"; - - var users = new List(); - users.Add(createTestUser("Test User", "", 1.00)); - - var products = new List(); - products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.01, 10)); - - var dataManager = new DataManager(users, products); - var store = new Store(users[0], dataManager); + var store = createTestStore(1.00, TEST_PRODUCT_ID, 1.01, 10); //Act store.Purchase(TEST_PRODUCT_ID, 1); @@ -129,15 +126,7 @@ public void Test_PurchaseThrowsExceptionWhenOutOfStock() { //Arrange const string TEST_PRODUCT_ID = "1"; - - var users = new List(); - users.Add(createTestUser("Test User", "", 5.00)); - - var products = new List(); - products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.00, 1)); - - var dataManager = new DataManager(users, products); - var store = new Store(users[0], dataManager); + var store = createTestStore(5.00, TEST_PRODUCT_ID, 1.00, 1); //Act store.Purchase(TEST_PRODUCT_ID, 2); From 2f2974bd9194c819432e0f8fa88049053256889e Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 15:22:30 -0500 Subject: [PATCH 5/6] Exercise #5 --- UnitTestProject/UnitTestProject.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/UnitTestProject/UnitTestProject.csproj b/UnitTestProject/UnitTestProject.csproj index bcf3847..c695f54 100644 --- a/UnitTestProject/UnitTestProject.csproj +++ b/UnitTestProject/UnitTestProject.csproj @@ -35,6 +35,7 @@ 4 + ..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll True @@ -73,6 +74,7 @@ + From 3568d6ce816b967c05caccadc44e81809cca20b1 Mon Sep 17 00:00:00 2001 From: smarr00 Date: Fri, 29 Apr 2016 15:51:38 -0500 Subject: [PATCH 6/6] Exercise #5-2 --- UnitTestProject/AuthenticatorTests.cs | 93 +++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 UnitTestProject/AuthenticatorTests.cs diff --git a/UnitTestProject/AuthenticatorTests.cs b/UnitTestProject/AuthenticatorTests.cs new file mode 100644 index 0000000..562100a --- /dev/null +++ b/UnitTestProject/AuthenticatorTests.cs @@ -0,0 +1,93 @@ +using Newtonsoft.Json; +using NUnit.Framework; +using Refactoring; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +namespace UnitTestProject +{ + [TestFixture] + public class AuthenticatorTests + { + private User createTestUser(string name, string password, double balance) + { + User testUser = new User(); + testUser.Name = name; + testUser.Password = password; + testUser.Balance = balance; + + return testUser; + } + + private List createTestUsers() + { + List testUsers = new List(); + + for (int i = 0; i < 3; i++) + { + testUsers.Add(createTestUser("TestUser" + i, i.ToString(), 99.99)); + } + + return testUsers; + } + + [Test] + public void Test_GoodAuthenticate() + { + //Arrange + var testUsers = createTestUsers(); + var authenticator = new Authenticator(testUsers); + + //Act + var user = authenticator.Authenticate(testUsers[0].Name, "0"); + + //Assert + Assert.NotNull(user); + } + + [Test] + public void Test_BadAuthenticate() + { + //Arrange + var testUsers = createTestUsers(); + var authenticator = new Authenticator(testUsers); + + //Act + var user = authenticator.Authenticate(testUsers[0].Name, "password"); + + //Assert + Assert.Null(user); + } + + [Test] + public void Test_NoUsers() + { + //Arrange + var testUsers = new List(); + var authenticator = new Authenticator(testUsers); + + //Act + var user = authenticator.Authenticate("", ""); + + //Assert + Assert.Null(user); + } + + [Test] + public void Test_BlankPassword() + { + //Arrange + var testUsers = createTestUsers(); + var authenticator = new Authenticator(testUsers); + + //Act + var user = authenticator.Authenticate(testUsers[0].Name, ""); + + //Assert + Assert.Null(user); + } + } +}