Ejemplo n.º 1
0
        public void FindPreviousRecordTest()
        {
            var account   = TestHelper.GetTestAccount();
            var component = account.CreateRandomComponentControl();

            // Создадим N / 2 записей, потом 1 запись с текстом, ещё N / 2 записей, и ещё запись с текстом
            var text = Guid.NewGuid().ToString();

            for (var i = 1; i <= OutputRecordCount / 2; i++)
            {
                component.Log.Info(i.ToString());
            }

            component.Log.Info(text);

            for (var i = OutputRecordCount / 2 + 2; i <= OutputRecordCount + 1; i++)
            {
                component.Log.Info(i.ToString());
            }

            component.Log.Info(text);

            component.Client.Flush();

            // Получим записи лога
            var logRecords = component.GetLogs(new Api.GetLogsFilter()
            {
                Levels = new List <Api.LogLevel>()
                {
                    Api.LogLevel.Info
                }
            }).Data.OrderBy(t => t.Date).ThenBy(t => t.Order).ToArray();

            Assert.Equal(OutputRecordCount + 2, logRecords.Length);

            // Выполним поиск перед последней записью
            LogPartialModel model;
            var             user    = TestHelper.GetAccountAdminUser(account.Id);
            var             filters = new LogFiltersModel()
            {
                ComponentId = component.Info.Id,
                Id          = logRecords.Last().Id,
                Text        = text.ToUpper()
            };

            JsonResult jsonResult1;

            using (var controller = new LogsController(account.Id, user.Id, OutputRecordCount, SearchIterationRecordCount))
            {
                jsonResult1 = Assert.IsType <JsonResult>(controller.FindPreviousRecord(filters));
            }
            var success = (bool)jsonResult1.Data.GetType().GetProperty("success").GetValue(jsonResult1.Data);

            Assert.True(success);
            var jsonData = jsonResult1.Data.GetType().GetProperty("data").GetValue(jsonResult1.Data);

            Assert.NotNull(jsonData);
            var found = (bool)jsonData.GetType().GetProperty("found").GetValue(jsonData);

            Assert.True(found);
            var id = new Guid((string)jsonData.GetType().GetProperty("id").GetValue(jsonData));

            Assert.NotNull(id);

            filters = new LogFiltersModel()
            {
                ComponentId = component.Info.Id,
                Id          = id,
                Text        = text.ToUpper()
            };
            using (var controller = new LogsController(account.Id, user.Id, OutputRecordCount, SearchIterationRecordCount))
            {
                var result = Assert.IsType <PartialViewResult>(controller.Center(filters));
                model = Assert.IsType <LogPartialModel>(result.Model);
            }

            // Проверим, что получили записи с 1 до N
            var foundRecord = model.Items[OutputRecordCount / 2];

            Assert.Equal(OutputRecordCount, model.Items.Length);
            Assert.Equal("1", model.Items.First().Message);
            Assert.Equal(text, foundRecord.Message);
            Assert.Equal(OutputRecordCount.ToString(), model.Items.Last().Message);

            // Выполним поиск дальше
            filters = new LogFiltersModel()
            {
                ComponentId = component.Info.Id,
                Id          = id,
                Text        = text.ToUpper()
            };

            JsonResult jsonResult2;

            using (var controller = new LogsController(account.Id, user.Id, OutputRecordCount, SearchIterationRecordCount))
            {
                jsonResult2 = Assert.IsType <JsonResult>(controller.FindPreviousRecord(filters));
            }

            // Проверим, что больше ничего не найдено
            success = (bool)jsonResult2.Data.GetType().GetProperty("success").GetValue(jsonResult2.Data);
            Assert.True(success);
            jsonData = jsonResult2.Data.GetType().GetProperty("data").GetValue(jsonResult2.Data);
            Assert.NotNull(jsonData);
            found = (bool)jsonData.GetType().GetProperty("found").GetValue(jsonData);
            Assert.False(found);
            var message = (string)jsonData.GetType().GetProperty("message").GetValue(jsonData);

            Assert.NotNull(message);
            var id2 = (string)jsonData.GetType().GetProperty("id").GetValue(jsonData);

            Assert.Null(id2);
        }