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); } }