public void ConvertByteArrayToLongValidTest() { long result = WebApiHelper.ConvertByteArrayToLong(null); // 0が返ること Assert.AreEqual(0, result); }
public void ConvertByteArrayToLongValidTest(byte[] inParam, long expectedValue) { byte[] beforeInParam = new byte[inParam.Length]; inParam.CopyTo(beforeInParam, 0); long result = WebApiHelper.ConvertByteArrayToLong(inParam); // 期待する値が返ること Assert.AreEqual(expectedValue, result); // 副作用は発生していないこと CollectionAssert.AreEqual(beforeInParam, inParam); }
/// <summary> /// UtilityモデルをレスポンスDTOに変換する /// </summary> /// <param name="utilParam">Utilityのパラメータ</param> /// <returns>レスポンス用Dto</returns> public static DeliveryGroupResponseDto ConvertUtilityToResponseDto(this DtDeliveryGroup utilParam) { return(utilParam == null ? null : new DeliveryGroupResponseDto() { Sid = utilParam.Sid, DeliveryFileSid = utilParam.DeliveryFileSid, DeliveryGroupStatusSid = utilParam.DeliveryGroupStatusSid, Name = utilParam.Name, StartDatetime = utilParam.StartDatetime.Value, DownloadDelayTime = utilParam.DownloadDelayTime, CreateDatetime = utilParam.CreateDatetime, UpdateDatetime = utilParam.UpdateDatetime, RowVersion = WebApiHelper.ConvertByteArrayToLong(utilParam.RowVersion), DeliveryDestinations = utilParam.DtDeliveryResult.Select(x => x.ConvertUtilityToResponseDto()).ToArray() }); }
/// <summary> /// UtilityのパラメータをレスポンスDtoに変換する /// </summary> /// <param name="utilParam">Utilityのパラメータ</param> /// <returns>レスポンス用Dto</returns> public static DeliveryFileResponseDto ConvertUtilityToResponseDto(this DtDeliveryFile utilParam) { return(new DeliveryFileResponseDto() { Sid = utilParam.Sid, DeliveryFileTypeSid = utilParam.DeliveryFileTypeSid, FilePath = utilParam.FilePath, EquipmentModels = utilParam.DtDeliveryModel.ToDtDeliveryModels(), InstallTypeSid = utilParam.InstallTypeSid, Version = utilParam.Version, InstallableVersion = utilParam.InstallableVersion, Description = utilParam.Description, InformationId = utilParam.InformationId, IsCanceled = utilParam.IsCanceled, CreateDatetime = utilParam.CreateDatetime, UpdateDatetime = utilParam.UpdateDatetime, RowVersion = WebApiHelper.ConvertByteArrayToLong(utilParam.RowVersion) }); }
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 DeleteDeliveryGroupTest( string no, string in_InsertNewDataSqlPath, string in_DeleteNewDataSqlPath, string in_SidFormat, string in_RowVersionFormat, 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/01 09:00:00.0000000"), dir, (bool.TryParse(in_ServiceException, out bool isServiceException) && isServiceException)); // 初期データ挿入 DbTestHelper.ExecSqlFromFilePath(in_InsertNewDataSqlPath); // 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]); } // 投入値の設定 var inputSid = long.Parse(string.Format(in_SidFormat, sid)); var inputRowVersion = long.Parse(string.Format(in_RowVersionFormat, rowVersion)); // ログ格納用ロガーの用意 var actualLogs = new List <TestLog>(); var logger = new TestLogger <DeliveryGroupsController>(actualLogs); // WebApi実行 var postResult = _controller.DeleteDeliveryGroup(null, inputSid, inputRowVersion, logger); // データのjson化 string resultJson = Rms.Server.Core.Utility.ObjectExtensions.ToStringJsonIndented(postResult); string expectJson = null; if (File.Exists(expected_DataJsonPath)) { expectJson = File.ReadAllText(expected_DataJsonPath); } // データの比較 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); }
public void PutDeliveryFileStatusTest( 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_DtDeliveryFile_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_FILE"); 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と同様の挙動) DeliveryFileStatusUpdateRequestDto inputDto = null; try { inputDto = JsonConvert.DeserializeObject <DeliveryFileStatusUpdateRequestDto>(inputDtoJson); } catch (Exception) { inputDto = new DeliveryFileStatusUpdateRequestDto(); } // ログ格納用ロガーの用意 var actualLogs = new List <TestLog>(); var logger = new TestLogger <DeliveryFilesController>(actualLogs); // WebApi実行 var postResult = _controller.PutDeliveryFileStatus(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); } // テーブルデータの実際の値・期待値を取得(RowVersion以外) DataTable DeliveryFileActualTable = DbTestHelper.SelectTable( @"SELECT SID, DELIVERY_FILE_TYPE_SID, INSTALL_TYPE_SID, FILE_PATH, VERSION, INSTALLABLE_VERSION, DESCRIPTION, INFORMATION_ID, IS_CANCELED, CREATE_DATETIME, UPDATE_DATETIME FROM core.DT_DELIVERY_FILE"); DataTable DeliveryFileExpectedTable = DbTestHelper.SelectCsv(expected_DtDeliveryFile_TableDataPath, @"SELECT SID, DELIVERY_FILE_TYPE_SID, INSTALL_TYPE_SID, FILE_PATH, VERSION, INSTALLABLE_VERSION, DESCRIPTION, INFORMATION_ID, IS_CANCELED, CREATE_DATETIME, UPDATE_DATETIME FROM core.DT_DELIVERY_FILE"); // テーブルデータの比較 CheckDataTableEquals(DeliveryFileExpectedTable, DeliveryFileActualTable); // 後処理 DbTestHelper.ExecSqlFromFilePath(in_DeleteNewDataSqlPath); }
public void Update403ErrorIfStatusIsNotStarted() { // 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>(); builder.ServiceCollection.AddTransient <DeliveryFilesController>(); var provider = builder.Build(); // Init // 配信グループデータを作成し、SIDを読み込む(作成・読み込み結果は別テストで判定するためここでは省略) var targetDeliveryFileSid = dataOnDb.GetDtDeliveryFileSid(); var delGroupController = provider.GetService <DeliveryGroupsController>(); // 配信グループデータを複数作成する。 // これがNotStartではないのが本テストのポイント。 DeliveryGroupAddRequestDto statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, "started"); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, Const.DeliveryGroupStatus.NotStarted); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); statusStarted = CreateDeliveryGroupAddRequestDto(dataOnDb, targetDeliveryFileSid, Const.DeliveryGroupStatus.NotStarted); Assert.IsNotNull(delGroupController.PostDeliveryGroup(statusStarted, UnitTestHelper.CreateLogger()) as OkObjectResult); // 更新処理 // 対象の配信ファイル情報はDbSetupで作成済み var createdDeliveryFile = dataOnDb.Get <DtDeliveryFile>().First(); var rowVersionAtCreated = WebApiHelper.ConvertByteArrayToLong(createdDeliveryFile.RowVersion); var requestUpdated = new DeliveryFileUpdateRequestDto() { DeliveryFileType = new DeliveryFileTypeMasterDto() { DeliveryFileTypeSid = dataOnDb.Get <MtDeliveryFileType>()[0].Sid, DeliveryFileTypeCode = dataOnDb.Get <MtDeliveryFileType>()[0].Code }, // 本テストの本筋ではないため、コメントアウトのまま。 //EquipmentModel = "UpdatedHOGEHOGE500", //InstallType = "UpdatedType1", Version = "v4.0", InstallableVersion = "v3.0,v2.0", Description = "updated description", InformationId = "300", RowVersion = rowVersionAtCreated }; var actual = provider .GetService <DeliveryFilesController>() .PutDeliveryFile(requestUpdated, targetDeliveryFileSid, UnitTestHelper.CreateLogger()); // 403が返るかチェック Assert.IsInstanceOfType(actual, typeof(StatusCodeResult)); var statucCodeResult = actual as StatusCodeResult; Assert.AreEqual(StatusCodes.Status403Forbidden, statucCodeResult.StatusCode); // 更新されていないことを確認 var repository = provider.GetRequiredService <IDtDeliveryFileRepository>(); var readUpdated = repository.ReadDtDeliveryFile(targetDeliveryFileSid); Assert.IsNotNull(readUpdated); // RowVersionが更新されていなければ問題ないと判定する。 var readResponseDto = readUpdated.ConvertUtilityToResponseDto(); Assert.AreEqual(rowVersionAtCreated, readResponseDto.RowVersion.Value); }