using Microsoft.Extensions.Logging; using RouteGuideBusinessLogics.BusinessLogics; using RouteGuideContracts.BindingModels; using RouteGuideContracts.BusinessLogicsContracts; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock; namespace RouteGuideView { /// /// Форма с тестами для сущности "Расписание" /// public partial class FormSchedulesTests : Form { /// /// Логгер /// private readonly ILogger _logger; /// /// Бизнес-логика для расписания /// private readonly IScheduleLogic _scheduleLogic; /// /// Бизнес-логика для маршрутов /// private readonly IRouteLogic _routeLogic; /// /// Конструктор /// /// /// /// public FormSchedulesTests(ILogger logger, IScheduleLogic scheduleLogic, IRouteLogic routeLogic) { InitializeComponent(); _logger = logger; _scheduleLogic = scheduleLogic; _routeLogic = routeLogic; numericUpDownInsert.Maximum = 10000; numericUpDownRead.Maximum = 10000; numericUpDownDelete.Maximum = 10000; } /// /// Кнопка "Создать" /// /// /// private void buttonInsert_Click(object sender, EventArgs e) { int entitiesCount = Convert.ToInt32(numericUpDownInsert.Value); _logger.LogInformation("ScheduleInsertTest. Count: {Count}", entitiesCount); try { double time = 0; var stopwatch = new Stopwatch(); int routeId = _routeLogic.ReadList(1)![0].Id; for (int i = 1; i <= entitiesCount; i++) { var model = new ScheduleBindingModel { Id = 0, Date = DateTime.Now, DepartureTime = DateTime.MinValue, ArrivalTime = DateTime.MaxValue, Frequency = DateTime.MinValue, RouteId = routeId }; stopwatch.Restart(); var operationResult = _scheduleLogic.Create(model); if (!operationResult) { throw new Exception("Ошибка при сохранении сущности 'Расписание'. Дополнительная информация в логах."); } stopwatch.Stop(); time += stopwatch.ElapsedMilliseconds; } labelInsertTime.Text = $"Total time: {Convert.ToInt32(time)} ms / Average time: {Convert.ToInt32(time / entitiesCount)} ms"; } catch (Exception ex) { _logger.LogError(ex, "ScheduleInsertTest. Test failed"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// Кнопка "Получить" /// /// /// private void buttonRead_Click(object sender, EventArgs e) { int entitiesCount = Convert.ToInt32(numericUpDownRead.Value); _logger.LogInformation("ScheduleReadTest. Count: {Count}", entitiesCount); try { var stopwatch = new Stopwatch(); stopwatch.Start(); _scheduleLogic.ReadList(entitiesCount); stopwatch.Stop(); labelReadTime.Text = $"Total time: {Convert.ToInt32(stopwatch.ElapsedMilliseconds)} ms / Average time: {Convert.ToInt32(stopwatch.ElapsedMilliseconds / entitiesCount)} ms"; } catch (Exception ex) { _logger.LogError(ex, "ScheduleReadTest. Test failed"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// /// Кнопка "Удалить" /// /// /// private void buttonDelete_Click(object sender, EventArgs e) { int entitiesCount = Convert.ToInt32(numericUpDownDelete.Value); _logger.LogInformation("ScheduleDeleteTest. Count: {Count}", entitiesCount); try { double time = 0; var stopwatch = new Stopwatch(); for (int i = 1; i <= entitiesCount; i++) { stopwatch.Restart(); _scheduleLogic.Delete(); stopwatch.Stop(); time += stopwatch.ElapsedMilliseconds; } labelDeleteTime.Text = $"Total time: {Convert.ToInt32(time)} ms / Average time: {Convert.ToInt32(time / entitiesCount)} ms"; } catch (Exception ex) { _logger.LogError(ex, "ScheduleDeleteTest. Test failed"); MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }