private void btnGenerate_Click(object sender, EventArgs e) { if (!string.IsNullOrEmpty(txtCount.Text) && !string.IsNullOrEmpty(txtProductId.Text) && !string.IsNullOrEmpty(txtDatabaseId.Text) && !string.IsNullOrEmpty(txtDSN.Text)) { int productId = 0; var productIds = txtProductId.Text.Split(_semicolon); var productIdCollection = new List <int>(); if (productIds.Length > 1) { for (int i = 0; i < productIds.Length; i++) { productIdCollection.Add(int.Parse(productIds[i])); } } else { productId = int.Parse(txtProductId.Text); } int count = int.Parse(txtCount.Text); Constants.EntityType entityType = (Constants.EntityType)Enum.Parse(typeof(Constants.EntityType), cbProductType.SelectedItem.ToString()); Constants.MessageActionType messageType = (Constants.MessageActionType)Enum.Parse(typeof(Constants.MessageActionType), cbMessageType.SelectedItem.ToString()); int databaseId = int.Parse(txtDatabaseId.Text); string dsn = txtDSN.Text; MsmqManager manager = new MsmqManager(_config.NormalQueueName, _config.PoisonQueueName); var msg = new UpdateMessage() { Action = (int)messageType, DSN = dsn, DatabaseID = databaseId, EntityTypeId = (int)entityType, ExternalId = databaseId.ToString(), GroupID = 1, ProductID = productId }; if (productIdCollection.Any()) { var json = JsonConvert.SerializeObject(productIdCollection); msg.ExtendedProperties = json; msg.ProductID = default(int); } for (int i = 0; i < count; i++) { manager.mqSend(msg, MessagePriority.High); } } }
protected HashSet <CalculateUpdateMessage> GetMessages(Constants.EntityType entityType, Constants.MessageActionType messageActionType, int count) { HashSet <CalculateUpdateMessage> messages = new HashSet <CalculateUpdateMessage>(); for (int i = 0; i < count; i++) { var calculateMessage = new CalculateUpdateMessage(i, string.Empty, (int)messageActionType, 0, (int)entityType, i, 0, OrchestrationQueueStatus.New); calculateMessage.ExternalId = "ExternalId"; messages.Add(calculateMessage); } return(messages); }
public async Task <bool> HasWriteAccessToEntity(string userId, Constants.EntityType type, Guid id) { ParameterDictionary parameters = new ParameterDictionary(new string[] { "userId", userId, "entityType", ((int)type).ToString(), "entityId", id.ToString() }); var result = (await ExecuteStoredProc("[dbo].[spUserHasWriteAccessToEntity]", parameters) .ConfigureAwait(continueOnCapturedContext: false)).FirstOrDefault(); return(result); }
public bool IsOrchestrationEnabled(Constants.EntityType type) { bool result = false; IDataParameter[] parameters = { GetParameter("@entity_type_id", type) }; using (IDbConnection conn = GetConnection()) { conn.Open(); using (var dr = GetReader(conn, "sc_get_orchestration_lookup", parameters, CommandType.StoredProcedure)) { while (dr.Read()) { result = DataReaderExtensions.IsDBNull(dr, "is_publish") ? false : DataReaderExtensions.GetValue <bool>(dr, "is_publish"); } } } return(result); }
public async Task <bool> HasWriteAccessToEntity(string userId, Constants.EntityType type, Guid id) { return(await _userAccessRepository.HasWriteAccessToEntity(userId, type, id) .ConfigureAwait(continueOnCapturedContext: false)); }
public void TestProcessingEventUpdateSuccess(Constants.MessageActionType messageActionType, Constants.EntityType entityType) { HashSet <CalculateUpdateMessage> sendCommandMessages = new HashSet <CalculateUpdateMessage>(); HashSet <CalculateUpdateMessage> sendDeleteMessages = new HashSet <CalculateUpdateMessage>(); HashSet <CalculateUpdateMessage> sendMessages = new HashSet <CalculateUpdateMessage>(); HashSet <OrchestrationLookup> orchestrationLookups = new HashSet <OrchestrationLookup>(); orchestrationLookups.Add(new OrchestrationLookup((int)entityType, true)); var moqLister = new Mock <Listener>(new object[] { new Mock <IAppConfiguration>().Object, new Mock <IDatabaseManager>().Object, new Mock <IStarChefMessageSender>().Object }); var ud = new UserDatabase(0, string.Empty, string.Empty); ud.OrchestrationLookups = orchestrationLookups; var messagesToProcess = GetMessages(entityType, messageActionType, 2); moqLister.Setup(l => l.GetDatabaseMessages(It.IsAny <UserDatabase>())).Returns(messagesToProcess); moqLister.Setup(l => l.SendCommand(It.IsAny <CalculateUpdateMessage>(), It.IsAny <UserDatabase>())).Callback <CalculateUpdateMessage, UserDatabase>((message, database) => { sendCommandMessages.Add(message); }); moqLister.Setup(l => l.SendDeleteCommand(It.IsAny <CalculateUpdateMessage>(), It.IsAny <UserDatabase>())).Callback <CalculateUpdateMessage, UserDatabase>((message, database) => { sendDeleteMessages.Add(message); }); moqLister.Setup(l => l .Send(It.IsAny <EnumHelper.EntityTypeWrapper>(), It.IsAny <string>(), It.IsAny <CalculateUpdateMessage>(), It.IsAny <int>())) .Callback <EnumHelper.EntityTypeWrapper?, string, CalculateUpdateMessage, int>((wrapper, connectionString, message, databaseId) => { sendMessages.Add(message); }); var obj = moqLister.Object; obj.CanProcess = true; //act Mock <StarChef.Common.Engine.IPriceEngine> priceEngine = new Mock <StarChef.Common.Engine.IPriceEngine>(); priceEngine.Setup <Task <bool> >(x => x.IsEngineEnabled()).Returns(Task.FromResult(true)); priceEngine.Setup <Task <IEnumerable <Common.Model.DbPrice> > >(x => x.GlobalRecalculation(It.IsAny <bool>(), It.IsAny <DateTime?>())).Returns(Task.FromResult((new List <Common.Model.DbPrice>().AsEnumerable()))); obj.Process(priceEngine.Object, ud, messagesToProcess.Count); //assert results if (messageActionType == Constants.MessageActionType.StarChefEventsUpdated || messageActionType == Constants.MessageActionType.UserCreated || messageActionType == Constants.MessageActionType.UserActivated || messageActionType == Constants.MessageActionType.SalesForceUserCreated) { Assert.Equal(sendMessages.Count, messagesToProcess.Count); Assert.Empty(sendCommandMessages); Assert.Empty(sendDeleteMessages); } else if (messageActionType == Constants.MessageActionType.UserDeActivated) { Assert.Equal(sendCommandMessages.Count, messagesToProcess.Count); Assert.Empty(sendMessages); Assert.Empty(sendDeleteMessages); } else if (messageActionType == Constants.MessageActionType.EntityDeleted) { Assert.Equal(sendDeleteMessages.Count, messagesToProcess.Count); Assert.Empty(sendCommandMessages); Assert.Empty(sendMessages); } }
public void TestProcessingEventEnqueuesNotProcessedMessages(Constants.MessageActionType messageActionType, Constants.EntityType entityType) { HashSet <OrchestrationLookup> orchestrationLookups = new HashSet <OrchestrationLookup>(); orchestrationLookups.Add(new OrchestrationLookup((int)entityType, false)); var moqLister = new Mock <Listener>(new object[] { new Mock <IAppConfiguration>().Object, new Mock <IDatabaseManager>().Object, new Mock <IStarChefMessageSender>().Object }); var ud = new UserDatabase(0, string.Empty, string.Empty); ud.OrchestrationLookups = orchestrationLookups; var messagesToProcess = GetMessages(entityType, messageActionType, 2); moqLister.Setup(l => l.GetDatabaseMessages(It.IsAny <UserDatabase>())).Returns(messagesToProcess); var enqueueCount = 0; moqLister.Setup(l => l.Enqueue(It.IsAny <string>(), It.IsAny <int>(), It.IsAny <int>(), It.IsAny <OrchestrationQueueStatus>(), It.IsAny <int>(), It.IsAny <DateTime>(), It.IsAny <int>(), It.IsAny <string>(), It.IsAny <int>())) .Callback <string, int, int, OrchestrationQueueStatus, int, DateTime, int, string, int>((conn, entityId, entityTypeId, status, retryCount, dateCreated, databaseId, externalId, messageActionTypeId) => { enqueueCount++; }); var obj = moqLister.Object; obj.CanProcess = true; Mock <StarChef.Common.Engine.IPriceEngine> priceEngine = new Mock <StarChef.Common.Engine.IPriceEngine>(); priceEngine.Setup(x => x.IsEngineEnabled()).Returns(Task.FromResult(false)); priceEngine.Setup(x => x.GlobalRecalculation(It.IsAny <bool>(), It.IsAny <DateTime?>())).Returns(Task.FromResult((new List <Common.Model.DbPrice>().AsEnumerable()))); // Act obj.Process(priceEngine.Object, ud, messagesToProcess.Count); // Assert moqLister.Verify(x => x.Enqueue( It.Is <string>(c => c == ud.ConnectionString), It.Is <int>(c => c == messagesToProcess.First().ProductID), It.Is <int>(c => c == messagesToProcess.First().EntityTypeId), It.Is <OrchestrationQueueStatus>(c => c == OrchestrationQueueStatus.Blocked), It.Is <int>(c => c == messagesToProcess.First().RetryCount), It.Is <DateTime>(c => c == messagesToProcess.First().ArrivedTime), It.Is <int>(c => c == ud.DatabaseId), It.Is <string>(c => c == messagesToProcess.First().ExternalId), It.Is <int>(c => c == messagesToProcess.First().Action))); Assert.Equal(messagesToProcess.Count, enqueueCount); }