From 269e9812e8dc0f24549d986532dbbb3c65cc00f7 Mon Sep 17 00:00:00 2001 From: Jasdeep Bhumber Date: Fri, 29 Apr 2016 20:28:52 -0500 Subject: [PATCH 1/4] Exercise 1 --- Refactoring/Store.cs | 2 +- UnitTestProject/StoreTests.cs | 18 +++++++++++++++--- 2 files changed, 16 insertions(+), 4 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..4e3ef4e 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -13,6 +13,8 @@ namespace UnitTestProject [TestFixture] class StoreTests { + private const string TEST_PRODUCT_ID = "1"; + private User createTestUser(string name, string password, double balance) { User testUser = new User(); @@ -38,7 +40,7 @@ private Product createTestProduct(string id, string name, double price, int quan public void Test_PurchaseThrowsNoErrorForValidFunds() { //Arrange - const string TEST_PRODUCT_ID = "1"; + var users = new List(); users.Add(createTestUser("Test User", "", 99.99)); @@ -60,12 +62,22 @@ public void Test_PurchaseThrowsNoErrorForValidFunds() public void Test_PurchaseRemovesProductFromStore() { //Arrange + const int NUMBER_OF_PRODUCTS = 10; - //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, NUMBER_OF_PRODUCTS)); + 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 94ce98598305fefcfe731f9dd06fce752be21df7 Mon Sep 17 00:00:00 2001 From: Jasdeep Bhumber Date: Fri, 29 Apr 2016 22:40:01 -0500 Subject: [PATCH 2/4] Exercise 2 --- UnitTestProject/StoreTests.cs | 59 ++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index 4e3ef4e..29875aa 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -13,7 +13,10 @@ namespace UnitTestProject [TestFixture] class StoreTests { - private const string TEST_PRODUCT_ID = "1"; + private const string TEST_PRODUCT_ID = "1"; + private const int NUMBER_OF_PRODUCTS = 10; + private List products = new List(); + private List users = new List(); private User createTestUser(string name, string password, double balance) { @@ -36,20 +39,20 @@ private Product createTestProduct(string id, string name, double price, int quan return testProduct; } + private Store setupStore(int numberOfProducts, double priceOfProduct, double userBalance) + { + users.Add(createTestUser("Test User", "", userBalance)); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", priceOfProduct, numberOfProducts)); + + var dataManager = new DataManager(users, products); + return new Store(users[0], dataManager); + } + [Test] public void Test_PurchaseThrowsNoErrorForValidFunds() { //Arrange - - - 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); + var store = setupStore(NUMBER_OF_PRODUCTS, 9.99, 99.99); //Act store.Purchase(TEST_PRODUCT_ID, 10); @@ -62,16 +65,7 @@ public void Test_PurchaseThrowsNoErrorForValidFunds() public void Test_PurchaseRemovesProductFromStore() { //Arrange - const int NUMBER_OF_PRODUCTS = 10; - - var users = new List(); - users.Add(createTestUser("Test User", "", 99.99)); - - var products = new List(); - products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 9.99, NUMBER_OF_PRODUCTS)); - - var dataManager = new DataManager(users, products); - var store = new Store(users[0], dataManager); + var store = setupStore(NUMBER_OF_PRODUCTS, 9.99, 99.99); //Act store.Purchase(TEST_PRODUCT_ID, 9); @@ -83,23 +77,38 @@ public void Test_PurchaseRemovesProductFromStore() } [Test] + [ExpectedException(typeof(InsufficientFundsException))] public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLow() { //Arrange + var store = setupStore(NUMBER_OF_PRODUCTS, 1.01, 1.00); //Act - - //Assert + store.Purchase(TEST_PRODUCT_ID, 1); } [Test] public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() { //Arrange - + var store = setupStore(NUMBER_OF_PRODUCTS, 1.01, 1.00); //Act - + bool exception = false; //Assert + try + { + store.Purchase(TEST_PRODUCT_ID, 1); + Assert.Fail(); + } + catch (InsufficientFundsException) + { + exception = true; + } + catch (Exception) + { + Assert.Fail(); + } + Assert.IsTrue(exception); } From dee4b2cc0f71d2fa0c610611c7eb4171f677f579 Mon Sep 17 00:00:00 2001 From: Jasdeep Bhumber Date: Fri, 29 Apr 2016 23:15:50 -0500 Subject: [PATCH 3/4] Exercise 3 --- UnitTestProject/IntegrationTests.cs | 2 +- UnitTestProject/StoreTests.cs | 82 ++++++++++++++++++++++++++--- 2 files changed, 76 insertions(+), 8 deletions(-) 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 29875aa..b7442f3 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -14,9 +14,9 @@ namespace UnitTestProject class StoreTests { private const string TEST_PRODUCT_ID = "1"; - private const int NUMBER_OF_PRODUCTS = 10; - private List products = new List(); - private List users = new List(); + private const int QUANTITY_OF_PRODUCT = 10; + private List products; + private List users; private User createTestUser(string name, string password, double balance) { @@ -41,7 +41,9 @@ private Product createTestProduct(string id, string name, double price, int quan private Store setupStore(int numberOfProducts, double priceOfProduct, double userBalance) { + users = new List(); users.Add(createTestUser("Test User", "", userBalance)); + products = new List(); products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", priceOfProduct, numberOfProducts)); var dataManager = new DataManager(users, products); @@ -52,7 +54,7 @@ private Store setupStore(int numberOfProducts, double priceOfProduct, double use public void Test_PurchaseThrowsNoErrorForValidFunds() { //Arrange - var store = setupStore(NUMBER_OF_PRODUCTS, 9.99, 99.99); + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); //Act store.Purchase(TEST_PRODUCT_ID, 10); @@ -65,7 +67,7 @@ public void Test_PurchaseThrowsNoErrorForValidFunds() public void Test_PurchaseRemovesProductFromStore() { //Arrange - var store = setupStore(NUMBER_OF_PRODUCTS, 9.99, 99.99); + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); //Act store.Purchase(TEST_PRODUCT_ID, 9); @@ -81,7 +83,7 @@ public void Test_PurchaseRemovesProductFromStore() public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLow() { //Arrange - var store = setupStore(NUMBER_OF_PRODUCTS, 1.01, 1.00); + var store = setupStore(QUANTITY_OF_PRODUCT, 1.01, 1.00); //Act store.Purchase(TEST_PRODUCT_ID, 1); @@ -91,7 +93,7 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLow() public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() { //Arrange - var store = setupStore(NUMBER_OF_PRODUCTS, 1.01, 1.00); + var store = setupStore(QUANTITY_OF_PRODUCT, 1.01, 1.00); //Act bool exception = false; //Assert @@ -111,6 +113,72 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() Assert.IsTrue(exception); } + [Test] + [ExpectedException(typeof(OutOfStockException))] + public void Test_PurchaseThrowsExceptionWhenYouTryToPurcahseToMuch() + { + //Arrange + var store = setupStore(1, 1.00, 5.00); + + //Act + store.Purchase(TEST_PRODUCT_ID, 2); + } + + [Test] + public void Test_GetProductList() + { + //Arrange + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); + string expectedProductList = "\nWhat would you like to buy?\n1: Product ($9.99)\nType quit to exit the application\n"; + + //Act + string actualProductList = store.GetProductList(); + + //Assert + Assert.AreEqual(expectedProductList, actualProductList); + } + + + [Test] + public void Test_NumberOfProducts() + { + //Arrange + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); + int expectedNumberOfProducts = 1; + //Act + int actualNumberOfProducts = store.NumberOfProducts(); + + //Assert + Assert.AreEqual(expectedNumberOfProducts, actualNumberOfProducts); + } + + + [Test] + public void Test_GetNumberOfProducts() + { + //Arrange + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); + int expectedNumberOfProducts = 1; + //Act + int actualNumberOfProducts = store.NumberOfProducts(); + + //Assert + Assert.AreEqual(expectedNumberOfProducts, actualNumberOfProducts); + } + + + [Test] + public void Test_ContainsProduct_ReturnWithExactMatch() + { + //Arrange + var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); + //Act + bool expectedProduct = store.ContainsProduct(TEST_PRODUCT_ID); + + //Assert + Assert.IsTrue(expectedProduct); + } + // 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 444dd6921b6050cfec9bab13ddf7fd034c829a86 Mon Sep 17 00:00:00 2001 From: Jasdeep Bhumber Date: Sat, 30 Apr 2016 00:07:29 -0500 Subject: [PATCH 4/4] Exercise 4 and Exercise 5 --- UnitTestProject/AuthenticatorTests.cs | 212 +++++++++++++++++++++++++ UnitTestProject/StoreTests.cs | 18 +-- UnitTestProject/UnitTestProject.csproj | 1 + 3 files changed, 215 insertions(+), 16 deletions(-) create mode 100644 UnitTestProject/AuthenticatorTests.cs diff --git a/UnitTestProject/AuthenticatorTests.cs b/UnitTestProject/AuthenticatorTests.cs new file mode 100644 index 0000000..af5b23f --- /dev/null +++ b/UnitTestProject/AuthenticatorTests.cs @@ -0,0 +1,212 @@ +using NUnit.Framework; +using Refactoring; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace UnitTestProject +{ + [TestFixture] + class AuthenticatorTests + { + private User expectedUser = new User(); + + 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 Authenticator createAuthenticator(bool validUser) + { + expectedUser = null; + if (validUser) { + List users = new List(); + expectedUser = createTestUser("Test", "Test", 99.99); + users.Add(expectedUser); + + return new Authenticator(users); + } + return new Authenticator(null); + } + + [Test] + public void Test_AuthenticateValidUsernameAndPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("Test", "Test"); + + Assert.IsNotNull(actualUser); + Assert.AreEqual(expectedUser.Name, actualUser.Name); + Assert.AreEqual(expectedUser.Password, actualUser.Password); + Assert.AreEqual(expectedUser.Balance, actualUser.Balance); + } + + [Test] + public void Test_AuthenticateInvalidUsernameAndInvalidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("asdf", "asdf"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateInvalidUsernameAndValidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("asdf", "Test"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateValidUsernameAndInvalidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("Test", "adsdf"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateNullUsernameAndNullPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate(null, null); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateNullUsernameAndValidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate(null, "Test"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateNullUsernameAndInvalidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate(null, "asd"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateValidUsernameAndNullPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("Test", null); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateInvalidUsernameAndNullPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("asdf", null); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateEmptyUsernameAndEmptyPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("", ""); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateEmptyUsernameAndValidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("", "Test"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateEmptyUsernameAndInvalidPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("", "asd"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateValidUsernameAndEmptyPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("Test", ""); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateInvalidUsernameAndEmptyPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("asdf", ""); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateEmptyUsernameAndNullPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("", null); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticatNullUsernameAndEmptyPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("", null); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateReturnNullIfCaseIsNotCorrectForPassword() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("Test", "test"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateReturnNullIfCaseIsNotCorrectForUsername() + { + Authenticator authenticator = createAuthenticator(true); + User actualUser = authenticator.Authenticate("test", "Test"); + + Assert.IsNull(actualUser); + } + + [Test] + public void Test_AuthenticateReturnNullIfListOfUserIsNullPassedIn() + { + Authenticator authenticator = createAuthenticator(false); + User actualUser = authenticator.Authenticate("test", "Test"); + + Assert.IsNull(actualUser); + } + } +} diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index b7442f3..e60cf0b 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -125,7 +125,7 @@ public void Test_PurchaseThrowsExceptionWhenYouTryToPurcahseToMuch() } [Test] - public void Test_GetProductList() + public void Test_GetProductListSucceed() { //Arrange var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); @@ -140,21 +140,7 @@ public void Test_GetProductList() [Test] - public void Test_NumberOfProducts() - { - //Arrange - var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); - int expectedNumberOfProducts = 1; - //Act - int actualNumberOfProducts = store.NumberOfProducts(); - - //Assert - Assert.AreEqual(expectedNumberOfProducts, actualNumberOfProducts); - } - - - [Test] - public void Test_GetNumberOfProducts() + public void Test_NumberOfProductsSucceed() { //Arrange var store = setupStore(QUANTITY_OF_PRODUCT, 9.99, 99.99); diff --git a/UnitTestProject/UnitTestProject.csproj b/UnitTestProject/UnitTestProject.csproj index bcf3847..1a9e337 100644 --- a/UnitTestProject/UnitTestProject.csproj +++ b/UnitTestProject/UnitTestProject.csproj @@ -70,6 +70,7 @@ +