public void Add_ValidCompensation_ReturnsCompensation()
        {
            // Arrange
            var expectedCompensation = new Compensation
            {
                EmployeeId    = "16a596ae-edd3-4847-99fe-c4518e82c86f",
                EffectiveDate = DateTime.Now.Date,
                Salary        = 100000
            };

            Compensation persistedCompensation = null;
            var          logger  = new Mock <ILogger <ICompensationRepository> >();
            var          context = new Mock <IEmployeeContext>();

            context.Setup(c => c.Add(It.IsAny <Compensation>()))
            .Callback((Compensation data) => persistedCompensation = data);

            context.Setup(c => c.GetByEmployeeId(expectedCompensation.EmployeeId))
            .Returns(expectedCompensation);

            // Execute
            var compensation = new CompensationRepository(logger.Object, context.Object).Add(expectedCompensation);

            // Assert
            persistedCompensation.Should().NotBeNull();
            persistedCompensation.EmployeeId.Should().Be(expectedCompensation.EmployeeId);
            persistedCompensation.EffectiveDate.Should().Be(expectedCompensation.EffectiveDate);
            persistedCompensation.Salary.Should().Be(expectedCompensation.Salary);

            compensation.Should().NotBeNull();
            compensation.EmployeeId.Should().Be(expectedCompensation.EmployeeId);
            compensation.EffectiveDate.Should().Be(expectedCompensation.EffectiveDate);
            compensation.Salary.Should().Be(expectedCompensation.Salary);
        }
        public void Create_ValidCompensation_ReturnsCompensation()
        {
            // Arrange
            var newCompensation = new Compensation
            {
                EmployeeId    = "16a596ae-edd3-4847-99fe-c4518e82c86f",
                EffectiveDate = DateTime.Now.Date,
                Salary        = 100000
            };

            var expectedCompensation = new Compensation
            {
                Employee = new Employee
                {
                    EmployeeId = newCompensation.EmployeeId,
                    FirstName  = "John",
                    LastName   = "Lennon"
                },
                EffectiveDate = newCompensation.EffectiveDate,
                Salary        = newCompensation.Salary
            };
            Compensation persistedCompensation = null;
            var          logger     = new Mock <ILogger <ICompensationService> >();
            var          repository = new Mock <ICompensationRepository>();

            repository.Setup(c => c.Add(It.IsAny <Compensation>()))
            .Callback((Compensation data) => persistedCompensation = data);
            repository.Setup(c => c.SaveAsync());

            repository.Setup(c => c.GetByEmployeeId(expectedCompensation.Employee.EmployeeId))
            .Returns(expectedCompensation);

            // Execute
            var compensation = new CompensationService(logger.Object, repository.Object).Create(newCompensation);

            // Assert
            persistedCompensation.Should().NotBeNull();
            persistedCompensation.EmployeeId.Should().Be(expectedCompensation.Employee.EmployeeId);
            persistedCompensation.EffectiveDate.Should().Be(expectedCompensation.EffectiveDate);
            persistedCompensation.Salary.Should().Be(expectedCompensation.Salary);

            compensation.Should().NotBeNull();
            compensation.Employee.Should().NotBeNull();
            compensation.Employee.FirstName.Should().Be(expectedCompensation.Employee.FirstName);
            compensation.Employee.LastName.Should().Be(expectedCompensation.Employee.LastName);
            compensation.EffectiveDate.Should().Be(expectedCompensation.EffectiveDate);
            compensation.Salary.Should().Be(expectedCompensation.Salary);
        }