예제 #1
0
        public void TestFindDocumentWithClusteringKeyPart()
        {
            var documents            = CqlDocumentsForTests.GetCqlDocumentBindingMetaEntries(serializer);
            var firstPartnerPartyId  = documents[0].FirstPartnerPartyId;
            var secondPartnerPartyId = documents[0].SecondPartnerPartyId;

            using (var context = new CqlDbContext())
                context.InsertDocuments(documents);

            using var browser = new BrowserForTests();
            var showTableEntriesPage = browser.SwitchTo <BusinessObjectTablePage>("DocumentBindingsMeta");

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.GetFilter("BindingType").EnumSelect.SelectValueByText("ByPriceList");
            showTableEntriesPage.FilterModal.GetFilter("FirstPartnerPartyId").Input.ClearAndInputText(firstPartnerPartyId);
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.FilterModal.GetFilter("SecondPartnerPartyId").Input.WaitIncorrect();
            showTableEntriesPage.FilterModal.GetFilter("DocumentNumber").Input.WaitIncorrect();
            showTableEntriesPage.FilterModal.GetFilter("DocumentDate").DateTimeInTicks.WaitIncorrect();
            showTableEntriesPage.FilterModal.GetFilter("DocumentTime").DateTimeInTicks.WaitIncorrect();
            showTableEntriesPage.FilterModal.GetFilter("FirstPartnerPartyId").Input.WaitCorrect();

            showTableEntriesPage.FilterModal.GetFilter("SecondPartnerPartyId").Input.ClearAndInputText(secondPartnerPartyId);
            showTableEntriesPage.FilterModal.GetFilter("DocumentNumber").Input.ClearAndInputText("0");
            showTableEntriesPage.FilterModal.GetFilter("DocumentDate").Date.ClearAndInputText("10.10.2000");
            showTableEntriesPage.FilterModal.GetFilter("DocumentTime").DateTimeInTicks.ClearAndInputText(new DateTime(2020, 10, 10, 13, 12, 11, DateTimeKind.Utc).Ticks.ToString());

            var documentType          = documents[0].DocumentType;
            var documentCirculationId = documents[0].DocumentCirculationId.ToString();

            showTableEntriesPage.FilterModal.GetFilter("DocumentType").Input.ClearAndInputText(documentType);
            showTableEntriesPage.FilterModal.GetFilter("DocumentCirculationId").Input.ClearAndInputText(documentCirculationId);

            showTableEntriesPage.FilterModal.Apply.Click();
            showTableEntriesPage.BusinessObjectItems.WaitCount(1);
            showTableEntriesPage.BusinessObjectItems[0].FindColumn("DocumentCirculationId").WaitText(documentCirculationId);

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.GetFilter("DocumentType").Input.Clear();
            showTableEntriesPage.FilterModal.GetFilter("DocumentCirculationId").Input.Clear();
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitCount(10);
            showTableEntriesPage.BusinessObjectItems.Wait(row => row.FindColumn("DocumentCirculationId").Text).That(Is.EquivalentTo(documents.Select(x => x.DocumentCirculationId.ToString())));

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.GetFilter("DocumentType").Input.ClearAndInputText(documentType);
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitCount(5);
            showTableEntriesPage.BusinessObjectItems.Wait(row => row.FindColumn("DocumentType").Text).That(Is.All.EqualTo("Invoic"));

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.GetFilter("DocumentType").OperatorSelect.SelectValueByText(">");
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitCount(5);
            showTableEntriesPage.BusinessObjectItems.Wait(row => row.FindColumn("DocumentType").Text).That(Is.All.EqualTo("Orders"));
        }
예제 #2
0
        public void TestTwoPages()
        {
            var scopeId = Guid.NewGuid().ToString();

            CreateFtpUsers(21, scopeId);

            using var browser = new BrowserForTests();

            var businessObjectsPage = browser.SwitchTo <BusinessObjectsPage>();

            businessObjectsPage.FilterInput.ClearAndInputText("FtpUser");
            var ftpUsersLink = businessObjectsPage.ObjectGroups[0].ObjectsList.GetItemWithText(x => x.ObjectLink.Text, "FtpUser");

            var ftpUsersPage = ftpUsersLink.ObjectLink.ClickAndGoTo <BusinessObjectTablePage>();

            ftpUsersPage.OpenFilter.Click();
            ftpUsersPage.FilterModal.GetFilter("Login").Input.ClearAndInputText(scopeId);
            ftpUsersPage.FilterModal.Apply.Click();

            ftpUsersPage = browser.RefreshUntil(ftpUsersPage, page => page.ItemsCountInfo.Text.Get().Contains("Всего 21"));
            ftpUsersPage.ItemsCountInfo.WaitTextContains("Записи с 0 по 20", "Всего 21");
            ftpUsersPage.BusinessObjectItems.WaitCount(20);
            ftpUsersPage.Paging.PagesCount.Wait().That(Is.EqualTo(2));
            ftpUsersPage.Paging.GoToPage(2);
            ftpUsersPage.ItemsCountInfo.WaitTextContains("Записи с 20 по 21", "Всего 21");
            ftpUsersPage.BusinessObjectItems.WaitCount(1);
        }
예제 #3
0
        public void TestFindDocumentWithDifferentColumnTypes()
        {
            var document  = CqlDocumentsForTests.GetCqlConnectorDeliveryContext(serializer);
            var document2 = CqlDocumentsForTests.GetCqlConnectorDeliveryContext(serializer);

            using (var context = new CqlDbContext())
                context.InsertDocuments(new[] { document, document2 });

            using var browser = new BrowserForTests();
            var showTableEntriesPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectTablePage>("CqlConnectorDeliveryContext");

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.GetFilter("TimeSliceId").DateTimeInTicks.ClearAndInputText(document.TimeSliceId.UtcTicks.ToString());
            showTableEntriesPage.FilterModal.GetFilter("TimeSliceShardNumber").Input.ClearAndInputText(document.TimeSliceShardNumber.ToString());
            showTableEntriesPage.FilterModal.GetFilter("ContextId").Input.ClearAndInputText(document.ContextId.ToString());
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitCount(1);
            var row = showTableEntriesPage.BusinessObjectItems[0];

            row.FindColumn("TimeSliceId").WaitText(document.TimeSliceId.ToString("yyyy-MM-ddTHH:mm:ss.ffK"));
            row.FindColumn("TimeSliceShardNumber").WaitText(document.TimeSliceShardNumber.ToString());
            row.FindColumn("ContextId").WaitText(document.ContextId.ToString());

            row.Delete.Click();
            showTableEntriesPage.ConfirmDeleteObjectModal.Delete.Click();
            browser.RefreshUntil(showTableEntriesPage, x => x.NothingFound.IsPresent.Get());

            GetConnectorDeliveryContext(document).Length.Should().Be(0);
            GetConnectorDeliveryContext(document2).Single().Should().BeEquivalentTo(document2);
        }
예제 #4
0
        public void TestObjectKeysValidation()
        {
            var printingInfo   = CqlDocumentsForTests.GetCqlDocumentPrintingInfo();
            var printingInfoId = printingInfo.Id.ToString();

            using (var context = new CqlDbContext())
                context.InsertDocument(printingInfo);

            using var browser = new BrowserForTests();
            var showTableEntriesPage = browser.SwitchTo <BusinessObjectTablePage>("DocumentPrintingInfo");

            showTableEntriesPage.OpenFilter.Click();
            showTableEntriesPage.FilterModal.Apply.Click();
            var searchField = showTableEntriesPage.FilterModal.GetFilter("Id");

            searchField.InputValidation.ExpectIsOpenedWithMessage("Поле должно быть заполнено");
            searchField.Input.ClearAndInputText(Guid.NewGuid().ToString());
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitAbsence();
            showTableEntriesPage.NothingFound.WaitPresence();

            showTableEntriesPage.OpenFilter.Click();
            searchField = showTableEntriesPage.FilterModal.GetFilter("Id");
            searchField.Input.ClearAndInputText(printingInfoId);
            showTableEntriesPage.FilterModal.Apply.Click();

            showTableEntriesPage.BusinessObjectItems.WaitCount(1);
            showTableEntriesPage.BusinessObjectItems[0].FindColumn("Id").WaitText(printingInfoId);
        }
        public void TestDownloadByteContent()
        {
            var content = string.Join("\n", new[] { "this is large file content" }.Concat(Enumerable.Range(0, 10000).Select(i => (i % 256).ToString())));
            var blobId  = Guid.NewGuid();

            using (var context = new CqlDbContext())
                context.GetTable <CqlActiveBoxState>().Insert(new CqlActiveBoxState
                {
                    PartitionKey         = "0",
                    LastProcessedEventId = "0",
                    BoxId   = blobId,
                    Content = Encoding.UTF8.GetBytes(content),
                }).SetTimestamp(DateTimeOffset.UtcNow).Execute();

            using var browser = new BrowserForTests();

            var tempFileStoragePage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectTablePage>("CqlActiveBoxState");

            tempFileStoragePage.OpenFilter.Click();
            tempFileStoragePage.FilterModal.GetFilter("PartitionKey").Input.ClearAndInputText("0");
            tempFileStoragePage.FilterModal.GetFilter("BoxId").Input.ClearAndInputText(blobId.ToString());
            tempFileStoragePage.FilterModal.Apply.Click();
            tempFileStoragePage.BusinessObjectItems.WaitCount(1);

            var detailsPage = tempFileStoragePage.BusinessObjectItems[0].Details.ClickAndGoTo <BusinessObjectDetailsPage>();

            detailsPage.RootAccordion.FindField("Content").FieldValue.DownloadLink.Click();

            Thread.Sleep(1000);
            var file = browser.DownloadFile("CqlActiveBoxState-Content-dGhpcy.bin");

            file.Should().Be(content);
        }
예제 #6
0
        public void TestFiltrationWhenNotFirstPage()
        {
            var scopeId = Guid.NewGuid().ToString();

            CreateUsers(20, scopeId);

            var userId = Guid.NewGuid();

            CreateUsers(1, scopeId, userId);

            using var browser = new BrowserForTests();

            var userBusinessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            userBusinessObjectPage.OpenFilter.Click();
            userBusinessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            userBusinessObjectPage.FilterModal.Apply.Click();

            userBusinessObjectPage.Paging[1].Click();
            userBusinessObjectPage.BusinessObjectItems.WaitCount(1);

            userBusinessObjectPage.OpenFilter.Click();
            userBusinessObjectPage.FilterModal.Id.ClearAndInputText(userId.ToString());
            userBusinessObjectPage.FilterModal.Apply.Click();

            userBusinessObjectPage.ItemsCountInfo.WaitText("Записи с 0 по 1\r\n|\r\nВсего 1");
            userBusinessObjectPage.BusinessObjectItems.WaitCount(1);
        }
예제 #7
0
        public void TestRestrictionsForManyItems()
        {
            var totalCount = 100123;
            var scopeId    = GenerateRandomUsersAndAssertCount(totalCount)[0].ScopeId;

            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            businessObjectPage.FilterModal.Apply.Click();
            businessObjectPage.ItemsCountInfo.WaitTextContains("Всего 50000+");

            businessObjectPage.DownloadLink.Click();
            businessObjectPage.DownloadLimitModal.Header.WaitText("Слишком большой список");
            businessObjectPage.DownloadLimitModal.Body.WaitText("Мы умеем выгружать не более 50000 объектов из этой таблицы. Уточните запрос с помощью фильтров, чтобы записей стало меньше.");
            businessObjectPage.DownloadLimitModal.Cancel.Click();

            var adminBusinessObjectPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectTablePage>("UsersTable");

            adminBusinessObjectPage.OpenFilter.Click();
            adminBusinessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            adminBusinessObjectPage.FilterModal.Apply.Click();
            adminBusinessObjectPage.ItemsCountInfo.WaitTextContains("Всего 100123");

            var content = DownloadFile(browser, businessObjectPage);

            content.Length.Should().Be(100125);
        }
예제 #8
0
        public void TestChangeNumericValue()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            var integerRow = businessObjectEditingPage.RootAccordion.FindField("ShardNumber");

            integerRow.FieldValue.WaitText("0");
            integerRow.Edit.Click();
            integerRow.FieldValue.Input.AppendText($"{Keys.Control}a");
            integerRow.FieldValue.Input.AppendText("12.,45");
            integerRow.Save.Click();
            integerRow.FieldValue.WaitText("1245");
            integerRow.Edit.Click();
            integerRow.FieldValue.Input.AppendText($"{Keys.Control}a");
            integerRow.FieldValue.Input.AppendText("14ab");
            integerRow.Save.Click();
            integerRow.FieldValue.WaitText("14");

            browser.WebDriver.Navigate().Refresh();
            integerRow = businessObjectEditingPage.RootAccordion.FindField("ShardNumber");
            integerRow.FieldValue.WaitText("14");

            GetDocument(documentName, documentId).ShardNumber.Should().Be(14);

            var decimalRow = businessObjectEditingPage.RootAccordion.FindField("DocumentPrice");

            decimalRow.FieldValue.WaitText("10.1");
            decimalRow.Edit.Click();
            decimalRow.FieldValue.Input.AppendText($"{Keys.Control}a");
            decimalRow.FieldValue.Input.AppendText("12,45");
            decimalRow.Save.Click();
            decimalRow.FieldValue.WaitText("12.45");

            browser.WebDriver.Navigate().Refresh();
            decimalRow = businessObjectEditingPage.RootAccordion.FindField("DocumentPrice");
            decimalRow.FieldValue.WaitText("12.45");

            GetDocument(documentName, documentId).DocumentPrice.Should().Be(12.45m);

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            var nullableDecimalRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_TotalAmount");

            nullableDecimalRow.FieldValue.WaitText("10.2");
            nullableDecimalRow.Edit.Click();
            nullableDecimalRow.FieldValue.Input.AppendText($"{Keys.Control}a{Keys.Delete}");
            nullableDecimalRow.Save.Click();
            nullableDecimalRow.FieldValue.WaitText("null");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            nullableDecimalRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_TotalAmount");
            nullableDecimalRow.FieldValue.WaitText("null");

            GetDocument(documentName, documentId).DocumentContent.TotalAmount.Should().BeNull();
        }
예제 #9
0
        public void DeleteViaDetailsPageRequiresGodAccess()
        {
            var ftpUser = CreateFtpUser();

            using var browser = new BrowserForTests();
            var detailsPage = browser.SwitchTo <BusinessObjectDetailsPage>("FtpUser", $"Id={ftpUser.Id}");

            detailsPage.Delete.IsPresent.Wait().That(Is.False, "Delete link should only be present for gods");
        }
        public void TestLinkShouldReferToShowTablePage()
        {
            using var browser = new BrowserForTests();

            var businessObjectsPage = browser.SwitchTo <BusinessObjectsPage>();
            var link = businessObjectsPage.FindBusinessObjectLink("CQL Objects", "DocumentPrintingInfo");
            var page = link.ClickAndGoTo <BusinessObjectTablePage>();

            page.Header.WaitText("DocumentPrintingInfo");
        }
예제 #11
0
        public void TestCanNotEditScopeIdAndId()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            var row = businessObjectEditingPage.RootAccordion.FindField("id");

            row.Edit.WaitAbsence();
        }
        public void TestSearchLink()
        {
            using var browser = new BrowserForTests();

            var businessObjectsPage = browser.SwitchTo <BusinessObjectsPage>();

            businessObjectsPage.FilterInput.ClearAndInputText("DocumentPrintingInfo");
            businessObjectsPage.ObjectGroups.WaitCount(1);
            businessObjectsPage.ObjectGroups[0].ObjectsList.WaitCount(1);
            businessObjectsPage.FindBusinessObjectLink("CQL Objects", "DocumentPrintingInfo").WaitPresence();
        }
        public void TestValidation()
        {
            using var browser = new BrowserForTests();

            var businessObjectsPage = browser.SwitchTo <BusinessObjectsPage>();

            businessObjectsPage.FilterInput.ClearAndInputText("ApiClientThrift");
            businessObjectsPage.ObjectGroups.Wait(x => x.Name.Text).That(Is.EqualTo(new[] { "Business Array Objects" }));
            businessObjectsPage.ObjectGroups[0].ObjectsList.WaitCount(1);
            var link       = businessObjectsPage.ObjectGroups[0].ObjectsList.GetItemWithText(x => x.Text, "ApiClientThrift");
            var searchPage = link.ObjectLink.ClickAndGoTo <BusinessObjectTablePage>();

            searchPage.Header.WaitText("ApiClientThrift");
            var id         = searchPage.FilterModal.GetFilter("Id");
            var scopeId    = searchPage.FilterModal.GetFilter("ScopeId");
            var arrayIndex = searchPage.FilterModal.GetFilter("ArrayIndex");

            id.Input.ClearAndInputText("123");
            scopeId.Input.ClearAndInputText("123");

            searchPage.FilterModal.Apply.Click();
            arrayIndex.InputValidation.ExpectIsOpenedWithMessage("Поле должно быть заполнено");

            arrayIndex.Input.ClearAndInputText("    ");
            searchPage.FilterModal.Apply.Click();
            arrayIndex.InputValidation.ExpectIsOpenedWithMessage("Поле должно быть заполнено");

            arrayIndex.Input.ClearAndInputText("<script>");
            searchPage.FilterModal.Apply.Click();
            arrayIndex.InputValidation.ExpectIsOpenedWithMessage("Некорректный символ: '<'");

            arrayIndex.Input.ClearAndInputText("123");

            scopeId.Input.ClearAndInputText("    ");
            searchPage.FilterModal.Apply.Click();
            scopeId.InputValidation.ExpectIsOpenedWithMessage("Поле должно быть заполнено");

            scopeId.Input.ClearAndInputText(">##");
            searchPage.FilterModal.Apply.Click();
            scopeId.InputValidation.ExpectIsOpenedWithMessage("Некорректный символ: '>'");

            scopeId.Input.ClearAndInputText("123");

            id.Input.Clear();
            searchPage.FilterModal.Apply.Click();
            id.InputValidation.ExpectIsOpenedWithMessage("Поле должно быть заполнено");

            id.Input.ClearAndInputText("&##");
            searchPage.FilterModal.Apply.Click();
            id.InputValidation.ExpectIsOpenedWithMessage("Некорректный символ: '&'");
        }
        public void TestSearchIndexedField()
        {
            using var browser = new BrowserForTests();

            var businessObjects = browser.SwitchTo <BusinessObjectsPage>();

            businessObjects.FilterInput.ClearAndInputText("UsersTable");
            businessObjects.ObjectGroups.WaitCount(1);

            var objects = businessObjects.ObjectGroups.GetItemWithText(x => x.Name.Text, "Postgres Objects");

            objects.IndexedLabel.WaitPresence();
            objects.ObjectsList.WaitCount(1);
            objects.ObjectsList[0].ObjectLink.WaitText("UsersTable");
        }
예제 #15
0
        public void DeleteViaSearchPageRequiresGodAccess()
        {
            var ftpUser = CreateFtpUser();

            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("FtpUser");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.GetFilter("Login").Input.ClearAndInputText(ftpUser.Login);
            businessObjectPage.FilterModal.Apply.Click();

            businessObjectPage = browser.RefreshUntil(businessObjectPage, x => x.BusinessObjectItems.IsPresent.Get());
            businessObjectPage.BusinessObjectItems.WaitCount(1);
            businessObjectPage.BusinessObjectItems[0].Delete.IsPresent.Wait().That(Is.False, "Delete link should only be present for gods");
        }
        public void TestObjectNotFound()
        {
            using var browser = new BrowserForTests();

            var searchPage = browser.SwitchTo <BusinessObjectTablePage>("ApiClientThrift");

            searchPage.Header.WaitText("ApiClientThrift");
            searchPage.FilterModal.GetFilter("Id").Input.ClearAndInputText("123");
            searchPage.FilterModal.GetFilter("ScopeId").Input.ClearAndInputText("123");
            searchPage.FilterModal.GetFilter("ArrayIndex").Input.ClearAndInputText("123");
            searchPage.FilterModal.Apply.Click();

            searchPage.NothingFound.WaitPresence();
            searchPage.BusinessObjectItems.WaitAbsence();
        }
예제 #17
0
        public void TestEmptyList()
        {
            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.ScopeId.ClearAndInputText(Guid.NewGuid().ToString());
            businessObjectPage.FilterModal.Apply.Click();
            businessObjectPage.ItemsCountInfo.WaitTextContains("Всего 0");
            businessObjectPage.NothingFound.WaitPresence();

            var content = DownloadFile(browser, businessObjectPage);

            content.Length.Should().Be(2);
        }
예제 #18
0
        private static string[] DownloadFile(BrowserForTests browser, BusinessObjectTablePage businessObjectPage)
        {
            businessObjectPage.DownloadLink.Click();
            var filename = $"UsersTable-{DateTime.UtcNow:yyyy-MM-dd-HHmm}.csv";

            Thread.Sleep(1000);
            var file    = browser.DownloadFile(filename);
            var content = file.Split("\n");

            if (content.Length == 1)
            {
                Console.WriteLine($"File Content: '{file}'");
            }
            return(content);
        }
예제 #19
0
        public void TestRestrictionsFor50000Items()
        {
            var scopeId = GenerateRandomUsersAndAssertCount(50000)[0].ScopeId;

            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            businessObjectPage.FilterModal.Apply.Click();
            businessObjectPage.ItemsCountInfo.WaitTextContains("Всего 50000");

            var content = DownloadFile(browser, businessObjectPage);

            content.Length.Should().Be(50002);
        }
예제 #20
0
        public void TestChangeValueInArrayElement()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_0").ToggleButton.Click();
            var inArrayFieldRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_GoodItems_0_Name");

            inArrayFieldRow.FieldValue.WaitText("Name of lintem");
            inArrayFieldRow.Edit.Click();
            inArrayFieldRow.FieldValue.Input.ClearAndInputText("Changed name");
            inArrayFieldRow.Save.Click();
            inArrayFieldRow.FieldValue.WaitText("Changed name");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_0").ToggleButton.Click();
            inArrayFieldRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_GoodItems_0_Name");
            inArrayFieldRow.FieldValue.WaitText("Changed name");

            GetDocument(documentName, documentId).DocumentContent.GoodItems[0].Name.Should().Be("Changed name");

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_1").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_1_CustomDeclarationNumbers").ToggleButton.Click();
            var inArrayInArrayFieldRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_GoodItems_1_CustomDeclarationNumbers_0");

            inArrayInArrayFieldRow.FieldValue.WaitText("224");
            inArrayInArrayFieldRow.Edit.Click();
            inArrayInArrayFieldRow.FieldValue.Input.ClearAndInputText("225a");
            inArrayInArrayFieldRow.Save.Click();
            inArrayInArrayFieldRow.FieldValue.WaitText("225a");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_1").ToggleButton.Click();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent_GoodItems_1_CustomDeclarationNumbers").ToggleButton.Click();
            inArrayInArrayFieldRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_GoodItems_1_CustomDeclarationNumbers_0");
            inArrayInArrayFieldRow.FieldValue.WaitText("225a");

            GetDocument(documentName, documentId).DocumentContent.GoodItems[1].CustomDeclarationNumbers[0].Should().Be("225a");
        }
예제 #21
0
        public void DeleteViaDetailsPage(bool confirmDeletion)
        {
            var ftpUser = CreateFtpUser();

            using var browser = new BrowserForTests();
            var detailsPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>("FtpUser", $"Id={ftpUser.Id}");

            detailsPage.Delete.Click();
            ConfirmDeletion(detailsPage.ConfirmDeleteObjectModal, confirmDeletion);

            if (confirmDeletion)
            {
                detailsPage.GoTo <BusinessObjectTablePage>();
            }

            AssertFtpUserExistence(ftpUser.Id, confirmDeletion);
        }
예제 #22
0
        public void TestContentSortedAndSelectColumns()
        {
            var users   = GenerateRandomUsersAndAssertCount(10);
            var scopeId = users[0].ScopeId;

            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            businessObjectPage.FilterModal.Apply.Click();

            businessObjectPage.TableHeader.SortByColumn("Header_Id");
            var columns = new[] { "Email", "Id", "ScopeId", "LastModificationDateTime" };

            businessObjectPage.FieldSettings.Click();
            businessObjectPage.ColumnSelector.TypesSelectAll.Click();
            foreach (var column in columns)
            {
                businessObjectPage.ColumnSelector.ColumnCheckboxes.GetCheckbox(column).Click();
            }

            var content = DownloadFile(browser, businessObjectPage);

            content.Length.Should().Be(12);

            var usersById    = users.ToDictionary(x => x.Id.ToString(), x => x);
            var sep          = ";";
            var headerFields = new[] { "Id", "ScopeId", "LastModificationDateTime", "Email" };
            var header       = string.Join(sep, headerFields.Select(FormatString));

            content[0].Should().Be(header);
            content[11].Should().BeEmpty();
            for (var i = 1; i < 11; i++)
            {
                var item = content[i].Split(new[] { sep }, StringSplitOptions.None);
                var key  = item[0].Replace("\"", "").Replace("=", "");
                var user = usersById[key];
                item[0].Should().Be(FormatString(key));
                item[1].Should().Be(FormatString(user.ScopeId));
                DateTime.TryParseExact(item[2].Replace("\"", ""), "O", CultureInfo.InvariantCulture, DateTimeStyles.None, out _).Should().BeTrue();
                item[3].Should().Be(FormatString(user.Email));
            }
        }
예제 #23
0
        public void TestAllowSort()
        {
            using (var context = new EntityFrameworkDbContext())
            {
                var serializer = new Serializer(new AllPropertiesExtractor());
                var customer   = new Customer {
                    Age = 1, Name = "13"
                };
                context.Tests.Add(new TestTable
                {
                    Id                 = 1,
                    CompositeKey       = Guid.NewGuid().ToString(),
                    String             = "123",
                    Customer           = customer,
                    CustomerSerialized = serializer.Serialize(customer),
                });
                context.Users.Add(new UsersTable
                {
                    Email      = "123",
                    Id         = Guid.NewGuid(),
                    Patronymic = "1",
                    Surname    = "2",
                    FirstName  = "3",
                    ScopeId    = "scopeId",
                });
                context.SaveChanges();
            }

            using var browser = new BrowserForTests();

            var usersPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectTablePage>("UsersTable");

            usersPage = browser.RefreshUntil(usersPage, x => x.BusinessObjectItems.IsPresent.Get());
            usersPage.TableHeader.WaitPresence();
            usersPage.TableHeader.SortByColumn("Header_Id");

            var largeObjectPage = browser.SwitchTo <BusinessObjectTablePage>("TestTable");

            largeObjectPage = browser.RefreshUntil(largeObjectPage, x => x.BusinessObjectItems.IsPresent.Get());
            largeObjectPage.TableHeader.WaitPresence();
            largeObjectPage.TableHeader.WaitNotSortable("Header_Index");
            largeObjectPage.TableHeader.WaitNotSortable("Header_String");
            largeObjectPage.TableHeader.WaitNotSortable("Header_DateTime");
        }
예제 #24
0
        public void TestNonSuperUserCantEditOrDeleteObject()
        {
            var document = CqlDocumentsForTests.GetCqlDocumentPrintingInfo();

            using (var context = new CqlDbContext())
                context.GetTable <DocumentPrintingInfo>().Insert(document).SetTimestamp(DateTimeOffset.UtcNow).Execute();

            using var browser = new BrowserForTests();
            var printingInfoPage = browser.SwitchTo <BusinessObjectTablePage>("DocumentPrintingInfo");

            printingInfoPage.OpenFilter.Click();
            printingInfoPage.FilterModal.GetFilter("Id").Input.ClearAndInputText(document.Id.ToString());
            printingInfoPage.FilterModal.Apply.Click();

            var detailsPage = printingInfoPage.BusinessObjectItems[0].Details.ClickAndGoTo <BusinessObjectDetailsPage>();

            detailsPage.RootAccordion.FindField("PartyId").Edit.WaitAbsence();
            detailsPage.Delete.WaitAbsence();
        }
예제 #25
0
        public void TestTableFiltration()
        {
            var scopeId = Guid.NewGuid().ToString();

            CreateUsers(21, scopeId);

            var filtrationGuid = Guid.NewGuid();

            CreateUsers(1, scopeId, filtrationGuid);

            using var browser = new BrowserForTests();
            var userBusinessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            userBusinessObjectPage.OpenFilter.Click();
            userBusinessObjectPage.FilterModal.Id.ClearAndInputText(filtrationGuid.ToString());
            userBusinessObjectPage.FilterModal.Apply.Click();

            userBusinessObjectPage.BusinessObjectItems.WaitCount(1);
            userBusinessObjectPage.BusinessObjectItems[0].Id.WaitText(filtrationGuid.ToString());
        }
예제 #26
0
        public void TestInputValidation()
        {
            CreateUsers(1, Guid.NewGuid().ToString());

            using var browser = new BrowserForTests();

            var userBusinessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            userBusinessObjectPage.OpenFilter.Click();
            var filter = userBusinessObjectPage.FilterModal.GetFilter("ScopeId");

            filter.Input.ClearAndInputText("<script>");
            userBusinessObjectPage.FilterModal.Apply.Click();
            filter.InputValidation.ExpectIsOpenedWithMessage("Некорректный символ: '<'");
            filter.Input.ClearAndInputText("    ");
            userBusinessObjectPage.FilterModal.Apply.Click();
            userBusinessObjectPage.FilterModal.WaitAbsence();
            userBusinessObjectPage.NothingFound.WaitAbsence();
            userBusinessObjectPage.BusinessObjectItems.Count.Wait().That(Is.GreaterThan(0));
        }
예제 #27
0
        public void TestChangeEnumValue()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            var filledEnumRow = businessObjectEditingPage.RootAccordion.FindField("DocumentType");

            filledEnumRow.FieldValue.WaitText("Orders");
            filledEnumRow.Edit.Click();
            filledEnumRow.FieldValue.EnumSelect.WaitItems(new[] { "Orders", "Desadv" });
            filledEnumRow.FieldValue.EnumSelect.SelectValueByText("Desadv");
            filledEnumRow.Save.Click();
            filledEnumRow.FieldValue.WaitText("Desadv");

            browser.WebDriver.Navigate().Refresh();
            filledEnumRow = businessObjectEditingPage.RootAccordion.FindField("DocumentType");
            filledEnumRow.FieldValue.WaitText("Desadv");

            GetDocument(documentName, documentId).DocumentType.Should().Be(DocumentType.Desadv);

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            var nullableEnumRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_OrderStatus");

            nullableEnumRow.FieldValue.WaitText("Processed");
            nullableEnumRow.Edit.Click();
            nullableEnumRow.FieldValue.EnumSelect.WaitItems(new[] { "null", "Processed", "Failed" });
            nullableEnumRow.FieldValue.EnumSelect.SelectValueByText("null");
            nullableEnumRow.Save.Click();
            nullableEnumRow.FieldValue.WaitText("null");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            nullableEnumRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_OrderStatus");
            nullableEnumRow.FieldValue.WaitText("null");

            GetDocument(documentName, documentId).DocumentContent.OrderStatus.Should().BeNull();
        }
예제 #28
0
        public void TestChangeBooleanValue()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            var booleanRow = businessObjectEditingPage.RootAccordion.FindField("IsLargeDocument");

            booleanRow.FieldValue.WaitText("false");
            booleanRow.Edit.Click();
            booleanRow.FieldValue.BooleanSelect.WaitItems(new[] { "false", "true" });
            booleanRow.FieldValue.BooleanSelect.SelectValueByText("true");
            booleanRow.Save.Click();
            booleanRow.FieldValue.WaitText("true");

            browser.WebDriver.Navigate().Refresh();
            booleanRow = businessObjectEditingPage.RootAccordion.FindField("IsLargeDocument");
            booleanRow.FieldValue.WaitText("true");

            GetDocument(documentName, documentId).IsLargeDocument.Should().BeTrue();

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            var nullableBoolRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_WasRead");

            nullableBoolRow.FieldValue.WaitText("true");
            nullableBoolRow.Edit.Click();
            nullableBoolRow.FieldValue.BooleanSelect.WaitItems(new[] { "null", "false", "true" });
            nullableBoolRow.FieldValue.BooleanSelect.SelectValueByText("null");
            nullableBoolRow.Save.Click();
            nullableBoolRow.FieldValue.WaitText("null");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            nullableBoolRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_WasRead");
            nullableBoolRow.FieldValue.WaitText("null");

            GetDocument(documentName, documentId).DocumentContent.WasRead.Should().BeNull();
        }
예제 #29
0
        public void TestChangeDocumentDates()
        {
            var documentId = CreateDocument(documentName);

            using var browser = new BrowserForTests();
            var businessObjectEditingPage = browser.LoginAsSuperUser().SwitchTo <BusinessObjectDetailsPage>(documentName, $"Id={documentId}");

            var filledDateRow = businessObjectEditingPage.RootAccordion.FindField("DocumentDate");

            filledDateRow.FieldValue.WaitTextContains("2014-12-11");
            filledDateRow.Edit.Click();
            filledDateRow.FieldValue.Date.ClearAndInputText("13.12.2014");
            filledDateRow.FieldValue.Time.ClearAndInputText("10:18");
            filledDateRow.Save.Click();
            filledDateRow.FieldValue.WaitTextContains("2014-12-13");

            browser.WebDriver.Navigate().Refresh();
            filledDateRow = businessObjectEditingPage.RootAccordion.FindField("DocumentDate");
            filledDateRow.FieldValue.WaitTextContains("2014-12-13");

            GetDocument(documentName, documentId).DocumentDate.Should().Be(new DateTimeOffset(2014, 12, 13, 10, 18, 00, 00, TimeSpan.Zero));

            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            var unfilledDateRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_DeliveryDate");

            unfilledDateRow.FieldValue.WaitText("null");
            unfilledDateRow.Edit.Click();
            unfilledDateRow.FieldValue.Date.ClearAndInputText("14.12.2014");
            unfilledDateRow.FieldValue.Time.ClearAndInputText("20:19");
            unfilledDateRow.Save.Click();
            unfilledDateRow.FieldValue.WaitText("2014-12-14T20:19:00Z");

            browser.WebDriver.Navigate().Refresh();
            businessObjectEditingPage.RootAccordion.FindAccordionToggle("DocumentContent").ToggleButton.Click();
            unfilledDateRow = businessObjectEditingPage.RootAccordion.FindField("DocumentContent_DeliveryDate");
            unfilledDateRow.FieldValue.WaitText("2014-12-14T20:19:00Z");

            GetDocument(documentName, documentId).DocumentContent.DeliveryDate.Should().Be(new DateTime(2014, 12, 14, 20, 19, 00, 00, DateTimeKind.Utc));
        }
예제 #30
0
        public void TestContent()
        {
            var users   = GenerateRandomUsersAndAssertCount(10);
            var scopeId = users[0].ScopeId;

            using var browser = new BrowserForTests();
            var businessObjectPage = browser.SwitchTo <BusinessObjectTablePage>("UsersTable");

            businessObjectPage.OpenFilter.Click();
            businessObjectPage.FilterModal.ScopeId.ClearAndInputText(scopeId);
            businessObjectPage.FilterModal.Apply.Click();

            var content = DownloadFile(browser, businessObjectPage);

            content.Length.Should().Be(12);

            var usersById    = users.ToDictionary(x => x.Id.ToString(), x => x);
            var sep          = ";";
            var headerFields = new[] { "Id", "ScopeId", "LastModificationDateTime", "Email", "FirstName", "Surname", "Patronymic", "IsSuperUser" };
            var header       = string.Join(sep, headerFields.Select(FormatString));

            content[0].Should().Be(header);
            content[11].Should().BeEmpty();
            for (var i = 1; i < 11; i++)
            {
                var item  = content[i].Split(new[] { sep }, StringSplitOptions.None);
                var key   = item[0].Replace("\"", "").Replace("=", "");
                var user  = usersById[key];
                var empty = FormatString(string.Empty);
                item[1].Should().Be(FormatString(scopeId));
                DateTime.TryParseExact(item[2].Replace("\"", ""), "O", CultureInfo.InvariantCulture, DateTimeStyles.None, out _).Should().BeTrue();
                item[3].Should().Be(FormatString(user.Email));
                item[4].Should().Be(empty);
                item[5].Should().Be(FormatNumber("123"));
                item[6].Should().Be(FormatString("Some String"));
                item[7].Should().Be(FormatString("False"));
            }
        }