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