public void CreateNewEmployee_MethodCalledWithEmployeeId_ShouldRunSuccessfully()
        {
            //setting up the in-memory database with required data for test
            FakeObjectSet<Employee> employeeObjectSet = new FakeObjectSet<Employee>();
            mockDatabaseConext.Setup(db => db.Employees).Returns(employeeObjectSet);
            mockDatabaseConext.Setup(db => db.SaveChanges()).Returns(1);
            EmployeeBLL employeeBLL = new EmployeeBLL(mockDatabaseConext.Object);
            Employee employeeNewData = TestDataFactory.CreateNewObjectWithValidNewEmployeeData();

            employeeBLL.CreateNewEmployee(employeeNewData);
        }
        public void CreateNewEmployee_NewEmployeeObjectPassed_ShouldCall_DatabaseContext_SaveChanges_Method()
        {
            /*The reason to use FakeObjectSet is, CreateNewEmployee method includes query level operation for business logic, we need to use FakeObjectSet. If no query was used we could use IObjectSet mock.*/
            FakeObjectSet<Employee> employees = new FakeObjectSet<Employee>();

            //setting up expectation for the DatabaseContext.SaveChanges method to be called
            mockDatabaseConext.Setup(_db => _db.SaveChanges()).Verifiable();
            //an EmployeeDatabaseContext.Employees ObjectSet is required for invoking IObjectSet.AddObject method
            mockDatabaseConext.Setup(_db => _db.Employees).Returns(employees);
            mockDatabaseConext.Setup(_db => _db.SaveChanges()).Returns(1);

            EmployeeBLL employeeBLL = new EmployeeBLL(mockDatabaseConext.Object);

            //calling the method for expected method verification
            employeeBLL.CreateNewEmployee(TestDataFactory.CreateNewObjectWithValidNewEmployeeData());

            mockDatabaseConext.Verify();
        }
        public void CreateNewEmployee_NewEmployeeObjectPassed_ShouldCall_ObjectSet_AddObject_Method()
        {
            /*Creating Mock (and Fake) ObjectSet of Employee entity
            The reason to use Mock is to make ObjectSet available for verification.
            The reason to use FakeObjectSet is, CreateNewEmployee method includes query level operation for business logic, we need to use FakeObjectSet. If no query was used we could use IObjectSet mock.*/
            Mock<FakeObjectSet<Employee>> employees = new Mock<FakeObjectSet<Employee>>();
            employees.Setup(emp => emp.AddObject(It.IsAny<Employee>())).Verifiable();
            mockDatabaseConext.Setup(db => db.SaveChanges()).Returns(1);

            //an EmployeeDatabaseContext.Employees ObjectSet is required for invoking IObjectSet.AddObject method
            mockDatabaseConext.Setup(_db => _db.Employees).Returns(employees.Object);

            EmployeeBLL employeeBLL = new EmployeeBLL(mockDatabaseConext.Object);

            //calling the method for expected method verification
            employeeBLL.CreateNewEmployee(TestDataFactory.CreateNewObjectWithValidNewEmployeeData());

            employees.Verify();
        }