private static void ImportHouseNumberSubaddressFromCrab(Address address, ImportHouseNumberSubaddressFromCrab message) { address.ImportHouseNumberFromCrab( message.HouseNumberId, message.StreetNameId, message.HouseNumber, message.GrbNotation, message.Lifetime, message.Timestamp, message.Operator, message.Modification, message.Organisation); }
public static AddressHouseNumberWasImportedFromCrab ToLegacyEvent(this ImportHouseNumberSubaddressFromCrab command) { return(new AddressHouseNumberWasImportedFromCrab( command.HouseNumberId, command.StreetNameId, command.HouseNumber, command.GrbNotation, command.Lifetime, command.Timestamp, command.Operator, command.Modification, command.Organisation)); }
public void ThenHouseNumberChanged( Fixture fixture, AddressId addressId, ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab) { importHouseNumberSubaddressFromCrab = importHouseNumberSubaddressFromCrab .WithHouseNumber(new Fixture().Create <HouseNumber>()); Assert(RegisteredAddressScenario(fixture) .When(importHouseNumberSubaddressFromCrab) .Then(addressId, new AddressHouseNumberWasChanged(addressId, importHouseNumberSubaddressFromCrab.HouseNumber), importHouseNumberSubaddressFromCrab.ToLegacyEvent())); }
public static ImportHouseNumberSubaddressFromCrab WithCrabModification(this ImportHouseNumberSubaddressFromCrab command, CrabModification modification) { return(new ImportHouseNumberSubaddressFromCrab( command.HouseNumberId, command.SubaddressId, command.StreetNameId, command.HouseNumber, command.GrbNotation, command.Lifetime, command.Timestamp, command.Operator, modification, command.Organisation)); }
public void ThenAddressWasCorrectedToRetiredIfLifetimeIsFiniteAndCorrection( Fixture fixture, AddressId addressId, ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab) { importHouseNumberSubaddressFromCrab = importHouseNumberSubaddressFromCrab .WithLifetime(new Fixture().Customize(new NodaTimeCustomization()).Customize(new WithFiniteLifetime()).Create <CrabLifetime>()) .WithCrabModification(CrabModification.Correction); Assert(RegisteredAddressScenario(fixture) .When(importHouseNumberSubaddressFromCrab) .Then(addressId, new AddressWasCorrectedToRetired(addressId), importHouseNumberSubaddressFromCrab.ToLegacyEvent())); }
public void RemoveViaHouseNumberThenAddressRemovedException( AddressId addressId, AddressWasRegistered addressWasRegistered, AddressWasRemoved addressWasRemoved, ImportHouseNumberSubaddressFromCrab importHouseNumberFromCrab, ImportSubaddressFromCrab importSubaddressFromCrab) { importHouseNumberFromCrab = importHouseNumberFromCrab.WithCrabModification(CrabModification.Delete); Assert(new Scenario() .Given(addressId, addressWasRegistered, importSubaddressFromCrab.ToLegacyEvent(), addressWasRemoved) .When(importHouseNumberFromCrab) .Then(addressId, importHouseNumberFromCrab.ToLegacyEvent())); }
protected List <dynamic> CreateCommandsInOrder( ImportMode importMode, int id, DateTime from, DateTime until) { var importSubaddressCommands = new List <ImportSubaddressFromCrab>(); List <ImportSubaddressFromCrab> importSubaddressHistCommands; List <ImportSubaddressStatusFromCrab> importSubaddressStatusCommands; List <ImportSubaddressStatusFromCrab> importSubaddressStatusHistCommands; List <ImportSubaddressPositionFromCrab> importSubaddressPositionCommands; List <ImportSubaddressPositionFromCrab> importSubaddressPositionHistCommands; var importHouseNumberSubaddressCommands = new List <ImportHouseNumberSubaddressFromCrab>(); List <ImportHouseNumberSubaddressFromCrab> importHouseNumberSubaddressCommandsHist; var importSubaddressMailCantonCommands = new List <ImportSubaddressMailCantonFromCrab>(); List <ImportSubaddressMailCantonFromCrab> importSubaddressMailCantonCommandsHist; using (var context = _crabEntitiesFactory()) { var importSubaddressFromCrab = AdresSubadresQueries.GetTblSubadresBySubadresId(id, context); if (importSubaddressFromCrab != null) { importSubaddressCommands = new List <ImportSubaddressFromCrab> { CrabSubaddressMapper.Map(importSubaddressFromCrab) } } ; importSubaddressHistCommands = CrabSubaddressMapper.Map(AdresSubadresQueries.GetTblSubadresHistBySubadresId(id, context)).ToList(); importSubaddressStatusCommands = CrabSubaddressStatusMapper.Map(AdresSubadresQueries.GetTblSubadresstatussesBySubadresId(id, context)).ToList(); importSubaddressStatusHistCommands = CrabSubaddressStatusMapper.Map(AdresSubadresQueries.GetTblSubadresstatussesHistBySubadresId(id, context)).ToList(); importSubaddressPositionCommands = CrabSubaddressPositionMapper.Map(AdresSubadresQueries.GetTblAdrespositiesBySubadresId(id, context)).ToList(); importSubaddressPositionHistCommands = CrabSubaddressPositionMapper.Map(AdresSubadresQueries.GetTblAdrespositiesHistBySubadresId(id, context)).ToList(); var allHouseNumbers = importSubaddressHistCommands.Select(x => (int)x.HouseNumberId).ToList(); if (importSubaddressFromCrab != null) { allHouseNumbers.Add((int)importSubaddressCommands.First().HouseNumberId); } allHouseNumbers = allHouseNumbers.Distinct().ToList(); foreach (var houseNumber in allHouseNumbers) { var tblHuisNummerByHuisnummerId = AdresHuisnummerQueries.GetTblHuisNummerByHuisnummerId(houseNumber, context); if (tblHuisNummerByHuisnummerId != null) { var importHouseNumberSubadresFromCrab = CrabSubaddressHouseNumberMapper.Map(tblHuisNummerByHuisnummerId, id); if (importHouseNumberSubadresFromCrab != null) { importHouseNumberSubaddressCommands.Add(importHouseNumberSubadresFromCrab); } } importSubaddressMailCantonCommands.AddRange( CrabSubaddressMailCantonMapper.GetCommandsFor(AdresHuisnummerQueries.GetTblHuisnummerPostkantonsByHuisnummerId(houseNumber, context), id)); } importHouseNumberSubaddressCommandsHist = CrabSubaddressHouseNumberMapper.Map(AdresHuisnummerQueries.GetTblHuisNummerHistByHuisnummerIds(allHouseNumbers, context), id).ToList(); importSubaddressMailCantonCommandsHist = CrabSubaddressMailCantonMapper.GetCommandsFor(AdresHuisnummerQueries.GetTblHuisnummerPostKantonHistsByHuisnummerIds(allHouseNumbers, context), id).ToList(); } var allSubaddressCommands = importSubaddressHistCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 2, 0, $"Subadres {x.SubaddressId}")) .Concat(importSubaddressCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 2, 1, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressStatusHistCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 3, 0, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressStatusCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 3, 1, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressPositionHistCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 3, 2, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressPositionCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 3, 3, $"Subadres {x.SubaddressId}"))) .Concat(importHouseNumberSubaddressCommandsHist.Select(x => Tuple.Create <dynamic, int, int, string>(x, 0, 0, $"Subadres {x.SubaddressId}"))) .Concat(importHouseNumberSubaddressCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 0, 1, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressMailCantonCommandsHist.Select(x => Tuple.Create <dynamic, int, int, string>(x, 1, 0, $"Subadres {x.SubaddressId}"))) .Concat(importSubaddressMailCantonCommands.Select(x => Tuple.Create <dynamic, int, int, string>(x, 1, 1, $"Subadres {x.SubaddressId}"))) .ToList(); var addressCommands = allSubaddressCommands .Where(x => x.Item1.Timestamp > from.ToCrabInstant() && x.Item1.Timestamp <= until.ToCrabInstant()); if (importMode == ImportMode.Update) //if an update changes the subaddress' house number, make sure the commands for that house number are also sent { var houseNumbersForUpdate = importSubaddressCommands .Concat(importSubaddressHistCommands) .Where(x => x.Timestamp > from.ToCrabInstant() && x.Timestamp <= until.ToCrabInstant()) .Select(x => x.HouseNumberId).ToList(); if (houseNumbersForUpdate.Any()) { var houseNumbersBeforeUpdate = importSubaddressCommands .Concat(importSubaddressHistCommands) .Where(x => x.Timestamp <= from.ToCrabInstant()) .Select(x => x.HouseNumberId).ToList(); var newHouseNumbers = houseNumbersForUpdate.Except(houseNumbersBeforeUpdate); foreach (var newHouseNumber in newHouseNumbers) { addressCommands = addressCommands.Concat(allSubaddressCommands.Except(addressCommands).Where(x => //(x.Item1 is ImportSubaddressFromCrab importSubaddressFromCrab && importSubaddressFromCrab.HouseNumberId == newHouseNumber) || (x.Item1 is ImportSubaddressMailCantonFromCrab importSubaddressMailCantonFromCrab && importSubaddressMailCantonFromCrab.HouseNumberId == newHouseNumber) || (x.Item1 is ImportHouseNumberSubaddressFromCrab importHouseNumberSubaddressFromCrab && importHouseNumberSubaddressFromCrab.HouseNumberId == newHouseNumber))); } } } addressCommands = addressCommands.OrderBy(x => x.Item1.Timestamp) .ThenBy(x => x.Item2) .ThenBy(x => x.Item3); var commands = new List <dynamic>(); ImportHouseNumberSubaddressFromCrab initialImportHouseNumberSubaddressFromCrab = null; if (importMode == ImportMode.Init) { initialImportHouseNumberSubaddressFromCrab = importHouseNumberSubaddressCommands .Concat(importHouseNumberSubaddressCommandsHist) .OrderBy(x => (Instant)x.Timestamp) .First(x => x.HouseNumberId == addressCommands.First <ImportSubaddressFromCrab>().HouseNumberId); commands.Add(initialImportHouseNumberSubaddressFromCrab); } foreach (var adresCommand in addressCommands) { if (importMode == ImportMode.Update || !adresCommand.Item1.Equals(initialImportHouseNumberSubaddressFromCrab)) { commands.Add(adresCommand.Item1); } } return(commands); }