private void Project(IEventEnvelope eventEnvelope) { switch (eventEnvelope.Data) { case (WalkOfInterestRegistered @event): _interestById.TryAdd(@event.Interest.Id, @event.Interest); _interestIndex.Add(@event.Interest); break; case (NodeOfInterestRegistered @event): _interestById[@event.Interest.Id] = @event.Interest; _interestIndex.Add(@event.Interest); break; case (WalkOfInterestRouteNetworkElementsModified @event): if (_interestById.TryGetValue(@event.InterestId, out var existingInterestToModify)) { var updatedInterest = existingInterestToModify with { RouteNetworkElementRefs = @event.RouteNetworkElementIds }; _interestById.TryUpdate(@event.InterestId, updatedInterest, existingInterestToModify); _interestIndex.Update(updatedInterest, existingInterestToModify); } break; case (InterestUnregistered @event): if (_interestById.TryGetValue(@event.InterestId, out var existingInterestToUnregister)) { _interestById.TryRemove(@event.InterestId, out _); _interestIndex.Remove(existingInterestToUnregister); } break; } }
public void TestRemoveWalkOfInterestFromIndex() { // Setup InMemInterestRelationIndex index = new InMemInterestRelationIndex(); var routeElement1 = Guid.NewGuid(); var routeElement2 = Guid.NewGuid(); var routeElement3 = Guid.NewGuid(); var routeElement4 = Guid.NewGuid(); // Create walk of interest spanning route element 1,2,3 var walkOfInterest1 = new RouteNetworkInterest(Guid.NewGuid(), RouteNetworkInterestKindEnum.WalkOfInterest, new RouteNetworkElementIdList() { routeElement1, routeElement2, routeElement3 }); index.Add(walkOfInterest1); // Create walk of interest spanning route element 2,3,4 var walkOfInterest2 = new RouteNetworkInterest(Guid.NewGuid(), RouteNetworkInterestKindEnum.WalkOfInterest, new RouteNetworkElementIdList() { routeElement2, routeElement3, routeElement4 }); index.Add(walkOfInterest2); // Remove the first interest index.Remove(walkOfInterest1); var routeElement1InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement1); var routeElement2InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement2); var routeElement3InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement3); var routeElement4InterestRelations = index.GetRouteNetworkElementInterestRelations(routeElement4); // Assert // Route element 1 has no relation to the interest Assert.Empty(routeElement1InterestRelations); // Route element 2 has a start relation to the interest Assert.Single(routeElement2InterestRelations); Assert.Equal(walkOfInterest2.Id, routeElement2InterestRelations[0].Item1); Assert.Equal(RouteNetworkInterestRelationKindEnum.Start, routeElement2InterestRelations[0].Item2); // Route element 3 has a passthroug relation to the interest Assert.Single(routeElement3InterestRelations); Assert.Equal(walkOfInterest2.Id, routeElement3InterestRelations[0].Item1); Assert.Equal(RouteNetworkInterestRelationKindEnum.PassThrough, routeElement3InterestRelations[0].Item2); // Route element 4 has an end relation to the interest Assert.Single(routeElement4InterestRelations); Assert.Equal(walkOfInterest2.Id, routeElement4InterestRelations[0].Item1); Assert.Equal(RouteNetworkInterestRelationKindEnum.End, routeElement4InterestRelations[0].Item2); }