public void AddStakeholder(int userId, StakeholderType type)
        {
            Stakeholders.Add(Stakeholder.Create(userId, type));

            // raise domain event
            AddDomainEvent(new StakeholderAddedDomainEvent(Uid, userId, type));
        }
 internal static Stakeholder Create(int personId, StakeholderType stakeholderType)
 {
     return(new Stakeholder()
     {
         PersonId = personId, Type = stakeholderType
     });
 }
Esempio n. 3
0
        public void TestThatCreateUpdateCommandReturnsSqlCommandForUpdate(StakeholderType stakeholderType, bool hasPaymentReceipt)
        {
            Guid          identifier       = Guid.NewGuid();
            IStakeholder  stakeholder      = DomainObjectMockBuilder.BuildStakeholderMock(stakeholderType);
            IDataProvider dataProvider     = DomainObjectMockBuilder.BuildDataProviderMock(true);
            DateTime      paymentTime      = DateTime.Now.AddDays(_random.Next(1, 7) * -1).AddMinutes(_random.Next(120, 240));
            string        paymentReference = _fixture.Create <string>();

            byte[]        paymentReceipt = hasPaymentReceipt ? _fixture.CreateMany <byte>(_random.Next(1024, 4096)).ToArray() : null;
            DateTime      creationTime   = DateTime.Now;
            IPaymentProxy sut            = CreateSut(identifier, stakeholder, dataProvider, paymentTime, paymentReference, paymentReceipt, creationTime);

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

            new DbCommandTestBuilder("UPDATE Payments SET StakeholderIdentifier=@stakeholderIdentifier,StakeholderType=@stakeholderType,DataProviderIdentifier=@dataProviderIdentifier,PaymentTime=@paymentTime,PaymentReference=@paymentReference,PaymentReceipt=@paymentReceipt,CreationTime=@creationTime WHERE PaymentIdentifier=@paymentIdentifier")
            .AddCharDataParameter("@paymentIdentifier", identifier)
            .AddCharDataParameter("@stakeholderIdentifier", stakeholder.Identifier)
            .AddTinyIntDataParameter("@stakeholderType", (int)stakeholderType, 4)
            .AddCharDataParameter("@dataProviderIdentifier", dataProvider.Identifier)
            .AddDateTimeDataParameter("@paymentTime", paymentTime.ToUniversalTime())
            .AddVarCharDataParameter("@paymentReference", paymentReference, 128)
            .AddLongTextDataParameter("@paymentReceipt", paymentReceipt, true)
            .AddDateTimeDataParameter("@creationTime", creationTime.ToUniversalTime())
            .Build()
            .Run(sut.CreateUpdateCommand());
        }
 /// <summary>
 /// Build a collection of mockups for some internal or external stakeholders.
 /// </summary>
 /// <returns>Collection of mockups for some internal or external stakeholders.</returns>
 public static IEnumerable <IStakeholder> BuildStakeholderMockCollection(StakeholderType stakeholderType = StakeholderType.HouseholdMember)
 {
     return(new List <IStakeholder>
     {
         BuildStakeholderMock(stakeholderType),
         BuildStakeholderMock(stakeholderType),
         BuildStakeholderMock(stakeholderType)
     });
 }
        /// <summary>
        /// Build a mockup for an internal or external stakeholder.
        /// </summary>
        /// <returns>Mockup for an internal or external stakeholder.</returns>
        public static IStakeholder BuildStakeholderMock(StakeholderType stakeholderType = StakeholderType.HouseholdMember)
        {
            Guid identifier = Guid.NewGuid();
            // ReSharper disable StringLiteralTypo
            string mailAddress = $"test.{identifier.ToString("D").ToLower()}@osdevgrp.dk";
            // ReSharper restore StringLiteralTypo
            IStakeholder stakeholderMock = MockRepository.GenerateMock <IStakeholder>();

            stakeholderMock.Stub(m => m.Identifier)
            .Return(identifier)
            .Repeat.Any();
            stakeholderMock.Stub(m => m.StakeholderType)
            .Return(stakeholderType)
            .Repeat.Any();
            stakeholderMock.Stub(m => m.MailAddress)
            .Return(mailAddress)
            .Repeat.Any();
            return(stakeholderMock);
        }
 /// <summary>
 /// Adds a stakeholder type parameter to the command.
 /// </summary>
 /// <param name="value">The value for the stakeholder type.</param>
 /// <returns>This instance of the <see cref="HouseholdDataCommandBuilder"/>.</returns>
 internal HouseholdDataCommandBuilder AddStakeholderTypeParameter(StakeholderType value)
 {
     AddTinyIntParameter("@stakeholderType", (short)value, 4);
     return(this);
 }
Esempio n. 7
0
 internal StakeholderAddedDomainEvent(Guid initiativeId, int userId, StakeholderType stakeholderType)
 {
     InitiativeId    = initiativeId;
     UserId          = userId;
     StakeholderType = stakeholderType;
 }
Esempio n. 8
0
        public void TestThatMapDataMapsDataIntoProxy(StakeholderType stakeholderType, bool hasPaymentReceipt)
        {
            IPaymentProxy sut = CreateSut();

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

            Guid     paymentIdentifier      = Guid.NewGuid();
            Guid     stakeholderIdentifier  = Guid.NewGuid();
            Guid     dataProviderIdentifier = Guid.NewGuid();
            DateTime paymentTime            = DateTime.Now.AddDays(_random.Next(1, 7) * -1).AddMinutes(_random.Next(120, 240));
            string   paymentReference       = _fixture.Create <string>();

            byte[]          paymentReceipt = hasPaymentReceipt ? _fixture.CreateMany <byte>(_random.Next(1024, 4096)).ToArray() : null;
            DateTime        creationTime   = DateTime.Now;
            MySqlDataReader dataReader     = CreateMySqlDataReader(paymentIdentifier, stakeholderIdentifier, stakeholderType, dataProviderIdentifier, paymentTime, paymentReference, paymentReceipt, creationTime);

            DataProviderProxy      dataProviderProxy    = BuildDataProviderProxy();
            HouseholdMemberProxy   householdMemberProxy = BuildHouseholdMemberProxy();
            IFoodWasteDataProvider dataProvider         = CreateFoodWasteDataProvider(dataProviderProxy, householdMemberProxy);

            sut.MapData(dataReader, dataProvider);

            Assert.That(sut.Identifier, Is.Not.Null);
            Assert.That(sut.Identifier, Is.EqualTo(paymentIdentifier));
            Assert.That(sut.Stakeholder, Is.Not.Null);
            Assert.That(sut.Stakeholder, Is.EqualTo(householdMemberProxy));
            Assert.That(sut.DataProvider, Is.Not.Null);
            Assert.That(sut.DataProvider, Is.EqualTo(dataProviderProxy));
            Assert.That(sut.PaymentTime, Is.EqualTo(paymentTime).Within(1).Milliseconds);
            Assert.That(sut.PaymentReference, Is.Not.Null);
            Assert.That(sut.PaymentReference, Is.Not.Empty);
            Assert.That(sut.PaymentReference, Is.EqualTo(paymentReference));
            if (paymentReceipt != null)
            {
                Assert.That(sut.PaymentReceipt, Is.Not.Null);
                Assert.That(sut.PaymentReceipt, Is.Not.Empty);
                Assert.That(sut.PaymentReceipt, Is.EqualTo(paymentReceipt));
            }
            else
            {
                Assert.That(sut.PaymentReceipt, Is.Null);
            }
            Assert.That(sut.CreationTime, Is.EqualTo(creationTime).Within(1).Milliseconds);

            dataReader.AssertWasCalled(m => m.GetString(Arg <string> .Is.Equal("PaymentIdentifier")), opt => opt.Repeat.Once());
            dataReader.AssertWasCalled(m => m.GetInt32(Arg <string> .Is.Equal("StakeholderType")), opt => opt.Repeat.Once());
            dataReader.AssertWasCalled(m => m.GetMySqlDateTime(Arg <string> .Is.Equal("PaymentTime")), opt => opt.Repeat.Once());
            dataReader.AssertWasCalled(m => m.GetString(Arg <string> .Is.Equal("PaymentReference")), opt => opt.Repeat.Once());
            dataReader.AssertWasCalled(m => m.GetOrdinal(Arg <string> .Is.Equal("PaymentReceipt")), opt => opt.Repeat.Once());
            dataReader.AssertWasCalled(m => m.IsDBNull(Arg <int> .Is.Equal(6)), opt => opt.Repeat.Once());
            if (paymentReceipt != null)
            {
                dataReader.AssertWasCalled(m => m.GetTextReader(Arg <int> .Is.Equal(6)), opt => opt.Repeat.Once());
            }
            else
            {
                dataReader.AssertWasNotCalled(m => m.GetTextReader(Arg <int> .Is.Equal(6)));
            }
            dataReader.AssertWasCalled(m => m.GetMySqlDateTime(Arg <string> .Is.Equal("CreationTime")), opt => opt.Repeat.Once());

            dataProvider.AssertWasNotCalled(m => m.Clone());

            switch (stakeholderType)
            {
            case StakeholderType.HouseholdMember:
                dataProvider.AssertWasCalled(m => m.Create(
                                                 Arg <IHouseholdMemberProxy> .Is.TypeOf,
                                                 Arg <MySqlDataReader> .Is.Equal(dataReader),
                                                 Arg <string[]> .Matches(e => e != null && e.Length == 8 &&
                                                                         e[0] == "StakeholderIdentifier" &&
                                                                         e[1] == "HouseholdMemberMailAddress" &&
                                                                         e[2] == "HouseholdMemberMembership" &&
                                                                         e[3] == "HouseholdMemberMembershipExpireTime" &&
                                                                         e[4] == "HouseholdMemberActivationCode" &&
                                                                         e[5] == "HouseholdMemberActivationTime" &&
                                                                         e[6] == "HouseholdMemberPrivacyPolicyAcceptedTime" &&
                                                                         e[7] == "HouseholdMemberCreationTime")),
                                             opt => opt.Repeat.Once());
                break;

            default:
                throw new NotSupportedException($"The stakeholderType '{stakeholderType}' is not supported.");
            }

            dataProvider.AssertWasCalled(m => m.Create(
                                             Arg <IDataProviderProxy> .Is.TypeOf,
                                             Arg <MySqlDataReader> .Is.Equal(dataReader),
                                             Arg <string[]> .Matches(e => e != null && e.Length == 4 &&
                                                                     e[0] == "DataProviderIdentifier" &&
                                                                     e[1] == "DataProviderName" &&
                                                                     e[2] == "DataProviderHandlesPayments" &&
                                                                     e[3] == "DataProviderDataSourceStatementIdentifier")),
                                         opt => opt.Repeat.Once());
        }