コード例 #1
0
 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);
        }
コード例 #4
0
        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);
        }