public TriggerSession(ITriggerService triggerService, TriggerOptions options, ITriggerDiscoveryService triggerDiscoveryService, TriggerContextTracker tracker, ILogger <TriggerSession> logger) { _triggerService = triggerService ?? throw new ArgumentNullException(nameof(triggerService)); _options = options ?? throw new ArgumentNullException(nameof(options)); _triggerDiscoveryService = triggerDiscoveryService ?? throw new ArgumentNullException(nameof(triggerDiscoveryService)); _tracker = tracker ?? throw new ArgumentNullException(nameof(tracker)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
public void DiscoveredChanges_NoCallToDiscoverChanges_ReturnsNull() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); var discoveredChanges = subject.DiscoveredChanges; Assert.Null(discoveredChanges); }
public void DiscoverChanges_DeletedEntity_CreatesDescriptor() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); dbContext.Entry(new TestModel { }).State = EntityState.Deleted; var triggerContextDescriptor = subject.DiscoverChanges().FirstOrDefault(); Assert.Equal(ChangeType.Deleted, triggerContextDescriptor.ChangeType); }
public void DiscoverChanges_MultipleCalls_ReturnsDeltaOfChanges() { using var dbContext = new TestDbContext(); var subject = new CascadingTriggerContextDiscoveryStrategy("test", false); var triggerContextTracker = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); triggerContextTracker.DiscoverChanges().Count(); var initialContextDescriptors = subject.Discover(new(false, 100), triggerContextTracker, new NullLogger <object>()).ToList(); dbContext.Add(new TestModel { }); var contextDescriptors = subject.Discover(new(false, 100), triggerContextTracker, new NullLogger <object>()).ToList(); Assert.NotEqual(initialContextDescriptors, contextDescriptors); }
public void DiscoveredChanges_MultipleCallsToDiscoverChanges_ReturnsAllChanges() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); dbContext.Add(new TestModel { }); subject.DiscoverChanges().Count(); dbContext.Add(new TestModel { }); subject.DiscoverChanges().Count(); var discoveredChanges = subject.DiscoveredChanges; Assert.Equal(2, discoveredChanges.Count()); }
public void DiscoverChanges_MultipleCalls_ReturnsSameResult() { using var dbContext = new TestDbContext(); var subject = new NonRecursiveTriggerContextDiscoveryStrategy("test"); var triggerContextTracker = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeRecursionStrategy()); triggerContextTracker.DiscoverChanges().Count(); var initialContextDescriptors = subject.Discover(new TriggerOptions { }, triggerContextTracker, new NullLogger <object>()).ToList(); dbContext.Add(new TestModel { }); var contextDescriptors = subject.Discover(new TriggerOptions { }, triggerContextTracker, new NullLogger <object>()).ToList(); Assert.Equal(initialContextDescriptors, contextDescriptors); }
public void CaptureDiscoveredChangesAfterAdd_DetachedEntry_RemovesDiscoveredChange() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); var testModel = new TestModel(); dbContext.Entry(testModel).State = EntityState.Added; var disoveredChanges = subject.DiscoverChanges(); Assert.Single(disoveredChanges); Assert.Single(subject.DiscoveredChanges); dbContext.Entry(testModel).State = EntityState.Detached; subject.CaptureChanges(); Assert.Empty(subject.DiscoveredChanges); }
public void UncaptureDiscoveredChanges_OneEntry_RestoresDiscoveredChange() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeRecursionStrategy()); var testModel = new TestModel(); dbContext.Entry(testModel).State = EntityState.Added; var disoveredChanges = subject.DiscoverChanges(); dbContext.Entry(testModel).State = EntityState.Unchanged; subject.CaptureChanges(); Assert.Empty(subject.DiscoveredChanges); subject.UncaptureChanges(); Assert.Single(subject.DiscoveredChanges); }
public void CaptureDiscoveredChanges_DeletedEntry_UpdatesDiscoveredChange() { using var dbContext = new TestDbContext(); var subject = new TriggerContextTracker(dbContext.ChangeTracker, new EntityAndTypeCascadeStrategy()); var testModel = new TestModel(); dbContext.Entry(testModel).State = EntityState.Added; var disoveredChanges = subject.DiscoverChanges(); Assert.Single(disoveredChanges); Assert.Single(subject.DiscoveredChanges); dbContext.Entry(testModel).State = EntityState.Deleted; disoveredChanges = subject.DiscoverChanges(); Assert.Equal(2, subject.DiscoveredChanges.Count()); subject.CaptureChanges(); Assert.Single(subject.DiscoveredChanges); }