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); }
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()); }
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")); }
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")); }
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")); }
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()); }
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); }
[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); }
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")); }
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")); }
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()); }
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()); }
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")); }
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); }
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()); }
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()); }
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()); }
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()); }
public async Task GetLibraryCompletionSetAsync_ScopesWithNameAndVersions_CursorInVersionsSubstring() { var mockPackageInfoFactory = new Mock <INpmPackageInfoFactory>(); mockPackageInfoFactory.Setup(m => m.GetPackageInfoAsync("@types/react", It.IsAny <CancellationToken>())) .Returns(Task.FromResult(new NpmPackageInfo("fakepackage", "", "2.0.0", new List <SemanticVersion> { SemanticVersion.Parse("1.0.0"), SemanticVersion.Parse("2.0.0") }))); JsDelivrCatalog sut = SetupCatalog(infoFactory: mockPackageInfoFactory.Object); (string nameStart, int caretPos) = ExtractCaret("@types/react@1|"); CompletionSet result = await sut.GetLibraryCompletionSetAsync(nameStart, caretPos); Assert.AreEqual(13, result.Start); Assert.AreEqual(1, result.Length); Assert.AreEqual(CompletionSortOrder.Version, result.CompletionType); CollectionAssert.AreEqual(new[] { "2.0.0", "1.0.0", "latest" }, result.Completions.Select(c => c.DisplayText).ToList()); }