Refactoring: Added interfaces, custom exceptions, UserManager unit tests, dependency injection/inversion; Regex match search by date, keywords
This commit is contained in:
14
StudentHouseDashboard/Tests/AnnouncementManagerTest.cs
Normal file
14
StudentHouseDashboard/Tests/AnnouncementManagerTest.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class AnnouncementManagerTest
|
||||
{
|
||||
|
||||
}
|
||||
}
|
@@ -0,0 +1,60 @@
|
||||
using Logic;
|
||||
using Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml.Linq;
|
||||
|
||||
namespace Tests.Mocks
|
||||
{
|
||||
public class AnnouncementRepositoryFake : IAnnouncementRepository
|
||||
{
|
||||
private List<Announcement> announcements;
|
||||
private int currentId;
|
||||
|
||||
public AnnouncementRepositoryFake()
|
||||
{
|
||||
announcements = new List<Announcement>();
|
||||
currentId = 1;
|
||||
}
|
||||
|
||||
public void CreateAnnouncement(string title, string description, User author, DateTime publishDate, bool isImportant, bool isSticky)
|
||||
{
|
||||
announcements.Add(new Announcement(currentId, author, description, title, publishDate, isImportant, isSticky));
|
||||
currentId++;
|
||||
}
|
||||
|
||||
public void DeleteAnnouncement(int id)
|
||||
{
|
||||
announcements.RemoveAt(id--);
|
||||
}
|
||||
|
||||
public List<Announcement> GetAllAnnouncements()
|
||||
{
|
||||
return announcements;
|
||||
}
|
||||
|
||||
public Announcement GetAnnouncementById(int id)
|
||||
{
|
||||
return announcements.FirstOrDefault(x => x.ID == id);
|
||||
}
|
||||
|
||||
public List<Announcement> GetAnnouncementsByPage(int p, int c)
|
||||
{
|
||||
return announcements.GetRange(p + c, c);
|
||||
}
|
||||
|
||||
public void UpdateAnnouncement(int id, string title, string description, bool isImportant, bool isSticky)
|
||||
{
|
||||
Announcement announcement = announcements.First(x => x.ID == id);
|
||||
announcement.Title = title;
|
||||
announcement.Description = description;
|
||||
announcement.IsImportant = isImportant;
|
||||
announcement.IsSticky = isSticky;
|
||||
}
|
||||
}
|
||||
}
|
64
StudentHouseDashboard/Tests/Mocks/UserRepositoryFake.cs
Normal file
64
StudentHouseDashboard/Tests/Mocks/UserRepositoryFake.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using Models;
|
||||
using Logic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Tests.Mocks
|
||||
{
|
||||
public class UserRepositoryFake : IUserRepository
|
||||
{
|
||||
private List<User> users;
|
||||
private int currentId;
|
||||
public UserRepositoryFake()
|
||||
{
|
||||
users = new List<User>();
|
||||
currentId = 1;
|
||||
}
|
||||
|
||||
public User CreateUser(string name, string password, UserRole role)
|
||||
{
|
||||
User user = new User(currentId, name, password, role);
|
||||
users.Add(user);
|
||||
currentId++;
|
||||
return user;
|
||||
}
|
||||
|
||||
public void DisableUser(int id)
|
||||
{
|
||||
User user = users.First(x => x.ID == id);
|
||||
user.Name = $"Deleted User {user.ID}";
|
||||
user.Password = "0";
|
||||
}
|
||||
|
||||
public List<User> GetAllUsers()
|
||||
{
|
||||
return users;
|
||||
}
|
||||
|
||||
public User GetUserById(int id)
|
||||
{
|
||||
return users.First(x => x.ID == id);
|
||||
}
|
||||
|
||||
public User GetUserByName(string userName)
|
||||
{
|
||||
return users.FirstOrDefault(x => x.Name == userName);
|
||||
}
|
||||
|
||||
public List<User> GetUsersByPage(int p, int c)
|
||||
{
|
||||
return users.GetRange(p + c, c);
|
||||
}
|
||||
|
||||
public void UpdateUser(int id, string name, string password, UserRole role)
|
||||
{
|
||||
User user = users.First(x => x.ID == id);
|
||||
user.Name = name;
|
||||
user.Password = password;
|
||||
user.Role = role;
|
||||
}
|
||||
}
|
||||
}
|
@@ -16,4 +16,9 @@
|
||||
<PackageReference Include="coverlet.collector" Version="3.2.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Logic\Logic.csproj" />
|
||||
<ProjectReference Include="..\Models\Models.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
@@ -1,11 +0,0 @@
|
||||
namespace Tests
|
||||
{
|
||||
[TestClass]
|
||||
public class UnitTest1
|
||||
{
|
||||
[TestMethod]
|
||||
public void TestMethod1()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
153
StudentHouseDashboard/Tests/UserManagerTest.cs
Normal file
153
StudentHouseDashboard/Tests/UserManagerTest.cs
Normal file
@@ -0,0 +1,153 @@
|
||||
using BCrypt.Net;
|
||||
using Logic;
|
||||
using Models;
|
||||
using Tests.Mocks;
|
||||
|
||||
namespace Tests
|
||||
{
|
||||
|
||||
[TestClass]
|
||||
public class UserManagerTest
|
||||
{
|
||||
// constants
|
||||
readonly string USER_NAME = "user";
|
||||
readonly string USER_PASSWORD = "password";
|
||||
|
||||
[TestMethod]
|
||||
public void AuthenticatedUserWrongPasswordTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
// Act
|
||||
userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
User? result = userManager.AuthenticatedUser(USER_NAME, "incorrect");
|
||||
|
||||
// Assert
|
||||
Assert.IsNull(result);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[ExpectedException(typeof(ArgumentNullException))]
|
||||
public void AuthenticatedUserNullPasswordTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
// Act
|
||||
userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
userManager.AuthenticatedUser(USER_NAME, null);
|
||||
|
||||
// Assert
|
||||
// ArgumentNullException expected
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void AuthenticatedUserWrongNameTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
userManager.CreateUser(USER_NAME, USER_PASSWORD, UserRole.TENANT);
|
||||
|
||||
// Act
|
||||
User? result = userManager.AuthenticatedUser("incorrect", USER_PASSWORD);
|
||||
|
||||
// Assert
|
||||
Assert.IsNull(result);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void AuthenticatedUserCorrectDetailsTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
User user = userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
|
||||
// Act
|
||||
User? result = userManager.AuthenticatedUser(USER_NAME, USER_PASSWORD);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(user, result);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void CreateUserCorrectDetailsTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
int userId = 1;
|
||||
string hashedPassword = BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD);
|
||||
User user = new User(userId, USER_NAME, hashedPassword, UserRole.TENANT);
|
||||
|
||||
// Act
|
||||
User result = userManager.CreateUser(USER_NAME, hashedPassword, UserRole.TENANT);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(user.ID, result.ID);
|
||||
Assert.AreEqual(user.Name, result.Name);
|
||||
Assert.AreEqual(user.Password, result.Password);
|
||||
Assert.AreEqual(user.Role, result.Role);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[ExpectedException(typeof(ArgumentException))]
|
||||
public void CreateUserDuplicateNameTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
// Act
|
||||
userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
|
||||
// Assert
|
||||
// ArgumentException expected
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[ExpectedException(typeof(ArgumentException))]
|
||||
public void CreateUserEmptyNameTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
// Act
|
||||
userManager.CreateUser("", BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
|
||||
// Assert
|
||||
// ArgumentException expected
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
[ExpectedException(typeof(ArgumentException))]
|
||||
public void CreateUserEmptyPasswordTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
|
||||
// Act
|
||||
userManager.CreateUser(USER_NAME, "", UserRole.TENANT);
|
||||
|
||||
// Assert
|
||||
// ArgumentException expected
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void DisableUserTest()
|
||||
{
|
||||
// Arrange
|
||||
UserManager userManager = new UserManager(new UserRepositoryFake());
|
||||
User user = userManager.CreateUser(USER_NAME, BCrypt.Net.BCrypt.HashPassword(USER_PASSWORD), UserRole.TENANT);
|
||||
|
||||
// Act
|
||||
userManager.DisableUser(user.ID);
|
||||
|
||||
// Assert
|
||||
Assert.AreEqual(user.Name, $"Deleted User {user.ID}");
|
||||
Assert.AreEqual(user.Password, "0");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user