public void EditSubscribeTest()
        {
            //ARRANGE
            RepositoryEditItem <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> > repositoryItem = new RepositoryEditItem <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context);

            MemoryCacheRepository <ObjectMappingForTest> cacheTestClass = new MemoryCacheRepository <ObjectMappingForTest>();
            HandlerCRUD <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> > processingObjectTestCalss = new HandlerCRUD <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> >(repositoryItem);
            FetchDomainData <ObjectMappingForTest> fetchDomainDataTestClass = new FetchDomainData <ObjectMappingForTest>(_uow);

            //ACT
            CacheCRUDBLLDecorator <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> > processingObjectCacheDecorator = new EditCacheCRUDBLLDecorator <ObjectMappingForTest>(processingObjectTestCalss, cacheTestClass);
            var resultSave = processingObjectCacheDecorator.Execute(new EditParamOfCRUDOperation <ObjectMappingForTest>()
            {
                Item = new ObjectMappingForTest()
                {
                    Id = 1, IntValue = 22, IntValue2 = 33
                }
            }).Result;


            ObjectMappingForTest resultFromCache = cacheTestClass.GetByIdAsync(1).Result;
            ObjectMappingForTest resultFromDB    = fetchDomainDataTestClass.GetByIdAsync(1).Result;


            //ASSERT
            Assert.IsNotNull(resultFromCache);                                //В кеше есть данные

            Assert.AreEqual(resultFromDB.IntValue, resultFromCache.IntValue); //Проверка, что данные добавленные одинаковые
            Assert.AreEqual(resultFromDB.IntValue2, resultFromCache.IntValue2);
            Assert.AreEqual(33, resultFromDB.IntValue2);
        }
        public void EditTest()
        {
            CreateContext();
            DefaultController <ObjectMappingForTest> defaultController = new DefaultController <ObjectMappingForTest>(new FakeLogger(),
                                                                                                                      new FetchDomainData <ObjectMappingForTest>(_uow),
                                                                                                                      new HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(new RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context)),
                                                                                                                      new HandlerCRUD <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> >(new RepositoryEditItem <ObjectMappingForTest, EditParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context)),
                                                                                                                      new HandlerCRUD <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> >(new RepositoryDeleteItem <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context)));

            //Проверка редактирования без ID.Будет ошибка, так как нет идентификатора записи
            EditParamOfCRUDOperation <ObjectMappingForTest> paramQueryAdd = new EditParamOfCRUDOperation <ObjectMappingForTest>();

            paramQueryAdd.Item = new ObjectMappingForTest()
            {
                IntValue  = 1,
                IntValue2 = 1,
                StrValue  = "1"
            };
            var exArgumentException = Assert.ThrowsExceptionAsync <ArgumentException>(() => defaultController.Edit(paramQueryAdd));

            Assert.AreEqual("Объект не найден в БД для изменения.", exArgumentException.Result.Message);

            //Проверка успешного изменения записи
            paramQueryAdd.Item = new ObjectMappingForTest()
            {
                Id        = 3,
                IntValue  = 1,
                IntValue2 = 1,
                StrValue  = "1"
            };
            JsonResult resultAdd = defaultController.Edit(paramQueryAdd).Result;
            BaseResultType <PrepareItemResult <ObjectMappingForTest> > resultSuccessQuery = (BaseResultType <PrepareItemResult <ObjectMappingForTest> >)resultAdd.Value;

            Assert.AreEqual(ResultStatus.Success, resultSuccessQuery.Status);
            Assert.IsNotNull(resultSuccessQuery.Data.Item);

            Assert.IsInstanceOfType(resultSuccessQuery.Data.Item, typeof(ObjectMappingForTest), "Вернулся тип объекта не ObjectMappingForTest после сохранения этого объекта.");
            Assert.AreEqual(1, ((ObjectMappingForTest)resultSuccessQuery.Data.Item).IntValue);
            Assert.AreEqual(1, ((ObjectMappingForTest)resultSuccessQuery.Data.Item).IntValue2);
            Assert.AreEqual("1", ((ObjectMappingForTest)resultSuccessQuery.Data.Item).StrValue);
            Assert.AreEqual(3, ((ObjectMappingForTest)resultSuccessQuery.Data.Item).Id);


            //Проверка запроса из БД, что запись не добавилась
            JsonResult result = defaultController.GetAsync(new FetchDataParameters()
            {
                CountOnPage = 10, PageNumber = 1
            }).Result;
            BaseResultType <ResultFetchData <ObjectMappingForTest> > fetchDataResultQuery = (BaseResultType <ResultFetchData <ObjectMappingForTest> >)result.Value;

            Assert.AreEqual(ResultStatus.Success, fetchDataResultQuery.Status);
            Assert.AreEqual(3, fetchDataResultQuery.Data.TotalCountRows);

            ObjectMappingForTest itemFromDB = fetchDataResultQuery.Data.Items[2];

            Assert.AreEqual(1, itemFromDB.IntValue);
            Assert.AreEqual(1, itemFromDB.IntValue2);
            Assert.AreEqual("1", itemFromDB.StrValue);
            Assert.AreEqual(3, itemFromDB.Id);
        }
        public void ValidateTest()
        {
            var options = new DbContextOptionsBuilder <ApplicationContextForTest>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;

            ApplicationContextForTest context = new ApplicationContextForTest(options);
            ValidateItemInContext <ObjectMappingForTest> validateItemInContext = new ValidateItemInContext <ObjectMappingForTest>(context);

            ObjectMappingForTest item = new ObjectMappingForTest();

            //Объекта нет в контексте.
            ValidateContextResult validateContextResult = validateItemInContext.Validate(item);

            Assert.AreEqual(ResultStatus.Fail, validateContextResult.Status);
            Assert.AreEqual("Не пройдена проверка записи \"ObjectMappingForTest\":" + Environment.NewLine +
                            "Не заполнено значение \"IntValue\"." + Environment.NewLine +
                            "Не заполнено значение \"Строка\".", validateContextResult.Message);

            //Добавили в контекст, но с незаполненными обязательными полями

            validateContextResult = validateItemInContext.Validate(item);
            Assert.AreEqual(ResultStatus.Fail, validateContextResult.Status);
            Assert.AreEqual(1, validateContextResult.Count);
            Assert.AreEqual(2, validateContextResult[0].Fields.Count);
            Assert.AreEqual("IntValue", validateContextResult[0].Fields[0].Name);
            Assert.AreEqual("Строка", validateContextResult[0].Fields[1].Name);

            //Заполнили обязательные поля, чтобы прошла валидация
            item.IntValue         = 1;
            item.IntValue2        = 2;
            validateContextResult = validateItemInContext.Validate(item);
            Assert.AreEqual(ResultStatus.Success, validateContextResult.Status);
            Assert.AreEqual(0, validateContextResult.Count);
        }
Esempio n. 4
0
        public void AddLogTest(long?id)
        {
            RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > repositoryItem = new RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context);

            CreateContext();
            //ARRANGE
            LogTest logTestClass = new LogTest();

            Assert.AreEqual(0, logTestClass.LogItemsCollection.Count);//Пустые логи
            HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > processingObjectTestCalss = new HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(repositoryItem);
            ObjectMappingForTest item = new ObjectMappingForTest()
            {
                IntValue = 22, IntValue2 = 33
            };

            if (id != null)
            {
                item.Id = (long)id;
            }
            //ACT

            LogerCRUDBLLDecoratorDecorator <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > processingObjectLogDecorator = new LogerCRUDBLLDecoratorDecorator <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(processingObjectTestCalss, logTestClass);
            BaseResultType <PrepareItemResult <ObjectMappingForTest> > resultSave = processingObjectLogDecorator.Execute(new AddParamOfCRUDOperation <ObjectMappingForTest>()
            {
                Item = item
            }).Result;

            //ASSERT
            Assert.AreEqual(ResultStatus.Success, resultSave.Status);
            Assert.AreEqual(1, logTestClass.GetCount());//Лог добавился
        }
Esempio n. 5
0
        public void CreateTest()
        {
            ObjectMappingForTest item = repository.Create();

            Assert.IsNotNull(item, "Не добавлен объект в контекст.");
            //Провека, что создан пустой объект с дефолтными значениями и следующим id
            Assert.AreEqual(8, item.Id);
            Assert.IsNull(item.IntValue);
            Assert.IsNull(item.StrValue);
            Assert.IsNull(item.SubObject);
        }
Esempio n. 6
0
        public void DeleteTest()
        {
            ObjectMappingForTest item = repository.GetByIdAsync(2).Result;

            Assert.IsNotNull(item, "Не найден объект по ID.");

            repository.Delete(2);
            context.SaveChanges();
            item = repository.GetByIdAsync(2).Result;
            Assert.IsNull(item, "Не удален объект в контекста.");
        }
Esempio n. 7
0
        public void GetByIdTest()
        {
            ReCreateContext();
            ObjectMappingForTest item = repository.GetByIdAsync(2).Result;

            Assert.IsNotNull(item, "Не найден объект по ID.");
            //Провека, что найден именно тот, который с id = 2
            Assert.AreEqual(2, item.Id);
            Assert.AreEqual(2, item.IntValue);
            Assert.AreEqual("2", item.StrValue);

            Assert.IsNull(repository.GetByIdAsync(20).Result, "Такой записи нет и должно быть исключение.");
        }
        public void DeleteInCacheAndDataBaseTest()
        {
            //ARRANGE
            RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >       repositoryAddItem    = new RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context);
            RepositoryDeleteItem <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> > repositoryDeleteItem = new RepositoryDeleteItem <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context);

            MemoryCacheRepository <ObjectMappingForTest> cacheTestClass = new MemoryCacheRepository <ObjectMappingForTest>();
            HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >    processingObjectTestCalss       = new HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(repositoryAddItem);
            HandlerCRUD <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> > processingDeleteObjectTestClass = new HandlerCRUD <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> >(repositoryDeleteItem);
            FetchDomainData <ObjectMappingForTest> fetchDomainDataTestClass = new FetchDomainData <ObjectMappingForTest>(_uow);

            //ACT
            CacheCRUDBLLDecorator <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >    processingObjectCacheDecorator       = new AddCacheCRUDBLLDecorator <ObjectMappingForTest>(processingObjectTestCalss, cacheTestClass);
            CacheCRUDBLLDecorator <ObjectMappingForTest, DeleteParamOfCRUDOperation <ObjectMappingForTest> > processingDeleteObjectCacheDecorator = new DeleteCacheCRUDBLLDecorator <ObjectMappingForTest>(processingDeleteObjectTestClass, cacheTestClass);

            var resultSave = processingObjectCacheDecorator.Execute(new AddParamOfCRUDOperation <ObjectMappingForTest>()
            {
                Item = new ObjectMappingForTest()
                {
                    IntValue = 2222, IntValue2 = 3333
                }
            }).Result;


            ObjectMappingForTest resultFromCache = cacheTestClass.GetByIdAsync(2).Result;
            ObjectMappingForTest resultFromDB    = fetchDomainDataTestClass.GetByIdAsync(2).Result;

            //ASSERT
            Assert.IsNotNull(resultFromCache);                                //В кеше есть данные

            Assert.AreEqual(resultFromDB.IntValue, resultFromCache.IntValue); //Проверка, что данные добавленные одинаковые
            Assert.AreEqual(resultFromDB.IntValue2, resultFromCache.IntValue2);
            Assert.AreEqual(3333, resultFromDB.IntValue2);



            //ACT - Удаляем данные
            resultSave = processingDeleteObjectCacheDecorator.Execute(new DeleteParamOfCRUDOperation <ObjectMappingForTest>()
            {
                Item = new ObjectMappingForTest()
                {
                    Id = 2
                }
            }).Result;
            resultFromCache = cacheTestClass.GetByIdAsync(3).Result;
            var exArgumentException = Assert.ThrowsExceptionAsync <ArgumentException>(() => fetchDomainDataTestClass.GetByIdAsync(3));

            //ASSERT
            Assert.IsNull(resultFromCache);//В кеше есть данные
        }
        public void GetByIdTest()
        {
            CreateContext();
            FetchDomainData <ObjectMappingForTest> bll = new FetchDomainData <ObjectMappingForTest>(_uow);

            var ex = Assert.ThrowsExceptionAsync <ArgumentException>(() => bll.GetByIdAsync(10), "Запись не найдена.");

            //Проверка успешного получения записи

            ObjectMappingForTest resultGetById = bll.GetByIdAsync(1).Result;

            Assert.IsNotNull(resultGetById);
            Assert.AreEqual(1, resultGetById.Id);
            Assert.AreEqual(2, resultGetById.IntValue);
            Assert.AreEqual("2", resultGetById.StrValue);
        }
Esempio n. 10
0
        public void ValidateContextTest()
        {
            var options = new DbContextOptionsBuilder <ApplicationContextForTest>()
                          .UseInMemoryDatabase(Guid.NewGuid().ToString())
                          .Options;
            ApplicationContextForTest context = new ApplicationContextForTest(options);
            ObjectMappingForTest      objectMappingForTest = new ObjectMappingForTest();

            context.SaveChanges();
            context.Set <ObjectMappingForTest>().Add(objectMappingForTest);
            // var result = Assert.ThrowsException<DbEntityValidationException>(() => context.SaveChanges());

            //Assert.IsFalse(validateContextResult.IsSuccess);

            //Assert.AreEqual(1, validateContextResult.Count);
            //Assert.AreEqual(2, validateContextResult[0].Fields.Count);
            //Assert.AreEqual("IntValue", validateContextResult[0].Fields[0].Name);
            //Assert.AreEqual("Строка", validateContextResult[0].Fields[1].Name);
        }
        public void UpdateItemTest()
        {
            ObjectMappingForTest sourceObjectMappingForTest = new ObjectMappingForTest();

            sourceObjectMappingForTest.IntValue  = 1;
            sourceObjectMappingForTest.StrValue  = "str";
            sourceObjectMappingForTest.SubObject = new SubObjectMappingForTest()
            {
                IntValueSub = 2, StrValueSub = "str2"
            };

            ObjectMappingForTest objectMappingForTest = new ObjectMappingForTest();

            new MappingEntity().UpdateItem <ObjectMappingForTest>(objectMappingForTest, sourceObjectMappingForTest);

            Assert.AreEqual(sourceObjectMappingForTest.IntValue, objectMappingForTest.IntValue);
            Assert.AreEqual(sourceObjectMappingForTest.StrValue, objectMappingForTest.StrValue);
            Assert.IsNull(objectMappingForTest.SubObject, "Мапятся только простые типы.");
        }
        public void CheckWorkWithCacheTest()
        {
            //ARRANGE
            RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > repositoryAddItem = new RepositoryAddItem <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(_uow, context);

            MemoryCacheRepository <ObjectMappingForTest> cacheTestClass = new MemoryCacheRepository <ObjectMappingForTest>();
            HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > processingObjectTestCalss = new HandlerCRUD <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> >(repositoryAddItem);
            FetchDomainData <ObjectMappingForTest> fetchDomainDataTestClass = new FetchDomainData <ObjectMappingForTest>(_uow);


            //ACT
            CacheCRUDBLLDecorator <ObjectMappingForTest, AddParamOfCRUDOperation <ObjectMappingForTest> > processingObjectCacheDecorator = new AddCacheCRUDBLLDecorator <ObjectMappingForTest>(processingObjectTestCalss, cacheTestClass);
            ObjectMappingForTest resultFromCache = cacheTestClass.GetByIdAsync(1).Result;
            ObjectMappingForTest resultFromDB    = fetchDomainDataTestClass.GetByIdAsync(1).Result;


            //ASSERT
            Assert.IsNull(resultFromCache); //В "БД" есть запись, но в кеше нет ее;

            Assert.IsNotNull(resultFromDB); //В "БД" есть запись
        }