public void RegisterPayment_TermsAreNotOverlapping_IsSuccessful()
        {
            var meetingGroupId = new MeetingGroupId(Guid.NewGuid());
            var paymentScheduleForMeetingGroup = MeetingGroupPaymentRegister.CreatePaymentScheduleForMeetingGroup(meetingGroupId);

            var payerId     = new PayerId(Guid.NewGuid());
            var paymentTerm = PaymentTerm.Create(
                new DateTime(2019, 1, 1),
                new DateTime(2019, 1, 31));

            paymentScheduleForMeetingGroup.RegisterPayment(
                paymentTerm, payerId);

            var nextPaymentTerm = PaymentTerm.Create(
                new DateTime(2019, 2, 1),
                new DateTime(2019, 2, 28));

            paymentScheduleForMeetingGroup.RegisterPayment(
                nextPaymentTerm, payerId);

            var domainEvents = AssertPublishedDomainEvents <PaymentRegisteredDomainEvent>(paymentScheduleForMeetingGroup);

            Assert.That(domainEvents.Count, Is.EqualTo(2));
            Assert.That(domainEvents[1].DateTo, Is.EqualTo(nextPaymentTerm.EndDate));
        }
Exemple #2
0
        public async Task <Unit> Handle(RegisterPaymentCommand command, CancellationToken cancellationToken)
        {
            var paymentRegister =
                await _meetingGroupPaymentRegisterRepository.GetByIdAsync(
                    new MeetingGroupPaymentRegisterId(command.MeetingGroupId));

            paymentRegister.RegisterPayment(PaymentTerm.Create(command.StartDate, command.EndDate), _payerContext.PayerId);

            return(Unit.Value);
        }
        public void RegisterPayment_OnlyOnePayment_IsSuccessful()
        {
            var meetingGroupId = new MeetingGroupId(Guid.NewGuid());
            var paymentScheduleForMeetingGroup = MeetingGroupPaymentRegister.CreatePaymentScheduleForMeetingGroup(meetingGroupId);

            var payerId     = new PayerId(Guid.NewGuid());
            var paymentTerm = PaymentTerm.Create(
                new DateTime(2019, 1, 1),
                new DateTime(2019, 1, 31));

            paymentScheduleForMeetingGroup.RegisterPayment(
                paymentTerm, payerId);

            var paymentRegistered = AssertPublishedDomainEvent <PaymentRegisteredDomainEvent>(paymentScheduleForMeetingGroup);

            Assert.That(paymentRegistered.MeetingGroupPaymentRegisterId, Is.EqualTo(paymentScheduleForMeetingGroup.Id));
            Assert.That(paymentRegistered.DateTo, Is.EqualTo(paymentTerm.EndDate));
        }
        public void RegisterPayment_TermsAreOverlapping_BreaksPaymentTermsCannotOverlapRule()
        {
            var meetingGroupId = new MeetingGroupId(Guid.NewGuid());
            var paymentScheduleForMeetingGroup = MeetingGroupPaymentRegister.CreatePaymentScheduleForMeetingGroup(meetingGroupId);

            var payerId     = new PayerId(Guid.NewGuid());
            var paymentTerm = PaymentTerm.Create(
                new DateTime(2019, 1, 1),
                new DateTime(2019, 1, 31));

            paymentScheduleForMeetingGroup.RegisterPayment(
                paymentTerm, payerId);

            var nextPaymentTerm = PaymentTerm.Create(
                new DateTime(2019, 1, 31),
                new DateTime(2019, 2, 28));

            AssertBrokenRule <MeetingGroupPaymentsCannotOverlapRule>(() =>
            {
                paymentScheduleForMeetingGroup.RegisterPayment(
                    nextPaymentTerm, payerId);
            });
        }