public void UpdateParameterInValidParmTest( long?deliveryGroupStatusSid, string name, bool isNotNullStartDateTime, long?rowVersion) { // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); var controller = builder.Build().GetService <DeliveryGroupsController>(); // 配信グループデータ更新パラメータ作成 var updateActual = new DeliveryGroupUpdateRequestDto() { Name = name, StartDatetime = isNotNullStartDateTime ? (DateTime?)new DateTime(2050, 6, 1) : null, // DownloadDelayTime RowVersion = rowVersion }; // 制約違反の場合はBadRequestが返ることを確認する var updateResponse = controller.PutDeliveryGroup(updateActual, 1, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(updateResponse, typeof(BadRequestObjectResult)); }
public void Update403ErrorIfStatusIsNotStarted() { // DbSetup DbTestHelper.DeleteAll(); var list = DbTestHelper.CreateMasterTables(); list = DbTestHelper.CreateDeliveries(list); list = DbTestHelper.CreateDevices(list); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); var controller = builder.Build().GetService <DeliveryGroupsController>(); // 配信グループデータを作成し、SIDを読み込む(作成・読み込み結果は別テストで判定するためここでは省略) var statusStarted = new DeliveryGroupAddRequestDto() { DeliveryFileSid = list.GetDtDeliveryFileSid(), // これがNotStartではないのが本テストのポイント。 // HACK: この // DeliveryGroupStatusSid = list.GetMtDeliveryGroupStatusSid( "started" ), Name = "UnitTest", StartDatetime = new DateTime(2099, 12, 31), // DownloadDelayTime DeliveryDestinations = new DeliveryResultAddRequestDto[] { } }; var createResponse = controller.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult; var createResponseValue = createResponse.Value as DeliveryGroupResponseDto; // 更新処理 var updateActual = new DeliveryGroupUpdateRequestDto() { Name = "updateExpectedName", StartDatetime = new DateTime(2050, 6, 1), // DownloadDelayTime RowVersion = createResponseValue.RowVersion }; var actual = controller.PutDeliveryGroup(updateActual, createResponseValue.Sid, UnitTestHelper.CreateLogger()); // 403が返るかチェック Assert.IsInstanceOfType(actual, typeof(StatusCodeResult)); var statucCodeResult = actual as StatusCodeResult; Assert.AreEqual(StatusCodes.Status403Forbidden, statucCodeResult.StatusCode); }
/// <summary> /// 更新リクエストのDtoクラスパラメータをUtilityのパラメータに変換する /// </summary> /// <param name="dto">Dtoクラスパラメータ</param> /// <param name="deliveryGroupId">配信グループID</param> /// <returns>Utilityパラメータ</returns> public static DtDeliveryGroup ConvertDtoToUtility(this DeliveryGroupUpdateRequestDto dto, long deliveryGroupId) { return(dto == null ? null : new DtDeliveryGroup() { Sid = deliveryGroupId, //// DeliveryFileSid = dto.DeliveryFileSid // DeliveryGroupStatusSid Name = dto.Name, StartDatetime = dto.StartDatetime.Value, DownloadDelayTime = dto.DownloadDelayTime, //// CreateDatetime // UpdateDatetime RowVersion = WebApiHelper.ConvertLongToByteArray(dto.RowVersion.Value) //// DtDeliveryResult = dto.DtDeliveryResult }); }
public IActionResult PutDeliveryGroup( [RequestBodyType(typeof(DeliveryGroupUpdateRequestDto), "配信グループ更新リクエスト")] [HttpTrigger(AuthorizationLevel.Function, "put", Route = "deliverygroups/{deliveryGroupId}")] DeliveryGroupUpdateRequestDto request, long deliveryGroupId, ILogger log) { log.EnterJson($"{nameof(deliveryGroupId)}: {deliveryGroupId}, {typeof(DeliveryGroupUpdateRequestDto)}: {{0}}", request); ActionResult response = null; try { // リクエストパラメータチェック if (RequestValidator.IsBadRequestParameter(request, out string message)) { log.Error(nameof(Resources.CO_API_DGU_002), new object[] { message }); return(new BadRequestObjectResult(string.Empty)); } var utilParam = request.ConvertDtoToUtility(deliveryGroupId); var resultParam = _service.Update(utilParam); // Resultから返却ステータスを作成 response = SqlResultConverter.ConvertToActionResult( resultParam.ResultCode, resultParam.Message, resultParam.Entity.ConvertUtilityToResponseDto()); } catch (Exception e) { log.Error(e, nameof(Resources.CO_API_DGU_001)); response = new StatusCodeResult(StatusCodes.Status500InternalServerError); } finally { log.LeaveJson("Response: {0}", response); } return(response); }
public void CRUDOperationOKTest() { // DbSetup DbTestHelper.DeleteAll(); var dataOnDb = DbTestHelper.CreateMasterTables(); dataOnDb = DbTestHelper.CreateDeliveries(dataOnDb); dataOnDb = DbTestHelper.CreateDevices(dataOnDb); // Target Create var builder = new TestDiProviderBuilder(); builder.ServiceCollection.AddTransient <DeliveryGroupsController>(); var provider = builder.Build(); var controller = provider.GetService <DeliveryGroupsController>(); //////////// // Create // //////////// var createActual = new DeliveryGroupAddRequestDto() { DeliveryFileSid = dataOnDb.GetDtDeliveryFileSid(), // DeliveryGroupStatusSid = dataOnDb.GetMtDeliveryGroupStatusSid(), Name = "UnitTest", StartDatetime = new DateTime(2099, 12, 31), // DownloadDelayTime DeliveryDestinations = new DeliveryResultAddRequestDto[] { new DeliveryResultAddRequestDto() { DeviceSid = dataOnDb.GetDtDeviceSid(), GatewayDeviceSid = dataOnDb.GetDtDeviceSid(), } } }; // OKが返るかチェック var createResponse = controller.PostDeliveryGroup(createActual, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(createResponse, typeof(OkObjectResult)); // OKなら型変換 var createResponseValue = (createResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(追加データと変更がないこと) Assert.IsNotNull(createResponseValue); Assert.AreEqual(createActual.DeliveryFileSid, createResponseValue.DeliveryFileSid); Assert.AreEqual(createActual.Name, createResponseValue.Name); Assert.AreEqual(createActual.StartDatetime, createResponseValue.StartDatetime); //Assert.AreEqual(createActual.DeliveryDestinations[0].DeviceSid, createResponseValue.DeliveryDestinations[0].DeviceSid); //Assert.AreEqual(createActual.DeliveryDestinations[0].GatewayDeviceSid, createResponseValue.DeliveryDestinations[0].GatewayDeviceSid); ////////// // Read // ////////// // ReadはWebAPIがないのでリポジトリから直接確認。 var groupRepository = provider.GetRequiredService <IDtDeliveryGroupRepository>(); var readActual = groupRepository.ReadDtDeliveryGroup(createResponseValue.Sid); // 取得値チェック(追加データレスポンス値と差異がないこと) var entity = readActual; Assert.IsNotNull(entity); Assert.AreEqual(createResponseValue.Sid, entity.Sid); Assert.AreEqual(createResponseValue.DeliveryFileSid, entity.DeliveryFileSid); Assert.AreEqual(createResponseValue.DeliveryGroupStatusSid, entity.DeliveryGroupStatusSid); Assert.AreEqual(createResponseValue.Name, entity.Name); Assert.AreEqual(createResponseValue.StartDatetime, entity.StartDatetime); Assert.AreEqual(createResponseValue.DownloadDelayTime, entity.DownloadDelayTime); Assert.AreEqual(createResponseValue.CreateDatetime, entity.CreateDatetime); Assert.AreEqual(createResponseValue.UpdateDatetime, entity.UpdateDatetime); Assert.AreEqual(createResponseValue.RowVersion, WebApiHelper.ConvertByteArrayToLong(entity.RowVersion)); Assert.AreEqual(createResponseValue.DeliveryDestinations[0].DeviceSid, entity.DtDeliveryResult.ToList()[0].DeviceSid); Assert.AreEqual(createResponseValue.DeliveryDestinations[0].GatewayDeviceSid, entity.DtDeliveryResult.ToList()[0].GwDeviceSid); //////////// // Update // //////////// var updateActual = new DeliveryGroupUpdateRequestDto() { Name = "updateExpectedName", StartDatetime = new DateTime(2050, 6, 1), // DownloadDelayTime RowVersion = createResponseValue.RowVersion }; // OKが返るかチェック var updateResponse = controller.PutDeliveryGroup(updateActual, createResponseValue.Sid, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(updateResponse, typeof(OkObjectResult)); // OKなら型変換 var updateResponseValue = (updateResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(更新データに変更がないこと) Assert.IsNotNull(updateResponseValue); Assert.AreEqual(createResponseValue.Sid, updateResponseValue.Sid); Assert.AreEqual(updateActual.Name, updateResponseValue.Name); Assert.AreEqual(updateActual.StartDatetime, updateResponseValue.StartDatetime); // RowVersionは変更されていること Assert.AreNotEqual(updateActual.RowVersion.Value, updateResponseValue.RowVersion); // 更新値になっているかDBデータをチェックする var updatedReadActual = groupRepository.ReadDtDeliveryGroup(updateResponseValue.Sid); // 取得値チェック(更新データと差異がないこと) var updatedEntity = updatedReadActual; Assert.IsNotNull(updatedEntity); Assert.AreEqual(updateResponseValue.Name, updatedEntity.Name); Assert.AreEqual(updateResponseValue.StartDatetime, updatedEntity.StartDatetime); //Assert.AreEqual(updateResponseValue.UpdatedAtUtc, updatedEntity.UpdateDatetime); Assert.AreEqual(updateResponseValue.RowVersion, WebApiHelper.ConvertByteArrayToLong(updatedEntity.RowVersion)); // その他項目は作成したデータのままであること Assert.AreEqual(createResponseValue.Sid, updatedEntity.Sid); Assert.AreEqual(createResponseValue.DeliveryFileSid, updatedEntity.DeliveryFileSid); Assert.AreEqual(createResponseValue.DeliveryGroupStatusSid, updatedEntity.DeliveryGroupStatusSid); Assert.AreEqual(createResponseValue.DownloadDelayTime, updatedEntity.DownloadDelayTime); //Assert.AreEqual(createResponseValue.CreatedAtUtc, updatedEntity.CreateDatetime); //Assert.AreEqual(createResponseValue.DeliveryDestinations[0].DeviceSid, updatedEntity.DtDeliveryResult.ToList()[0].DeviceSid); //Assert.AreEqual(createResponseValue.DeliveryDestinations[0].GatewayDeviceSid, updatedEntity.DtDeliveryResult.ToList()[0].GwDeviceSid); //////////// // Delete // //////////// // OKが返るかチェック var deleteResponse = controller.DeleteDeliveryGroup(null, updateResponseValue.Sid, updateResponseValue.RowVersion, UnitTestHelper.CreateLogger()); Assert.IsInstanceOfType(deleteResponse, typeof(OkObjectResult)); // OKなら型変換 var deleteResponseValue = (deleteResponse as OkObjectResult).Value as DeliveryGroupResponseDto; // レスポンス値チェック(指定データに変更がないこと) Assert.IsNotNull(deleteResponseValue); Assert.AreEqual(updateResponseValue.Sid, deleteResponseValue.Sid); Assert.AreEqual(updateResponseValue.RowVersion, deleteResponseValue.RowVersion); // NotFoundになっているかDBデータをチェックする var deletedReadActual = groupRepository.ReadDtDeliveryGroup(deleteResponseValue.Sid); Assert.IsNull(deletedReadActual); }
public void PutDeliveryGroupTest( string no, string in_InsertNewDataSqlPath, string in_DeleteNewDataSqlPath, string in_InputJsonDataPath, string in_SidFormat, string in_AppSettingsInvalid, string in_ServiceException, string expected_DataJsonPath, string expected_LogMessagesPath, string expected_DtDeliveryGroup_TableDataPath, string expected_DtDeliveryResult_TableDataPath, string expected_DtInstallResult_TableDataPath, string remarks) { Dictionary <string, string> dir = null; if (bool.TryParse(in_AppSettingsInvalid, out bool isAppSettingsInvalid) && isAppSettingsInvalid) { // DB接続文字列が不正なAppSettingsとする dir = new Dictionary <string, string>() { { "ConnectionStrings:PrimaryDbConnectionString", "TestConnectionString" } }; } // DI実施 DependencyInjection(DateTime.Parse("2020/04/30 09:00:00.0000000"), dir, (bool.TryParse(in_ServiceException, out bool isServiceException) && isServiceException)); // 初期データ挿入 DbTestHelper.ExecSqlFromFilePath(in_InsertNewDataSqlPath); // 投入JSONをDTOに変換する string inputDtoJson = (!string.IsNullOrEmpty(in_InputJsonDataPath) && File.Exists(in_InputJsonDataPath)) ? File.ReadAllText(in_InputJsonDataPath) : ""; // SID, RowVersionの取得 DataTable inputDataTable = DbTestHelper.SelectTable("SELECT SID, ROW_VERSION FROM core.DT_DELIVERY_GROUP"); long sid = 1; long rowVersion = 0; if (inputDataTable.Rows.Count > 0) { sid = (long)inputDataTable.Rows[0].ItemArray[0]; rowVersion = WebApiHelper.ConvertByteArrayToLong((byte[])inputDataTable.Rows[0].ItemArray[1]); } // 投入するSIDを設定 long inputSid = long.Parse(string.Format(in_SidFormat, sid)); // JSONにRowVersionを埋め込む(JSONだと中括弧がFormatに影響を与えて面倒なので、Replaceを使用する) inputDtoJson = inputDtoJson.Replace("\"rowVersion\": {0}", "\"rowVersion\": " + rowVersion); // DTO変換できない場合は初期値とする(Azure Functionsと同様の挙動) DeliveryGroupUpdateRequestDto inputDto = null; try { inputDto = JsonConvert.DeserializeObject <DeliveryGroupUpdateRequestDto>(inputDtoJson); } catch (Exception) { inputDto = new DeliveryGroupUpdateRequestDto(); } // ログ格納用ロガーの用意 var actualLogs = new List <TestLog>(); var logger = new TestLogger <DeliveryGroupsController>(actualLogs); // WebApi実行 var postResult = _controller.PutDeliveryGroup(inputDto, inputSid, logger); // データのjson化 string resultJson = Rms.Server.Core.Utility.ObjectExtensions.ToStringJsonIndented(postResult); string expectJson = null; if (File.Exists(expected_DataJsonPath)) { expectJson = File.ReadAllText(expected_DataJsonPath); // 期待値は投入RowVersion値+1(JSONだと中括弧がFormatに影響を与えて面倒なので、Replaceを使用する) expectJson = expectJson.Replace("\"rowVersion\": {0}", "\"rowVersion\": " + (rowVersion + 1)); } // データの比較 Assert.AreEqual(expectJson, resultJson); // 期待するログ、実際のログを取得 List <string> expectedLogMessages = (!string.IsNullOrEmpty(expected_LogMessagesPath) && File.Exists(expected_LogMessagesPath)) ? File.ReadLines(expected_LogMessagesPath).ToList() : new List <string>(); List <string> actualControllerLogMessages = actualLogs.Select(x => x.GetSimpleText()).ToList(); List <string> actualServiceLogMessages = _serviceLogs.Select(x => x.GetSimpleText()).ToList(); // ControllerかServiceで期待するログが出力されたか確認 foreach (var expectedLogMessage in expectedLogMessages) { var matchingElementController = actualControllerLogMessages.FirstOrDefault(actual => actual.Contains(expectedLogMessage)); var matchingElementService = actualServiceLogMessages.FirstOrDefault(actual => actual.Contains(expectedLogMessage)); Assert.IsTrue((matchingElementController != null || matchingElementService != null), string.Format("「{0}」に一致する要素が見つかりません", expectedLogMessage)); actualControllerLogMessages.Remove(matchingElementController); actualControllerLogMessages.Remove(matchingElementService); } // テーブルデータの実際の値・期待値を取得 DataTable deliveryGroupActualTable = DbTestHelper.SelectTable( @"SELECT SID, DELIVERY_FILE_SID, DELIVERY_GROUP_STATUS_SID, NAME, START_DATETIME, DOWNLOAD_DELAY_TIME, CREATE_DATETIME, UPDATE_DATETIME FROM core.DT_DELIVERY_GROUP"); DataTable deliveryResultActualTable = DbTestHelper.SelectTable("SELECT * FROM core.DT_DELIVERY_RESULT"); DataTable installResultActualTable = DbTestHelper.SelectTable("SELECT * FROM core.DT_INSTALL_RESULT"); DataTable deliveryGroupExpectedTable = DbTestHelper.SelectCsv(expected_DtDeliveryGroup_TableDataPath, @"SELECT SID, DELIVERY_FILE_SID, DELIVERY_GROUP_STATUS_SID, NAME, START_DATETIME, DOWNLOAD_DELAY_TIME, CREATE_DATETIME, UPDATE_DATETIME FROM core.DT_DELIVERY_GROUP"); DataTable deliveryResultExpectedTable = DbTestHelper.SelectCsv(expected_DtDeliveryResult_TableDataPath, "SELECT * FROM core.DT_DELIVERY_RESULT"); DataTable installResultExpectedTable = DbTestHelper.SelectCsv(expected_DtInstallResult_TableDataPath, "SELECT * FROM core.DT_INSTALL_RESULT"); // テーブルデータの比較 CheckDataTableEquals(deliveryGroupExpectedTable, deliveryGroupActualTable); CheckDataTableEquals(deliveryResultExpectedTable, deliveryResultActualTable); CheckDataTableEquals(installResultExpectedTable, installResultActualTable); // 後処理 DbTestHelper.ExecSqlFromFilePath(in_DeleteNewDataSqlPath); }