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 SearchAsync_NullString() { JsDelivrCatalog sut = SetupCatalog(); IReadOnlyList <ILibraryGroup> absolute = await sut.SearchAsync(null, 1, CancellationToken.None); Assert.AreEqual(0, absolute.Count); }
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)); }
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 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); }
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_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_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")); }
[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); }
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); }
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")); }
[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 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); }
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); }
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"); }
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 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); }
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); }
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 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 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_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 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); }
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 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); }
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 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); }