Ejemplo n.º 1
0
        public void HandleCurrentBookStatus_LockedByFakeUser_FakeUserConvertedToCurrentUser()
        {
            var originalValue = SIL.Windows.Forms.Registration.Registration.Default.Email;

            try
            {
                SIL.Windows.Forms.Registration.Registration.Default.Email = "*****@*****.**";

                var mockBook = new Mock <Bloom.Book.Book>();
                mockBook.Setup(m => m.IsSaveable).Returns(true);
                mockBook.Setup(m => m.FolderPath).Returns("");
                var mockBookSelection = new Mock <BookSelection>();
                mockBookSelection.Setup(m => m.CurrentSelection).Returns(mockBook.Object);

                var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks(true).
                                 WithBookSelection(mockBookSelection.Object);
                var api = apiBuilder.Build();
                api.RegisterWithApiHandler(_server.ApiHandler);

                var mockTeamCollection = SetupMockTcForBookStatus(apiBuilder);
                mockTeamCollection.Setup(x => x.WhoHasBookLocked(It.IsAny <string>())).Returns("this user");
                mockTeamCollection.Setup(x => x.WhatComputerHasBookLocked(It.IsAny <string>())).Returns("My Computer");

                // System Under Test
                var result = ApiTest.GetString(_server, endPoint: "teamCollection/selectedBookStatus", returnType: ApiTest.ContentType.Text);

                // Verification
                StringAssert.Contains("\"who\":\"[email protected]\"", result);
            }
            finally
            {
                // Cleanup
                SIL.Windows.Forms.Registration.Registration.Default.Email = originalValue;
            }
        }
        public void Get_EndPointCaseIsIgnored()
        {
            var result = ApiTest.GetString(_server, endPoint: "fooBAR", endOfUrlForTest: "FOObar",
                                           handler: request => request.PostSucceeded());

            Assert.That(result, Is.EqualTo("OK"));
        }
Ejemplo n.º 3
0
        public void HandleCurrentBookStatus_LockedByRealUser_StatusIndicatesThatuser()
        {
            var originalValue = SIL.Windows.Forms.Registration.Registration.Default.Email;

            try
            {
                SIL.Windows.Forms.Registration.Registration.Default.Email = "*****@*****.**";

                var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks(true);
                var api        = apiBuilder.Build();
                api.RegisterWithApiHandler(_server.ApiHandler);

                var mockTeamCollection = SetupMockTcForBookStatus(apiBuilder);
                mockTeamCollection.Setup(x => x.WhoHasBookLocked(It.IsAny <string>())).Returns("*****@*****.**");
                mockTeamCollection.Setup(x => x.WhatComputerHasBookLocked(It.IsAny <string>())).Returns("Other's Computer");

                // System Under Test
                var result = ApiTest.GetString(_server, endPoint: "teamCollection/selectedBookStatus", returnType: ApiTest.ContentType.Text);

                // Verification
                StringAssert.Contains("\"who\":\"[email protected]\"", result);
            }
            finally
            {
                // Cleanup
                SIL.Windows.Forms.Registration.Registration.Default.Email = originalValue;
            }
        }
        public void Get_RegexEndPoint()
        {
            var result = ApiTest.GetString(_server, endPoint: "foo[0-9]bar", endOfUrlForTest: "foo7bar",
                                           handler: request => request.PostSucceeded());

            Assert.That(result, Is.EqualTo("OK"));
        }
        public void Get_EndPointHasTwoSegments_Works()
        {
            var result = ApiTest.GetString(_server, endPoint: "parent/child", query: "color=blue", returnType: ApiTest.ContentType.Text,
                                           handler: request => request.PostSucceeded());

            Assert.That(result, Is.EqualTo("OK"));
        }
Ejemplo n.º 6
0
        public void HandleGetLog_NonZeroMessages_MessagesReturned()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            var mockMessageLog = new Mock <ITeamCollectionMessageLog>();

            apiBuilder.MockTeamCollectionManager.SetupGet(x => x.MessageLog).Returns(mockMessageLog.Object);
            mockMessageLog.Setup(x => x.GetProgressMessages()).Returns(
                new BloomWebSocketProgressEvent[]
            {
                new BloomWebSocketProgressEvent("unused", ProgressKind.Progress, "1"),
                new BloomWebSocketProgressEvent("unused", ProgressKind.Progress, "2")
            }
                );

            // System Under Test
            var result = ApiTest.GetString(_server, endPoint: "teamCollection/getLog", returnType: ApiTest.ContentType.JSON);

            // Verification
            var deserializedArray = JsonConvert.DeserializeObject <BloomWebSocketProgressEvent[]>(result);
            var messages          = deserializedArray.Select(x => x.message).ToArray();

            CollectionAssert.AreEqual(new string[] { "1", "2" }, messages);
        }
Ejemplo n.º 7
0
        public void ReportHeadingHtml_GivenPreEncodedHtmlInSummary_ReturnsRawHtmlDirectly()
        {
            bool isSummaryPreEncoded = true;

            SetupApiHandler(GetDefaultBookSelection());

            ProblemReportApi.GatherReportInfoExceptScreenshot(null, "Fake Details", "Fake Problem: See <a href=\"http://bloomlibrary.org\">Bloom Library</a> for help", isSummaryPreEncoded);
            var result = ApiTest.GetString(_server, "problemReport/reportHeadingHtml");

            Assert.That(result, Is.EqualTo("Fake Problem: See <a href=\"http://bloomlibrary.org\">Bloom Library</a> for help"));
        }
Ejemplo n.º 8
0
        public void ReportHeadingHtml_GivenUnencodedHtmlInSummary_EncodesTheHtml()
        {
            bool isSummaryPreEncoded = false;

            SetupApiHandler(GetDefaultBookSelection());

            ProblemReportApi.GatherReportInfoExceptScreenshot(null, "Fake Details", "Fake Problem: See <a href=\"http://bloomlibrary.org\">Bloom Library</a> for help", isSummaryPreEncoded);
            var result = ApiTest.GetString(_server, "problemReport/reportHeadingHtml");

            Assert.That(result, Is.EqualTo("Fake Problem: See &lt;a href=&quot;http://bloomlibrary.org&quot;&gt;Bloom Library&lt;/a&gt; for help"));
        }
Ejemplo n.º 9
0
        public void HandleRepoFolderPath_NullCurrCollection_ReturnsEmptyString()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            // System Under Test
            var result = ApiTest.GetString(_server, endPoint: "teamCollection/repoFolderPath", returnType: ApiTest.ContentType.Text);

            Assert.That(result, Is.EqualTo(""));
        }
        public void Get_OneParameter_KeyValueReceived()
        {
            var result = ApiTest.GetString(_server, endPoint: "test", query: "color=blue", returnType: ApiTest.ContentType.Text,
                                           handler: request =>
            {
                Assert.That(request.RequiredParam("color"), Is.EqualTo("blue"));
                request.ReplyWithText(request.RequiredParam("color"));
            }
                                           );

            Assert.That(result, Is.EqualTo("blue"));
        }
Ejemplo n.º 11
0
        public void HandleIsTeamCollectionEnabled_ExceptionThrown_RequestFailed()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            apiBuilder.MockTeamCollectionManager.SetupGet(x => x.CurrentCollectionEvenIfDisconnected).Returns(() => throw new ApplicationException());

            // System Under Test
            TestDelegate systemUnderTest = () => ApiTest.GetString(_server, endPoint: "teamCollection/isTeamCollectionEnabled", returnType: ApiTest.ContentType.Text);

            Assert.Throws(typeof(System.Net.WebException), systemUnderTest);
        }
Ejemplo n.º 12
0
        public void HandleIsTeamCollectionEnabled_NoCollection_ReturnsFalse()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            // apiBuilder.MockTeamCollectionManager.Object.CurrentCollectionEvenIfDisconnected hasn't been changed,
            // so it will return null

            // System Under Test
            var result = ApiTest.GetString(_server, endPoint: "teamCollection/isTeamCollectionEnabled", returnType: ApiTest.ContentType.Text);

            Assert.That(result, Is.EqualTo("false"));
        }
Ejemplo n.º 13
0
        public void HandleGetLog_NullMessageLog_RequestFailed()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            apiBuilder.MockTeamCollectionManager.SetupGet(x => x.MessageLog).Returns((ITeamCollectionMessageLog)null);

            TestDelegate systemUnderTest = () =>
            {
                ApiTest.GetString(_server, endPoint: "teamCollection/getLog", returnType: ApiTest.ContentType.JSON);
            };

            Assert.Throws(typeof(System.Net.WebException), systemUnderTest);
        }
Ejemplo n.º 14
0
        public void HandleRepoFolderPath_NonNullCurrCollection_ReturnsRepoDescription()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            var mockTeamCollection = new Mock <Bloom.TeamCollection.TeamCollection>();

            mockTeamCollection.SetupGet(x => x.RepoDescription).Returns("Fake Description");

            apiBuilder.MockTeamCollectionManager.SetupGet(x => x.CurrentCollectionEvenIfDisconnected).Returns(mockTeamCollection.Object);

            // System Under Test
            var result = ApiTest.GetString(_server, endPoint: "teamCollection/repoFolderPath", returnType: ApiTest.ContentType.Text);

            Assert.That(result, Is.EqualTo("Fake Description"));
        }
Ejemplo n.º 15
0
        public void HandleIsTeamCollectionEnabled_CurrentSelectionNull_ReturnsTrue()
        {
            var apiBuilder = new TeamCollectionApiBuilder().WithDefaultMocks();
            var api        = apiBuilder.Build();

            api.RegisterWithApiHandler(_server.ApiHandler);

            var mockTeamCollection = new Mock <Bloom.TeamCollection.TeamCollection>();

            apiBuilder.MockTeamCollectionManager.SetupGet(x => x.CurrentCollectionEvenIfDisconnected).Returns(mockTeamCollection.Object);

            // apiBuilder.MockBookSelection.Object.CurrentSelection will return null

            // System Under Test
            var result = ApiTest.GetString(_server, endPoint: "teamCollection/isTeamCollectionEnabled", returnType: ApiTest.ContentType.Text);

            Assert.That(result, Is.EqualTo("true"));
        }
Ejemplo n.º 16
0
        public void HandleCurrentBookStatus_InsufficientRegistration_RequestFails()
        {
            var originalValue = SIL.Windows.Forms.Registration.Registration.Default.Email;

            try
            {
                SIL.Windows.Forms.Registration.Registration.Default.Email = "";

                var api = new TeamCollectionApiBuilder().WithDefaultMocks().Build();
                api.RegisterWithApiHandler(_server.ApiHandler);

                // System Under Test
                TestDelegate systemUnderTest = () => ApiTest.GetString(_server, endPoint: "teamCollection/currentBookStatus", returnType: ApiTest.ContentType.Text);

                Assert.Throws(typeof(System.Net.WebException), systemUnderTest);
            }
            finally
            {
                SIL.Windows.Forms.Registration.Registration.Default.Email = originalValue;
            }
        }
 public void Get_Unrecognized_Throws()
 {
     Assert.Throws <System.Net.WebException>(() => ApiTest.GetString(_server, endPoint: "foo[0-9]bar", endOfUrlForTest: "foobar",
                                                                     handler: request => request.PostSucceeded()));
 }
Ejemplo n.º 18
0
        public void IsReceivingApiCalls()
        {
            var result = ApiTest.GetString(_server, "readers/io/test");

            Assert.That(result, Is.EqualTo("OK"));
        }
Ejemplo n.º 19
0
        public void GetTextOfContentPagesAsJson_OmitsUnwantedPages()
        {
            var htmlLeveledReader = $@"<html><head><meta charset='UTF-8'></meta></head>
<body class='leveled-reader' data-l1='en' data-l2='fr' data-l3='es'>
    <!-- ignore page with bloom-frontMatter class -->
    <div class='bloom-page bloom-frontMatter' id='b8408838-e9ed-4d76-bb8a-24ad0708b329' lang='fr'>
        <div class='marginBox'>
            <div class='bloom-translationGroup bookTitle' data-default-languages='V,N1'>
                <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                    <p>Level Two</p>
                </div>
            </div>
            <div class='bloom-imageContainer' title='Name: aor_IN16.png'>
                <img src='aor_IN16.png'></img>
                <div class='bloom-translationGroup bloom-imageDescription'>
                    <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>cat</div>
                </div>
            </div>
        </div>
    </div>
    <!-- ignore page with bloom-nonprinting class -->
    <div class='bloom-page bloom-noreader bloom-nonprinting screen-only' id='33b7e4c5-6cd1-4611-a50f-85837143cbf6' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Translation Instructions' lang='en'>Translation Instructions</div>
        <div class='marginBox'>
            <div class='split-pane-component-inner'>
                <div class='bloom-translationGroup' data-default-languages='*'>
                    <div class='bloom-editable bloom-content1 bloom-visibility-code-on' data-book='' lang='en' contenteditable='true'>
                        <p>Instructions in vernacular language ...</p>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- skip over page with no bloom-content1 content apart from image descriptions -->
	<div class='bloom-page numberedPage' id='a2ecb8be-5c7f-440d-9ef5-d503476211cd' data-page-number='1' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Just a Picture' lang='en'>Just a Picture</div>
        <div class='marginBox'>
            <div class='split-pane-component-inner'>
                <div class='bloom-imageContainer' title='Name: aor_acc034m.png'>
                    <img src='aor_acc034m.png' alt='cat staring at something outside the picture'></img>
                    <div class='bloom-translationGroup bloom-imageDescription bloom-trailingElement'>
                        <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                            <p>cat staring at something outside the picture</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- include content page with bloom-content1 content, ignoring image description -->
    <div class='bloom-page numberedPage' id='85a320a4-b73f-4149-87a1-9a1297ef04b0' data-page-number='2' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Basic Text &amp; Picture' lang='en'>Basic Text &amp; Picture</div>
        <div class='marginBox'>
            <div class='split-pane horizontal-percent'>
                <div class='split-pane-component position-top'>
                    <div class='split-pane-component-inner'>
                        <div class='bloom-imageContainer bloom-leadingElement' title='Name: aor_Cat3.png'>
                            <img src='aor_Cat3.png' alt='cat lying down and staring at you through slitted eyes'></img>
                            <div class='bloom-translationGroup bloom-imageDescription'>
                                <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                                    <p>cat lying down and staring at you through slitted eyes</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class='split-pane-divider horizontal-divider'></div>
                <div class='split-pane-component position-bottom'>
                    <div class='split-pane-component-inner'>
                        <div class='bloom-translationGroup' data-default-languages='auto'>
                            <div class='bloom-editable bloom-content1 bloom-visibility-code-on' id='i57437cd1-c55c-499e-b0c3-d7195fba5f11' lang='en'>
                                <p>A cat stares at you.</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- include content page with empty bloom-content1 content, ignoring image description -->
    <div class='bloom-page numberedPage' id='d46e4259-2a99-4197-b21d-bf97a992b7d0' data-page-number='3' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Basic Text &amp; Picture' lang='en'>Basic Text &amp; Picture</div>
        <div class='marginBox'>
            <div class='split-pane horizontal-percent'>
                <div class='split-pane-component position-top'>
                    <div class='split-pane-component-inner'>
                        <div class='bloom-imageContainer' title='Name: aor_ACC029M.png'>
                            <img src='aor_ACC029M.png' alt='cat sleeping in a box that is just large enough'></img>
                            <div class='bloom-translationGroup bloom-imageDescription'>
                                <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                                    <p>cat sleeping in a box that is just large enough</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
                <div class='split-pane-divider horizontal-divider'></div>
                <div class='split-pane-component position-bottom'>
                    <div class='split-pane-component-inner'>
                        <div class='bloom-translationGroup' data-default-languages='auto'>
                            <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                                <p></p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- include content page with bloom-content1 content and no image -->
    <div class='bloom-page numberedPage' id='5a424678-ec70-4c97-a547-015ff38dfd11' data-page-number='4' lang=''>
        <div class='marginBox'>
            <div class='bloom-translationGroup bloom-trailingElement' data-default-languages='auto'>
                <div class='bloom-editable normal-style bloom-content1 bloom-visibility-code-on' lang='en'>
                    <p>See the two kittens.</p>
                </div>
            </div>
        </div>
    </div>
	<!-- include page with non-vernacular text if it also has vernacular text -->
    <div class='bloom-page numberedPage' id='ebbd7f47-05fa-4e6d-a7a1-cb526bb5efb8' data-page-number='5' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Custom' lang='en'>Custom</div>
        <div class='marginBox'>
            <div class='split-pane horizontal-percent'>
                <div class='split-pane-component position-top'>
                    <div class='split-pane-component-inner' min-width='60px 150px 250px' min-height='60px 150px'>
                        <div class='bloom-translationGroup bloom-trailingElement' data-default-languages='N1'>
                            <div class='bloom-editable bloom-contentNational1 bloom-visibility-code-on' lang='fr'>
                                <p>national language text</p>
                            </div>
                        </div>
                    </div>
                </div>
                <div class='split-pane-divider horizontal-divider' title='33.2%'></div>
                <div class='split-pane-component position-bottom'>
                    <div class='split-pane-component position-top'>
                        <div class='split-pane-component-inner' min-width='60px 150px 250px' min-height='60px 150px'>
                            <div class='bloom-translationGroup bloom-trailingElement' data-default-languages='V'>
                                <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                                    <p>local language text</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
	<!-- ignore page with bloom-ignoreForReaderStats class -->
    <div class='bloom-page numberedPage bloom-ignoreForReaderStats' id='ebad7a47-05fa-4e6d-a7a1-cb526bb5efb8' data-page-number='6' lang=''>
        <div class='pageLabel' data-i18n='TemplateBooks.PageLabel.Custom' lang='en'>Custom</div>
        <div class='marginBox'>
            <div class='split-pane horizontal-percent'>
                <div class='split-pane-component position-top'>
                    <div class='split-pane-component-inner' min-width='60px 150px 250px' min-height='60px 150px'>
                        <div class='bloom-translationGroup bloom-trailingElement' data-default-languages='N1'>
                            <div class='bloom-editable normal-style bloom-contentNational1 bloom-visibility-code-on' lang='fr'>
                                <p>This is in the national language.</p>
                            </div>
                        </div>
                    </div>
                </div>
                <div class='split-pane-divider horizontal-divider' title='33.2%'></div>
                <div class='split-pane-component position-bottom'>
                    <div class='split-pane-component position-top'>
                        <div class='split-pane-component-inner' min-width='60px 150px 250px' min-height='60px 150px'>
                            <div class='bloom-translationGroup bloom-trailingElement' data-default-languages='V'>
                                <div class='bloom-editable normal-style bloom-content1 bloom-visibility-code-on' lang='en'>
                                    <p>This is in the local language.</p>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <!-- ignore page with bloom-backMatter class -->
    <div class='bloom-page titlePage bloom-backMatter' id='0f8d4d80-0519-42b6-bcde-6362b99ed1ff' lang='fr'>
        <div class='pageLabel' lang='en' data-i18n='TemplateBooks.PageLabel.Title Page'>Title Page</div>
        <div class='marginBox'>
            <div class='bloom-translationGroup' data-default-languages='V,N1' id='titlePageTitleBlock'>
                <div class='bloom-editable bloom-content1 bloom-visibility-code-on' lang='en'>
                    <p>Level Two</p>
                </div>
            </div>
        </div>
    </div>
</body></html>
";
            var doc = new XmlDocument();

            doc.LoadXml(htmlLeveledReader);
            var dom     = new HtmlDom(doc);
            var storage = CreateMockStorage(dom, "GetPagesForReader");
            var book    = new Bloom.Book.Book(storage.Object.BookInfo, storage.Object);

            _bookSelection.SelectBook(book);

            var result = ApiTest.GetString(_server, "readers/io/textOfContentPages");

            Assert.That(result, Is.EqualTo("{\"85a320a4-b73f-4149-87a1-9a1297ef04b0\":\"<p>A cat stares at you.</p>\",\"d46e4259-2a99-4197-b21d-bf97a992b7d0\":\"<p />\",\"5a424678-ec70-4c97-a547-015ff38dfd11\":\"<p>See the two kittens.</p>\",\"ebbd7f47-05fa-4e6d-a7a1-cb526bb5efb8\":\"<p>local language text</p>\"}"));
        }