public PostgreSQLEventEntitySaver(
            BatchOperator <EventEntity> .Factory batchOperatorFactory,
            IMasterOrSelfIdentity identity,
            IDbFactory dbFactory,
            IPostgreSQLEventStoreOptions options,
            IBatchOperatorContainer batchOperatorContainer)
        {
            var(connectionName, schemaName, eventTableName) =
                options.RelationalEventStoreLocator.GetNames(identity.Identity);
            _connectionName = connectionName;
            _schemaName     = schemaName;
            _eventTableName = eventTableName;
            var operatorKey = new BatchOperatorKey()
                              .With(nameof(PostgreSQLEventEntitySaver))
                              .With(_connectionName)
                              .With(_schemaName)
                              .With(_eventTableName);

            _batchOperator = (IBatchOperator <EventEntity>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <EventEntity>(options)
            {
                DoManyFunc = (entities, cacheData) => SaveManyCoreMany(dbFactory, entities)
            }));
        }
예제 #2
0
        public void SaveOperator(BatchOperator batchOperator)
        {
            ITransaction adder = new AddBatchOperatorTransaction(new Entity <BatchOperator>(batchOperator), sqliteStore);

            adder.Execute();
            UpdateOperatorRepository();
        }
        public SQLiteStateEntitySaver(
            BatchOperator <StateEntity> .Factory batchOperatorFactory,
            IClaptrapIdentity identity,
            ISQLiteDbFactory sqLiteDbFactory,
            ISQLiteStateStoreOptions options,
            ISqlTemplateCache sqlTemplateCache,
            IBatchOperatorContainer batchOperatorContainer)
        {
            _sqlTemplateCache = sqlTemplateCache;
            var locator        = options.RelationalStateStoreLocator;
            var stateTableName = locator.GetStateTableName(identity);

            _stateTableName = stateTableName;
            _connectionName = locator.GetConnectionName(identity);

            var operatorKey = new BatchOperatorKey()
                              .With(nameof(SQLiteStateEntitySaver))
                              .With(_connectionName)
                              .With(stateTableName);

            _batchOperator = (IBatchOperator <StateEntity>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <StateEntity>(options)
            {
                DoManyFunc = (entities, cacheData) =>
                             SaveManyCoreMany(sqLiteDbFactory, entities, (string[])cacheData ![UpsertSqlKey]),
예제 #4
0
        public MqSender(
            string exchange,
            IReadOnlyDictionary <string, string> topics,
            IConnection connection,
            IEventStringSerializer eventStringSerializer,
            IMessageSerializer messageSerializer,
            BatchOperator <IEvent> .Factory batchOperatorFactory,
            IBatchOperatorContainer batchOperatorContainer,
            ILogger <MqSender> logger,
            IOptions <ClaptrapServerOptions> options)
        {
            _exchange              = exchange;
            _topics                = topics;
            _connection            = connection;
            _eventStringSerializer = eventStringSerializer;
            _messageSerializer     = messageSerializer;
            _logger                = logger;
            _options               = options;
            var operatorKey = new BatchOperatorKey()
                              .With(nameof(MqSender))
                              .With(exchange);

            _batchOperator = (IBatchOperator <IEvent>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <IEvent>
            {
                BufferTime  = TimeSpan.FromMilliseconds(10),
                BufferCount = 100,
                DoManyFunc  = (events, cacheData) => SendMany(events)
            }));
        }
예제 #5
0
        public MySqlStateEntitySaver(
            BatchOperator <StateEntity> .Factory batchOperatorFactory,
            IClaptrapIdentity identity,
            IDbFactory dbFactory,
            IRelationalStateStoreLocatorOptions options,
            ISqlTemplateCache sqlTemplateCache,
            IBatchOperatorContainer batchOperatorContainer)
        {
            var locator = options.RelationalStateStoreLocator;

            _connectionName   = locator.GetConnectionName(identity);
            _schemaName       = locator.GetSchemaName(identity);
            _tableName        = locator.GetStateTableName(identity);
            _sqlTemplateCache = sqlTemplateCache;

            var operatorKey = new BatchOperatorKey()
                              .With(nameof(MySqlStateEntitySaver))
                              .With(_connectionName)
                              .With(_tableName);

            _batchOperator = (IBatchOperator <StateEntity>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <StateEntity>(options)
            {
                DoManyFunc = (entities, cacheData) =>
                             SaveManyCoreMany(dbFactory, entities),
            }));
        }
        public void SelectedOperatorUponCommitIsAssignedToAllReceivedBatchesInSessionLedger()
        {
            int expectedStartingSessionLedgerCount     = 1;
            int expectedDataSourceCountAfterCommitting = 2;

            InjectTwoOperatorsIntoRepository();
            BatchOperator originalOperator = operatorSource.FindBatchOperator(1);
            BatchOperator expectedOperator = operatorSource.FindBatchOperator(2);

            SetupValidReceivedBatchInViewModel();
            AddReceivedBatchToSessionLedger();

            Assert.AreEqual(expectedStartingSessionLedgerCount, viewModel.SessionLedger.Count);

            foreach (ReceivedBatch batch in viewModel.SessionLedger)
            {
                Assert.AreEqual(originalOperator.FullName, batch.ReceivingOperator.FullName);
            }

            SetupValidReceivedBatchInViewModel();
            viewModel.ReceivingOperatorComboBoxIndex = 1;
            AddReceivedBatchToSessionLedger();

            command.Execute(null);

            Assert.AreEqual(expectedDataSourceCountAfterCommitting, receivingSource.ReceivedBatchRepository.Count);

            foreach (ReceivedBatch batch in receivingSource.ReceivedBatchRepository)
            {
                Assert.AreEqual(expectedOperator.FullName, batch.ReceivingOperator.FullName);
            }
        }
예제 #7
0
        public void UpdateOperator(int id, BatchOperator batchOperator)
        {
            ITransaction updater = new UpdateBatchOperatorTransaction(id, batchOperator, sqliteStore);

            updater.Execute();
            UpdateOperatorRepository();
        }
        public MongoDBEventEntitySaver(
            IMongoDBEventStoreOptions options,
            BatchOperator <EventEntity> .Factory batchOperatorFactory,
            IDbFactory dbFactory,
            IClaptrapIdentity identity,
            IBatchOperatorContainer batchOperatorContainer)
        {
            var locator = options.MongoDBEventStoreLocator;

            _connectionName      = locator.GetConnectionName(identity);
            _databaseName        = locator.GetDatabaseName(identity);
            _eventCollectionName = locator.GetEventCollectionName(identity);

            var operatorKey = new BatchOperatorKey()
                              .With(nameof(MongoDBEventEntitySaver))
                              .With(_connectionName)
                              .With(_databaseName)
                              .With(_eventCollectionName);

            _batchOperator = (IBatchOperator <EventEntity>)batchOperatorContainer.GetOrAdd(
                operatorKey, () => batchOperatorFactory.Invoke(
                    new BatchOperatorOptions <EventEntity>(options)
            {
                DoManyFunc = (entities, cacheData) => SaveManyCoreMany(dbFactory, entities)
            }));
        }
예제 #9
0
        public void GetOperatorInitials()
        {
            string initials = "JD";

            dispenseOperator = new BatchOperator(firstName, lastName);

            Assert.AreEqual(initials, dispenseOperator.GetInitials());
        }
        public void ImplementBatchFromInventoryToImplementationLedger()
        {
            string        selectedBatchNumber   = GetBatchNumberOfSelectedInventoryItem();
            BatchOperator selectedBatchOperator = GetBatchOperatorFromSelectedItem();

            implementedBatchSource.AddBatchToImplementationLedger(selectedBatchNumber, (DateTime)ImplementationDateTime, selectedBatchOperator);
            UpdateAverageBatchList();
            NotifyPropertyChanged("TotalInventoryCount");
        }
        public void SavingBatchOperatorResultsInRepositoryWithNewBatchOperatorAtLatestId()
        {
            int           targetCollectionId = 0;
            BatchOperator batchOperator      = helper.GetJaneDoeOperator();

            operatorSource.SaveOperator(batchOperator);

            Assert.AreEqual(batchOperator.FirstName, operatorSource.OperatorRepository[targetCollectionId].FirstName);
            Assert.AreEqual(batchOperator.LastName, operatorSource.OperatorRepository[targetCollectionId].LastName);
        }
예제 #12
0
        void ImplementAllButOneBatch(string batchNumber)
        {
            BatchOperator batchOperator = batchOperatorHelper.GetJaneDoeOperator();
            DateTime      date          = DateTime.Today;

            for (int i = 0; i < 4; i++)
            {
                implementedBatchSource.AddBatchToImplementationLedger(batchNumber, date, batchOperator);
                date = date.AddDays(i);
            }
        }
예제 #13
0
 public BatchOperatorViewModel(IBatchOperatorSource operatorSource)
 {
     this.operatorSource = operatorSource;
     OperatorRepository  = operatorSource.OperatorRepository;
     SelectedBatchOperatorFromListBoxIndex = -1;
     validator                    = new BatchOperatorValidator();
     BatchOperator                = new BatchOperator("", "");
     SaveBatchOperator            = new SaveBatchOperatorCommand(this);
     DeleteSelectedBatchOperator  = new DeleteSelectedBatchOperatorCommand(this);
     BatchOperatorComboBoxChanged = new BatchOperatorComboBoxChangedCommand(this);
     BatchOperatorListBoxChanged  = new BatchOperatorListBoxChangedCommand(this);
 }
예제 #14
0
        public void CommandCanNotExecuteIfOperatorBelongsToImplementedBatch()
        {
            ReceivedBatchTestHelper helper               = new ReceivedBatchTestHelper(operatorSource);
            BatchOperatorTestHelper operatorHelper       = new BatchOperatorTestHelper(operatorSource);
            ReceivedBatch           receivedBatch        = helper.GetUniqueBatch1();
            BatchOperator           implementingOperator = operatorHelper.GetJohnDoeOperator();

            receivedBatchSource.SaveReceivedBatch(receivedBatch);
            implementedBatchSource.AddBatchToImplementationLedger(receivedBatch.BatchNumber, DateTime.Now, operatorSource.FindBatchOperator(2));
            viewModel.SelectedBatchOperatorFromListBoxIndex = 1;

            Assert.False(command.CanExecute(null));
        }
        public void SavingBatchOperatorAndRetrievingFromIdResultsInTheSameOperatorInfo()
        {
            int           targetCollectionId = 0;
            BatchOperator batchOperator      = helper.GetJaneDoeOperator();

            operatorSource.SaveOperator(batchOperator);

            int           targetId = operatorSource.BatchOperatorIdMappings[targetCollectionId];
            BatchOperator found    = operatorSource.FindBatchOperator(targetId);

            Assert.AreEqual(batchOperator.FirstName, found.FirstName);
            Assert.AreEqual(batchOperator.LastName, found.LastName);
        }
 public void SetUp()
 {
     dbHelper = new SQLiteDatabaseHelper();
     dbHelper.CreateTestDatabase();
     sqliteStore            = new SQLiteStoreContext(dbHelper.DatabaseFile);
     operatorSource         = new SQLiteBatchOperatorSource(sqliteStore);
     inventorySource        = new SQLiteActiveInventorySource(sqliteStore);
     receivedBatchSource    = new SQLiteReceivedBatchSource(sqliteStore, inventorySource);
     implementedBatchSource = new SQLiteImplementedBatchSource(sqliteStore, inventorySource);
     operatorHelper         = new BatchOperatorTestHelper(operatorSource);
     viewModel     = new MainWindowViewModel(inventorySource, receivedBatchSource, implementedBatchSource, operatorSource);
     batchOperator = operatorHelper.GetJaneDoeOperator();
 }
예제 #17
0
        public void CommandWillExecuteIfOverallQuantityIsGreaterThanAmountAlreadyImplemented()
        {
            BatchOperator batchOperator = operatorSource.FindBatchOperator(originalBatchOperatorId);

            implementedBatchSource.AddBatchToImplementationLedger(whiteBatch, DateTime.Now, batchOperator);
            implementedBatchSource.AddBatchToImplementationLedger(whiteBatch, DateTime.Now, batchOperator);
            implementedBatchSource.AddBatchToImplementationLedger(whiteBatch, DateTime.Now, batchOperator);

            viewModel.ReceivedBatchesSelectedIndex = 0;
            viewModel.Quantity = "6";

            Assert.True(command.CanExecute(null));
        }
예제 #18
0
        void InsertThreeUniqueBatchesIntoDataSource()
        {
            BatchOperator batchOperator = operatorSource.FindBatchOperator(originalBatchOperatorId);

            activityDate = DateTime.Today;

            ReceivedBatch batch1 = new ReceivedBatch("White", whiteBatch, activityDate, 5, originalPONumber, batchOperator);
            ReceivedBatch batch2 = new ReceivedBatch("Black", blackBatch, activityDate, 5, originalPONumber, batchOperator);
            ReceivedBatch batch3 = new ReceivedBatch("Yellow", yellowBatch, activityDate, 5, originalPONumber, batchOperator);

            receivedBatchSource.SaveReceivedBatch(batch1);
            receivedBatchSource.SaveReceivedBatch(batch2);
            receivedBatchSource.SaveReceivedBatch(batch3);
        }
예제 #19
0
        public void ExecutedCommandWithDecreaseInQuantityWillDeductAppropriateAmountInInventoryLedger()
        {
            viewModel.ReceivedBatchesSelectedIndex = 0;
            string        batchNumber      = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].BatchNumber;
            int           expectedQuantity = 3;
            BatchOperator batchOperator    = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].ReceivingOperator;

            implementedBatchSource.AddBatchToImplementationLedger(batchNumber, DateTime.Now, batchOperator);
            viewModel.PopulateSelectedReceivedRecord();
            viewModel.Quantity = "4";
            command.Execute(null);

            Assert.AreEqual(expectedQuantity, inventorySource.FindInventoryBatchByBatchNumber(batchNumber).Quantity);
        }
        public void UpdatingBatchOperatorAtIdThatDoesNotExistResultsInNoChanges()
        {
            int           targetCollectionId = 0;
            BatchOperator batchOperator      = helper.GetUnsavedJaneDoeOperator();

            operatorSource.SaveOperator(batchOperator);
            int originalSize = operatorSource.OperatorRepository.Count;

            int validId = operatorSource.BatchOperatorIdMappings[targetCollectionId];

            operatorSource.UpdateOperator(validId + 1, helper.GetUnsavedJohnDoeOperator());

            Assert.AreEqual(originalSize, operatorSource.OperatorRepository.Count);
        }
예제 #21
0
        public void ExecutedCommandWillCallIViewShowViewMethod()
        {
            int           targetPO      = 11111;
            ReceivedBatch receivedBatch = helper.GetBatchWithSpecificPO(targetPO);
            BatchOperator batchOperator = receivedBatch.ReceivingOperator;

            operatorSource.SaveOperator(batchOperator);
            receivedBatchSource.SaveReceivedBatch(receivedBatch);
            viewModel.PurchaseOrderEditorViewer = new IViewTestStub();
            viewModel.SpecificPONumber          = targetPO.ToString();
            viewModel.FetchReceivingRecordsByPONumber();

            Assert.DoesNotThrow(() => command.Execute(null));
        }
예제 #22
0
        public void CommandWillExecuteIfViewIsSetAndCanShowItselfAndARetrievedRecordIsSet()
        {
            int           targetPO      = 11111;
            ReceivedBatch receivedBatch = helper.GetBatchWithSpecificPO(targetPO);
            BatchOperator batchOperator = receivedBatch.ReceivingOperator;

            operatorSource.SaveOperator(batchOperator);
            receivedBatchSource.SaveReceivedBatch(receivedBatch);
            viewModel.PurchaseOrderEditorViewer = new PassableIViewTestStub();
            viewModel.SpecificPONumber          = targetPO.ToString();
            viewModel.FetchReceivingRecordsByPONumber();

            Assert.True(command.CanExecute(null));
        }
        public void ExecutedCommandWillRemoveOnlyReceivingQuantityFromActiveInventory()
        {
            int           expectedCount = 3;
            int           expectedQty   = 3;
            BatchOperator batchOperator = operatorSource.FindBatchOperator(originalBatchOperatorId);
            ReceivedBatch newBatchWithSameBatchNumber = new ReceivedBatch("White", whiteBatch, DateTime.Now, expectedQty, 22222, batchOperator);

            receivedBatchSource.SaveReceivedBatch(newBatchWithSameBatchNumber);
            viewModel.ReceivedBatchesSelectedIndex = 0;
            command.Execute(null);

            Assert.AreEqual(expectedCount, inventorySource.CurrentInventory.Count);
            Assert.AreEqual(expectedQty, inventorySource.FindInventoryBatchByBatchNumber(whiteBatch).Quantity);
        }
예제 #24
0
        public void ExecutedCommandWithChangedColorUpdatesAllLedgers()
        {
            viewModel.ReceivedBatchesSelectedIndex = 0;
            string        batchNumber       = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].BatchNumber;
            string        expectedColorName = "Red";
            BatchOperator batchOperator     = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].ReceivingOperator;

            implementedBatchSource.AddBatchToImplementationLedger(batchNumber, DateTime.Now, batchOperator);
            viewModel.PopulateSelectedReceivedRecord();
            viewModel.SelectedColorIndex = 3;
            command.Execute(null);

            Assert.AreEqual(expectedColorName, receivedBatchSource.GetReceivedBatchesByBatchNumber(batchNumber)[0].ColorName);
            Assert.AreEqual(expectedColorName, implementedBatchSource.GetImplementedBatchesByBatchNumber(batchNumber)[0].ColorName);
            Assert.AreEqual(expectedColorName, inventorySource.FindInventoryBatchByBatchNumber(batchNumber).ColorName);
        }
예제 #25
0
        List <IEntity> ProcessBatchOperators(SQLiteDataReader reader)
        {
            List <IEntity> entities = new List <IEntity>();

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    BatchOperator          batchOperator = new BatchOperator(reader.GetString(1), reader.GetString(2));
                    Entity <BatchOperator> entity        = new Entity <BatchOperator>(reader.GetInt32(0), batchOperator);
                    entities.Add(entity);
                }
            }

            return(entities);
        }
        public void UpdatingBatchOperatorAtIdResultsInNewBatchOperatorInfoWhenLookedUp()
        {
            int           targetCollectionId = 0;
            string        expectedFirstName  = "John";
            string        expectedLastName   = "Doe";
            BatchOperator batchOperator      = helper.GetUnsavedJaneDoeOperator();

            operatorSource.SaveOperator(batchOperator);

            int targetId = operatorSource.BatchOperatorIdMappings[targetCollectionId];

            operatorSource.UpdateOperator(targetId, helper.GetUnsavedJohnDoeOperator());
            BatchOperator found = operatorSource.FindBatchOperator(targetId);

            Assert.AreEqual(expectedFirstName, found.FirstName);
            Assert.AreEqual(expectedLastName, found.LastName);
        }
예제 #27
0
        public void PersistBatchOperator()
        {
            BatchOperator batchOperator = new BatchOperator(FirstName, LastName);

            if (SelectedBatchOperatorFromComboBoxIndex > 0)
            {
                int targetId = operatorSource.BatchOperatorIdMappings[SelectedBatchOperatorFromComboBoxIndex - 1];
                operatorSource.UpdateOperator(targetId, batchOperator);
            }
            else
            {
                operatorSource.SaveOperator(batchOperator);
            }

            ResetBatchOperator();
            SelectedBatchOperatorFromComboBoxIndex = -1;
            NotifyPropertyChanged("OperatorNames");
        }
예제 #28
0
        public void ExecutedCommandWithDecreaseInQuantityResultingInZeroInventoryWillRemoveRecordFromActiveInventory()
        {
            viewModel.ReceivedBatchesSelectedIndex = 0;
            string        batchNumber         = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].BatchNumber;
            int           expectedBeforeCount = 3;
            int           expectedAfterCount  = 2;
            BatchOperator batchOperator       = viewModel.ReceivedBatches[viewModel.ReceivedBatchesSelectedIndex].ReceivingOperator;

            implementedBatchSource.AddBatchToImplementationLedger(batchNumber, DateTime.Now, batchOperator);
            viewModel.PopulateSelectedReceivedRecord();
            viewModel.Quantity = "1";

            Assert.AreEqual(expectedBeforeCount, inventorySource.CurrentInventory.Count);

            command.Execute(null);

            Assert.AreEqual(expectedAfterCount, inventorySource.CurrentInventory.Count);
        }
예제 #29
0
        public void ExecutedCommandWillAddBatchToImplementationLedgerAndRemoveFromInventory()
        {
            ReceivedBatch receivedBatch          = SetupReceivedBatchWithQuantityOfTwo();
            BatchOperator implementingOperator   = operatorHelper.GetJaneDoeOperator();
            int           expectedQuantity       = 1;
            int           expectedLedgerCount    = 1;
            int           expectedInventoryCount = 1;

            SetupInventoryStateToImplementBatch();
            SetupViewModelStateToImplementBatch();

            command.Execute(null);

            InventoryBatch inventoryBatch = viewModel.CurrentInventory[0];

            Assert.AreEqual(expectedQuantity, inventoryBatch.Quantity);
            Assert.AreEqual(expectedLedgerCount, viewModel.ImplementedBatchLedger.Count);
            Assert.AreEqual(expectedInventoryCount, viewModel.TotalInventoryCount);
        }
        public void SavingReceivedBatchWithSameBatchNumberAcrossMultipleDateWillMergeRecordsIfTheyExistInInventory()
        {
            int           expectedQuantityAfterFirst  = 1;
            int           expectedQuantityAfterSecond = 4;
            string        batchNumber   = "872890302902";
            BatchOperator batchOperator = new BatchOperator("Jane", "Doe");

            ReceivedBatch firstBatch = new ReceivedBatch(
                "White", batchNumber, new DateTime(2019, 9, 16), 1, 44614, batchOperator
                );

            ReceivedBatch secondBatch = new ReceivedBatch(
                "White", batchNumber, new DateTime(2019, 9, 23), 3, 44663, batchOperator
                );

            receivedBatchSource.SaveReceivedBatch(firstBatch);
            Assert.AreEqual(expectedQuantityAfterFirst, inventorySource.FindInventoryBatchByBatchNumber(batchNumber).Quantity);

            receivedBatchSource.SaveReceivedBatch(secondBatch);
            Assert.AreEqual(expectedQuantityAfterSecond, inventorySource.FindInventoryBatchByBatchNumber(batchNumber).Quantity);
        }