public void ThenICheckThatBatchesWithStatusHadSamlesOnlyWithTestOrOnlyWith(string status, string testName1, string testName2)
        {
            // проверяем, что в каждом бэтче только один тест
            BDMainPage bDMain = new BDMainPage();

            bDMain.OpenBatches();
            IsTrue(bDMain.AssertOpenBatches(), "Что-то пошло не так. не найден заголовок Бэтчи");
            BDBatchesPage bDBatches = new BDBatchesPage();

            bDBatches.WaitSearchButtonClickability();
            // проходим по всем бэтчам в статусе Собран и проверяем, что внутри есть только один из тестов
            int counter = 1;

            foreach (Object i in bDBatches.ListOfBatchesWithThisStatus(status))
            {
                bDBatches.OpenContentOfBatchForAnyStatus(status, counter);
                CommonSteps common = new CommonSteps();
                SecondTab = common.ThenTheTabWithTitleShouldBeOpened("BatchDropper");
                BDContentOfBatchPage bDContent = new BDContentOfBatchPage(SecondTab);
                IsFalse(bDContent.AssertFindSampleWithThisName(testName1)
                        & bDContent.AssertFindSampleWithThisName(testName2), "Что то пошло не так, в бэтче есть тесты с разными программами амплификации");
                Debug.WriteLine($"Проверка бэтча {counter} завершена");
                ++counter;
                bDMain.OpenBatches();
            }
        }
        public void ThenICheckCountOfBatches()
        {
            BDMainPage bDMainPage = new BDMainPage();

            bDMainPage.OpenBatches();
            IsTrue(bDMainPage.AssertOpenBatches(), "Не найден заголовок на странице");
            BDBatchesPage bDBatchesPage = new BDBatchesPage();

            IsTrue(bDBatchesPage.TheTableIsEmpty(), "В таблице есть бэтчи");
        }
        public void ThenICheckThatChild_BatchWasCreated()
        {
            BDMainPage bDMain = new BDMainPage();

            bDMain.OpenBatches();
            IsTrue(bDMain.AssertOpenBatches(), "Что-то пошло не так. не найден заголовок Бэтчи");
            // проверяем, что появился дочерний бэтч
            MSDatabaseConnector _msBDConnector = new MSDatabaseConnector(Config.MSDbBatchDropperStab);
            string        command   = $@"Select [Id] FROM [BatchDropperStab].[dbo].[Batches] Where Status = 31 and name like 'C-%'";
            var           BatchId   = _msBDConnector.QueryExecutorScalar(command);
            BDBatchesPage bDBatches = new BDBatchesPage();

            IsTrue(bDBatches.AssertChildBatch(BatchId), "Ошибка! Дочерний бэтч не создан!");
        }
        public void ThenGoToTheBathesPageToCheckForThePresenceOfBathesInTheStatus(int p0, string p1)
        {
            // проверяем, что сформировано 3 бэтча в статусе Сформирован
            BDMainPage bDMain = new BDMainPage();

            bDMain.OpenBatches();
            IsTrue(bDMain.AssertOpenBatches(), "Что-то пошло не так. не найден заголовок Бэтчи");
            BDBatchesPage bDBatches = new BDBatchesPage();

            bDBatches.WaitSearchButtonClickability();
            int countOfListOfBatchesWithThisStatus = bDBatches.ListOfBatchesWithThisStatus(p1).Count;

            if (countOfListOfBatchesWithThisStatus == p0)
            {
                Debug.WriteLine($"ОК. На странице Бэтчи отображаются {p0} бэтчей в статусе {p1}");
            }
            else
            {
                Debug.WriteLine($"Что-то пошло не так! Выведено {countOfListOfBatchesWithThisStatus} в статусе {p1}. Должно быть {p0}");
            }
        }
        public void WhenIGoToBathesPageICheckThatTheTabletConsistOfSamplesAndBatchHasStatus(int countSamples, string batchStatus)
        {
            BDMainPage bDMain = new BDMainPage();

            bDMain.OpenBatches();
            IsTrue(bDMain.AssertOpenBatches(), "Что-то пошло не так. не найден заголовок Бэтчи");
            //Проверить, что бэтч в статусе Собран
            MSDatabaseConnector _msBDConnector = new MSDatabaseConnector(Config.MSDbBatchDropperStab);
            string        command   = $@"Select [Id] FROM [BatchDropperStab].[dbo].[Batches] Where Status = 10 and name like 'P-%'";
            var           BatchId   = _msBDConnector.QueryExecutorScalar(command);
            BDBatchesPage bDBatches = new BDBatchesPage();

            if (bDBatches.BatchWithIdAndStatus(BatchId, batchStatus).Exists())
            {
                Debug.WriteLine($"ОК. Бэтч {BatchId} в статусе {batchStatus}");
            }
            else
            {
                throw new NullReferenceException($"Ошибочка вышла! Не найден бэтч '{BatchId}' в статусе '{batchStatus}'");
            }
            //проверить, что в содержимом бэтча под образцы занимают N колитчество лунок
            bDBatches.ClickToShowContentBatchWithIdButton(BatchId);
            CommonSteps common = new CommonSteps();

            SecondTab = common.ThenTheTabWithTitleShouldBeOpened("BatchDropper");
            BDContentOfBatchPage bDContent = new BDContentOfBatchPage(SecondTab);
            int countSamplesInBatch        = bDContent.ListOfDrippingSamples.Count;

            System.Threading.Thread.Sleep(2000);
            if (countSamplesInBatch == countSamples)
            {
                Debug.WriteLine($"ОК. Пробами занято {countSamples} лунок в бэтче");
            }
            else
            {
                throw new NullReferenceException($"Ошибочка вышла! В бэтче {BatchId} пробами занято {countSamplesInBatch} лунок вместо '{countSamples}'!");
            }
        }
        public void ThenIGoToTheBatchesPageToCheckThatFromLocationIs(string location, string condition)
        {
            BDMainPage bDMain = new BDMainPage();

            bDMain.OpenBatches();
            IsTrue(bDMain.AssertOpenBatches(), "Что-то пошло не так. не найден заголовок Бэтчи");
            //проверить, что отображается бэтч только из своей локации
            MSDatabaseConnector _msBDConnector = new MSDatabaseConnector(Config.MSDbBatchDropperStab);
            string        command   = $@"use BatchDropperStab
            SELECT TOP (1) b.id FROM batches  b with (nolock)
            inner join Locations l on l.id=b.LocationId
            WHERE l.name = '{location}'";
            var           BatchId   = _msBDConnector.QueryExecutorScalar(command);
            BDBatchesPage bDBatches = new BDBatchesPage();

            if (condition == "exists")
            {
                IsTrue(bDBatches.AssertBatchWithId(BatchId), $"Что то пошло не так - не находит бэтч {BatchId} в локации {location}");
            }
            else
            {
                IsFalse(bDBatches.AssertBatchWithId(BatchId), $"Что то пошло не так - найден бэтч {BatchId} в локации {location}");
            }
        }
        public void ThenICheckSendCopyResultsInBatchPage()
        {
            BDMainPage bDMainPage = new BDMainPage();

            bDMainPage.OpenBatches();                                                                                  // переходим на страницу Бэтчи
            MSDatabaseConnector _msBDConnector = new MSDatabaseConnector(Config.MSDbBatchDropperStab);
            string command        = $@"Select count ([Id]) FROM [BatchDropperStab].[dbo].[Batches] Where Status = 50"; // считаем количество бэтчей в статусе "Требует валидации"
            var    countOfBatches = _msBDConnector.QueryExecutorScalar(command);
            int    intCount;

            intCount = System.Convert.ToInt32(countOfBatches);

            if (intCount != 0)
            {
                string command1 = $@"SELECT [Id] FROM[BatchDropperStab].[dbo].[Batches] Where Status = 50 Order by ChangedOn desc";
                var    listOfID = _msBDConnector.QueryExecutor(command1);

                foreach (string id in listOfID) // Если подходящих бэтчей несколько, берём каждый
                {
                    // Кликаем на галку проверки на странице бэтчей
                    BDBatchesPage bDBatchesPage = new BDBatchesPage();
                    CommonSteps   commons       = new CommonSteps();
                    commons.RefreshPage();
                    IsTrue(bDBatchesPage.AssertContentOfBatchButton(), "Не найдена кнопка для открытия содержимого первого бэтча со статусом Требует валидации");
                    bDBatchesPage.OpenContentOfFirstNeedValidateTest();

                    SecondTab = commons.ThenTheTabWithTitleShouldBeOpened("BatchDropper");

                    BDBatchesPage bDBatchesPageNew = new BDBatchesPage(SecondTab);
                    bDBatchesPageNew.ClickIconResultsWasChecked();
                    IsTrue(bDBatchesPageNew.AssertDialogWindowConfirmIsOpen(), "Не открылось диалоговое окно подтверждения действия Результаты проверены");
                    bDBatchesPageNew.ClickConfirmButtonResultsWasChecked();

                    // отпраавляем результат
                    bDMainPage.OpenBatches();
                    commons.RefreshPage();

                    bDBatchesPage.ClickIconResultsReadyToSend();
                    IsTrue(bDBatchesPage.AssertDialogWindowReadyToSendIsOpen(), "Не открылось диалоговое окно подтверждения действия Экспорт в LW");
                    bDBatchesPage.ClickConfirmReadyToSendButton();
                    IsTrue(bDBatchesPage.AssertSucceedMessage(), "Сообщение об успехе не появилось");

                    // копируем файл с подтвержденным результатом в LabWare
                    var      batchNeedsCopy = System.Convert.ToInt32(id);
                    string[] getFile        = Directory.GetFiles(@"\\\\tst10-web.medlinx.corp\\BatchDropper\\LW_Stab\\", $"*{batchNeedsCopy}.csv");
                    string   fileName       = Path.GetFileName(getFile[0]);
                    System.Diagnostics.Debug.WriteLine(fileName);

                    File.Copy(getFile[0], $"\\\\tst10-lwapp.medlinx.corp\\LW-LIMS-V6\\LW-LIMS_KULIKOV-A\\{fileName}");

                    // проверяем, что файл скопировался
                    string[] checkFile = Directory.GetFiles(@"\\\\tst10-lwapp.medlinx.corp\\LW-LIMS-V6\\LW-LIMS_KULIKOV-A\\", $"*{batchNeedsCopy}.csv");
                    string   checkName = Path.GetFileName(checkFile[0]);
                    if (fileName == checkName)
                    {
                        System.Diagnostics.Debug.WriteLine("Результаты для бэтча " + batchNeedsCopy + " выгружены в LabWare");
                    }
                    else
                    {
                        System.Diagnostics.Debug.WriteLine("Что то пошло не так. Результаты бэтча " + batchNeedsCopy + " не удалось выгрузить в LabWare");
                    }
                    System.Threading.Thread.Sleep(4000);
                }// Этот блок будет воспроизведен для всех подходящих по статусу бэтчей
            }
            else
            {
                throw new NullReferenceException("Ошибочка вышла! В базе не найдено бэтчей, требующих проверки результатов");
            }
        }
        public void ThenIGetResultFileByAmplificatorUtilite()
        {
            BDMainPage bDMainPage = new BDMainPage();

            bDMainPage.OpenBatches();                                                                                  // переходим на страницу Бэтчи
            MSDatabaseConnector _msBDConnector = new MSDatabaseConnector(Config.MSDbBatchDropperStab);
            string command        = $@"Select count ([Id]) FROM [BatchDropperStab].[dbo].[Batches] Where Status = 40"; // считаем количество бэтчей в статусе "Отправлен на прибор"
            var    countOfBatches = _msBDConnector.QueryExecutorScalar(command);
            int    intCount;

            intCount = System.Convert.ToInt32(countOfBatches);


            if (intCount != 0)
            {
                string command1 = $@"SELECT [Id] FROM[BatchDropperStab].[dbo].[Batches] Where Status = 40 Order by ChangedOn desc";
                var    listOfID = _msBDConnector.QueryExecutor(command1);

                foreach (string id in listOfID)                    // Если подходящих бэтчей несколько, берём каждый
                {
                    int    intId  = System.Convert.ToInt32(id);    //Переводим id бэтча в числовое значение:
                    string fullId = "";                            // Определяем строку полного номера бэтча:

                    if (intId >= 1 && intId <= 999999)             // Присваиваем полный номер бэтча, в зависимости от его id:
                    {
                        fullId = intId.ToString().PadLeft(6, '0'); // переводим номер бэтча в строку и добавляем 0 впереди пока длина строки не станет равна 6
                    }
                    else
                    {
                        throw new NullReferenceException("Ошибочка вышла! Значение id бэтча не может быть более 999999 или менее 1. Ваше значение: " + intId);
                    }

                    System.Diagnostics.Debug.WriteLine("Окончательный номер бэтча: " + fullId);
                    // Копируем из папки заданий бэтчдроппера в утилитную папку заданий:
                    File.Copy($"\\\\tst10-web.medlinx.corp\\AmplificatorStab\\Task\\{fullId}.xml", $"D:\\UtilityAmplificator\\tasks\\{fullId}.xml");

                    // Запускаем утилиту у себя на компе:
                    Process emulationProc = new Process();
                    emulationProc = Process.Start("D:\\UtilityAmplificator\\Console.lnk");
                    System.Threading.Thread.Sleep(1000);
                    SendKeys.SendWait("{Enter}");
                    System.Threading.Thread.Sleep(1000);

                    // Копируем файл с результатами из утилитной папки в папку результатов бэтчдроппера:
                    File.Copy($"D:\\UtilityAmplificator\\results\\{fullId}_result.xml", $"\\\\tst10-web.medlinx.corp\\AmplificatorStab\\Result\\{fullId}_result.xml");
                    // выносим номер бетча строкой без нулей
                    var actualBatchId = intId.ToString();
                    // проверяем, что актуальный бэтч перешел статус "Требует валидации" за 10 секунд (?)
                    BDBatchesPage bDBatchesPage = new BDBatchesPage();
                    IsFalse(bDBatchesPage.IdBatchNeedsValidation(actualBatchId).Exists(new Options {
                        Timeout = System.TimeSpan.FromSeconds(10)
                    }), "Внимание! Бэтч не сменил статус!");
                    // берем бэтч
                    string command2            = $@"SELECT top 1 [Id] FROM [BatchDropperStab].[dbo].[Batches] Where Status = 50 order by ChangedOn desc";
                    var    batchNeedValidation = _msBDConnector.QueryExecutorScalar(command2);
                    if (batchNeedValidation == actualBatchId)
                    {
                        System.Diagnostics.Debug.WriteLine("Результаты для бэтча " + id + " выгружены в бэтчдроппер");
                    }
                    else
                    {
                        throw new NullReferenceException("Ошибочка вышла! Бэтч не перешел в статус Требует валидации. Id бэтча: " + intId);
                    }
                }
            }
        }