From c0ec25f108f30d1bd90a9edad2531a68dd961b79 Mon Sep 17 00:00:00 2001 From: VarianChrisMacKinnon Date: Fri, 29 Apr 2016 14:06:53 -0500 Subject: [PATCH 1/4] Exercise #1 --- Refactoring/Store.cs | 2 +- UnitTestProject/StoreTests.cs | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 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..c8c0c82 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -60,14 +60,25 @@ public void Test_PurchaseThrowsNoErrorForValidFunds() public void Test_PurchaseRemovesProductFromStore() { //Arrange + const string TEST_PRODUCT_ID = "1"; + + 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.AreSame(1, products[0].Quantity); - //Assert.IsTrue(products[0].Quantity == 1); + Assert.IsTrue(products[0].Quantity == 1); } [Test] From ce43133f799b75e89b52e4084558dd20b90763a5 Mon Sep 17 00:00:00 2001 From: VarianChrisMacKinnon Date: Fri, 29 Apr 2016 14:25:36 -0500 Subject: [PATCH 2/4] Exercise #2 --- UnitTestProject/StoreTests.cs | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/UnitTestProject/StoreTests.cs b/UnitTestProject/StoreTests.cs index c8c0c82..3dea99c 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -82,23 +82,53 @@ public void Test_PurchaseRemovesProductFromStore() } [Test] + [ExpectedException(typeof(InsufficientFundsException))] 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, 1)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); //Act + store.Purchase(TEST_PRODUCT_ID, 1); //Assert + Assert.Fail("Test shouldn't fail as user doesn't have enough funds to purchase item"); } [Test] public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() { //Arrange + const string TEST_PRODUCT_ID = "1"; - //Act + var users = new List(); + users.Add(createTestUser("Test User", "", 1.00)); - //Assert + var products = new List(); + products.Add(createTestProduct(TEST_PRODUCT_ID, "Product", 1.01, 1)); + + var dataManager = new DataManager(users, products); + var store = new Store(users[0], dataManager); + + //Act + try + { + store.Purchase(TEST_PRODUCT_ID, 1); + } + catch(InsufficientFundsException) + { + //Assert + Assert.Pass(); + } } From 63c4181ad8d607b2aa23ab8596e08dfb3415a9ae Mon Sep 17 00:00:00 2001 From: VarianChrisMacKinnon Date: Fri, 29 Apr 2016 14:37:30 -0500 Subject: [PATCH 3/4] 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 3dea99c..667996f 100644 --- a/UnitTestProject/StoreTests.cs +++ b/UnitTestProject/StoreTests.cs @@ -131,6 +131,28 @@ public void Test_PurchaseThrowsExceptionWhenBalanceIsTooLowVersion2() } } + [Test] + [ExpectedException(typeof(OutOfStockException))] + public void Test_PurchaseThrowsExceptionWhenQuantityIsTooLow() + { + //Arrange + const string TEST_PRODUCT_ID = "1"; + + var users = new List(); + users.Add(createTestUser("Test User", "", 10.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 + Assert.Fail("This test shouldn't fail as there is not enough stock to purchase"); + } // 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 47b5d732790049fb3c69071c19b5979546e54f0f Mon Sep 17 00:00:00 2001 From: VarianChrisMacKinnon Date: Fri, 29 Apr 2016 15:25:58 -0500 Subject: [PATCH 4/4] Exercise #5 --- UnitTestProject/AuthenticatorTests.cs | 177 +++++++++++++++++++++++++ UnitTestProject/UnitTestProject.csproj | 1 + 2 files changed, 178 insertions(+) create mode 100644 UnitTestProject/AuthenticatorTests.cs diff --git a/UnitTestProject/AuthenticatorTests.cs b/UnitTestProject/AuthenticatorTests.cs new file mode 100644 index 0000000..cda3601 --- /dev/null +++ b/UnitTestProject/AuthenticatorTests.cs @@ -0,0 +1,177 @@ +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] + 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; + } + + [Test] + public void Test_AuthenticateReturnsValidUser_SingleUserExists() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate(TEST_USER, TEST_USER_PASSWORD); + + //Assert + Assert.IsTrue(validUser.Name.Equals(TEST_USER) && validUser.Password.Equals(TEST_USER_PASSWORD)); + } + + [Test] + public void Test_AuthenticateReturnsValidUser_MultipleUsersExist() + { + //Arrange + const string TEST_USER_A = "Test User A"; + const string TEST_USER_B = "Test User B"; + const string TEST_USER_A_PASSWORD = "thisismypassword"; + const string TEST_USER_B_PASSWORD = "12345"; + + var users = new List(); + users.Add(createTestUser(TEST_USER_A, TEST_USER_A_PASSWORD, 10.00)); + users.Add(createTestUser(TEST_USER_B, TEST_USER_B_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate(TEST_USER_B, TEST_USER_B_PASSWORD); + + //Assert + Assert.IsTrue(validUser.Name.Equals(TEST_USER_B) && validUser.Password.Equals(TEST_USER_B_PASSWORD)); + } + + [Test] + public void Test_AuthenticateInvalidCredentialsReturnsNoUser() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate("Bob", "password"); + + //Assert + Assert.IsNull(validUser); + } + + [Test] + public void Test_AuthenticateNullUsernameReturnsNoUser() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate(null, "password"); + + //Assert + Assert.IsNull(validUser); + } + + [Test] + public void Test_AuthenticateNullPasswordReturnsNoUser() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate("Test User A", null); + + //Assert + Assert.IsNull(validUser); + } + + [Test] + public void Test_AuthenticateWithNullUsersListReturnsNoUser() + { + //Arrange + const string TEST_USER = "Bob"; + const string TEST_USER_PASSWORD = "12345"; + + var authenticate = new Authenticator(null); + + //Act + var validUser = authenticate.Authenticate(TEST_USER, TEST_USER_PASSWORD); + + //Assert + Assert.IsNull(validUser); + } + + [Test] + public void Test_AuthenticateBlankUsernameReturnsNoUser() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate("", "password"); + + //Assert + Assert.IsNull(validUser); + } + + [Test] + public void Test_AuthenticateBlankPasswordReturnsNoUser() + { + //Arrange + const string TEST_USER = "Test User A"; + const string TEST_USER_PASSWORD = "password"; + + var users = new List(); + users.Add(createTestUser(TEST_USER, TEST_USER_PASSWORD, 10.00)); + + var authenticate = new Authenticator(users); + + //Act + var validUser = authenticate.Authenticate("Test User A", ""); + + //Assert + Assert.IsNull(validUser); + } + } +} 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 @@ +