using Hotel_Course_Project;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace UnitTestCourseProject
{
    [TestClass]
    public class UnitTest
    {
        [TestMethod]
        public void TestAuthorization()
        {
            AuthorizationWindow authorization = new AuthorizationWindow();
            //Корректные пары логина и пароля
            Assert.IsTrue(authorization.Auth("123", "123"));
            //Некорректные пары логина и пароля
            Assert.IsFalse(authorization.Auth("123456", "123546"));
            Assert.IsFalse(authorization.Auth("12334", "541231"));
            Assert.IsFalse(authorization.Auth("Login", "Parol"));
        }
        [TestMethod]
        public void TestAddStaff()
        {
            //Некорректные данные о персонале
            StaffChangeOrAddPage staffChangeOrAdd = new StaffChangeOrAddPage(null);
            string LName = "";
            string Fname = "";
            string Mname = "";
            string Login = "";
            Assert.IsFalse(staffChangeOrAdd.TestAddStaff(LName, Fname, Mname, Login, 2));

            staffChangeOrAdd = new StaffChangeOrAddPage(null);
            LName = "";
            Fname = "Иван";
            Mname = "Иванович";
            Login = "123";
            Assert.IsFalse(staffChangeOrAdd.TestAddStaff(LName, Fname, Mname, Login, 2));

            staffChangeOrAdd = new StaffChangeOrAddPage(null);
            LName = "Иванов";
            Fname = "";
            Mname = "Иванович";
            Login = "dsa";
            Assert.IsFalse(staffChangeOrAdd.TestAddStaff(LName, Fname, Mname, Login, 2));
            //Корректные данные о персонале
            staffChangeOrAdd = new StaffChangeOrAddPage(null);
            LName = "Иванов";
            Fname = "Иван";
            Mname = "Иванович";
            Login = "123435267";
            Assert.IsTrue(staffChangeOrAdd.TestAddStaff(LName, Fname, Mname, Login, 1));

            staffChangeOrAdd = new StaffChangeOrAddPage(null);
            LName = "Петренко";
            Fname = "Михаил";
            Mname = "Григорьевич";
            Login = "Admin1";
            Assert.IsTrue(staffChangeOrAdd.TestAddStaff(LName, Fname, Mname, Login, 1));
        }
        [TestMethod]
        public void TestAddClient()
        {
            string Lname, Fname, Mname;
            ClientChangeOrAddPage clientChangeOrAdd = new ClientChangeOrAddPage(null);
            //Корректные данные о персонале
            Lname = "Фёдоров";
            Fname = "Пётр";
            Mname = "";
            Assert.IsTrue(clientChangeOrAdd.TestAddClient(Lname, Fname, Mname));
            Lname = "Фёдоров";
            Fname = "Пётр";
            Mname = "Иванович";
            Assert.IsTrue(clientChangeOrAdd.TestAddClient(Lname, Fname, Mname));
            //Некорректные данные о персонале
            Lname = "Петров";
            Fname = "";
            Mname = "Петрович";
            Assert.IsFalse(clientChangeOrAdd.TestAddClient(Lname, Fname, Mname));
            Lname = "";
            Fname = "Пётр";
            Mname = "Петрович";
            Assert.IsFalse(clientChangeOrAdd.TestAddClient(Lname, Fname, Mname));
        }
        [TestMethod]
        public void TestSearchStaff()
        {
            AdminPage adminPage = new AdminPage(null);
            List<Staff> staffList = new List<Staff>();
            List<Staff> searchedStaffList = new List<Staff>();
            string searchText;

            //создаётся базовый лист сотрудников из которого будет происходить поиск
            Staff staff1 = new Staff()
            {
                Id = 1,
                LName = "Иванов",
                FName = "Иван",
                MName = "Иванович",
                Login = "123",
                Id_PersStatus = 1,
                Id_StaffRole = 1
            };
            Staff staff2 = new Staff()
            {
                Id = 2,
                LName = "Петров",
                FName = "Пётр",
                MName = "Петрович",
                Login = "234",
                Id_PersStatus = 1,
                Id_StaffRole = 1
            };
            Staff staff3 = new Staff()
            {
                Id = 3,
                LName = "Фёдоров",
                FName = "Фёдор",
                MName = "Фёдорович",
                Login = "345",
                Id_PersStatus = 1,
                Id_StaffRole = 1
            };
            Staff staff4 = new Staff()
            {
                Id = 4,
                LName = "Давидов",
                FName = "Давид",
                MName = "Давидович",
                Login = "456",
                Id_PersStatus = 1,
                Id_StaffRole = 1
            };
            staffList.Add(staff1);
            staffList.Add(staff2);
            staffList.Add(staff3);
            staffList.Add(staff4);

            //заполняем итоговый лист с тем, что должно найтись после поиска
            searchedStaffList.Add(staff3);
            searchedStaffList.Add(staff4);
            searchText = "45";
            CollectionAssert.AreEqual(adminPage.SearchStaff(staffList, searchText), searchedStaffList);
            searchedStaffList = new List<Staff>();
            searchedStaffList.Add(staff4);
            searchText = "Давид";
            CollectionAssert.AreEqual(adminPage.SearchStaff(staffList, searchText), searchedStaffList);
        }
        [TestMethod]
        public void TestSearchClient()
        {
            AdminPage adminPage = new AdminPage(null);
            List<Client> clientList = new List<Client>();
            List<Client> searchedClientList = new List<Client>();
            string searchText;

            //создаётся базовый лист клиентов из которого будет происходить поиск
            Client Client1 = new Client()
            {
                Id = 1,
                LName = "Иванов",
                FName = "Иван",
                MName = "Иванович"
            };
            Client Client2 = new Client()
            {
                Id = 2,
                LName = "Петров",
                FName = "Пётр",
                MName = "Петрович"
            };
            Client Client3 = new Client()
            {
                Id = 3,
                LName = "Фёдоров",
                FName = "Фёдор",
                MName = "Фёдорович"
            };
            Client Client4 = new Client()
            {
                Id = 4,
                LName = "Давидов",
                FName = "Давид",
                MName = "Давидович"
            };
            clientList.Add(Client1);
            clientList.Add(Client2);
            clientList.Add(Client3);
            clientList.Add(Client4);

            //заполняем итоговый лист с тем, что должно найтись после поиска
            searchText = "1231234124";
            CollectionAssert.AreEqual(adminPage.SearchClient(clientList, searchText), searchedClientList);
            searchedClientList = new List<Client>();
            searchedClientList.Add(Client3);
            searchText = "Фёдор";
            CollectionAssert.AreEqual(adminPage.SearchClient(clientList, searchText), searchedClientList);

        }
        [TestMethod]
        public void TestHashing()
        {
            string pass;
            string hash;
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
            pass = "123";
            hash = "5fa285e1bebe0a6623e33afc04a1fbd5";
            Assert.AreEqual(SomeMethods.Hash(pass), hash);
        }
        [TestMethod]
        public void TestAddImage()
        {
            StaffChangeOrAddPage staffChangeOrAdd = new StaffChangeOrAddPage(null);
            Assert.IsTrue(staffChangeOrAdd.TestReceiveImage("C:/Users/gr692_kov/Desktop/Тестовый_пустой_рисунок.jpg"));            
            Assert.IsTrue(staffChangeOrAdd.TestReceiveImage("C:/Users/gr692_kov/Desktop/Изображение_с_другим_расширением.doc"));
            Assert.IsFalse(staffChangeOrAdd.TestReceiveImage("C:/Users/gr692_kov/Desktop/Тестовый_пдф_файл.pptx"));
            Assert.IsFalse(staffChangeOrAdd.TestReceiveImage("пдф_файл_вjpg.jpg"));
        }
    }
}
