Procházet zdrojové kódy

Add PsQueueMock (mock fo PsQueue). Fix PsQueueItem.SetStatus

Dalibor Votruba před 1 rokem
rodič
revize
65bb0d08c8

+ 57 - 0
qdr.fnd.core.pqueue.test/Mocks/PsQueueMock.cs

@@ -0,0 +1,57 @@
+using qdr.fnd.core.pqueue.Configuration;
+using qdr.fnd.core.pqueue.Enums;
+using qdr.fnd.core.pqueue.Process;
+using qdr.fnd.core.pqueue.Storages;
+using Quadarax.Foundation.Core.Data;
+using Quadarax.Foundation.Core.Logging;
+using Quadarax.Foundation.Core.Thread;
+
+namespace qdr.fnd.core.pqueue.test.Mocks
+{
+    internal class PsQueueMock : PsQueue
+    {
+        #region *** Constructors ***
+        public PsQueueMock(string queueName, PsQueueConfiguration configuration, IPsQueueStorage storageProvider, ILogger logger) : base(queueName, configuration, storageProvider, logger)
+        {
+        }
+        #endregion
+
+        #region *** Test proxies ***
+        public Task TestDoIteration(IWorkerContext? context)
+        {
+            return DoIteration(context);
+        }
+
+        public void TestValidateItemId(string itemId)
+        {
+            ValidateItemId(itemId);
+        }
+        public void TestValidateEmitter(string emitter)
+        {
+            ValidateEmitter(emitter);
+        }
+        public void TestValidateItem(IPsQueueItemDescriptor item)
+        {
+            ValidateItem(item);
+        }
+        public void TestSetItemStatusInternal(IPsQueueItem item, PsStatusEnum? newStatus, bool isTransient, string message)
+        {
+            SetItemStatusInternal(item, newStatus, isTransient, message);
+        }
+        public IPsProcessProvider TestResolveProvider(string providerClass, IEnumerable<ITypedArgument> arguments)
+        {
+            return ResolveProvider(providerClass, arguments);
+        }
+        public void TestEnsureItemStateExpired(IPsQueueItem item)
+        {
+            TestEnsureItemStateExpired(item);
+        }
+        public IPsQueueItem TestGetItemInternal(string itemId)
+        {
+            return GetItemInternal(itemId);
+        }
+
+        #endregion
+
+    }
+}

+ 23 - 0
qdr.fnd.core.pqueue.test/PsQueueItemTest.cs

@@ -11,6 +11,8 @@ namespace qdr.fnd.core.pqueue.test
         private string _providerClass = "providerClass";
         private DateTime _created = DateTime.Now;
         private PsStatusEnum _status = PsStatusEnum.New;
+        private bool _statusTrancient = false;
+        private string _statusMessage = "message";
 
         [SetUp]
         public void Setup()
@@ -40,5 +42,26 @@ namespace qdr.fnd.core.pqueue.test
             Assert.That(item.IsStatusTransient, Is.False);
             Assert.That(item.Status, Is.EqualTo(_status));
         }
+
+        [Test(TestOf=typeof(PsQueueItem))]
+        public void SetStatusOk()
+        {
+            var item = new PsQueueItem(_id, _owner,_ownerRef,_providerClass,_created);
+            Assert.That(item.Status, Is.EqualTo(_status));
+            Assert.That(item.StatusJournal.Count, Is.EqualTo(0));
+
+            item.SetStatus(PsStatusEnum.Pending, true, "message");
+            Assert.That(item.Status, Is.EqualTo(PsStatusEnum.Pending));
+            Assert.That(item.StatusJournal.Count, Is.EqualTo(1));
+            Assert.That(item.StatusJournal.First().PreviousStatus, Is.EqualTo(_status));
+            Assert.That(item.StatusJournal.First().PreviousIsStatusTransient, Is.EqualTo(_statusTrancient));
+        }
+
+        [Test(TestOf=typeof(PsQueueItem))]
+        public void SetStatusFail()
+        {
+            var item = new PsQueueItem(_id, _owner,_ownerRef,_providerClass,_created);
+            Assert.Throws<ArgumentNullException>(() => item.SetStatus(null,true,string.Empty));
+        }
     }
 }

+ 7 - 7
qdr.fnd.core.pqueue/PsQueue.cs

@@ -308,17 +308,17 @@ namespace qdr.fnd.core.pqueue
 
         #endregion
 
-        private void ValidateItemId(string itemId)
+        protected void ValidateItemId(string itemId)
         {
             if (string.IsNullOrEmpty(itemId))
                 throw new ArgumentNullException(nameof(itemId));
         }
-        private void ValidateEmitter(string emitter)
+        protected void ValidateEmitter(string emitter)
         {
             if (string.IsNullOrEmpty(emitter))
                 throw new ArgumentNullException(nameof(emitter));
         }
-        private void ValidateItem(IPsQueueItemDescriptor item)
+        protected void ValidateItem(IPsQueueItemDescriptor item)
         {
             if (item is null)
                 throw new ArgumentNullException(nameof(item));
@@ -337,7 +337,7 @@ namespace qdr.fnd.core.pqueue
                 
         }
 
-        private void SetItemStatusInternal(IPsQueueItem item, PsStatusEnum? newStatus, bool isTransient, string message)
+        protected void SetItemStatusInternal(IPsQueueItem item, PsStatusEnum? newStatus, bool isTransient, string message)
         {
             var oldStatus = item.Status;
             var oldIsTransient = item.IsStatusTransient;
@@ -358,7 +358,7 @@ namespace qdr.fnd.core.pqueue
             Log(LogSeverityEnum.Debug, $"{Name} - Item [{item.Id}] changed status '{oldStatus}[{oldIsTransient}]' to '{(newStatus ?? oldStatus)}[{isTransient}]'.");
         }
 
-        private IPsProcessProvider ResolveProvider(string providerClass, IEnumerable<ITypedArgument> arguments)
+        protected IPsProcessProvider ResolveProvider(string providerClass, IEnumerable<ITypedArgument> arguments)
         {
             if (string.IsNullOrEmpty(providerClass))
                 throw new PSQueueValidationException(PSQueueValidationException.ErrorCodes.ProcessProviderRequired);
@@ -374,7 +374,7 @@ namespace qdr.fnd.core.pqueue
             return provider;
         }
 
-        private void EnsureItemStateExpired(IPsQueueItem item)
+        protected void EnsureItemStateExpired(IPsQueueItem item)
         {
             if (item==null) 
                 throw new ArgumentNullException(nameof(item));
@@ -401,7 +401,7 @@ namespace qdr.fnd.core.pqueue
                 item = GetItemInternal(item.Id);
             }
         }
-        private IPsQueueItem GetItemInternal(string itemId)
+        protected IPsQueueItem GetItemInternal(string itemId)
         {
             ValidateItemId(itemId);
 

+ 5 - 2
qdr.fnd.core.pqueue/PsQueueItem.cs

@@ -83,11 +83,14 @@ namespace qdr.fnd.core.pqueue
         #region *** Public operations ***
         public void SetStatus(PsStatusEnum? status, bool isTransient, string message)
         {
-            Status = status ?? Status;
-            IsStatusTransient = isTransient;
+            if (string.IsNullOrEmpty(message))
+                throw new ArgumentNullException(nameof(message));
+            
             ((List<PsStatusHistory>)StatusJournal).Add(
                 new PsStatusHistory(Status, IsStatusTransient, message)
             );
+            Status = status ?? Status;
+            IsStatusTransient = isTransient;
         }
         #endregion