Skip to content

Commit

Permalink
Merge pull request #11 from dncuug/10
Browse files Browse the repository at this point in the history
Fix #10
  • Loading branch information
ernado-x authored Mar 12, 2018
2 parents 69af0a3 + da105e6 commit 0cebb2a
Show file tree
Hide file tree
Showing 17 changed files with 268 additions and 255 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -172,4 +172,5 @@ pip-log.txt
# Mac crap
.DS_Store

.vs/
.vs/
.idea/
2 changes: 1 addition & 1 deletion src/X.Web.Sitemap.Examples/X.Web.Sitemap.Examples.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using NSubstitute;
using NUnit.Framework;

namespace X.Web.Sitemap.Tests.IntegrationTests.SitemapGeneratorIntegrationTests
Expand Down
20 changes: 20 additions & 0 deletions src/X.Web.Sitemap.Tests/TestFileSystemWrapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.IO;

namespace X.Web.Sitemap.Tests
{
public class TestFileSystemWrapper : IFileSystemWrapper
{
public bool DirectoryExists(string pathToDirectory)
{
return true;
}

public FileInfo WriteFile(string xmlString, DirectoryInfo targetDirectory, string targetFileName)
{
var file = new FileInfo(Path.Combine(targetDirectory.FullName, targetFileName));
return file;
}
}
}
Original file line number Diff line number Diff line change
@@ -1,81 +1,74 @@
using System;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.IO;
using NSubstitute;
using NSubstituteAutoMocker;
using NUnit.Framework;
using Shouldly;

namespace X.Web.Sitemap.Tests.UnitTests.SerializedXmlSaver
{
[TestFixture]
public class SerializeAndSaveTests
{
private NSubstituteAutoMocker<SerializedXmlSaver<SitemapIndex>> _autoMocker;
[TestFixture]
public class SerializeAndSaveTests
{
private SerializedXmlSaver<SitemapIndex> _serializer;
private IFileSystemWrapper _fileSystemWrapper;

[SetUp]
public void SetUp()
{
_autoMocker = new NSubstituteAutoMocker<SerializedXmlSaver<SitemapIndex>>();
}
[SetUp]
public void SetUp()
{
_fileSystemWrapper = new TestFileSystemWrapper();
_serializer = new SerializedXmlSaver<SitemapIndex>(_fileSystemWrapper);
}

[Test]
public void It_Throws_An_ArgumentNullException_If_There_Are_No_Sitemaps_Passed_In()
{
//--arrange
[Test]
public void It_Throws_An_ArgumentNullException_If_There_Are_No_Sitemaps_Passed_In()
{
//--arrange

//--act
Assert.Throws<ArgumentNullException>(
() => _autoMocker.ClassUnderTest.SerializeAndSave(null, new DirectoryInfo("c:\\temp"), "filename.xml"));
}
//--act
Assert.Throws<ArgumentNullException>(
() => _serializer.SerializeAndSave(null, new DirectoryInfo("c:\\temp"), "filename.xml"));
}

//--this is a half-assed test as comparing the full XML string that is generated is a big pain.
[Test]
public void It_Saves_The_XML_File_To_The_Correct_Directory_And_File_Name()
{
//--arrange
var directory = new DirectoryInfo("x");
string fileName = "sitemapindex.xml";
//--this is a half-assed test as comparing the full XML string that is generated is a big pain.
[Test]
public void It_Saves_The_XML_File_To_The_Correct_Directory_And_File_Name()
{
//--arrange
var directory = new DirectoryInfo("x");
var fileName = "sitemapindex.xml";

var sitemapIndex = new SitemapIndex(new List<SitemapInfo>
{
new SitemapInfo(new Uri("http://example.com/sitemap1.xml"), DateTime.UtcNow),
new SitemapInfo(new Uri("http://example.com/sitemap2.xml"), DateTime.UtcNow.AddDays(-1))
});
var sitemapIndex = new SitemapIndex(new List<SitemapInfo>
{
new SitemapInfo(new Uri("http://example.com/sitemap1.xml"), DateTime.UtcNow),
new SitemapInfo(new Uri("http://example.com/sitemap2.xml"), DateTime.UtcNow.AddDays(-1))
});

//--act
_autoMocker.ClassUnderTest.SerializeAndSave(
sitemapIndex,
directory,
fileName);
//--act
var result = _serializer.SerializeAndSave(
sitemapIndex,
directory,
fileName);

//--assert
_autoMocker.Get<IFileSystemWrapper>().Received().WriteFile(
Arg.Is<string>(x => x.Contains("<sitemapindex")),
Arg.Is<DirectoryInfo>(x => x == directory),
Arg.Is<string>(x => x == fileName));
}
Assert.True(result.FullName.Contains("sitemapindex"));
Assert.AreEqual(directory.Name, result.Directory.Name);
Assert.AreEqual(fileName, result.Name);
}

[Test]
public void It_Returns_A_File_Info_For_The_File_That_Was_Created()
{
//--arrange
var expectedFileInfo = new FileInfo("x");
_autoMocker.Get<IFileSystemWrapper>().WriteFile(
Arg.Any<string>(),
Arg.Any<DirectoryInfo>(),
Arg.Any<string>())
.Returns(expectedFileInfo);
[Test]
public void It_Returns_A_File_Info_For_The_File_That_Was_Created()
{
//--arrange
var expectedFileInfo = new FileInfo("c:\\something\\file.xml");

//--act
var result = _autoMocker.ClassUnderTest.SerializeAndSave(
new SitemapIndex(new List<SitemapInfo>()),
new DirectoryInfo("c:\\something\\"),
"file.xml");
//--act
var result = _serializer.SerializeAndSave(
new SitemapIndex(new List<SitemapInfo>()),
new DirectoryInfo("c:\\something\\"),
"file.xml");

//--assert
result.ShouldBeSameAs(expectedFileInfo);
}

}
Assert.AreEqual(expectedFileInfo.FullName, result.FullName);
Assert.AreEqual(expectedFileInfo.Directory, result.Directory);
}

}
}
Original file line number Diff line number Diff line change
@@ -1,67 +1,63 @@
using NUnit.Framework;
using System.Collections.Generic;
using System.IO;
using NSubstitute;
using System.Linq;

namespace X.Web.Sitemap.Tests.UnitTests.SitemapGeneratorTests
{
[TestFixture]
public class GenerateSitemapsTests
{
private SitemapGenerator _sitemapGenerator;
private ISerializedXmlSaver<Sitemap> _sitemapSerializerMock;

[SetUp]
public void SetUp()
{
_sitemapSerializerMock = Substitute.For<ISerializedXmlSaver<Sitemap>>();
_sitemapGenerator = new SitemapGenerator(_sitemapSerializerMock);
}

[Test]
public void It_Only_Saves_One_Sitemap_If_There_Are_Less_Than_50001_Urls()
{
//--arrange
var maxNumberOfUrlsForOneSitemap = SitemapGenerator.MaxNumberOfUrlsPerSitemap;
var urls = new List<Url>(maxNumberOfUrlsForOneSitemap);
for (var i = 0; i < maxNumberOfUrlsForOneSitemap; i++)
{
urls.Add(new Url());
}

//--act
_sitemapGenerator.GenerateSitemaps(urls, new DirectoryInfo("x"), "file");

//--assert
_sitemapSerializerMock
.Received(1)
.SerializeAndSave(Arg.Is<Sitemap>(x => x.Count == maxNumberOfUrlsForOneSitemap), Arg.Any<DirectoryInfo>(), Arg.Any<string>());
}

[Test]
public void It_Saves_Two_Sitemaps_If_There_Are_More_Than_50000_Urls_But_Less_Than_100001_And_It_Names_The_Files_With_A_Three_Digit_Suffix_Incrementing_For_Each_One()
{
//--arrange
var enoughForTwoSitemaps = SitemapGenerator.MaxNumberOfUrlsPerSitemap + 1;
var urls = new List<Url>(enoughForTwoSitemaps);
for (var i = 0; i < enoughForTwoSitemaps; i++)
{
urls.Add(new Url());
}
var fileName = "file";
var directory = new DirectoryInfo("x");

//--act
_sitemapGenerator.GenerateSitemaps(urls, directory, fileName);

//--assert
_sitemapSerializerMock
.Received(1)
.SerializeAndSave(Arg.Is<Sitemap>(x => x.Count == SitemapGenerator.MaxNumberOfUrlsPerSitemap), Arg.Is<DirectoryInfo>(x => x == directory), Arg.Is<string>(x => x == "file-001.xml"));

_sitemapSerializerMock
.Received(1)
.SerializeAndSave(Arg.Is<Sitemap>(x => x.Count == 1), Arg.Is<DirectoryInfo>(x => x == directory), Arg.Is<string>(x => x == "file-002.xml"));
}
}
[TestFixture]
public class GenerateSitemapsTests
{
private SitemapGenerator _sitemapGenerator;
private ISerializedXmlSaver<List<Url>> _sitemapSerializer;

[SetUp]
public void SetUp()
{
_sitemapSerializer = new SerializedXmlSaver<List<Url>>(new TestFileSystemWrapper());
_sitemapGenerator = new SitemapGenerator(_sitemapSerializer);
}

[Test]
public void It_Only_Saves_One_Sitemap_If_There_Are_Less_Than_50001_Urls()
{
var filesCount = 4;
var recordsCount = (SitemapGenerator.MaxNumberOfUrlsPerSitemap * 3) + 5;
var urls = new List<Url>();

for (var i = 0; i < recordsCount; i++)
{
urls.Add(new Url());
}

var result = _sitemapGenerator.GenerateSitemaps(urls, new DirectoryInfo("x"), "file");

Assert.AreEqual(filesCount, result.Count);
}

[Test]
public void It_Saves_Two_Sitemaps_If_There_Are_More_Than_50000_Urls_But_Less_Than_100001_And_It_Names_The_Files_With_A_Three_Digit_Suffix_Incrementing_For_Each_One()
{
//--arrange
var enoughForTwoSitemaps = SitemapGenerator.MaxNumberOfUrlsPerSitemap + 1;
var urls = new List<Url>(enoughForTwoSitemaps);
var filesCount = 2;

for (var i = 0; i < enoughForTwoSitemaps; i++)
{
urls.Add(new Url());
}

var fileName = "file";
var directory = new DirectoryInfo("x");

//--act
var result = _sitemapGenerator.GenerateSitemaps(urls, directory, fileName);

Assert.AreEqual(filesCount, result.Count);
Assert.True(result.All(o => o.Directory.Name == directory.Name));
Assert.True(result.Any(o => o.Name == "file-001.xml"));
Assert.True(result.Any(o => o.Name == "file-002.xml"));
}
}
}
Loading

0 comments on commit 0cebb2a

Please sign in to comment.