public void UnsuccessfulMatchReturnsNotFound() { // Arrange var validatorFactory = new Mock <IValidatorEngine>(); var mappingEngine = new Mock <IMappingEngine>(); var repository = new Mock <IRepository>(); var searchCache = new Mock <ISearchCache>(); var service = new LocationService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); var list = new List <LocationMapping>(); repository.Setup(x => x.Queryable <LocationMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", ValidAt = SystemTime.UtcNow(), TargetSystemName = "Trayport" }; // Act var contract = service.CrossMap(request); // Assert Assert.IsNotNull(contract, "Contract null"); Assert.IsFalse(contract.IsValid, "Contract valid"); Assert.AreEqual(ErrorType.NotFound, contract.Error.Type, "ErrorType difers"); }
/// <summary> /// Cross map from the source system to the target system for an MDM entity. /// </summary> /// <param name="request"></param> /// <returns></returns> public ContractResponse <MappingResponse> CrossMap(CrossMappingRequest request) { if (request == null) { throw new ArgumentNullException("request"); } var mapping = this.repository.FindAllMappings <TMapping>(request).FirstOrDefault(m => m.Entity is TEntity); return(mapping == null ? this.ConstructResponse(null, request) : this.ConstructResponse((TEntity)mapping.Entity, request)); }
private ContractResponse <MappingResponse> ConstructResponse(TEntity entity, CrossMappingRequest request) { if (entity != null) { var response = new MappingResponse(); this.AssignIdentifiers( entity, x => response.Mappings.Add(x), x => string.Equals(x.System.Name, request.TargetSystemName, StringComparison.InvariantCultureIgnoreCase) && x.Validity.ValidAt(request.ValidAt)); if (response.HasMultipleDefaultMapping() || response.HasMultipleMappingsWithNoDefault()) { return(new ContractResponse <MappingResponse> { Error = new ContractError { Type = ErrorType.Ambiguous }, IsValid = false }); } if (response.HasMutlipleMappingsWithOneDefault()) { response.Mappings = new MdmIdList() { response.Mappings.Where(x => x.DefaultReverseInd.HasValue && x.DefaultReverseInd.Value). First() }; } return(new ContractResponse <MappingResponse> { Contract = request.Version == entity.Version ? null : response, Version = entity.Version, }); } return(new ContractResponse <MappingResponse> { Error = new ContractError { Type = ErrorType.NotFound }, IsValid = false }); }
public void SuccessMatch() { // Arrange var validatorFactory = new Mock<IValidatorEngine>(); var mappingEngine = new Mock<IMappingEngine>(); var repository = new Mock<IRepository>(); var searchCache = new Mock<ISearchCache>(); var service = new PersonService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new PersonMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new PersonMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var details = new MDM.PersonDetails { FirstName = "John", LastName = "Smith", Email = "*****@*****.**" }; var person = new MDM.Person { Id = 1 }; person.AddDetails(details); person.ProcessMapping(mapping); person.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new MdmId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map<PersonMapping, MdmId>(targetMapping)).Returns(targetIdentifier); var list = new List<PersonMapping> { mapping }; repository.Setup(x => x.Queryable<PersonMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 1 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsTrue(response.IsValid, "Contract invalid"); Assert.IsNotNull(candidate, "Mapping null"); Assert.AreEqual(1, candidate.Mappings.Count, "Identifier count incorrect"); Assert.AreSame(targetIdentifier, candidate.Mappings[0], "Different identifier assigned"); }
public void UnsuccessfulMatchReturnsNotFound() { // Arrange var validatorFactory = new Mock<IValidatorEngine>(); var mappingEngine = new Mock<IMappingEngine>(); var repository = new Mock<IRepository>(); var searchCache = new Mock<ISearchCache>(); var service = new PersonService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); var list = new List<PersonMapping>(); repository.Setup(x => x.Queryable<PersonMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", ValidAt = SystemTime.UtcNow(), TargetSystemName = "Trayport" }; // Act var contract = service.CrossMap(request); // Assert Assert.IsNotNull(contract, "Contract null"); Assert.IsFalse(contract.IsValid, "Contract valid"); Assert.AreEqual(ErrorType.NotFound, contract.Error.Type, "ErrorType difers"); }
public void SuccessMatch() { // Arrange var validatorFactory = new Mock <IValidatorEngine>(); var mappingEngine = new Mock <IMappingEngine>(); var repository = new Mock <IRepository>(); var searchCache = new Mock <ISearchCache>(); var service = new LocationService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new LocationMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new LocationMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var location = new MDM.Location { Id = 1, Timestamp = new byte[] { 1, 0, 0, 0, 0, 0, 0, 0 } }; //Location.AddDetails(details); location.ProcessMapping(mapping); location.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new MdmId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map <LocationMapping, MdmId>(targetMapping)).Returns(targetIdentifier); var list = new List <LocationMapping> { mapping }; repository.Setup(x => x.Queryable <LocationMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 0 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsNotNull(candidate, "Mapping null"); Assert.AreEqual(1, candidate.Mappings.Count, "Identifier count incorrect"); Assert.AreSame(targetIdentifier, candidate.Mappings[0], "Different identifier assigned"); }
public void SuccessMatchSameVersion() { // Arrange var validatorFactory = new Mock<IValidatorEngine>(); var mappingEngine = new Mock<IMappingEngine>(); var repository = new Mock<IRepository>(); var searchCache = new Mock<ISearchCache>(); var service = new LocationService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new LocationMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new LocationMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var location = new MDM.Location { Id = 1, }; //Location.AddDetails(details); location.ProcessMapping(mapping); location.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new MdmId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map<LocationMapping, MdmId>(targetMapping)).Returns(targetIdentifier); var list = new List<LocationMapping> { mapping }; repository.Setup(x => x.Queryable<LocationMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 0 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsTrue(response.IsValid, "Contract not valid"); Assert.IsNull(candidate, "Mapping null"); }
public void SuccessMatchCurrentVersion() { // Arrange var validatorFactory = new Mock <IValidatorEngine>(); var mappingEngine = new Mock <IMappingEngine>(); var repository = new Mock <IRepository>(); var searchCache = new Mock <ISearchCache>(); var service = new PersonService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new PersonMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new PersonMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var details = new MDM.PersonDetails { FirstName = "John", LastName = "Smith", Email = "*****@*****.**" }; var person = new MDM.Person { Id = 1 }; person.AddDetails(details); person.ProcessMapping(mapping); person.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new MdmId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map <PersonMapping, MdmId>(targetMapping)).Returns(targetIdentifier); var list = new List <PersonMapping> { mapping }; repository.Setup(x => x.Queryable <PersonMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 0 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsTrue(response.IsValid, "Contract invalid"); Assert.IsNull(candidate, "Mapping not null"); }
public void SuccessMatchSameVersion() { // Arrange var validatorFactory = new Mock <IValidatorEngine>(); var mappingEngine = new Mock <IMappingEngine>(); var repository = new Mock <IRepository>(); var searchCache = new Mock <ISearchCache>(); var service = new CurveService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new CurveMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new CurveMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var curve = new MDM.Curve { Id = 1, }; //Curve.AddDetails(details); curve.ProcessMapping(mapping); curve.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new NexusId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map <CurveMapping, NexusId>(targetMapping)).Returns(targetIdentifier); var list = new List <CurveMapping> { mapping }; repository.Setup(x => x.Queryable <CurveMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 0 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsTrue(response.IsValid, "Contract not valid"); Assert.IsNull(candidate, "Mapping null"); }
public void SuccessMatch() { // Arrange var validatorFactory = new Mock<IValidatorEngine>(); var mappingEngine = new Mock<IMappingEngine>(); var repository = new Mock<IRepository>(); var searchCache = new Mock<ISearchCache>(); var service = new CurveService(validatorFactory.Object, mappingEngine.Object, repository.Object, searchCache.Object); // Domain details var system = new MDM.SourceSystem { Name = "Endur" }; var mapping = new CurveMapping { System = system, MappingValue = "A" }; var targetSystem = new MDM.SourceSystem { Name = "Trayport" }; var targetMapping = new CurveMapping { System = targetSystem, MappingValue = "B", IsDefault = true }; var curve = new MDM.Curve { Id = 1, Timestamp = new byte[] { 1, 0, 0, 0, 0, 0, 0, 0 } }; //Curve.AddDetails(details); curve.ProcessMapping(mapping); curve.ProcessMapping(targetMapping); // Contract details var targetIdentifier = new NexusId { SystemName = "Trayport", Identifier = "B" }; mappingEngine.Setup(x => x.Map<CurveMapping, NexusId>(targetMapping)).Returns(targetIdentifier); var list = new List<CurveMapping> { mapping }; repository.Setup(x => x.Queryable<CurveMapping>()).Returns(list.AsQueryable()); var request = new CrossMappingRequest { SystemName = "Endur", Identifier = "A", TargetSystemName = "trayport", ValidAt = SystemTime.UtcNow(), Version = 0 }; // Act var response = service.CrossMap(request); var candidate = response.Contract; // Assert Assert.IsNotNull(response, "Contract null"); Assert.IsNotNull(candidate, "Mapping null"); Assert.AreEqual(1, candidate.Mappings.Count, "Identifier count incorrect"); Assert.AreSame(targetIdentifier, candidate.Mappings[0], "Different identifier assigned"); }