Ejemplo n.º 1
0
        public async Task GetLibraryCompletionSetAsync_ReturnsCompletionWithLatestVersion()
        {
            //Arrange
            var packageSearch = new Mock <INpmPackageSearch>();
            var infoFactory   = new Mock <INpmPackageInfoFactory>();
            var testPkgInfo   = new NpmPackageInfo(name: "testPkg", description: "description", latestVersion: "1.2.3");

            var packages = new List <NpmPackageInfo>()
            {
                testPkgInfo
            };

            packageSearch.Setup(p => p.GetPackageNamesAsync(It.Is <string>(s => string.Equals(s, "testPkg")), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult((IEnumerable <NpmPackageInfo>)packages));

            infoFactory.Setup(p => p.GetPackageInfoAsync(It.Is <string>(s => string.Equals(s, "testPkg")), It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(testPkgInfo));


            JsDelivrCatalog sut = SetupCatalog(packageSearch: packageSearch.Object, infoFactory: infoFactory.Object);

            //Act
            CompletionSet result = await sut.GetLibraryCompletionSetAsync("testPkg", 7);

            //Assert
            Assert.AreEqual(1, result.Completions.Count());
            Assert.AreEqual("testPkg", result.Completions.First().DisplayText);
            Assert.AreEqual("[email protected]", result.Completions.First().InsertionText);
        }
Ejemplo n.º 2
0
        public async Task SearchAsync_NullString()
        {
            JsDelivrCatalog sut = SetupCatalog();

            IReadOnlyList <ILibraryGroup> absolute = await sut.SearchAsync(null, 1, CancellationToken.None);

            Assert.AreEqual(0, absolute.Count);
        }
Ejemplo n.º 3
0
        public async Task GetLibraryAsync_CacheRequestFails_ShouldThrow()
        {
            var fakeCacheService = new Mock <ICacheService>();

            fakeCacheService.SetupBlockRequests();
            JsDelivrCatalog sut = SetupCatalog(cacheService: fakeCacheService.Object);

            await Assert.ThrowsExceptionAsync <InvalidLibraryException>(async() => await sut.GetLibraryAsync("fakeLibrary", "1.1.1", CancellationToken.None));
        }
Ejemplo n.º 4
0
        public async Task GetLibraryCompletionSetAsync_ScopedPackageNameisSingleAt_ReturnsNoCompletions()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@", 1);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
        }
Ejemplo n.º 5
0
        public async Task GetLatestVersion_CacheRequestFails_ReturnsNull()
        {
            var fakeCacheService = new Mock <ICacheService>();

            fakeCacheService.SetupBlockRequests();
            JsDelivrCatalog sut = SetupCatalog(cacheService: fakeCacheService.Object);

            string result = await sut.GetLatestVersion("fakeLibrary", false, CancellationToken.None);

            Assert.IsNull(result);
        }
Ejemplo n.º 6
0
        public async Task GetLibraryCompletionSetAsync_EmptyString()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CancellationToken token  = CancellationToken.None;
            CompletionSet     result = await sut.GetLibraryCompletionSetAsync(string.Empty, 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
        }
Ejemplo n.º 7
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInVersionsSubstring()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/react@1", 14);

            Assert.AreEqual(13, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/react"));
        }
Ejemplo n.º 8
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInNameSubstring()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/[email protected]", 8);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(17, result.Length);
            Assert.AreEqual(1, result.Completions.Count());
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/node"));
        }
Ejemplo n.º 9
0
        [Ignore] // TODO: GetLatestVersion currently only looks for the stable tag.
        public async Task GetLatestVersion_PreRelease()
        {
            const string libraryId = "[email protected]";

            Mocks.WebRequestHandler fakeHandler = new Mocks.WebRequestHandler().SetupVersions("fakeLib", "fake/fakeLib");
            JsDelivrCatalog         sut         = SetupCatalog(fakeHandler);

            string result = await sut.GetLatestVersion(libraryId, true, CancellationToken.None);

            Assert.AreEqual("2.0.0-beta", result);
        }
Ejemplo n.º 10
0
        public async Task SearchAsync_NoHits()
        {
            // The search service is surprisingly flexible for finding full-text matches, so this
            // gibberish string was determined manually.
            string          searchTerm = "*9(_-zv_";
            JsDelivrCatalog sut        = SetupCatalog();

            IReadOnlyList <ILibraryGroup> absolute = await sut.SearchAsync(searchTerm, 1, CancellationToken.None);

            Assert.AreEqual(0, absolute.Count);
        }
Ejemplo n.º 11
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndTrailingAt_CursorAtName()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/react@", 6);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(13, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/react"));
        }
Ejemplo n.º 12
0
        [Ignore] // Enable it after version completion sorting is committed.
                 // TODO: Also add a test for GitHub version completion
        public async Task GetLibraryCompletionSetAsync_Versions()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("jquery@", 7);

            Assert.AreEqual(7, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            Assert.AreEqual("1.5.1", result.Completions.Last().DisplayText);
            Assert.AreEqual("[email protected]", result.Completions.Last().InsertionText);
        }
Ejemplo n.º 13
0
        public async Task GetLatestVersion_Git_Prerelease()
        {
            const string libraryId = "fakeLib/[email protected]";
            var          fakeCache = new Mock <ICacheService>();

            fakeCache.SetupGitHubLibraryVersions("fakeLib/fakeLib");
            JsDelivrCatalog sut = SetupCatalog(cacheService: fakeCache.Object);

            string result = await sut.GetLatestVersion(libraryId, true, CancellationToken.None);

            Assert.AreEqual("2.0.0-prerelease", result);
        }
Ejemplo n.º 14
0
        public async Task GetLibraryCompletionSetAsync_EmptyString_MakesNoWebRequest()
        {
            var             mockRequestHandler = new Mock <IWebRequestHandler>();
            JsDelivrCatalog sut = SetupCatalog(mockRequestHandler.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(string.Empty, 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
            mockRequestHandler.Verify(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 15
0
        public async Task SearchAsync_Success()
        {
            string          searchTerm = "jquery";
            JsDelivrCatalog sut        = SetupCatalog();

            IReadOnlyList <ILibraryGroup> absolute = await sut.SearchAsync(searchTerm, 1, CancellationToken.None);

            Assert.AreEqual(100, absolute.Count);
            IEnumerable <string> libraryVersions = await absolute[0].GetLibraryVersions(CancellationToken.None);

            CollectionAssert.Contains(libraryVersions.ToList(), "3.4.1");
        }
Ejemplo n.º 16
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithName()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("@types/node", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            Assert.AreEqual(25, result.Completions.Count());
            Assert.AreEqual("@types/node", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("@types/node"));
        }
Ejemplo n.º 17
0
        public async Task GetLatestVersion_LatestExist()
        {
            const string libraryId = "[email protected]";
            var          fakeCache = new Mock <ICacheService>();

            fakeCache.SetupNpmLibraryVersions("fakeLib");
            JsDelivrCatalog sut = SetupCatalog(cacheService: fakeCache.Object);

            string result = await sut.GetLatestVersion(libraryId, false, CancellationToken.None);

            Assert.AreEqual("1.0.0", result);
        }
Ejemplo n.º 18
0
        public async Task GetLatestVersion_GitHub_ParseVersionsList()
        {
            var fakeCache = new Mock <ICacheService>();

            fakeCache.SetupGitHubLibraryVersions("fake/fakeLib");
            JsDelivrCatalog sut         = SetupCatalog(cacheService: fakeCache.Object);
            const string    libraryIdGH = "fake/[email protected]";

            string resultGH = await sut.GetLatestVersion(libraryIdGH, false, CancellationToken.None);

            Assert.AreEqual("1.2.3", resultGH);
        }
Ejemplo n.º 19
0
        public async Task GetLibraryCompletionSetAsync_Names()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("jquery", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(6, result.Length);
            Assert.AreEqual(100, result.Completions.Count());
            Assert.AreEqual("jquery", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("jquery"));
        }
Ejemplo n.º 20
0
        public async Task GetLibraryCompletionSetAsync_LibraryNameWithLeadingAndTrailingWhitespace()
        {
            JsDelivrCatalog sut = SetupCatalog();

            CancellationToken token  = CancellationToken.None;
            CompletionSet     result = await sut.GetLibraryCompletionSetAsync("    jquery ", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            Assert.AreEqual(100, result.Completions.Count());
            Assert.AreEqual("jquery", result.Completions.First().DisplayText);
            Assert.IsTrue(result.Completions.First().InsertionText.StartsWith("jquery"));
        }
Ejemplo n.º 21
0
        public async Task GetLibraryCompletionsSetAsync_Versions_GitHub_CacheRequestFails_ShouldReturnEmptyList()
        {
            var cacheService = new Mock <ICacheService>();

            cacheService.SetupBlockRequests();
            JsDelivrCatalog sut = SetupCatalog(cacheService: cacheService.Object);

            string        fakeLibName = "fake/fakeLib@abcdef";
            CompletionSet result      = await sut.GetLibraryCompletionSetAsync(fakeLibName, fakeLibName.IndexOf('c'));

            Assert.IsNotNull(result);
            Assert.IsFalse(result.Completions.Any());
        }
Ejemplo n.º 22
0
        public async Task GetLibraryCompletionsSetAsync_Versions_GitHub_ResultsFromCache()
        {
            var cacheService = new Mock <ICacheService>();

            cacheService.SetupGitHubLibraryVersions("fake/fakeLib");
            JsDelivrCatalog sut = SetupCatalog(cacheService: cacheService.Object);

            string        fakeLibraryId = "fake/fakeLib@abcdef";
            CompletionSet result        = await sut.GetLibraryCompletionSetAsync(fakeLibraryId, fakeLibraryId.IndexOf('c'));

            Assert.IsNotNull(result);
            CollectionAssert.AreEquivalent(new[] { "0.1.2", "1.2.3", "latest" }, result.Completions.Select(x => x.DisplayText).ToList());
        }
Ejemplo n.º 23
0
        public async Task GetLibraryCompletionSetAsync_ScopedPackageNameisSingleAt_ReturnsNoCompletions_MakesNoWebRequest()
        {
            var             mockRequestHandler = new Mock <IWebRequestHandler>();
            JsDelivrCatalog sut = SetupCatalog(mockRequestHandler.Object);

            (string nameStart, int caretPos) = ExtractCaret("@|");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(1, result.Length);
            Assert.AreEqual(0, result.Completions.Count());
            mockRequestHandler.Verify(m => m.GetStreamAsync(It.IsAny <string>(), It.IsAny <CancellationToken>()), Times.Never);
        }
Ejemplo n.º 24
0
        public async Task GetLibraryCompletionSetAsync_LibraryNameWithLeadingAndTrailingWhitespace_WhitespaceIncludedInSearchTerm()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            mockSearch.Setup(m => m.GetPackageNamesAsync("    jquery ", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("    jquery ", 0);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(11, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 25
0
        public async Task SearchAsync_Success()
        {
            string searchTerm = "jquery";
            var    mockSearch = new Mock <INpmPackageSearch>();

            NpmPackageInfo[] expectedResult = new[] { new NpmPackageInfo("fakepackage", "", "1.0.0") };
            mockSearch.Setup(m => m.GetPackageNamesAsync("jquery", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(expectedResult.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            IReadOnlyList <ILibraryGroup> result = await sut.SearchAsync(searchTerm, 1, CancellationToken.None);

            Assert.AreEqual(1, result.Count);
            Assert.AreEqual("fakepackage", result[0].DisplayName);
        }
Ejemplo n.º 26
0
        public async Task GetLibraryCompletionSetAsync_Versions_Npm_ResultsFromCache()
        {
            var fakeNpmPackageInfoFactory = new Mock <INpmPackageInfoFactory>();

            fakeNpmPackageInfoFactory.Setup(x => x.GetPackageInfoAsync("fakeLib", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new NpmPackageInfo("fakeLib", "Fake library", "1.0.0", new[] { SemanticVersion.Parse("1.0.0"), SemanticVersion.Parse("2.0.0-beta") })));
            JsDelivrCatalog sut = SetupCatalog(infoFactory: fakeNpmPackageInfoFactory.Object);

            CompletionSet result = await sut.GetLibraryCompletionSetAsync("fakeLib@", 8);

            Assert.AreEqual(8, result.Start);
            Assert.AreEqual(0, result.Length);
            Assert.IsTrue(result.Completions.Count() > 0);
            CollectionAssert.AreEquivalent(new[] { "1.0.0", "2.0.0-beta", "latest" },
                                           result.Completions.Select(x => x.DisplayText).ToList());
        }
Ejemplo n.º 27
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithName()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            mockSearch.Setup(m => m.GetPackageNamesAsync("@testscope/package", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            (string nameStart, int caretPos) = ExtractCaret("|@testscope/package");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(18, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 28
0
        public async Task GetLibraryAsync_Success()
        {
            Mocks.WebRequestHandler fakeRequestHandler = new Mocks.WebRequestHandler().SetupFiles("[email protected]", "jquery/[email protected]");
            JsDelivrCatalog         sut = SetupCatalog(fakeRequestHandler);

            CancellationToken token   = CancellationToken.None;
            ILibrary          library = await sut.GetLibraryAsync("jquery", "3.3.1", token);

            Assert.IsNotNull(library);
            Assert.AreEqual("jquery", library.Name);
            Assert.AreEqual("3.3.1", library.Version);

            ILibrary libraryGH = await sut.GetLibraryAsync("jquery/jquery", "3.3.1", token);

            Assert.IsNotNull(libraryGH);
            Assert.AreEqual("jquery/jquery", libraryGH.Name);
            Assert.AreEqual("3.3.1", libraryGH.Version);
        }
Ejemplo n.º 29
0
        public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInNameSubstring()
        {
            var mockSearch = new Mock <INpmPackageSearch>();

            // TODO: do we really not strip the version out here?  Seems like we should...
            mockSearch.Setup(m => m.GetPackageNamesAsync("@types/[email protected]", It.IsAny <CancellationToken>()))
            .Returns(Task.FromResult(new[] { new NpmPackageInfo("fakePackage1", "", "1.0.0") }.AsEnumerable()));
            JsDelivrCatalog sut = SetupCatalog(packageSearch: mockSearch.Object);

            (string nameStart, int caretPos) = ExtractCaret("@types/no|[email protected]");

            CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos);

            Assert.AreEqual(0, result.Start);
            Assert.AreEqual(17, result.Length);
            CollectionAssert.AreEquivalent(new[] { "fakePackage1" },
                                           result.Completions.Select(c => c.DisplayText).ToList());
        }
Ejemplo n.º 30
0
        public async Task GetLatestVersion_LatestExist()
        {
            const string libraryId = "[email protected]";

            Mocks.WebRequestHandler fakeHandler = new Mocks.WebRequestHandler().SetupVersions("fakeLib", "fake/fakeLib");
            JsDelivrCatalog         sut         = SetupCatalog(fakeHandler);

            string result = await sut.GetLatestVersion(libraryId, false, CancellationToken.None);

            Assert.AreEqual("1.0.0", result);

            // TODO: A new test should be added for when the tags are missing.  This is passing because the fake
            //       data is as expected.  However, real data does not include the tags and would return null.
            //       The original test implementation checked for null and didn't assert anything in that case.
            const string libraryIdGH = "fake/[email protected]";
            string       resultGH    = await sut.GetLatestVersion(libraryIdGH, false, CancellationToken.None);

            Assert.AreEqual("1.0.0", resultGH);
        }