public void MerchantAggregate_CanBeCreated_IsCreated() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.AggregateId.ShouldBe(TestData.MerchantId); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.ShouldBeNull(); }
/// <summary> /// Gets the merchant. /// </summary> /// <param name="estateId">The estate identifier.</param> /// <param name="merchantId">The merchant identifier.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> public async Task <Merchant> GetMerchant(Guid estateId, Guid merchantId, CancellationToken cancellationToken) { MerchantAggregate merchantAggregate = await this.MerchantAggregateRepository.GetLatestVersion(merchantId, cancellationToken); Merchant merchantModel = merchantAggregate.GetMerchant(); return(merchantModel); }
public void MerchantAggregate_MakeDeposit_TwoDepositsOneMonthApartSameDetails_BothDepositsMade() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, "Test Data Gen Deposit", new DateTime(2021, 1, 1, 0, 0, 0), 650.00m); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, "Test Data Gen Deposit", new DateTime(2021, 2, 1, 0, 0, 0), 650.00m); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Deposits.Count.ShouldBe(2); }
public void MerchantAggregate_MakeDeposit_TwoDeposits_BothDepositsMade() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, TestData.DepositReference, TestData.DepositDateTime, TestData.DepositAmount); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, TestData.DepositReference2, TestData.DepositDateTime2, TestData.DepositAmount2); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Deposits.Count.ShouldBe(2); }
public void MerchantAggregate_AddDevice_DeviceAdded() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.AddDevice(TestData.DeviceId, TestData.DeviceIdentifier); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Devices.ShouldHaveSingleItem(); merchantModel.Devices.Single().Key.ShouldBe(TestData.DeviceId); merchantModel.Devices.Single().Value.ShouldBe(TestData.DeviceIdentifier); }
public void MerchantAggregate_MakeDeposit_DuplicateDeposit_ErrorThrown() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, TestData.DepositReference, TestData.DepositDateTime, TestData.DepositAmount); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Deposits.ShouldHaveSingleItem(); Should.Throw <InvalidOperationException>(() => { aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, TestData.DepositReference, TestData.DepositDateTime, TestData.DepositAmount); }); }
public void MerchantAggregate_AddSecurityUserToMerchant_SecurityUserIsAdded() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.AddSecurityUser(TestData.SecurityUserId, TestData.MerchantUserEmailAddress); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.SecurityUsers.ShouldHaveSingleItem(); SecurityUser securityUser = merchantModel.SecurityUsers.Single(); securityUser.EmailAddress.ShouldBe(TestData.MerchantUserEmailAddress); securityUser.SecurityUserId.ShouldBe(TestData.SecurityUserId); }
public void MerchantAggregate_AssignOperator_OperatorIsAssigned() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.AssignOperator(TestData.OperatorId, TestData.OperatorName, TestData.OperatorMerchantNumber, TestData.OperatorTerminalNumber); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Operators.ShouldHaveSingleItem(); Models.Merchant.Operator operatorModel = merchantModel.Operators.Single(); operatorModel.OperatorId.ShouldBe(TestData.OperatorId); operatorModel.Name.ShouldBe(TestData.OperatorName); operatorModel.MerchantNumber.ShouldBe(TestData.OperatorMerchantNumber); operatorModel.TerminalNumber.ShouldBe(TestData.OperatorTerminalNumber); }
public void MerchantAggregate_MakeDeposit_DepositMade() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.MakeDeposit(TestData.MerchantDepositSourceManual, TestData.DepositReference, TestData.DepositDateTime, TestData.DepositAmount); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Deposits.ShouldHaveSingleItem(); merchantModel.Deposits.Single().Source.ShouldBe(TestData.MerchantDepositSourceManual); //merchantModel.Deposits.Single().DepositId.ShouldNotBe(TestData.DepositId); merchantModel.Deposits.Single().DepositDateTime.ShouldBe(TestData.DepositDateTime); merchantModel.Deposits.Single().Reference.ShouldBe(TestData.DepositReference); merchantModel.Deposits.Single().Amount.ShouldBe(TestData.DepositAmount); }
public void MerchantAggregate_AddContact_ContactIsAdded() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.AddContact(TestData.MerchantContactId, TestData.MerchantContactName, TestData.MerchantContactPhoneNumber, TestData.MerchantContactEmailAddress); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Contacts.ShouldHaveSingleItem(); Contact contactModel = merchantModel.Contacts.Single(); contactModel.ContactId.ShouldBe(TestData.MerchantContactId); contactModel.ContactName.ShouldBe(TestData.MerchantContactName); contactModel.ContactEmailAddress.ShouldBe(TestData.MerchantContactEmailAddress); contactModel.ContactPhoneNumber.ShouldBe(TestData.MerchantContactPhoneNumber); }
public void MerchantAggregate_AddAddress_AddressIsAdded() { MerchantAggregate aggregate = MerchantAggregate.Create(TestData.MerchantId); aggregate.Create(TestData.EstateId, TestData.MerchantName, TestData.DateMerchantCreated); aggregate.AddAddress(TestData.MerchantAddressId, TestData.MerchantAddressLine1, TestData.MerchantAddressLine2, TestData.MerchantAddressLine3, TestData.MerchantAddressLine4, TestData.MerchantTown, TestData.MerchantRegion, TestData.MerchantPostalCode, TestData.MerchantCountry); Merchant merchantModel = aggregate.GetMerchant(); merchantModel.Addresses.ShouldHaveSingleItem(); Address addressModel = merchantModel.Addresses.Single(); addressModel.AddressId.ShouldBe(TestData.MerchantAddressId); addressModel.AddressLine1.ShouldBe(TestData.MerchantAddressLine1); addressModel.AddressLine2.ShouldBe(TestData.MerchantAddressLine2); addressModel.AddressLine3.ShouldBe(TestData.MerchantAddressLine3); addressModel.AddressLine4.ShouldBe(TestData.MerchantAddressLine4); addressModel.Town.ShouldBe(TestData.MerchantTown); addressModel.Region.ShouldBe(TestData.MerchantRegion); addressModel.PostalCode.ShouldBe(TestData.MerchantPostalCode); addressModel.Country.ShouldBe(TestData.MerchantCountry); }
/// <summary> /// Makes the merchant deposit. /// </summary> /// <param name="estateId">The estate identifier.</param> /// <param name="merchantId">The merchant identifier.</param> /// <param name="source">The source.</param> /// <param name="reference">The reference.</param> /// <param name="depositDateTime">The deposit date time.</param> /// <param name="amount">The amount.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns></returns> /// <exception cref="InvalidOperationException"> /// Merchant Id {merchantId} has not been created /// or /// Estate Id {estateId} has not been created /// </exception> public async Task <Guid> MakeMerchantDeposit(Guid estateId, Guid merchantId, Models.MerchantDepositSource source, String reference, DateTime depositDateTime, Decimal amount, CancellationToken cancellationToken) { MerchantAggregate merchantAggregate = await this.MerchantAggregateRepository.GetLatestVersion(merchantId, cancellationToken); // Check merchant has been created if (merchantAggregate.IsCreated == false) { throw new InvalidOperationException($"Merchant Id {merchantId} has not been created"); } // Estate Id is a valid estate EstateAggregate estateAggregate = await this.EstateAggregateRepository.GetLatestVersion(estateId, cancellationToken); if (estateAggregate.IsCreated == false) { throw new InvalidOperationException($"Estate Id {estateId} has not been created"); } merchantAggregate.MakeDeposit(source, reference, depositDateTime, amount); await this.MerchantAggregateRepository.SaveChanges(merchantAggregate, cancellationToken); Merchant merchant = merchantAggregate.GetMerchant(); // Find the deposit Deposit deposit = merchant.Deposits.Single(d => d.Reference == reference && d.DepositDateTime == depositDateTime && d.Source == source && d.Amount == amount); return(deposit.DepositId); }