Exemplo n.º 1
0
        internal Account ToDomain()
        {
            var accountId     = new AccountId(this.AccountNumber);
            var validatedName = AccountName.TryCreate(this.Name);

            if (IsNoLeaveAccount())
            {
                if (validatedName.IsInvalid)
                {
                    throw new ValidationException(validatedName.Errors);
                }

                return(new NoLeaveAccount(accountId, validatedName.Value));
            }

            var validatedAcquisitionPeriod = Period.TryCreate(this.AcquisitionStart.Value, this.AcquisitionEnd.Value);


            var validatedConsommationPeriod = Period.TryCreate(this.ConsommationStart.Value, this.ConsommationEnd.Value);


            Validation.EnsureIsValid(validatedName, validatedAcquisitionPeriod, validatedConsommationPeriod);

            var validatedLeaveAccount = LeaveAccount.TryCreate(
                accountId,
                validatedName.Value,
                validatedAcquisitionPeriod.Value,
                validatedConsommationPeriod.Value,
                this.AmountGainedPerFrequency.Value,
                (Frequency)Enum.Parse(typeof(Frequency), this.Frequency));


            return(validatedLeaveAccount.Value);
        }
Exemplo n.º 2
0
 public void ShouldReturnInvalid_WhenAmountGainedIsZero()
 {
     Check.That(LeaveAccount.TryCreate(new AccountId(0),
                                       new AccountName("leave"),
                                       new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                                       new Period(new DateTime(2022, 05, 17), new DateTime(2022, 07, 03)),
                                       0,
                                       Frequency.Month))
     .Equals(
         Validation.Invalid <LeaveAccount>(
             new LeaveAccount.IsNegativeOrZeroAmountError()));
 }
Exemplo n.º 3
0
 public void ShouldReturnInvalid_WhenConsommationPeriodStartsBeforeAcquisitionStartDate()
 {
     Check.That(LeaveAccount.TryCreate(
                    new AccountId(0),
                    new AccountName("leave"),
                    new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                    new Period(new DateTime(2019, 01, 01), new DateTime(2020, 03, 03)),
                    1,
                    Frequency.Month)
                .Equals(
                    Validation.Invalid <LeaveAccount>(
                        new LeaveAccount.IsInvalidConsommationPeriodError())));
 }
Exemplo n.º 4
0
 public void ShouldReturnValid_WhenConsommationPeriodStartsAfterAcquisitionStartDate()
 {
     Check.That(LeaveAccount.TryCreate(
                    new AccountId(0),
                    new AccountName("leave"),
                    new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                    new Period(new DateTime(2022, 01, 01), new DateTime(2020, 03, 03)),
                    1,
                    Frequency.Month)
                .Equals(
                    Validation.Valid <LeaveAccount>(new LeaveAccount(
                                                        new AccountId(0),
                                                        new AccountName("leave"),
                                                        new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                                                        new Period(new DateTime(2022, 01, 01), new DateTime(2022, 03, 03)),
                                                        1,
                                                        Frequency.Month))));
 }
Exemplo n.º 5
0
 public void ShouldReturnValid_WhenAmountGainedIsStrictlyPositive()
 {
     Check.That(LeaveAccount.TryCreate(new AccountId(0),
                                       new AccountName("leave"),
                                       new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                                       new Period(new DateTime(2022, 05, 17), new DateTime(2022, 07, 03)),
                                       123,
                                       Frequency.Month))
     .Equals(
         Validation.Valid <LeaveAccount>(
             new LeaveAccount(
                 new AccountId(0),
                 new AccountName("leave"),
                 new Period(new DateTime(2020, 01, 01), new DateTime(2020, 03, 03)),
                 new Period(new DateTime(2022, 05, 17), new DateTime(2022, 07, 03)),
                 123,
                 Frequency.Month
                 )));
 }