Ejemplo n.º 1
0
        public MasterDataDbGenerator(IUnitOfWorkFactory unitOfWorkFactory, IDbContextFactory dbContextFactory)
        {
            _dbContextFactory = dbContextFactory;

            var dateTimeProvider = new DefaultDateTimeProvider();
            var jsonSerializer   = new NewtonsoftJsonSerializer();

            var classifierTreeRepository = new DbClassifierTreeRepository(dbContextFactory);
            var classifierTypeRepository = new DbClassifierTypeRepository(dbContextFactory);

            var fieldProviderRegistry = new DefaultFieldProviderRegistry();

            fieldProviderRegistry.AddFieldType(typeof(TextField));
            fieldProviderRegistry.AddFieldType(typeof(TextAreaField));

            var dbFieldMetadataRepository = new DbFieldMetadataRepository(dbContextFactory, fieldProviderRegistry, jsonSerializer);
            var dbFieldDataRepository     = new DbFieldDataRepository(dbContextFactory, fieldProviderRegistry);
            var dbFieldMetadataService    = new DbFieldMetadataService(dbContextFactory, dateTimeProvider, jsonSerializer);

            _classifierTypeService           = new DbClassifierTypeService(dbContextFactory, classifierTypeRepository);
            _getClassifierTreeListHandler    = new GetClassifierTreeListHandler(classifierTreeRepository);
            _insertClassifierTreeTypeHandler = new InsertClassifierTreeHandler(unitOfWorkFactory, dbContextFactory, _classifierTypeService);
            _insertClassifierTypeHandler     = new InsertClassifierTypeHandler(unitOfWorkFactory, _classifierTypeService, dbFieldMetadataService);
            _insertClassifierGroupHandler    = new InsertClassifierGroupHandler(unitOfWorkFactory, dbContextFactory, _classifierTypeService);

            _classifierTypeRegistrator = new DefaultClassifierTypeRegistrator(new NullLogger <DefaultClassifierTypeRegistrator>(),
                                                                              unitOfWorkFactory, _classifierTypeService, dbFieldMetadataService);

            var classifierTypeMetadataService = new ClassifierTypeMetadataService(dbFieldMetadataRepository);
            var classifierTreeService         = new DefaultClassifierTreeService(classifierTreeRepository);
            var dbNumberGenerator             = new DbNumberGenerator(dbContextFactory, null, dateTimeProvider, null);

            var classifierRepositoryFactory = new ClassifierRepositoryFactory(new DbClassifierRepository <Classifier>(
                                                                                  dbContextFactory, _classifierTypeService, classifierTreeService,
                                                                                  classifierTypeMetadataService, dbFieldDataRepository, dbNumberGenerator));

            _insertClassifierHandler      = new InsertClassifierHandler(unitOfWorkFactory, classifierRepositoryFactory);
            _updateClassifierGroupHandler = new UpdateClassifierGroupHandler(unitOfWorkFactory, dbContextFactory, _classifierTypeService);
            _deleteClassifierGroupHandler = new DeleteClassifierGroupHandler(unitOfWorkFactory, dbContextFactory, _classifierTypeService);
            _insertClassifierLinkHandler  = new InsertClassifierLinkHandler(unitOfWorkFactory, dbContextFactory, _classifierTypeService);
            _getClassifierLinkListHandler = new GetClassifierLinkListHandler(dbContextFactory, _classifierTypeService);
        }
        public async Task GetClassifierLinkList_Should_ReturnList()
        {
            // arrange
            var cancellationToken        = new CancellationToken();
            var unitOfWorkFactory        = new TransactionScopeUnitOfWorkFactory();
            var dbContextFactory         = new DefaultDbContextFactory();
            var classifierTypeRepository = new DbClassifierTypeRepository(dbContextFactory);
            var classifierTypeService    = new DbClassifierTypeService(dbContextFactory, classifierTypeRepository);
            var generator = new MasterDataDbGenerator(unitOfWorkFactory, dbContextFactory);
            var handler   = new GetClassifierLinkListHandler(dbContextFactory, classifierTypeService);

            using (var _ = unitOfWorkFactory.Create())
            {
                await generator.InsertType(HierarchyType.Groups, cancellationToken);

                var tree = await generator.FindTree(ClassifierTree.DefaultCode, cancellationToken);

                var group1 = await generator.InsertGroup(tree.Uid, "001", null, cancellationToken);

                var item1 = await generator.InsertItem("001", null, cancellationToken);

                var item2 = await generator.InsertItem("002", null, cancellationToken);

                await generator.InsertLink(group1.Uid, item1.Uid, cancellationToken);

                await generator.InsertLink(group1.Uid, item2.Uid, cancellationToken);

                // act - search by group code
                var result = await handler.Handle(new GetClassifierLinkList
                {
                    TypeCode = generator.TypeCode,
                    GroupUid = group1.Uid
                }, cancellationToken);

                // assert
                Assert.IsNotNull(result);
                Assert.AreEqual(2, result.TotalCount);
                Assert.AreEqual(tree.Uid, result.Rows[0].Tree.Uid);
                Assert.AreEqual(group1.Uid, result.Rows[0].Group.Uid);
                Assert.AreEqual(tree.Uid, result.Rows[1].Tree.Uid);
                Assert.AreEqual(group1.Uid, result.Rows[1].Group.Uid);
                var items = result.Rows.Select(x => x.Item.Uid).ToList();
                CollectionAssert.Contains(items, item1.Uid);
                CollectionAssert.Contains(items, item2.Uid);

                // act - search by item code
                result = await handler.Handle(new GetClassifierLinkList
                {
                    TypeCode = generator.TypeCode,
                    ItemUid  = item1.Uid
                }, cancellationToken);

                // assert
                Assert.IsNotNull(result);
                Assert.AreEqual(1, result.TotalCount);
                Assert.AreEqual(tree.Uid, result.Rows[0].Tree.Uid);
                Assert.AreEqual(group1.Uid, result.Rows[0].Group.Uid);
                Assert.AreEqual(item1.Uid, result.Rows[0].Item.Uid);

                // act - search by both group and item codes
                result = await handler.Handle(new GetClassifierLinkList
                {
                    TypeCode = generator.TypeCode,
                    GroupUid = group1.Uid,
                    ItemUid  = item2.Uid
                }, cancellationToken);

                // assert
                Assert.IsNotNull(result);
                Assert.AreEqual(1, result.TotalCount);
                Assert.AreEqual(tree.Uid, result.Rows[0].Tree.Uid);
                Assert.AreEqual(group1.Uid, result.Rows[0].Group.Uid);
                Assert.AreEqual(item2.Uid, result.Rows[0].Item.Uid);
            }
        }