public async Task <Models.V1.AssessmentHeader> Get(int assessmentEventId)
        {
            if (assessmentEventId < 1)
            {
                throw new BadRequestException("Invalid AssessmentEventId");
            }

            var assessmentEventDto = await _httpClientWrapper.Get <AssessmentEventDto>(_applicationSettingsHelper.AssessmentEventServiceApiUrl, $"{Version}/assessmentevents/{assessmentEventId}");

            if (assessmentEventDto == null)
            {
                return(null);
            }

            var assessmentEventTran = assessmentEventDto.AssessmentEventTransactions.OrderByDescending(aet => aet.Id).FirstOrDefault();

            BaseValueSegmentTransactionDto currentBaseValueSegmentTransaction = null;

            BaseValueSegmentDto baseValueSegmentDto = null;

            try
            {
                baseValueSegmentDto = await _httpClientWrapper.Get <BaseValueSegmentDto>(_applicationSettingsHelper.BaseValueSegmentServiceApiUrl,
                                                                                         $"{Version}/basevaluesegments/RevenueObjectId/{assessmentEventDto.RevObjId}/AssessmentEventDate/{assessmentEventDto.EventDate:yyyy-MM-dd}");
            }
            catch (NotFoundException)
            {
                // no records found
            }

            if (baseValueSegmentDto != null)
            {
                var baseValueSegmentTransactions = baseValueSegmentDto.BaseValueSegmentTransactions.OrderByDescending(x => x.Id);
                if (baseValueSegmentTransactions.Any())
                {
                    currentBaseValueSegmentTransaction = baseValueSegmentTransactions.First();
                }
            }

            var assessmentHeader = new Models.V1.AssessmentHeader
            {
                AssessmentEvent = new AssessmentEvent
                {
                    AssessmentEventId              = assessmentEventDto.Id,
                    AssessmentEventType            = assessmentEventDto.AsmtEventType,
                    AssessmentEventTypeDescription = assessmentEventDto.AsmtEventTypeDescription,
                    RevenueObjectId = assessmentEventDto.RevObjId,
                    EventDate       = assessmentEventDto.EventDate,
                    TaxYear         = assessmentEventDto.TaxYear,
                    EventState      = assessmentEventTran?.AsmtEventStateDescription,
                    TransactionId   = assessmentEventTran?.Id ?? null,
                    BVSTranType     = (currentBaseValueSegmentTransaction != null) ? currentBaseValueSegmentTransaction.BaseValueSegmentTransactionType.Description : string.Empty,
                    PrimaryBaseYear = assessmentEventDto.PrimaryBaseYear,
                    PrimaryBaseYearMultipleOrSingleDescription = assessmentEventDto.PrimaryBaseYearMultipleOrSingleDescription
                }
            };
            RevenueObjectDto revenueObjectDto = null;

            try
            {
                revenueObjectDto = await _httpClientWrapper.Get <RevenueObjectDto>(_applicationSettingsHelper.RevenueObjectServiceApiUrl,
                                                                                   $"{Version}/revenueobjects/{assessmentEventDto.RevObjId}/EffectiveDate/{assessmentEventDto.EventDate:yyyy-MM-dd}");
            }
            catch (NotFoundException)
            {
                //if not found it could be because the PIN is inactive so send back a user-friendly message
                throw new NotFoundException("BVS data is unavailable.  This may be because the PIN is no longer active.");
            }
            catch
            {
                throw new NotFoundException("Unable to look up the Revenue Object.  This may be the result of an inactive record.");
            }

            var legalPartyRoleDtos = await _httpClientWrapper.Get <IList <LegalPartyRoleDto> >(_applicationSettingsHelper.LegalPartyServiceApiUrl,
                                                                                               $"{Version}/LegalParties/LegalPartyRoles/RevenueObjectId/{assessmentEventDto.RevObjId}/EffectiveDate/{assessmentEventDto.EventDate:O}");

            AssessmentRevisionDto assessmentRevisionDto = null;

            if (assessmentEventTran != null)
            {
                assessmentRevisionDto = await _httpClientWrapper.Get <AssessmentRevisionDto>(_applicationSettingsHelper.AssessmentEventServiceApiUrl,
                                                                                             $"{Version}/AssessmentEvents/AssessmentRevisionEventId/{assessmentEventTran.AsmtRevnEventId}/AssessmentEventDate/{assessmentEventDto.EventDate:yyyy-MM-dd}/AssessmentRevision");
            }

            var tagDto = await _httpClientWrapper.Get <TAGDto>(_applicationSettingsHelper.RevenueObjectServiceApiUrl,
                                                               $"{Version}/revenueobjects/RevenueObjectId/{assessmentEventDto.RevObjId}/EffectiveDate/{assessmentEventDto.EventDate:yyyy-MM-dd}/TAG");

            StatutoryReferenceDto statutoryReferenceDto = null;

            if (assessmentEventTran != null)
            {
                statutoryReferenceDto = await _httpClientWrapper.Get <StatutoryReferenceDto>(_applicationSettingsHelper.AssessmentEventServiceApiUrl,
                                                                                             $"{Version}/StatutoryReference/{assessmentEventTran.Id}");
            }

            if (statutoryReferenceDto != null)
            {
                assessmentHeader.AssessmentEvent.RevenueAndTaxCode = statutoryReferenceDto.Description;
            }

            if (revenueObjectDto != null)
            {
                assessmentHeader.RevenueObject = new RevenueObject
                {
                    Id = revenueObjectDto.Id,
                    BeginEffectiveDate = revenueObjectDto.BeginEffectiveDate,
                    EffectiveStatus    = revenueObjectDto.EffectiveStatus,
                    Pin              = revenueObjectDto.Pin,
                    UnformattedPin   = revenueObjectDto.UnformattedPin,
                    Ain              = revenueObjectDto.Ain,
                    GeoCd            = revenueObjectDto.GeoCd,
                    ClassCd          = revenueObjectDto.ClassCd,
                    AreaCd           = revenueObjectDto.AreaCd,
                    CountyCd         = revenueObjectDto.CountyCd,
                    CensusTrack      = revenueObjectDto.CensusTrack,
                    CensusBlock      = revenueObjectDto.CensusBlock,
                    XCoordinate      = revenueObjectDto.XCoordinate,
                    YCoordinate      = revenueObjectDto.YCoordinate,
                    ZCoordinate      = revenueObjectDto.ZCoordinate,
                    RightEstate      = revenueObjectDto.RightEstate,
                    RightType        = revenueObjectDto.RightType,
                    RightDescription = revenueObjectDto.RightDescription,
                    Type             = revenueObjectDto.Type,
                    SubType          = revenueObjectDto.SubType,
                    TAG              = tagDto.Description,
                    SitusAddress     = revenueObjectDto.SitusAddress != null
                                                            ? new SitusAddress
                    {
                        FreeFormAddress = revenueObjectDto.SitusAddress.FreeFormAddress,
                        City            = revenueObjectDto.SitusAddress.City,
                        StateCode       = revenueObjectDto.SitusAddress.StateCode,
                        PostalCode      = revenueObjectDto.SitusAddress.PostalCode
                    }
                                                            : null,
                    Description          = revenueObjectDto.Description,
                    PropertyType         = revenueObjectDto.PropertyType,
                    RelatedPins          = revenueObjectDto.RelatedPins,
                    ClassCodeDescription = revenueObjectDto.ClassCodeDescription,
                    //TODO Remove hard coding of TotalBaseValue once true source is determined
                    TotalBaseValue = 345000m
                };
            }
            if (legalPartyRoleDtos != null && legalPartyRoleDtos.Count > 0)
            {
                var primeLegalPartyRole = GetPrimeLegalPartyRole(legalPartyRoleDtos);
                if (primeLegalPartyRole != null)
                {
                    var primeLegalParty = primeLegalPartyRole.LegalParty;
                    assessmentHeader.LegalParty = new LegalParty
                    {
                        LegalPartyId             = primeLegalParty.Id,
                        DisplayName              = primeLegalParty.DisplayName,
                        FirstName                = primeLegalParty.FirstName,
                        MiddleName               = primeLegalParty.MiddleName,
                        LastName                 = primeLegalParty.LastName,
                        NameSfx                  = primeLegalParty.NameSfx,
                        RevenueAcct              = primeLegalPartyRole.AcctId,
                        LegalPartyRoleObjectType = primeLegalPartyRole.ObjectType
                    };
                }
            }

            if (assessmentRevisionDto != null)
            {
                assessmentHeader.AssessmentEvent.RevisionId      = assessmentRevisionDto.Id;
                assessmentHeader.AssessmentEvent.ReferenceNumber = assessmentRevisionDto.ReferenceNumber;
                assessmentHeader.AssessmentEvent.ChangeReason    = assessmentRevisionDto.ChangeReason;
                assessmentHeader.AssessmentEvent.Note            = assessmentRevisionDto.Note;
            }

            return(assessmentHeader);
        }
Ejemplo n.º 2
0
        [Fact] // TODO: Need to consider the new services we have added.
        public void Get_CallsGetOnAssessmentEventService_ReceivesAssessmentEventServiceDomainDTOAndRevenueObjectDomainAndLegalPartyRolesDomainDTO()
        {
            var          assessmentEventId             = 1;
            var          assessmentEventDate           = DateTime.Now;
            const int    asmtRevnEventId               = 2;
            const int    asmtRevnId                    = 6;
            const int    nonPrimeLegalPartyRoleId      = 3;
            const int    primeLegalPartyRoleId         = 4;
            const string primeLegalPartyDisplayName    = "Prime Dude";
            const string nonPrimeLegalPartyDisplayName = "Nonprime Dude";
            const string tagDescription                = "some TAG description";
            const string firstName  = "UnitTestFirstName";
            const string middleName = "UnitTestMiddleName";
            const string lastName   = "UnitTestLastName";
            const string nameSfx    = "UnitTestNameSfx";
            const int    legalPartyRoleObjectType = 9999;

            var assessmentEventDto = new AssessmentEventDto
            {
                Id                       = assessmentEventId,
                EventDate                = assessmentEventDate,
                AsmtEventType            = 999,
                AsmtEventTypeDescription = "Annual",
                RevObjId                 = 888,
                DynCalcStepTrackingId    = 777,
                TaxYear                  = 2017,
                TranId                   = 99999999999,
                PrimaryBaseYear          = 2015,
                PrimaryBaseYearMultipleOrSingleDescription = "M"
            };
            var assessmentEventTranDto = new AssessmentEventTransactionDto
            {
                AsmtEventStateDescription = "Review Required",
                AsmtEventId     = assessmentEventId,
                AsmtEventState  = 1,
                AsmtRevnEventId = asmtRevnEventId,
                Id = 4
            };

            assessmentEventDto.AssessmentEventTransactions.Add(assessmentEventTranDto);

            var assessmentRevnDto = new AssessmentRevisionDto
            {
                Id = asmtRevnId
            };

            var revenueObjectDto = new RevenueObjectDto
            {
                Id = 333
            };

            var tagDto = new TAGDto
            {
                Description = tagDescription
            };

            var legalPartyRoleDtos = new List <LegalPartyRoleDto>()
            {
                new LegalPartyRoleDto()
                {
                    Id = nonPrimeLegalPartyRoleId,
                    PrimeLegalParty = 0,
                    LegalParty      = new LegalPartyDto()
                    {
                        DisplayName = nonPrimeLegalPartyDisplayName,
                    }
                },
                new LegalPartyRoleDto()
                {
                    Id = primeLegalPartyRoleId,
                    PrimeLegalParty = 1,
                    LegalParty      = new LegalPartyDto()
                    {
                        Id          = 100,
                        DisplayName = primeLegalPartyDisplayName,
                        FirstName   = firstName,
                        MiddleName  = middleName,
                        LastName    = lastName,
                        NameSfx     = nameSfx,
                    },
                    ObjectType = legalPartyRoleObjectType
                }
            };
            var bvsTran1 = new BaseValueSegmentTransactionDto()
            {
                Id = 1,
                BaseValueSegmentTransactionTypeId = 3,
                BaseValueSegmentTransactionType   = new BaseValueSegmentTransactionTypeDto()
                {
                    Name        = "Conversion",
                    Description = "Conversion"
                }
            };
            var bvsTran2 = new BaseValueSegmentTransactionDto()
            {
                Id = 2,
                BaseValueSegmentTransactionTypeId = 2,
                BaseValueSegmentTransactionType   = new BaseValueSegmentTransactionTypeDto()
                {
                    Name        = "User",
                    Description = "User"
                }
            };
            var baseValueSegmentDto = new BaseValueSegmentDto()
            {
                AsOf            = assessmentEventDate,
                RevenueObjectId = 888,
                BaseValueSegmentTransactions = new List <BaseValueSegmentTransactionDto>()
                {
                    bvsTran1,
                    bvsTran2
                }
            };
            var statutoryReferenceDto = new StatutoryReferenceDto()
            {
                Description = "Test Statuatory Reference"
            };

            var httpClientWrapperMock = new Mock <IHttpClientWrapper>();

            httpClientWrapperMock.Setup(x => x.Get <AssessmentEventDto>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(assessmentEventDto);

            httpClientWrapperMock.Setup(x => x.Get <AssessmentRevisionDto>(It.IsAny <string>(), It.IsAny <string>()))
            .ReturnsAsync(assessmentRevnDto);
            httpClientWrapperMock.Setup(x => x.Get <RevenueObjectDto>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(revenueObjectDto);
            httpClientWrapperMock.Setup(x => x.Get <TAGDto>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(tagDto);
            httpClientWrapperMock.Setup(x => x.Get <IList <LegalPartyRoleDto> >(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(legalPartyRoleDtos);
            httpClientWrapperMock.Setup(x => x.Get <BaseValueSegmentDto>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(baseValueSegmentDto);
            httpClientWrapperMock.Setup(x => x.Get <StatutoryReferenceDto>(It.IsAny <string>(), It.IsAny <string>())).ReturnsAsync(statutoryReferenceDto);

            var applicationSettingsHelper = new Mock <IApplicationSettingsHelper>();

            applicationSettingsHelper.Setup(x => x.AssessmentEventServiceApiUrl).Returns("");
            applicationSettingsHelper.Setup(x => x.RevenueObjectServiceApiUrl).Returns("");
            applicationSettingsHelper.Setup(x => x.LegalPartyServiceApiUrl).Returns("");
            applicationSettingsHelper.Setup(x => x.BaseValueSegmentServiceApiUrl).Returns("");

            var domain = new AssessmentHeaderDomain(httpClientWrapperMock.Object, applicationSettingsHelper.Object);
            var assessmentHeaderModel = domain.Get(assessmentEventId).Result;

            assessmentHeaderModel.ShouldNotBeNull();
            assessmentHeaderModel.ShouldBeOfType <Models.V1.AssessmentHeader>();
            assessmentHeaderModel.AssessmentEvent.AssessmentEventId.ShouldBe(assessmentEventDto.Id);
            assessmentHeaderModel.AssessmentEvent.EventDate.ShouldBe(assessmentEventDto.EventDate);
            assessmentHeaderModel.AssessmentEvent.AssessmentEventType.ShouldBe(assessmentEventDto.AsmtEventType);
            assessmentHeaderModel.AssessmentEvent.AssessmentEventTypeDescription.ShouldBe(assessmentEventDto.AsmtEventTypeDescription);
            assessmentHeaderModel.AssessmentEvent.RevenueObjectId.ShouldBe(assessmentEventDto.RevObjId);
            assessmentHeaderModel.AssessmentEvent.TaxYear.ShouldBe(assessmentEventDto.TaxYear);
            assessmentHeaderModel.AssessmentEvent.EventState.ShouldBe(assessmentEventDto.AssessmentEventTransactions[0].AsmtEventStateDescription);
            assessmentHeaderModel.AssessmentEvent.RevisionId.ShouldBe(assessmentRevnDto.Id);
            assessmentHeaderModel.AssessmentEvent.BVSTranType.ShouldBe("User");
            assessmentHeaderModel.AssessmentEvent.TransactionId.ShouldBe(4);
            assessmentHeaderModel.AssessmentEvent.Note.ShouldBeNull();
            assessmentHeaderModel.AssessmentEvent.ReferenceNumber.ShouldBeNull();
            assessmentHeaderModel.AssessmentEvent.ChangeReason.ShouldBeNull();
            assessmentHeaderModel.AssessmentEvent.RevenueAndTaxCode.ShouldBe("Test Statuatory Reference");
            assessmentHeaderModel.AssessmentEvent.PrimaryBaseYear.ShouldBe(assessmentEventDto.PrimaryBaseYear);
            assessmentHeaderModel.AssessmentEvent.PrimaryBaseYearMultipleOrSingleDescription.ShouldBe(assessmentEventDto.PrimaryBaseYearMultipleOrSingleDescription);
            assessmentHeaderModel.RevenueObject.TAG.ShouldBe(tagDto.Description);
            assessmentHeaderModel.RevenueObject.Id.ShouldBe(333);
            assessmentHeaderModel.RevenueObject.Ain.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.AreaCd.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.BeginEffectiveDate.ShouldBe(DateTime.MinValue);
            assessmentHeaderModel.RevenueObject.CensusBlock.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.CensusTrack.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.ClassCd.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.ClassCodeDescription.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.CountyCd.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.Description.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.EffectiveStatus.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.GeoCd.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.Pin.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.PropertyType.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.RelatedPins.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.RevenueCode.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.RightDescription.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.RightEstate.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.RightType.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.SitusAddress.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.SubType.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.TaxCode.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.Type.ShouldBe(0);
            assessmentHeaderModel.RevenueObject.UnformattedPin.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.XCoordinate.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.YCoordinate.ShouldBeNull();
            assessmentHeaderModel.RevenueObject.ZCoordinate.ShouldBeNull();
            assessmentHeaderModel.LegalParty.DisplayName.ShouldBe(primeLegalPartyDisplayName);
            assessmentHeaderModel.LegalParty.LegalPartyId.ShouldBe(100);
            assessmentHeaderModel.LegalParty.FirstName.ShouldBe(firstName);
            assessmentHeaderModel.LegalParty.MiddleName.ShouldBe(middleName);
            assessmentHeaderModel.LegalParty.LastName.ShouldBe(lastName);
            assessmentHeaderModel.LegalParty.NameSfx.ShouldBe(nameSfx);
            assessmentHeaderModel.LegalParty.RevenueAcct.ShouldBe(0);
            assessmentHeaderModel.LegalParty.LegalPartyRoleObjectType.ShouldBe(legalPartyRoleObjectType);
        }
        public void GetBvsHistoryWithValidRevObjIdAndDates()
        {
            var baseValueSegmentHistoryList = new List <BaseValueSegmentHistoryDto>
            {
                new BaseValueSegmentHistoryDto
                {
                    BvsId     = 100,
                    AsOf      = new DateTime(2016, 1, 1),
                    BaseYear  = 2016,
                    BaseValue = 100000,
                    BeneficialInterestPercentage = 50,
                    BvsTransactionType           = "User",
                    LegalPartyRoleId             = 200,
                    OwnerGrmEventId       = 300,
                    SubComponentId        = 400,
                    TransactionId         = 500,
                    ValueHeaderGrmEventId = 600
                }
            };

            var revenueObject = new RevenueObjectDto
            {
                Id  = 700,
                Pin = "UnitTestPin"
            };

            var grmEventInformationList = new List <GrmEventInformationDto>
            {
                new GrmEventInformationDto
                {
                    Description     = "UnitTestGrmEvent1",
                    EffectiveDate   = new DateTime(2016, 1, 1),
                    EventDate       = new DateTime(2016, 2, 1),
                    EventType       = "Unit Test Event Type1",
                    GrmEventId      = 300,
                    RevenueObjectId = 700
                },
                new GrmEventInformationDto
                {
                    Description     = "UnitTestGrmEvent2",
                    EffectiveDate   = new DateTime(2016, 1, 1),
                    EventDate       = new DateTime(2016, 2, 1),
                    EventType       = "Unit Test Event Type2",
                    GrmEventId      = 600,
                    RevenueObjectId = 700
                }
            };

            var baseValueSegmentEventList = new List <BaseValueSegmentEventDto>
            {
                new BaseValueSegmentEventDto
                {
                    BvsAsOf         = new DateTime(2016, 1, 1),
                    BvsId           = 800,
                    GRMEventId      = 600,
                    RevenueObjectId = 700,
                    SequenceNumber  = 1
                }
            };

            var subComponentDetailDtoList = new List <SubComponentDetailDto>
            {
                new SubComponentDetailDto
                {
                    Component       = "UnitTestComponent",
                    ComponentTypeId = 900,
                    SubComponent    = "UnitTestSubComponent",
                    SubComponentId  = 400
                }
            };

            var marketAndRestrictedValueList = new List <MarketAndRestrictedValueDto>
            {
                new MarketAndRestrictedValueDto
                {
                    MarketValue     = 100000,
                    RestrictedValue = 50000,
                    SubComponent    = 400
                }
            };

            var legalPartyDocumentList = new List <LegalPartyDocumentDto>
            {
                new LegalPartyDocumentDto
                {
                    DocDate               = new DateTime(2016, 1, 1),
                    DocNumber             = "UnitTestDocumentNumber",
                    DocType               = "Deed",
                    GrmEventId            = 600,
                    LegalPartyDisplayName = "UnitTestLegalParty",
                    LegalPartyRoleId      = 200,
                    PctGain               = 25,
                    RightTransferId       = 0
                }
            };

            revenueObject.MarketAndRestrictedValues = new List <MarketAndRestrictedValueDto>();
            revenueObject.MarketAndRestrictedValues = marketAndRestrictedValueList;

            _baseValueSegmentRepository.Setup(x => x.GetBaseValueSegmentHistory(It.IsAny <int>(), It.IsAny <DateTime>(),
                                                                                It.IsAny <DateTime>())).Returns(Task.FromResult(baseValueSegmentHistoryList.AsEnumerable()));

            _baseValueSegmentRepository.Setup(x => x.GetEventsAsync(It.IsAny <int>())).Returns(Task.FromResult(baseValueSegmentEventList.AsEnumerable()));

            _baseValueSegmentRepository.Setup(x => x.GetSubComponentDetails(It.IsAny <int>(), It.IsAny <DateTime>())).Returns(Task.FromResult(subComponentDetailDtoList.AsEnumerable()));

            _revenueObjectRepository.Setup(x => x.GetByPin(It.IsAny <string>())).Returns(Task.FromResult(revenueObject));

            _revenueObjectRepository.Setup(x => x.Get(It.IsAny <int>(), It.IsAny <DateTime>()))
            .Returns(Task.FromResult(revenueObject));

            _grmEventRepository.Setup(x => x.SearchAsync(It.IsAny <GrmEventSearchDto>())).Returns(Task.FromResult(grmEventInformationList.AsEnumerable()));

            _legalPartyRepository.Setup(x => x.SearchAsync(It.IsAny <LegalPartySearchDto>()))
            .ReturnsAsync(legalPartyDocumentList.AsEnumerable);

            var bvsHistoryResults = _baseValueSegmentHistoryDomain.GetBaseValueSegmentHistoryAsync("UnitTestPin",
                                                                                                   new DateTime(2012, 1, 1), new DateTime(2017, 1, 1)).Result.ToList();

            bvsHistoryResults.Count.ShouldBe(1);
            var bvsHistoryDetail = bvsHistoryResults[0];

            bvsHistoryDetail.BaseValue.ShouldBe(100000);
            bvsHistoryDetail.BaseYear.ShouldBe(2016);
            bvsHistoryDetail.BeneficialInterest.ShouldBe("UnitTestLegalParty");
            bvsHistoryDetail.BeneficialInterestPercentage.ShouldBe(50);
            bvsHistoryDetail.BvsTransactionType.ShouldBe("User");
            bvsHistoryDetail.Component.ShouldBe("UnitTestComponent");
            bvsHistoryDetail.DocumentNumber.ShouldBe("UnitTestDocumentNumber");
            bvsHistoryDetail.EventDate.ShouldBe(new DateTime(2016, 1, 1));
            bvsHistoryDetail.EventType.ShouldBe("UnitTestGrmEvent2");
            bvsHistoryDetail.MarketValue.ShouldBe(100000);
            bvsHistoryDetail.OriginalEventDate.ShouldBe(new DateTime(2016, 1, 1));
            bvsHistoryDetail.OriginalEventType.ShouldBe("UnitTestGrmEvent2");
            bvsHistoryDetail.PercentInterestGained.ShouldBe(25);
            bvsHistoryDetail.RestrictedValue.ShouldBe(50000);
            bvsHistoryDetail.SubComponent.ShouldBe("UnitTestSubComponent");
            bvsHistoryDetail.UserName.ShouldBeNull();
        }