Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
 /// <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
     });
 }
Example #4
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }