ASP.NET / ASP.NET Helpdesk System Using jQuery and Bootstrap / CasestudyTests / DAOTests.cs
DAOTests.cs
Raw
/* 
 * Description: The DAOTests class is a test class for the EmployeeDAO and CallDAO classes. 
 *              The test class contains methods that test various operations on the EmployeeDAO
 *              class, such as adding, updating, and deleting employees, as well as testing for
 *              concurrency issues and loading pictures. It also tests comprehensive functionality
 *              using the CallDAO, ProblemDAO, and EmployeeDAO.
 */

using Xunit;
using HelpdeskDAL;
using Xunit.Abstractions;

namespace CasestudyTests
{
    public class DAOTests
    {
        private readonly ITestOutputHelper output;
        public DAOTests(ITestOutputHelper output)
        {
            this.output = output;
        }

        [Fact]
        public async Task Employee_GetByEmailTest()
        {
            EmployeeDAO dao = new();
            Employee selectedEmployee = await dao.GetByEmail("js@somemail.com");
            Assert.NotNull(selectedEmployee);
        }

        [Fact]
        public async Task Employee_UpdateTest()
        {
            EmployeeDAO dao = new();
            Employee? employeeForUpdate = await dao.GetByEmail("js@somemail.com");
            if (employeeForUpdate != null)
            {
                string oldPhoneNo = employeeForUpdate.PhoneNo!;
                string newPhoneNo = oldPhoneNo == "519-555-1234" ? "555-555-5555" : "519-555-1234";
                employeeForUpdate!.PhoneNo = newPhoneNo;
            }
            Assert.True(await dao.Update(employeeForUpdate!) == UpdateStatus.Ok);
        }

        [Fact]
        public async Task Employee_DeleteTest()
        {
            EmployeeDAO dao = new();
            Employee? employeeForDelete = await dao.GetByEmail("js@somemail.com");

            Assert.True(await dao.Delete(employeeForDelete!.Id) == 1);
        }

        [Fact]
        public async Task Employee_ConcurrencyTest()
        {
            EmployeeDAO dao1 = new();
            EmployeeDAO dao2 = new();
            Employee employeeForUpdate1 = await dao1.GetByEmail("js@somemail.com");
            Employee employeeForUpdate2 = await dao2.GetByEmail("js@somemail.com");
            if (employeeForUpdate1 != null)
            {
                string? oldPhoneNo = employeeForUpdate1.PhoneNo;
                string? newPhoneNo = oldPhoneNo == "519-555-1234" ? "555-555-5555" : "519-555-1234";
                employeeForUpdate1.PhoneNo = newPhoneNo;
                if (await dao1.Update(employeeForUpdate1) == UpdateStatus.Ok)
                {
                    employeeForUpdate2.PhoneNo = "666-666-6668";
                    Assert.True(await dao2.Update(employeeForUpdate2) == UpdateStatus.Stale);
                }
                else
                    Assert.True(false);
            }
            else
                Assert.True(false);
        }

        [Fact]
        public async Task Employee_GetByIdTest()
        {
            EmployeeDAO dao = new();
            Employee selectedEmployee = await dao.GetById(1);
            Assert.NotNull(selectedEmployee);
        }

        [Fact]
        public async Task Employee_GetAllTest()
        {
            EmployeeDAO dao = new();
            List<Employee> allEmployees = await dao.GetAll();
            Assert.True(allEmployees.Count > 0);
        }

        [Fact]
        public async Task Employee_AddTest()
        {

            EmployeeDAO dao = new();

            Employee newEmployee = new()
            {
                FirstName = "Henry",
                LastName = "Smith",
                PhoneNo = "(555)555-1234",
                Title = "Mr.",
                DepartmentId = 500,
                Email = "js@somemail.com"
            };

            Assert.True(await dao.Add(newEmployee) > 0);
        }

        [Fact]
        public async Task Employee_LoadPicsTest()
        {
            {
                CasestudyDALPicsUtil util = new();
                Assert.True(await util.AddEmployeePicsToDb());
            }
        }

        [Fact]
        public async Task Call_ComprehensiveTest()
        {
            CallDAO cdao = new();
            EmployeeDAO edao = new();
            ProblemDAO pdao = new();
            Employee bigshot = await edao.GetByEmail("e_fahmy@fanshaweonline.ca");
            Employee burner = await edao.GetByEmail("bb@abc.com");
            Problem badDrive = await pdao.GetByDescription("Hard Drive Failure");
            Call call = new()
            {
                DateOpened = DateTime.Now,
                DateClosed = null,
                OpenStatus = true,
                EmployeeId = bigshot.Id,
                TechId = burner.Id,
                ProblemId = badDrive.Id,
                Notes = "Essam's drive is shot, Burner to fix it"
            };
            int newCallId = await cdao.Add(call);
            output.WriteLine("New Call Generated - Id = " + newCallId);
            cdao = new CallDAO();
            call = await cdao.GetById(newCallId);
            byte[] oldtimer = call.Timer!;
            output.WriteLine("New Call Retrieved");
            call.Notes += "\n Ordered new drive!";
            if (await cdao.Update(call) == UpdateStatus.Ok)
            {
                output.WriteLine("Call was updated " + call.Notes);
            }
            else
            {
                output.WriteLine("Call was not updated!");
            }
            call.Timer = oldtimer;
            call.Notes = "doesn't matter data is stale now";
            if (await cdao.Update(call) == UpdateStatus.Stale)
            {
                output.WriteLine("Call was not updated due to stale data");
            }
            cdao = new CallDAO();
            await cdao.GetById(newCallId);
            if (await cdao.Delete(newCallId) == 1)
            {
                output.WriteLine("Call was deleted!");
            }
            else
            {
                output.WriteLine("Call was not deleted");
            }
            Assert.Null(await cdao.GetById(newCallId));
        }
    }
}