Esempio n. 1
0
        public void GetOrCreateUnitTestTypeTest()
        {
            var account    = TestHelper.GetTestAccount();
            var dispatcher = TestHelper.GetDispatcherClient();

            var data = new GetOrCreateUnitTestTypeRequestData()
            {
                SystemName = "UnitTestType." + Guid.NewGuid()
            };

            var response = dispatcher.GetOrCreateUnitTestType(account.Id, data);

            response.Check();

            var unitTestTypeId = response.Data.Id;

            using (var context = AccountDbContext.CreateFromAccountId(account.Id))
            {
                var unitTestTypeRepository = context.GetUnitTestTypeRepository();
                var unitTestType           = unitTestTypeRepository.GetByIdOrNull(unitTestTypeId);
                Assert.NotNull(unitTestType);
                Assert.Equal(data.SystemName, unitTestType.SystemName);
            }
        }
        public IUnitTestTypeCacheReadObject GetOrCreateUnitTestType(Guid accountId, GetOrCreateUnitTestTypeRequestData data)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }
            if (string.IsNullOrEmpty(data.SystemName))
            {
                throw new ParameterRequiredException("SystemName");
            }

            var lockObj = typeof(UnitTestTypeService);

            lock (lockObj)
            {
                var unitTestTypeCache = AllCaches.UnitTestTypes.FindByName(accountId, data.SystemName);

                if (unitTestTypeCache != null)
                {
                    return(unitTestTypeCache);
                }

                var accountDbContext = Context.GetAccountDbContext(accountId);

                // Проверим лимит
                var checker     = AccountLimitsCheckerManager.GetCheckerForAccount(accountId);
                var checkResult = checker.CheckMaxUnitTestTypes(accountDbContext);
                if (!checkResult.Success)
                {
                    throw new OverLimitException(checkResult.Message);
                }

                Guid unitTestTypeId;

                // создаем отдельный контекст, чтобы после обработки объектов кэшем основной контекст загрузил актуальную версию из БД
                using (var accountDbContextNew = AccountDbContext.CreateFromAccountIdLocalCache(accountId))
                {
                    if (string.IsNullOrEmpty(data.DisplayName))
                    {
                        data.DisplayName = data.SystemName;
                    }

                    var unitTestType = new UnitTestType()
                    {
                        SystemName     = data.SystemName,
                        DisplayName    = data.DisplayName,
                        IsSystem       = false,
                        ActualTimeSecs = data.ActualTimeSecs,
                        NoSignalColor  = data.NoSignalColor
                    };

                    var unitTestTypeRepository = accountDbContextNew.GetUnitTestTypeRepository();
                    unitTestTypeRepository.Add(unitTestType);
                    unitTestTypeId = unitTestType.Id;
                }

                checker.RefreshUnitTestTypesCount();

                unitTestTypeCache = AllCaches.UnitTestTypes.Read(new AccountCacheRequest()
                {
                    AccountId = accountId,
                    ObjectId  = unitTestTypeId
                });

                return(unitTestTypeCache);
            }
        }
Esempio n. 3
0
        public GetOrCreateUnitTestTypeResponse GetOrCreateUnitTestType(Guid accountId, GetOrCreateUnitTestTypeRequestData data)
        {
            var request = GetRequest <GetOrCreateUnitTestTypeRequest>(accountId);

            request.Data = data;
            var dispatcher = DispatcherHelper.GetDispatcherService();

            return(dispatcher.GetOrCreateUnitTestType(request));
        }