public void TestHandleCreatedDocuments()
        {
            var documentTypeId = Guid.NewGuid();
            var key            = new DocumentKey(documentTypeId, 1);
            var keys           = new List <DocumentKey> {
                key
            };

            var message = new IndexDocumentBatchMessage();

            message.CreatedDocuments = keys.Select(x => x.ToString()).ToList();

            Action <object> tester = (objectId) =>
            {
                Assert.AreEqual(key.Value, objectId);
            };

            var service = new Mock <IDocumentService>();

            service.Setup(x => x.GetDocumentTypeId()).Returns(documentTypeId);
            service.Setup(x => x.AddOrUpdateDocument(It.IsAny <object>())).Callback(tester);
            services.Add(service.Object);

            var functions = new Functions(services);

            functions.HandleCreatedDocuments(message.CreatedDocuments);
            service.Verify(x => x.AddOrUpdateDocument(It.IsAny <object>()), Times.Once());
        }
        public void TestProcessQueueMessage_IsDebugMessage()
        {
            var documentTypeId = Guid.NewGuid();
            var key            = new DocumentKey(documentTypeId, 1);
            var keys           = new List <DocumentKey> {
                key
            };
            var keysAsStrings = keys.Select(x => x.ToString()).ToList();

            var service = new Mock <IDocumentService>();

            service.Setup(x => x.GetDocumentTypeId()).Returns(documentTypeId);
            services.Add(service.Object);

            var message = new IndexDocumentBatchMessage();

            message.IsDebugMessage    = true;
            message.DeletedDocuments  = keysAsStrings;
            message.CreatedDocuments  = keysAsStrings;
            message.ModifiedDocuments = keysAsStrings;
            var functions = new Functions(services);

            functions.ProcessQueueMessage(message, new Mock <TextWriter>().Object);
            service.Verify(x => x.DeleteDocuments(It.IsAny <List <object> >()), Times.Never());
            service.Verify(x => x.AddOrUpdateDocument(It.IsAny <List <object> >()), Times.Never());
        }
Exemple #3
0
        public void TestHasDocumentsToHandle_NoDocumentsToHandle()
        {
            var instance = new IndexDocumentBatchMessage();

            Assert.AreEqual(0, instance.CreatedDocuments.Count());
            Assert.AreEqual(0, instance.DeletedDocuments.Count());
            Assert.AreEqual(0, instance.ModifiedDocuments.Count());
            Assert.IsFalse(instance.HasDocumentsToHandle());
        }
Exemple #4
0
        /// <summary>
        /// Handles a debug message.  Debug messages are structurally the same; however, documents are not updated, deleted, or created.
        /// </summary>
        /// <param name="message">The message.</param>
        public void HandleDebugMessage(IndexDocumentBatchMessage message)
        {
            Contract.Requires(message != null, "The message must not be null.");
            Contract.Requires(message.IsDebugMessage, "The message must be a debug message.");
            Console.WriteLine("Debug message received.  This message will not be handled.");
            Console.WriteLine("The message received is as follows...");
            var messageAsJson = JsonConvert.SerializeObject(message);
            var prettyJson    = JValue.Parse(messageAsJson).ToString(Formatting.Indented);

            Console.WriteLine(prettyJson);
        }
Exemple #5
0
        public void TestConstructor()
        {
            var instance = new IndexDocumentBatchMessage();

            Assert.IsNotNull(instance.CreatedDocuments);
            Assert.IsNotNull(instance.DeletedDocuments);
            Assert.IsNotNull(instance.ModifiedDocuments);

            Assert.AreEqual(0, instance.CreatedDocuments.Count());
            Assert.AreEqual(0, instance.DeletedDocuments.Count());
            Assert.AreEqual(0, instance.ModifiedDocuments.Count());
        }
Exemple #6
0
        public void TestHasDocumentsToHandle_HasDeletedDocuments()
        {
            var instance = new IndexDocumentBatchMessage();

            Assert.AreEqual(0, instance.CreatedDocuments.Count());
            Assert.AreEqual(0, instance.DeletedDocuments.Count());
            Assert.AreEqual(0, instance.ModifiedDocuments.Count());
            Assert.IsFalse(instance.HasDocumentsToHandle());

            instance.DeletedDocuments = new List <string> {
                new DocumentKey(Guid.NewGuid(), 1).ToString()
            };
            Assert.IsTrue(instance.HasDocumentsToHandle());
        }
Exemple #7
0
        // This function will get triggered/executed when a new message is written
        // on an Azure Queue called %searchindexqueue%.

        /// <summary>
        /// Accepts the message and handles the documents that must be created, updated, or deleted for the entities whose document keys are given
        /// in the message.
        /// </summary>
        /// <param name="message">The message containing the document keys for entities whos documents must be created, updated, or deleted.</param>
        /// <param name="log"></param>
        public void ProcessQueueMessage(
            [QueueTrigger("%searchindexqueue%")] IndexDocumentBatchMessage message,
            TextWriter log)
        {
            Contract.Requires(message != null, "The message batch must not be null.");
            if (message.IsDebugMessage)
            {
                HandleDebugMessage(message);
            }
            else
            {
                HandleCreatedDocuments(message.CreatedDocuments.Distinct().ToList());
                HandleUpdatedDocuments(message.ModifiedDocuments.Distinct().ToList());
                HandleDeletedDocuments(message.DeletedDocuments.Distinct().ToList());
            }
        }
        public void TestHandleCreatedDocuments_DocumentTypeIdNotSupported()
        {
            var documentTypeId = Guid.NewGuid();
            var key            = new DocumentKey(documentTypeId, 1);
            var keys           = new List <DocumentKey> {
                key
            };

            var message = new IndexDocumentBatchMessage();

            message.CreatedDocuments = keys.Select(x => x.ToString()).ToList();

            var service = new Mock <IDocumentService>();

            service.Setup(x => x.GetDocumentTypeId()).Returns(Guid.NewGuid());

            var    functions = new Functions(services);
            Action a         = () => functions.HandleCreatedDocuments(message.CreatedDocuments);

            a.ShouldThrow <NotSupportedException>().WithMessage(String.Format("A service as not found for the document type id [{0}].", documentTypeId));
        }