Exemplo n.º 1
0
        public void CreateParameterInValidParmTest(
            long?deliveryFileTypeSid,
            string filePath,
            string equipmentModel,
            string installType,
            string version,
            string installableVersion,
            string description,
            string informationId)
        {
            // Target Create
            var builder = new TestDiProviderBuilder();

            builder.ServiceCollection.AddTransient <DeliveryFilesController>();
            var controller = builder.Build().GetService <DeliveryFilesController>();

            // 配信グループデータ作成パラメータ作成
            var createActual = new DeliveryFileAddRequestDto()
            {
                DeliveryFileType =
                    deliveryFileTypeSid == null ?
                    null :
                    new DeliveryFileTypeMasterDto()
                {
                    DeliveryFileTypeSid  = deliveryFileTypeSid,
                    DeliveryFileTypeCode = "tekitou"
                },
                FilePath = filePath,
                // HACK: 本当はTypeによって要不要が異なるので、その観点でテストを分けるべき。
                // EquipmentModels = new List<MtEquipmentModel>(){
                // HACK: 本当はTypeによって要不要が異なるので、その観点でテストを分けるべき。
                // InstallType = installType,
                Version            = version,
                InstallableVersion = installableVersion,
                Description        = description,
                InformationId      = informationId
            };

            // 制約違反の場合はBadRequestが返ることを確認する
            var createResponse = controller.PostDeliveryFile(createActual, UnitTestHelper.CreateLogger());

            Assert.IsInstanceOfType(createResponse, typeof(BadRequestObjectResult));
        }
Exemplo n.º 2
0
        // HACK: 関連クラスをまとめているため雑多になっている

        /// <summary>
        /// 配信ファイル追加リクエストDTOをUtilityモデルに変換する
        /// </summary>
        /// <param name="dto">Dtoクラスパラメータ</param>
        /// <returns>Utilityパラメータ</returns>
        public static DtDeliveryFile ConvertDtoToUtility(this DeliveryFileAddRequestDto dto)
        {
            return(new DtDeliveryFile()
            {
                // Sid = dto.Sid,
                DeliveryFileTypeSid = dto.DeliveryFileType.DeliveryFileTypeSid.Value,
                FilePath = dto.FilePath,
                DtDeliveryModel = dto.EquipmentModels == null ? new DtDeliveryModel[0] : dto.EquipmentModels.ToModelDtos().ToArray(),
                ////InstallTypeSid = dto.InstallType?.InstallTypeId,
                Version = dto.Version,
                InstallableVersion = dto.InstallableVersion,
                Description = dto.Description,
                InformationId = dto.InformationId,
                //// IsCanceled
                //// CreateDatetime
                //// UpdateDatetime
                //// RowVersion = dto.RowVersion これはCreateなので不要
                //// MtDeliveryFileType
                //// DtDeliveryGroup
            });
        }
Exemplo n.º 3
0
        /// <summary>
        /// Dtoをファイル種別ごとに適切なクラスに変換する。
        /// </summary>
        /// <param name="source">変換元</param>
        /// <returns>変換先。リクエストがnullの場合にはそのままnullを返す</returns>
        public static DeliveryFileAddRequestDto Convert(DeliveryFileAddRequestDto source)
        {
            if (source == null)
            {
                return(null);
            }

            switch (source.DeliveryFileType.DeliveryFileTypeCode)
            {
            case Const.DeliveryFileType.AlSoft:
                return(new DeliveryFileAddRequestTypeAlSoft(source));

            case Const.DeliveryFileType.HotFixConsole:
            case Const.DeliveryFileType.HotFixHobbit:
                return(new DeliveryFileAddRequestTypeHotFix(source));

            case Const.DeliveryFileType.Package:
            default:
                return(new DeliveryFileAddRequestTypePackage(source));
            }
        }
Exemplo n.º 4
0
        public IActionResult PostDeliveryFile(
            [RequestBodyType(typeof(DeliveryFileAddRequestDto), "配信ファイル作成リクエスト")]
            [HttpTrigger(AuthorizationLevel.Function, "post", Route = "deliveryfiles")]
            DeliveryFileAddRequestDto request,
            ILogger log)
        {
            log.EnterJson("DeliveryFileAddRequestDto: {0}", request);
            ActionResult response = null;

            try
            {
                DeliveryFileAddRequestDto requestByType = RequestConverter.Convert(request);    // リクエストオブジェクトがnullの場合にはnullが返る
                // リクエストパラメータチェック
                if (RequestValidator.IsBadRequestParameter(requestByType, out string message))
                {
                    log.Error(nameof(Resources.CO_API_DFC_002), new object[] { message });
                    return(new BadRequestObjectResult(string.Empty));
                }

                var utilParam   = requestByType.ConvertDtoToUtility();
                var resultParam = _service.Create(utilParam);

                // Resultから返却ステータスを作成
                response = SqlResultConverter.ConvertToActionResult(
                    resultParam.ResultCode,
                    resultParam.Message,
                    resultParam.Entity.ConvertUtilityToResponseDto());
            }
            catch (Exception e)
            {
                log.Error(e, nameof(Resources.CO_API_DFC_001));
                response = new StatusCodeResult(StatusCodes.Status500InternalServerError);
            }
            finally
            {
                log.LeaveJson("Response: {0}", response);
            }

            return(response);
        }
Exemplo n.º 5
0
        public void CRUDOperationTest()
        {
            // TestInitialize
            DbTestHelper.DeleteAll();
            var dataOnDb = DbTestHelper.CreateMasterTables();

            dataOnDb = DbTestHelper.CreateDevices(dataOnDb);

            // Target Create
            var builder = new TestDiProviderBuilder();

            builder.ServiceCollection.AddTransient <DeliveryFilesController>();

            var createdDatetime = new DateTime(2030, 1, 1);

            builder.ServiceCollection.AddSingleton <ITimeProvider>(UnitTestHelper.CreateTimeProvider(createdDatetime));
            var provider   = builder.Build();
            var controller = provider.GetService <DeliveryFilesController>();

            ////////////
            // Create //
            ////////////
            var requestCreate = new DeliveryFileAddRequestDto()
            {
                DeliveryFileType =
                    new DeliveryFileTypeMasterDto()
                {
                    DeliveryFileTypeSid  = dataOnDb.Get <MtDeliveryFileType>()[0].Sid,
                    DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[0].Code
                },
                FilePath        = "filepath",
                EquipmentModels = new List <ModelMasterDto>()
                {
                    new ModelMasterDto()
                    {
                        ModelSid  = dataOnDb.Get <MtEquipmentModel>()[0].Sid,
                        ModelCode = dataOnDb.Get <MtEquipmentModel>()[0].Code
                    },
                    new ModelMasterDto()
                    {
                        ModelSid  = dataOnDb.Get <MtEquipmentModel>()[1].Sid,
                        ModelCode = dataOnDb.Get <MtEquipmentModel>()[1].Code
                    },
                },
                InstallType =
                    new InstallTypeMasterDto()
                {
                    InstallTypeSid  = dataOnDb.Get <MtInstallType>()[0].Sid,
                    InstallTypeCode = dataOnDb.Get <MtInstallType>()[0].Code
                },
                Version            = "v3.0",
                InstallableVersion = "v1.0,v2.0",
                Description        = "description",
                InformationId      = "200"
            };

            long targetDeliveryFileSid;
            var  response =
                controller.PostDeliveryFile(requestCreate, UnitTestHelper.CreateLogger())
                as OkObjectResult;

            Assert.IsNotNull(response);
            var responseCreate = response.Value as DeliveryFileResponseDto;

            targetDeliveryFileSid = responseCreate.Sid;
            long latestRowVersion = responseCreate.RowVersion.Value;

            // リクエストとレスポンスの比較
            Assert.IsTrue(responseCreate.Sid > 0);
            Assert.AreEqual(requestCreate.DeliveryFileType.DeliveryFileTypeSid, responseCreate.DeliveryFileTypeSid);
            Assert.AreEqual(requestCreate.FilePath, responseCreate.FilePath);
            AssertResponse(requestCreate.EquipmentModels, responseCreate.EquipmentModels, responseCreate.CreateDatetime.Value);
            Assert.AreEqual(requestCreate.InstallType.InstallTypeSid, responseCreate.InstallTypeSid);

            Assert.AreEqual(requestCreate.Version, responseCreate.Version);
            Assert.AreEqual(requestCreate.InstallableVersion, responseCreate.InstallableVersion);
            Assert.AreEqual(requestCreate.Description, responseCreate.Description);
            Assert.AreEqual(requestCreate.InformationId, responseCreate.InformationId);

            Assert.IsFalse(responseCreate.IsCanceled.HasValue);
            Assert.IsNotNull(responseCreate.RowVersion);
            Assert.AreEqual(createdDatetime, responseCreate.CreateDatetime);
            Assert.AreEqual(createdDatetime, responseCreate.UpdateDatetime);

            // ==== Read
            // ReadはWebAPIがないのでリポジトリから直接確認。
            var repository  = provider.GetRequiredService <IDtDeliveryFileRepository>();
            var readCreated = repository.ReadDtDeliveryFile(targetDeliveryFileSid);

            latestRowVersion = AssertResponse(responseCreate, readCreated);

            // === Update
            // DateTimeProviderを再注入し、更新時に更新されることを確認する。
            var updatedDateTime = new DateTime(2050, 3, 1);

            builder.ServiceCollection.AddSingleton <ITimeProvider>(UnitTestHelper.CreateTimeProvider(updatedDateTime));
            provider   = builder.Build();
            controller = provider.GetService <DeliveryFilesController>();

            // 更新データ作成
            var requestUpdated = new DeliveryFileUpdateRequestDto()
            {
                DeliveryFileType =
                    new DeliveryFileTypeMasterDto()
                {
                    DeliveryFileTypeSid  = dataOnDb.Get <MtDeliveryFileType>()[1].Sid,
                    DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[1].Code
                },
                EquipmentModels = new List <ModelMasterDto>()
                {
                    new ModelMasterDto()
                    {
                        ModelSid  = dataOnDb.Get <MtEquipmentModel>()[2].Sid,
                        ModelCode = dataOnDb.Get <MtEquipmentModel>()[2].Code
                    }
                },
                InstallType =
                    new InstallTypeMasterDto()
                {
                    InstallTypeSid  = dataOnDb.Get <MtInstallType>()[1].Sid,
                    InstallTypeCode = dataOnDb.Get <MtInstallType>()[1].Code
                },
                Version            = "v4.0",
                InstallableVersion = "v3.0,v2.0",
                Description        = "updated description",
                InformationId      = "300",
                RowVersion         = latestRowVersion
            };
            var responseUpdated =
                controller.PutDeliveryFile(requestUpdated, targetDeliveryFileSid, UnitTestHelper.CreateLogger())
                as OkObjectResult;

            Assert.IsNotNull(responseUpdated);
            var responseUpdatedDto = responseUpdated.Value as DeliveryFileResponseDto;

            Assert.AreEqual(targetDeliveryFileSid, responseUpdatedDto.Sid);
            Assert.AreEqual(requestUpdated.DeliveryFileType.DeliveryFileTypeSid, responseUpdatedDto.DeliveryFileTypeSid);

            AssertResponse(requestUpdated.EquipmentModels, responseUpdatedDto.EquipmentModels, responseUpdatedDto.UpdateDatetime.Value);

            Assert.AreEqual(requestUpdated.InstallType.InstallTypeSid, responseUpdatedDto.InstallTypeSid);
            Assert.AreEqual(requestUpdated.Version, responseUpdatedDto.Version);
            Assert.AreEqual(requestUpdated.InstallableVersion, responseUpdatedDto.InstallableVersion);
            Assert.AreEqual(requestUpdated.Description, responseUpdatedDto.Description);
            Assert.AreEqual(requestUpdated.InformationId, responseUpdatedDto.InformationId);

            Assert.IsFalse(responseUpdatedDto.IsCanceled.HasValue);
            Assert.IsNotNull(responseUpdatedDto.RowVersion);
            Assert.AreEqual(createdDatetime, responseUpdatedDto.CreateDatetime);
            Assert.AreEqual(updatedDateTime, responseUpdatedDto.UpdateDatetime);

            latestRowVersion = responseUpdatedDto.RowVersion.Value;

            // ==== Read
            var readUpdated = repository.ReadDtDeliveryFile(targetDeliveryFileSid);

            latestRowVersion = AssertResponse(responseUpdatedDto, readUpdated);

            // === Delete
            var deletedResponse = controller.DeleteDeliveryFile(
                null,
                targetDeliveryFileSid,
                latestRowVersion,
                UnitTestHelper.CreateLogger()) as OkObjectResult;

            Assert.IsNotNull(deletedResponse);
            var deleteResponse = deletedResponse.Value as DeliveryFileResponseDto;

            Assert.IsNotNull(deleteResponse);

            // HACK: Deleteの戻り値が一致するかどうかのテスト
            // 子テーブルの削除に失敗する。db側にon delete cascadeを追加する。

            // 取得して存在しないことを確認
            var readResult = repository.ReadDtDeliveryFile(deleteResponse.Sid);

            Assert.IsNull(readResult);
        }