public void ShouldReturnReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem {
                    Version = "1.0", Created = new DateTime(2012, 12, 1)
                };
                var item2 = new ReleaseQueryItem {
                    Version = "1.1", Created = new DateTime(2012, 12, 2)
                };
                var item3 = new ReleaseQueryItem {
                    Version = "1.2", Created = new DateTime(2012, 12, 3)
                };
                var item4 = new ReleaseQueryItem {
                    Version = "1.3", Created = new DateTime(2012, 12, 4)
                };

                var dataList = new List <ReleaseQueryItem> {
                    item1, item2, item3, item4
                };
                var data = new Dictionary <string, IEnumerable <ReleaseQueryItem> > {
                    { "Test", dataList }
                };

                var respository = new CacheReleaseQueryProvider();

                respository.UpdateCache(data);

                var result = respository.FindReleasesAfter("Test", "1.0").ToList();

                Assert.Equal(3, result.Count);
                Assert.Equal("1.1", result[0].Version);
                Assert.Equal("1.2", result[1].Version);
                Assert.Equal("1.3", result[2].Version);
            }
            public void ShouldProducePreReleaseSummaryWhenOnlyNewerPreReleasesFound()
            {
                var release = new ReleaseQueryItem {
                    IsLatestVersion = false, Created = new DateTime(2012, 12, 12), Version = "1.0", IsPrerelease = true
                };
                var release1 = new ReleaseQueryItem {
                    IsLatestVersion = false, Created = new DateTime(2012, 12, 13), Version = "1.1", IsPrerelease = true
                };
                var release2 = new ReleaseQueryItem {
                    IsLatestVersion = false, Created = new DateTime(2012, 12, 14), Version = "1.2", IsPrerelease = true
                };
                var release3 = new ReleaseQueryItem {
                    IsLatestVersion = false, Created = new DateTime(2012, 12, 15), Version = "1.3", IsPrerelease = true, IsAbsoluteLatestVersion = true
                };

                var repository = new Mock <IReleaseQueryProvider>();

                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List <ReleaseQueryItem> {
                    release1, release2, release3
                }).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result  = service.GetReleaseInfo("Test", "1.0", "1.0");

                Assert.True(result.HasResult);
                Assert.True(result.HasNewer);
                Assert.NotNull(result.Summary);
                Assert.True(result.Summary.ContainsKey("preRelease"));
                Assert.Equal("1.3", result.Summary["preRelease"].LatestVersion);
                Assert.False(result.Summary.ContainsKey("release"));
                Assert.Null(result.AvailableReleases);

                repository.VerifyAll();
            }
            public void ShouldReturnNullIfNoLastestVersionPresent()
            {
                var item1 = new ReleaseQueryItem();

                var dataList = new List<ReleaseQueryItem> { item1 };
                var data = new Dictionary<string, IEnumerable<ReleaseQueryItem>> { { "Test", dataList } };

                var respository = new CacheReleaseQueryProvider();
                respository.UpdateCache(data);

                Assert.Null(respository.LatestPackageRelease("Test"));
            }
            public void ShouldReturnLatestReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem { IsLatestVersion = true };
                var item2 = new ReleaseQueryItem();

                var dataList = new List<ReleaseQueryItem> { item1, item2 };
                var data = new Dictionary<string, IEnumerable<ReleaseQueryItem>> { { "Test", dataList } };

                var respository = new CacheReleaseQueryProvider();
                respository.UpdateCache(data);

                Assert.Same(item1, respository.LatestPackageRelease("Test"));
            }
            public void ShouldReturnNullIfNoLastestVersionPresent()
            {
                var item1 = new ReleaseQueryItem();

                var dataList = new List <ReleaseQueryItem> {
                    item1
                };
                var data = new Dictionary <string, IEnumerable <ReleaseQueryItem> > {
                    { "Test", dataList }
                };

                var respository = new CacheReleaseQueryProvider();

                respository.UpdateCache(data);

                Assert.Null(respository.LatestPackageRelease("Test"));
            }
            public void ShouldReturnEmptyIfNoNewerVersionPresent()
            {
                var item1 = new ReleaseQueryItem();

                var dataList = new List <ReleaseQueryItem> {
                    item1
                };
                var data = new Dictionary <string, IEnumerable <ReleaseQueryItem> > {
                    { "Test", dataList }
                };

                var respository = new CacheReleaseQueryProvider();

                respository.UpdateCache(data);

                Assert.Empty(respository.FindReleasesAfter("Test", "1.0"));
            }
            public void ShoudlIndicateHasNewerWhenAnyPackageHasNewer()
            {
                var release = new ReleaseQueryItem {
                    IsLatestVersion = false, Created = new DateTime(2012, 12, 12), Version = "1.0"
                };
                var release1 = new ReleaseQueryItem {
                    IsLatestVersion = true, Created = new DateTime(2012, 12, 13), Version = "1.1"
                };

                var input1 = new VersionCheckDetailsItem()
                {
                    Name = "Test", Version = "1.0", VersionRange = "1.0"
                };
                var input2 = new VersionCheckDetailsItem()
                {
                    Name = "Other", Version = "1.0", VersionRange = "1.0"
                };
                var input = new VersionCheckDetails {
                    Packages = new List <VersionCheckDetailsItem> {
                        input1, input2
                    }
                };

                var repository = new Mock <IReleaseQueryProvider>();

                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.SelectRelease("Other", "1.0")).Returns((ReleaseQueryItem)null).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List <ReleaseQueryItem> {
                    release1
                }).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result  = service.GetReleaseInfo(input);

                Assert.Equal(2, result.Details.Count);
                Assert.True(result.Details.ContainsKey("Test"));
                Assert.True(result.Details["Test"].HasNewer);
                Assert.True(result.Details["Test"].HasResult);
                Assert.True(result.Details.ContainsKey("Other"));
                Assert.False(result.Details["Other"].HasNewer);
                Assert.False(result.Details["Other"].HasResult);
                Assert.True(result.HasNewer);

                repository.VerifyAll();
            }
            public void ShouldIndicateThatNoNewerVersionIsFoundIfOneDoesntExist()
            {
                var release = new ReleaseQueryItem { IsLatestVersion = true };

                var repository = new Mock<IReleaseQueryProvider>();
                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List<ReleaseQueryItem>()).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result = service.GetReleaseInfo("Test", "1.0", "1.0");

                Assert.True(result.HasResult);
                Assert.False(result.HasNewer);
                Assert.Null(result.Summary);
                Assert.Null(result.AvailableReleases);

                repository.VerifyAll();
            }
            public void ShouldReturnLatestReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem {
                    IsLatestVersion = true
                };
                var item2 = new ReleaseQueryItem();

                var dataList = new List <ReleaseQueryItem> {
                    item1, item2
                };
                var data = new Dictionary <string, IEnumerable <ReleaseQueryItem> > {
                    { "Test", dataList }
                };

                var respository = new CacheReleaseQueryProvider();

                respository.UpdateCache(data);

                Assert.Same(item1, respository.LatestPackageRelease("Test"));
            }
            public void ShouldIndicateThatNoNewerVersionIsFoundIfOneDoesntExist()
            {
                var release = new ReleaseQueryItem {
                    IsLatestVersion = true
                };

                var repository = new Mock <IReleaseQueryProvider>();

                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List <ReleaseQueryItem>()).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result  = service.GetReleaseInfo("Test", "1.0", "1.0");

                Assert.True(result.HasResult);
                Assert.False(result.HasNewer);
                Assert.Null(result.Summary);
                Assert.Null(result.AvailableReleases);

                repository.VerifyAll();
            }
            public void ShouldReturnReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem {
                    Version = "1.0"
                };
                var item2 = new ReleaseQueryItem {
                    Version = "0.9"
                };

                var dataList = new List <ReleaseQueryItem> {
                    item1, item2
                };
                var data = new Dictionary <string, IEnumerable <ReleaseQueryItem> > {
                    { "Test", dataList }
                };

                var respository = new CacheReleaseQueryProvider();

                respository.UpdateCache(data);

                Assert.Same(item1, respository.SelectRelease("Test", "1.0"));
            }
            public void ShouldProducePreReleaseSummaryWhenOnlyNewerPreReleasesFound()
            {
                var release = new ReleaseQueryItem { IsLatestVersion = false, Created = new DateTime(2012, 12, 12), Version = "1.0", IsPrerelease = true };
                var release1 = new ReleaseQueryItem { IsLatestVersion = false, Created = new DateTime(2012, 12, 13), Version = "1.1", IsPrerelease = true };
                var release2 = new ReleaseQueryItem { IsLatestVersion = false, Created = new DateTime(2012, 12, 14), Version = "1.2", IsPrerelease = true };
                var release3 = new ReleaseQueryItem { IsLatestVersion = false, Created = new DateTime(2012, 12, 15), Version = "1.3", IsPrerelease = true, IsAbsoluteLatestVersion = true };

                var repository = new Mock<IReleaseQueryProvider>();
                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List<ReleaseQueryItem> { release1, release2, release3 }).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result = service.GetReleaseInfo("Test", "1.0", "1.0");

                Assert.True(result.HasResult);
                Assert.True(result.HasNewer);
                Assert.NotNull(result.Summary);
                Assert.True(result.Summary.ContainsKey("preRelease"));
                Assert.Equal("1.3", result.Summary["preRelease"].LatestVersion);
                Assert.False(result.Summary.ContainsKey("release"));
                Assert.Null(result.AvailableReleases);

                repository.VerifyAll();
            }
            public void ShoudlIndicateHasNewerWhenAnyPackageHasNewer()
            {
                var release = new ReleaseQueryItem { IsLatestVersion = false, Created = new DateTime(2012, 12, 12), Version = "1.0" };
                var release1 = new ReleaseQueryItem { IsLatestVersion = true, Created = new DateTime(2012, 12, 13), Version = "1.1" };

                var input1 = new VersionCheckDetailsItem() { Name = "Test", Version = "1.0", VersionRange = "1.0" };
                var input2 = new VersionCheckDetailsItem() { Name = "Other", Version = "1.0", VersionRange = "1.0" };
                var input = new VersionCheckDetails { Packages = new List<VersionCheckDetailsItem> { input1, input2 } };

                var repository = new Mock<IReleaseQueryProvider>();
                repository.Setup(x => x.SelectRelease("Test", "1.0")).Returns(release).Verifiable();
                repository.Setup(x => x.SelectRelease("Other", "1.0")).Returns((ReleaseQueryItem)null).Verifiable();
                repository.Setup(x => x.FindReleasesAfter("Test", "1.0")).Returns(new List<ReleaseQueryItem> { release1 }).Verifiable();

                var service = new ReleaseQueryService(repository.Object);
                var result = service.GetReleaseInfo(input);

                Assert.Equal(2, result.Details.Count);
                Assert.True(result.Details.ContainsKey("Test"));
                Assert.True(result.Details["Test"].HasNewer);
                Assert.True(result.Details["Test"].HasResult);
                Assert.True(result.Details.ContainsKey("Other"));
                Assert.False(result.Details["Other"].HasNewer);
                Assert.False(result.Details["Other"].HasResult);
                Assert.True(result.HasNewer);

                repository.VerifyAll();
            }
            public void ShouldReturnEmptyIfNoNewerVersionPresent()
            {
                var item1 = new ReleaseQueryItem();

                var dataList = new List<ReleaseQueryItem> { item1 };
                var data = new Dictionary<string, IEnumerable<ReleaseQueryItem>> { { "Test", dataList } };

                var respository = new CacheReleaseQueryProvider();
                respository.UpdateCache(data);

                Assert.Empty(respository.FindReleasesAfter("Test", "1.0"));
            }
            public void ShouldReturnReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem { Version = "1.0", Created = new DateTime(2012, 12, 1) };
                var item2 = new ReleaseQueryItem { Version = "1.1", Created = new DateTime(2012, 12, 2) };
                var item3 = new ReleaseQueryItem { Version = "1.2", Created = new DateTime(2012, 12, 3) };
                var item4 = new ReleaseQueryItem { Version = "1.3", Created = new DateTime(2012, 12, 4) };

                var dataList = new List<ReleaseQueryItem> { item1, item2, item3, item4 };
                var data = new Dictionary<string, IEnumerable<ReleaseQueryItem>> { { "Test", dataList } };

                var respository = new CacheReleaseQueryProvider();
                respository.UpdateCache(data);

                var result = respository.FindReleasesAfter("Test", "1.0").ToList();

                Assert.Equal(3, result.Count);
                Assert.Equal("1.1", result[0].Version);
                Assert.Equal("1.2", result[1].Version);
                Assert.Equal("1.3", result[2].Version);
            }
            public void ShouldReturnReleaseIfPresent()
            {
                var item1 = new ReleaseQueryItem { Version = "1.0" };
                var item2 = new ReleaseQueryItem { Version = "0.9" };

                var dataList = new List<ReleaseQueryItem> { item1, item2 };
                var data = new Dictionary<string, IEnumerable<ReleaseQueryItem>> { { "Test", dataList } };

                var respository = new CacheReleaseQueryProvider();
                respository.UpdateCache(data);

                Assert.Same(item1, respository.SelectRelease("Test", "1.0"));
            }