public void Registering_a_valid_contract_should_succeed()
        {
            var contract = FluentContract
                           .Create()
                           .ApplyDefaults()
                           .Save(this);

            var expectedResponse = new RegistrationAPIResponse(Guid.NewGuid());

            var ruleProcessor = GetRuleProcessor(_ruleProcessorUrl, expectedResponse);

            var response = ruleProcessor.RegisterContractItem(contract);

            Assert.AreEqual(RegistrationAPIState.Registered, response.State);
            Assert.AreEqual(expectedResponse.RegistrationReference, response.RegistrationReference);

            var trackingReferences = PreliminaryContractRepository.GetAll <ContractTrackingReference>().ToList();

            Assert.AreEqual(1, trackingReferences.Count);
            Assert.AreEqual(expectedResponse.RegistrationReference.ToString(), trackingReferences[0].ItemReference);
            Assert.AreEqual(ContractTrackingState.EvaluationPending, trackingReferences[0].State);
            Assert.AreNotEqual(0, trackingReferences[0].Id);
            Assert.AreNotEqual(default(DateTime), trackingReferences[0].CreatedAt);
            Assert.AreNotEqual(default(DateTime), trackingReferences[0].UpdatedAt);
        }
        private Mock <ILimitsRuleProcessorClient> GetClientMock(RegistrationAPIResponse expectedResponse = null, bool throwOnNullResponse = true)
        {
            var clientMock = new Mock <ILimitsRuleProcessorClient>();

            if (expectedResponse != null && throwOnNullResponse)
            {
                clientMock
                .Setup(a => a.RegisterItem(It.Is <ItemRegistration>(i => i.SystemReference == _systemReference)))
                .Returns(Task.FromResult(expectedResponse));
            }
            else
            {
                var setup = clientMock
                            .Setup(a => a.RegisterItem(It.IsAny <ItemRegistration>()));

                if (throwOnNullResponse)
                {
                    setup.Throws(new Exception(_clientFailureMsg));
                }
            }

            return(clientMock);
        }
        public PreliminaryContractRuleProcessor GetRuleProcessor(string ruleProcessorUrl, RegistrationAPIResponse expectedResponse = null, bool throwOnNullResponse = true, bool isRegistered = true)
        {
            var dshsMock = new Mock <IDataServiceHostSettings>();

            var settingsMock = new Mock <IPreliminaryContractSettings>();

            settingsMock
            .SetupGet(s => s.RuleProcessorUrl)
            .Returns(ruleProcessorUrl);

            var systemRegistrationMock = new Mock <IPreliminaryContractSystemRegistration>();

            systemRegistrationMock
            .Setup(r => r.GetSystemReference())
            .Returns(isRegistered ? _systemReference : Guid.Empty);

            systemRegistrationMock
            .SetupGet(r => r.IsRegistered)
            .Returns(isRegistered);

            var clientMock        = GetClientMock(expectedResponse, throwOnNullResponse);
            var clientFactoryMock = GetClientFactoryMock(clientMock);

            var ruleProcessor = new PreliminaryContractRuleProcessor(_logger.Object, authorisation, dshsMock.Object, settingsMock.Object, PreliminaryContractRepository, PreliminaryContractDataService, systemRegistrationMock.Object, clientFactoryMock.Object);

            return(ruleProcessor);
        }