Example #1
0
 /// <summary>
 /// Creates an instance of a data proxy which bind a given household member to a given household.
 /// </summary>
 /// <returns>Instance of a data proxy which bind a given household member to a given household.</returns>
 private IMemberOfHouseholdProxy CreateSut(Guid identifier, IHouseholdMember householdMember, IHousehold household, DateTime creationTime)
 {
     return(new MemberOfHouseholdProxy(householdMember, household, creationTime)
     {
         Identifier = identifier
     });
 }
Example #2
0
        /// <summary>
        /// Gets the household data for one of the current user households.
        /// </summary>
        /// <param name="householdMember">Household member on which to get household data for one of the households.</param>
        /// <param name="query">Query for getting household data for one of the current user households.</param>
        /// <param name="translationInfo">Translation informations which can be used for translation.</param>
        /// <returns>Household.</returns>
        public override IHousehold GetData(IHouseholdMember householdMember, HouseholdDataGetQuery query, ITranslationInfo translationInfo)
        {
            if (householdMember == null)
            {
                throw new ArgumentNullException("householdMember");
            }
            if (query == null)
            {
                throw new ArgumentNullException("query");
            }
            if (translationInfo == null)
            {
                throw new ArgumentNullException("translationInfo");
            }

            var household = householdMember.Households.SingleOrDefault(m => m.Identifier.HasValue && m.Identifier.Value == query.HouseholdIdentifier);

            if (household == null)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.IdentifierUnknownToSystem, query.HouseholdIdentifier));
            }

            household.Translate(translationInfo.CultureInfo, false);

            return(household);
        }
        public void TestThatModifyDataCallsHouseholdMemberRemoveWithHouseholdMemberForMailAddressOnHousehold()
        {
            HouseholdRemoveHouseholdMemberCommandHandler sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHousehold householdMock = DomainObjectMockBuilder.BuildHouseholdMock();

            Assert.That(householdMock, Is.Not.Null);
            Assert.That(householdMock.HouseholdMembers, Is.Not.Null);
            Assert.That(householdMock.HouseholdMembers, Is.Not.Empty);

            IHouseholdMember householdMemberMock = householdMock.HouseholdMembers.ElementAt(_random.Next(0, householdMock.HouseholdMembers.Count() - 1));

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.MailAddress, Is.Not.Null);
            Assert.That(householdMemberMock.MailAddress, Is.Not.Empty);

            HouseholdRemoveHouseholdMemberCommand householdRemoveHouseholdMemberCommand = _fixture.Build <HouseholdRemoveHouseholdMemberCommand>()
                                                                                          .With(m => m.HouseholdIdentifier, Guid.NewGuid())
                                                                                          .With(m => m.MailAddress, householdMemberMock.MailAddress)
                                                                                          .Create();

            sut.ModifyData(householdMock, householdRemoveHouseholdMemberCommand);

            householdMock.AssertWasCalled(m => m.HouseholdMemberRemove(Arg <IHouseholdMember> .Is.Equal(householdMemberMock)), opt => opt.Repeat.Once());
        }
        public void TestThatGetDataCallsTranslateOnHouseholdForHouseholdIdentifier()
        {
            HouseholdDataGetQueryHandler sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            IHousehold householdMock = householdMemberMock.Households.FirstOrDefault();

            Assert.That(householdMock, Is.Not.Null);

            // ReSharper disable PossibleInvalidOperationException
            Guid householdIdentifier = householdMock.Identifier.Value;
            // ReSharper restore PossibleInvalidOperationException
            HouseholdDataGetQuery householdDataGetQuery = BuildHouseholdDataGetQuery(householdIdentifier);

            ITranslationInfo translationInfoMock = DomainObjectMockBuilder.BuildTranslationInfoMock();

            sut.GetData(householdMemberMock, householdDataGetQuery, translationInfoMock);

            householdMock.AssertWasCalled(m => m.Translate(Arg <CultureInfo> .Is.Equal(translationInfoMock.CultureInfo), Arg <bool> .Is.Equal(false), Arg <bool> .Is.Equal(true)), opt => opt.Repeat.Once());
        }
        public void TestThatGetDataReturnsHouseholdForHouseholdIdentifier()
        {
            HouseholdDataGetQueryHandler sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            IHousehold householdMock = householdMemberMock.Households.FirstOrDefault();

            Assert.That(householdMock, Is.Not.Null);

            // ReSharper disable PossibleInvalidOperationException
            Guid householdIdentifier = householdMock.Identifier.Value;
            // ReSharper restore PossibleInvalidOperationException
            HouseholdDataGetQuery householdDataGetQuery = BuildHouseholdDataGetQuery(householdIdentifier);

            IHousehold result = sut.GetData(householdMemberMock, householdDataGetQuery, DomainObjectMockBuilder.BuildTranslationInfoMock());

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.EqualTo(householdMock));
        }
Example #6
0
        /// <summary>
        /// Adds validation rules for the command for upgrading the membership on the current users household member account.
        /// </summary>
        /// <param name="householdMember">Household member on which the membership should be upgraded.</param>
        /// <param name="command">Command for upgrading the membership on the current users household member account.</param>
        /// <param name="specification">Specification which encapsulates validation rules.</param>
        public override void AddValidationRules(IHouseholdMember householdMember, HouseholdMemberUpgradeMembershipCommand command, ISpecification specification)
        {
            if (householdMember == null)
            {
                throw new ArgumentNullException("householdMember");
            }
            if (command == null)
            {
                throw new ArgumentNullException("command");
            }
            if (specification == null)
            {
                throw new ArgumentNullException("specification");
            }

            var currentMembership = householdMember.Membership;

            specification.IsSatisfiedBy(() => CommonValidations.HasValue(command.Membership), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueMustBeGivenForProperty, "Membership")))
            .IsSatisfiedBy(() => CommonValidations.IsLegalEnumValue(command.Membership, new List <Membership> {
                Membership.Deluxe, Membership.Premium
            }), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueForPropertyIsInvalid, command.Membership, "Membership")))
            .IsSatisfiedBy(() => _domainObjectValidations.CanUpgradeMembership(currentMembership, (Membership)Enum.Parse(typeof(Membership), command.Membership)), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.MembershipCannotDowngrade)))
            .IsSatisfiedBy(() => CommonValidations.IsDateTimeInPast(command.PaymentTime), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.DateTimeValueForPropertyIsNotInPast, "PaymentTime")))
            .IsSatisfiedBy(() => CommonValidations.HasValue(command.PaymentReference), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueMustBeGivenForProperty, "PaymentReference")))
            .IsSatisfiedBy(() => CommonValidations.IsLengthValid(command.PaymentReference, 1, 128), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.LengthForPropertyIsInvalid, "PaymentReference", 1, 128)))
            .IsSatisfiedBy(() => CommonValidations.ContainsIllegalChar(command.PaymentReference) == false, new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueForPropertyContainsIllegalChars, "PaymentReference")));
        }
        /// <summary>
        /// Build a mockup for a household.
        /// </summary>
        /// <returns>Mockup for a household.</returns>
        public static IHousehold BuildHouseholdMock(Guid?householdIdentifier = null, IHouseholdMember householdMember = null)
        {
            IHousehold householdMock = MockRepository.GenerateMock <IHousehold>();

            householdMock.Stub(m => m.Identifier)
            .Return(householdIdentifier ?? Guid.NewGuid())
            .Repeat.Any();
            householdMock.Stub(m => m.Name)
            .Return(Fixture.Create <string>())
            .Repeat.Any();
            householdMock.Stub(m => m.Description)
            .Return(Fixture.Create <string>())
            .Repeat.Any();
            householdMock.Stub(m => m.CreationTime)
            .Return(DateTime.Today)
            .Repeat.Any();
            householdMock.Stub(m => m.HouseholdMembers)
            .Return(new List <IHouseholdMember> {
                householdMember ?? BuildHouseholdMemberMock()
            })
            .Repeat.Any();
            householdMock.Stub(m => m.Storages)
            .Return(BuildStorageMockCollection(householdMock))
            .Repeat.Any();
            return(householdMock);
        }
Example #8
0
        public void TestThatModifyDataCallsIsNullWithHouseholdMemberOnCommonValidationsWhenHouseholdDoesHaveHouseholdMemberWithMailAddress()
        {
            ITranslationInfo translationInfoMock = DomainObjectMockBuilder.BuildTranslationInfoMock();

            HouseholdAddHouseholdMemberCommandHandler sut = CreateSut(translationInfoMock);

            Assert.That(sut, Is.Not.Null);

            IHousehold householdMock = DomainObjectMockBuilder.BuildHouseholdMock();

            Assert.That(householdMock, Is.Not.Null);
            Assert.That(householdMock.HouseholdMembers, Is.Not.Null);
            Assert.That(householdMock.HouseholdMembers, Is.Not.Empty);

            IHouseholdMember householdMemberMock = householdMock.HouseholdMembers.ElementAt(_random.Next(0, householdMock.HouseholdMembers.Count() - 1));

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.MailAddress, Is.Not.Null);
            Assert.That(householdMemberMock.MailAddress, Is.Not.Empty);

            string mailAddress = householdMemberMock.MailAddress;

            Assert.That(householdMock.HouseholdMembers.Any(householdMember => string.Compare(householdMember.MailAddress, mailAddress, StringComparison.OrdinalIgnoreCase) == 0), Is.True);

            HouseholdAddHouseholdMemberCommand householdAddHouseholdMemberCommand = _fixture.Build <HouseholdAddHouseholdMemberCommand>()
                                                                                    .With(m => m.HouseholdIdentifier, Guid.NewGuid())
                                                                                    .With(m => m.MailAddress, mailAddress)
                                                                                    .With(m => m.TranslationInfoIdentifier, Guid.NewGuid())
                                                                                    .Create();

            sut.ModifyData(householdMock, householdAddHouseholdMemberCommand);

            _commonValidationsMock.AssertWasCalled(m => m.IsNull(Arg <IHouseholdMember> .Is.Equal(householdMemberMock)), opt => opt.Repeat.Once());
        }
Example #9
0
        /// <summary>
        /// Upgrade membership on the current users household member account.
        /// </summary>
        /// <param name="householdMember">Household member on which the membership should be upgraded.</param>
        /// <param name="command">Command for upgrading the membership on the current users household member account.</param>
        /// <returns>Household member with the upgraded membership.</returns>
        public override IIdentifiable ModifyData(IHouseholdMember householdMember, HouseholdMemberUpgradeMembershipCommand command)
        {
            if (householdMember == null)
            {
                throw new ArgumentNullException("householdMember");
            }
            if (command == null)
            {
                throw new ArgumentNullException("command");
            }

            var dataProvider    = HouseholdDataRepository.Get <IDataProvider>(command.DataProviderIdentifier);
            var handlesPayments = dataProvider != null && dataProvider.HandlesPayments;

            Specification.IsSatisfiedBy(() => CommonValidations.IsNotNull(dataProvider), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.IdentifierUnknownToSystem, command.DataProviderIdentifier)))
            .IsSatisfiedBy(() => handlesPayments, new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.DataProviderDoesNotHandlesPayments, dataProvider != null ? dataProvider.Name : null)))
            .Evaluate();

            var paymentReceipt  = string.IsNullOrWhiteSpace(command.PaymentReceipt) ? null : Convert.FromBase64String(command.PaymentReceipt);
            var insertedPayment = HouseholdDataRepository.Insert <IPayment>(new Payment(householdMember, dataProvider, command.PaymentTime, command.PaymentReference, paymentReceipt));

            try
            {
                householdMember.PaymentAdd(insertedPayment);
                householdMember.MembershipApply((Membership)Enum.Parse(typeof(Membership), command.Membership));

                return(HouseholdDataRepository.Update(householdMember));
            }
            catch
            {
                HouseholdDataRepository.Delete(insertedPayment);
                throw;
            }
        }
        public void TestThatModifyDataCallsIsNotNullWithHouseholdOnCommonValidations()
        {
            MyHouseholdDataModificationCommandHandler <MyHouseholdDataModificationCommand> sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            IHousehold householdMock = householdMemberMock.Households.FirstOrDefault();

            Assert.IsNotNull(householdMock);

            MyHouseholdDataModificationCommand command = _fixture.Build <MyHouseholdDataModificationCommand>()
                                                         // ReSharper disable PossibleInvalidOperationException
                                                         .With(m => m.HouseholdIdentifier, householdMock.Identifier.Value)
                                                         // ReSharper restore PossibleInvalidOperationException
                                                         .Create();

            sut.ModifyData(householdMemberMock, command);

            _commonValidationsMock.AssertWasCalled(m => m.IsNotNull(Arg <IHousehold> .Is.Equal(householdMock)), opt => opt.Repeat.Once());
        }
Example #11
0
        /// <summary>
        /// Functionality which can handle a query for getting some data for a household member.
        /// </summary>
        /// <param name="query">Query for getting some data for a household member.</param>
        /// <returns>View of the selected data.</returns>
        public virtual TView Query(TQuery query)
        {
            ArgumentNullGuard.NotNull(query, nameof(query));

            ITranslationInfo translationInfo = GetTranslationInfo(query);

            IHouseholdMember householdMember = HouseholdDataRepository.HouseholdMemberGetByMailAddress(ClaimValueProvider.MailAddress);

            if (householdMember == null)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberNotCreated));
            }
            if (ShouldBeActivated && householdMember.IsActivated == false)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberNotActivated));
            }
            if (ShouldHaveAcceptedPrivacyPolicy && householdMember.IsPrivacyPolicyAccepted == false)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberHasNotAcceptedPrivacyPolicy));
            }
            if (householdMember.HasRequiredMembership(RequiredMembership) == false)
            {
                throw new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberHasNotRequiredMembership));
            }

            TData data = GetData(householdMember, query, translationInfo);

            return(ObjectMapper.Map <TData, TView>(data, translationInfo?.CultureInfo));
        }
        public void TestThatModifyDataCallsModifyDataWithHousehold()
        {
            MyHouseholdDataModificationCommandHandler <MyHouseholdDataModificationCommand> sut = CreateSut();

            Assert.That(sut, Is.Not.Null);
            Assert.That(sut.ModifyDataIsCalled, Is.False);
            Assert.That(sut.HandledHousehold, Is.Null);
            Assert.That(sut.HandledCommand, Is.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            IHousehold householdMock = householdMemberMock.Households.FirstOrDefault();

            Assert.That(householdMock, Is.Not.Null);

            MyHouseholdDataModificationCommand command = _fixture.Build <MyHouseholdDataModificationCommand>()
                                                         // ReSharper disable PossibleInvalidOperationException
                                                         .With(m => m.HouseholdIdentifier, householdMock.Identifier.Value)
                                                         // ReSharper restore PossibleInvalidOperationException
                                                         .Create();

            sut.ModifyData(householdMemberMock, command);
            Assert.That(sut.ModifyDataIsCalled, Is.True);
            Assert.That(sut.HandledHousehold, Is.Not.Null);
            Assert.That(sut.HandledHousehold, Is.EqualTo(householdMock));
            Assert.That(sut.HandledCommand, Is.Not.Null);
            Assert.That(sut.HandledCommand, Is.EqualTo(command));
        }
Example #13
0
 /// <summary>
 /// Gets the data which indicates whether the household member has been activated.
 /// </summary>
 /// <param name="householdMember">Household member.</param>
 /// <param name="query">Query which can check whether the current user has been activated.</param>
 /// <param name="translationInfo">Translation informations which can be used for translation.</param>
 /// <returns>Data which indicates whether the household member has been activated.</returns>
 public override bool GetData(IHouseholdMember householdMember, HouseholdMemberIsActivatedQuery query, ITranslationInfo translationInfo)
 {
     if (householdMember == null)
     {
         throw new ArgumentNullException("householdMember");
     }
     return(householdMember.IsActivated);
 }
Example #14
0
        /// <summary>
        /// Creates a ata proxy which bind a given household member to a given household.
        /// </summary>
        /// <param name="householdMember">Household member which are member of the household.</param>
        /// <param name="household">Household which the household member are member of.</param>
        /// <param name="creationTime">Date and time for when the membership to the household was created.</param>
        public MemberOfHouseholdProxy(IHouseholdMember householdMember, IHousehold household, DateTime creationTime)
        {
            ArgumentNullGuard.NotNull(householdMember, nameof(householdMember))
            .NotNull(household, nameof(household));

            HouseholdMember = householdMember;
            Household       = household;
            CreationTime    = creationTime;
        }
Example #15
0
        /// <summary>
        /// Removes a household member from this household.
        /// </summary>
        /// <param name="householdMember">Household member which should be removed as a member of this household.</param>
        /// <returns>Household member who has been removed af member of this household.</returns>
        public override IHouseholdMember HouseholdMemberRemove(IHouseholdMember householdMember)
        {
            IHouseholdMember householdMemberToRemove = base.HouseholdMemberRemove(householdMember);

            if (householdMemberToRemove != null)
            {
                _removedHouseholdMemberCollection.Add(householdMemberToRemove);
            }
            return(householdMemberToRemove);
        }
        public void TestThatHouseholdMemberGetByMailAddressReturnsNullWhenHouseholdMemberWasNotFoundByFoodWasteDataProvider()
        {
            IHouseholdDataRepository sut = CreateSut(new List <HouseholdMemberProxy>(0));

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember result = sut.HouseholdMemberGetByMailAddress(_fixture.Create <string>());

            Assert.That(result, Is.Null);
        }
        /// <summary>
        /// Activate the current users household member account.
        /// </summary>
        /// <param name="householdMember">Household member which should be activated.</param>
        /// <param name="command">Command for activating the current users household member account.</param>
        /// <returns>The activated household member.</returns>
        public override IIdentifiable ModifyData(IHouseholdMember householdMember, HouseholdMemberActivateCommand command)
        {
            if (householdMember == null)
            {
                throw new ArgumentNullException("householdMember");
            }

            householdMember.ActivationTime = DateTime.Now;

            return(HouseholdDataRepository.Update(householdMember));
        }
        /// <summary>
        /// Modifies the data.
        /// </summary>
        /// <param name="householdMember">Household member for which to modify data.</param>
        /// <param name="command">Command for modifying some data on a given household on the current household member.</param>
        /// <returns>An identifiable domain object in the food waste domain.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="householdMember"/> or <paramref name="command"/> is null.</exception>
        public override IIdentifiable ModifyData(IHouseholdMember householdMember, TCommand command)
        {
            ArgumentNullGuard.NotNull(householdMember, nameof(householdMember))
            .NotNull(command, nameof(command));

            IHousehold household = householdMember.Households.SingleOrDefault(m => m.Identifier.HasValue && m.Identifier.Value == command.HouseholdIdentifier);

            Specification.IsSatisfiedBy(() => CommonValidations.IsNotNull(household), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.IdentifierUnknownToSystem, command.HouseholdIdentifier)))
            .Evaluate();

            return(ModifyData(household, command));
        }
 /// <summary>
 /// Adds merge fields and values to the fields and values which can be merged.
 /// </summary>
 /// <param name="householdMember">Household member on which merge fields and values should be added.</param>
 /// <param name="translationInfo">Translation informations used to translate the merge values.</param>
 public virtual void AddMergeFields(IHouseholdMember householdMember, ITranslationInfo translationInfo)
 {
     if (householdMember == null)
     {
         throw new ArgumentNullException("householdMember");
     }
     if (translationInfo == null)
     {
         throw new ArgumentNullException("translationInfo");
     }
     _mergeFields.Add("[ActivationCode]", householdMember.ActivationCode);
 }
        /// <summary>
        /// Modifies the data.
        /// </summary>
        /// <param name="household">Household on which to modify data.</param>
        /// <param name="command">Command for removing a household member from a given household on the current users household account.</param>
        /// <returns>The updated household.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name="household"/> or <paramref name="command"/> is null.</exception>
        public override IIdentifiable ModifyData(IHousehold household, HouseholdRemoveHouseholdMemberCommand command)
        {
            ArgumentNullGuard.NotNull(household, nameof(household))
            .NotNull(command, nameof(command));

            IHouseholdMember householdMemberForMailAddress = household.HouseholdMembers.SingleOrDefault(householdMember => string.Compare(householdMember.MailAddress, command.MailAddress, StringComparison.OrdinalIgnoreCase) == 0);

            Specification.IsSatisfiedBy(() => CommonValidations.IsNotNull(householdMemberForMailAddress), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberDoesNotExistOnHousehold, command.MailAddress)))
            .Evaluate();

            household.HouseholdMemberRemove(householdMemberForMailAddress);

            return(HouseholdDataRepository.Update(household));
        }
        public void TestThatHouseholdMemberGetByMailAddressReturnsHouseholdMemberWhenHouseholdMemberWasFoundByFoodWasteDataProvider()
        {
            HouseholdMemberProxy householdMemberProxy = new HouseholdMemberProxy();

            IHouseholdDataRepository sut = CreateSut(new List <HouseholdMemberProxy> {
                householdMemberProxy
            });

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember result = sut.HouseholdMemberGetByMailAddress(_fixture.Create <string>());

            Assert.That(result, Is.Not.Null);
            Assert.That(result, Is.EqualTo(householdMemberProxy));
        }
Example #22
0
 /// <summary>
 /// Adds validation rules for the command which can accept privacy policy on the current users household member account.
 /// </summary>
 /// <param name="householdMember">Household member which should accecpt the privacy policy.</param>
 /// <param name="command">Command for accepting privacy policy on the current users household member account.</param>
 /// <param name="specification">Specification which encapsulates validation rules.</param>
 public override void AddValidationRules(IHouseholdMember householdMember, HouseholdMemberAcceptPrivacyPolicyCommand command, ISpecification specification)
 {
     if (householdMember == null)
     {
         throw new ArgumentNullException("householdMember");
     }
     if (command == null)
     {
         throw new ArgumentNullException("command");
     }
     if (specification == null)
     {
         throw new ArgumentNullException("specification");
     }
 }
 /// <summary>
 /// Adds validation rules for the command which can activate the current users household member account.
 /// </summary>
 /// <param name="householdMember">Household member which should be activated.</param>
 /// <param name="command">Command for activating the current users household member account.</param>
 /// <param name="specification">Specification which encapsulates validation rules.</param>
 public override void AddValidationRules(IHouseholdMember householdMember, HouseholdMemberActivateCommand command, ISpecification specification)
 {
     if (householdMember == null)
     {
         throw new ArgumentNullException("householdMember");
     }
     if (command == null)
     {
         throw new ArgumentNullException("command");
     }
     if (specification == null)
     {
         throw new ArgumentNullException("specification");
     }
     specification.IsSatisfiedBy(() => CommonValidations.HasValue(command.ActivationCode), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueMustBeGivenForProperty, "ActivationCode")))
     .IsSatisfiedBy(() => CommonValidations.IsLengthValid(command.ActivationCode, 1, 64), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.LengthForPropertyIsInvalid, "ActivationCode", 1, 64)))
     .IsSatisfiedBy(() => CommonValidations.ContainsIllegalChar(command.ActivationCode) == false, new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.ValueForPropertyContainsIllegalChars, "ActivationCode")))
     .IsSatisfiedBy(() => CommonValidations.Equals(command.ActivationCode, householdMember.ActivationCode), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.WrongActivationCodeForHouseholdMember)));
 }
Example #24
0
        /// <summary>
        /// Executes the functionality which can handle a command for modifying some data on a household member.
        /// </summary>
        /// <param name="command">Command for modifying some data on a household member.</param>
        /// <returns>Service receipt.</returns>
        public virtual ServiceReceiptResponse Execute(TCommand command)
        {
            ArgumentNullGuard.NotNull(command, nameof(command));

            IHouseholdMember householdMember = HouseholdDataRepository.HouseholdMemberGetByMailAddress(ClaimValueProvider.MailAddress);

            Specification.IsSatisfiedBy(() => CommonValidations.IsNotNull(householdMember), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberNotCreated)))
            .IsSatisfiedBy(() => ShouldBeActivated == false || householdMember.IsActivated, new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberNotActivated)))
            .IsSatisfiedBy(() => ShouldHaveAcceptedPrivacyPolicy == false || householdMember.IsPrivacyPolicyAccepted, new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberHasNotAcceptedPrivacyPolicy)))
            .IsSatisfiedBy(() => householdMember.HasRequiredMembership(RequiredMembership), new IntranetBusinessException(Resource.GetExceptionMessage(ExceptionMessage.HouseholdMemberHasNotRequiredMembership)))
            .Evaluate();

            AddValidationRules(householdMember, command, Specification);

            Specification.Evaluate();

            IIdentifiable identifiableDomainObject = ModifyData(householdMember, command);

            return(ObjectMapper.Map <IIdentifiable, ServiceReceiptResponse>(identifiableDomainObject));
        }
Example #25
0
        public void TestThatModifyDataCallsHouseholdMemberAddWithHouseholdMemberForMailAddressOnHouseholdWhenHouseholdMemberForMailAddressExists()
        {
            IHouseholdMember householdMemberForMailAddressMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            HouseholdAddHouseholdMemberCommandHandler sut = CreateSut(householdMemberForMailAddress: householdMemberForMailAddressMock);

            Assert.That(sut, Is.Not.Null);

            IHousehold householdMock = DomainObjectMockBuilder.BuildHouseholdMock();

            HouseholdAddHouseholdMemberCommand householdAddHouseholdMemberCommand = _fixture.Build <HouseholdAddHouseholdMemberCommand>()
                                                                                    .With(m => m.HouseholdIdentifier, Guid.NewGuid())
                                                                                    .With(m => m.MailAddress, _fixture.Create <string>())
                                                                                    .With(m => m.TranslationInfoIdentifier, Guid.NewGuid())
                                                                                    .Create();

            sut.ModifyData(householdMock, householdAddHouseholdMemberCommand);

            householdMock.AssertWasCalled(m => m.HouseholdMemberAdd(Arg <IHouseholdMember> .Is.Equal(householdMemberForMailAddressMock)), opt => opt.Repeat.Once());
        }
        public void TestThatGetDataCallsHouseholdsOnHouseholdMember()
        {
            HouseholdDataGetQueryHandler sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            // ReSharper disable PossibleInvalidOperationException
            Guid householdIdentifier = householdMemberMock.Households.First().Identifier.Value;
            // ReSharper restore PossibleInvalidOperationException
            HouseholdDataGetQuery householdDataGetQuery = BuildHouseholdDataGetQuery(householdIdentifier);

            sut.GetData(householdMemberMock, householdDataGetQuery, DomainObjectMockBuilder.BuildTranslationInfoMock());

            householdMemberMock.AssertWasCalled(m => m.Households, opt => opt.Repeat.Times(3 + 1)); // Tree times in the unit test and one time in the query handler.
        }
        public void TestThatModifyDataCallsEvaluateOnSpecification()
        {
            MyHouseholdDataModificationCommandHandler <MyHouseholdDataModificationCommand> sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            MyHouseholdDataModificationCommand command = _fixture.Build <MyHouseholdDataModificationCommand>()
                                                         // ReSharper disable PossibleInvalidOperationException
                                                         .With(m => m.HouseholdIdentifier, householdMemberMock.Households.First().Identifier.Value)
                                                         // ReSharper restore PossibleInvalidOperationException
                                                         .Create();

            sut.ModifyData(householdMemberMock, command);

            _specificationMock.AssertWasCalled(m => m.Evaluate(), opt => opt.Repeat.Once());
        }
        public void TestThatModifyDataCallsHouseholdsOnHouseholdMember()
        {
            MyHouseholdDataModificationCommandHandler <MyHouseholdDataModificationCommand> sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            MyHouseholdDataModificationCommand command = _fixture.Build <MyHouseholdDataModificationCommand>()
                                                         // ReSharper disable PossibleInvalidOperationException
                                                         .With(m => m.HouseholdIdentifier, householdMemberMock.Households.First().Identifier.Value)
                                                         // ReSharper restore PossibleInvalidOperationException
                                                         .Create();

            sut.ModifyData(householdMemberMock, command);

            householdMemberMock.AssertWasCalled(m => m.Households, opt => opt.Repeat.Times(4)); // Tree times in the test and one time in AddValidationRules.
        }
        public void TestThatAddValidationRulesCallsIsSatisfiedByOnSpecification1Time()
        {
            MyHouseholdDataModificationCommandHandler <MyHouseholdDataModificationCommand> sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            MyHouseholdDataModificationCommand command = _fixture.Build <MyHouseholdDataModificationCommand>()
                                                         // ReSharper disable PossibleInvalidOperationException
                                                         .With(m => m.HouseholdIdentifier, householdMemberMock.Households.First().Identifier.Value)
                                                         // ReSharper restore PossibleInvalidOperationException
                                                         .Create();

            sut.AddValidationRules(householdMemberMock, command, _specificationMock);

            _specificationMock.AssertWasCalled(m => m.IsSatisfiedBy(Arg <Func <bool> > .Is.NotNull, Arg <IntranetBusinessException> .Is.NotNull), opt => opt.Repeat.Once());
        }
        public void TestThatGetDataThrowsIntranetBusinessExceptionWhenHouseholdIdentifierDoesNotExistOnHouseholdMember()
        {
            HouseholdDataGetQueryHandler sut = CreateSut();

            Assert.That(sut, Is.Not.Null);

            IHouseholdMember householdMemberMock = DomainObjectMockBuilder.BuildHouseholdMemberMock();

            Assert.That(householdMemberMock, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Null);
            Assert.That(householdMemberMock.Households, Is.Not.Empty);

            Guid householdIdentifier = Guid.NewGuid();

            Assert.That(householdMemberMock.Households.Any(household => household.Identifier.HasValue && household.Identifier.Value == householdIdentifier), Is.False);

            HouseholdDataGetQuery householdDataGetQuery = BuildHouseholdDataGetQuery(householdIdentifier);

            IntranetBusinessException result = Assert.Throws <IntranetBusinessException>(() => sut.GetData(householdMemberMock, householdDataGetQuery, DomainObjectMockBuilder.BuildTranslationInfoMock()));

            TestHelper.AssertIntranetBusinessExceptionIsValid(result, ExceptionMessage.IdentifierUnknownToSystem, householdIdentifier);
        }