diff --git a/src/Pretzel.Logic/Extensions/StringExtensions.cs b/src/Pretzel.Logic/Extensions/StringExtensions.cs
index 4491c3574..ada744e91 100644
--- a/src/Pretzel.Logic/Extensions/StringExtensions.cs
+++ b/src/Pretzel.Logic/Extensions/StringExtensions.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.IO;
+using System.IO.Abstractions;
using System.Linq;
namespace Pretzel.Logic.Extensions
@@ -543,18 +545,20 @@ public static bool IsBinaryMime(this string mime)
return false;
}
- public static DateTime Datestamp(this string file)
+ public static DateTime Datestamp(this string file, IFileSystem fs)
{
- var fileName = file.Substring(file.LastIndexOf("\\"));
+ var fileName = fs.Path.GetFileName(file);
var tokens = fileName.Split('-');
- if (tokens.Length < 3)
- return DateTime.Now;
+ if (tokens.Length < 3)
+ {
+ return fs.FileInfo.FromFileName(file).LastWriteTime;
+ }
- var timestampText = string.Join("-", tokens.Take(3)).Trim('\\');
+ var timestampText = string.Join("-", tokens.Take(3)).Trim(fs.Path.DirectorySeparatorChar);
DateTime timestamp;
- return DateTime.TryParse(timestampText, out timestamp) ? timestamp : DateTime.Now;
+ return DateTime.TryParse(timestampText, out timestamp) ? timestamp : fs.FileInfo.FromFileName(file).LastWriteTime;
}
public static string ToUnderscoreCase(this string str)
diff --git a/src/Pretzel.Logic/Pretzel.Logic.csproj b/src/Pretzel.Logic/Pretzel.Logic.csproj
index c9c009cdc..63222a7b8 100644
--- a/src/Pretzel.Logic/Pretzel.Logic.csproj
+++ b/src/Pretzel.Logic/Pretzel.Logic.csproj
@@ -66,9 +66,9 @@
-
+
False
- ..\packages\System.IO.Abstractions.2.0.0.104\lib\net40\System.IO.Abstractions.dll
+ ..\packages\System.IO.Abstractions.2.0.0.116\lib\net40\System.IO.Abstractions.dll
False
diff --git a/src/Pretzel.Logic/Templating/Context/SiteContextGenerator.cs b/src/Pretzel.Logic/Templating/Context/SiteContextGenerator.cs
index 471d8f762..178b42474 100644
--- a/src/Pretzel.Logic/Templating/Context/SiteContextGenerator.cs
+++ b/src/Pretzel.Logic/Templating/Context/SiteContextGenerator.cs
@@ -237,7 +237,7 @@ private Page CreatePage(SiteContext context, IDictionary config,
var page = new Page
{
Title = header.ContainsKey("title") ? header["title"].ToString() : "this is a post",
- Date = header.ContainsKey("date") ? DateTime.Parse(header["date"].ToString()) : file.Datestamp(),
+ Date = header.ContainsKey("date") ? DateTime.Parse(header["date"].ToString()) : file.Datestamp(fileSystem),
Content = content,
Filepath = isPost ? GetPathWithTimestamp(context.OutputFolder, file) : GetFilePathForPage(context, file),
File = file,
diff --git a/src/Pretzel.Logic/packages.config b/src/Pretzel.Logic/packages.config
index 581486590..a513a1829 100644
--- a/src/Pretzel.Logic/packages.config
+++ b/src/Pretzel.Logic/packages.config
@@ -8,6 +8,6 @@
-
+
diff --git a/src/Pretzel.Tests/Pretzel.Tests.csproj b/src/Pretzel.Tests/Pretzel.Tests.csproj
index 258f22008..ed5da3e2a 100644
--- a/src/Pretzel.Tests/Pretzel.Tests.csproj
+++ b/src/Pretzel.Tests/Pretzel.Tests.csproj
@@ -55,13 +55,13 @@
-
+
False
- ..\packages\System.IO.Abstractions.2.0.0.104\lib\net40\System.IO.Abstractions.dll
+ ..\packages\System.IO.Abstractions.2.0.0.116\lib\net40\System.IO.Abstractions.dll
-
+
False
- ..\packages\System.IO.Abstractions.TestingHelpers.2.0.0.104\lib\net40\System.IO.Abstractions.TestingHelpers.dll
+ ..\packages\System.IO.Abstractions.TestingHelpers.2.0.0.116\lib\net40\System.IO.Abstractions.TestingHelpers.dll
diff --git a/src/Pretzel.Tests/Templating/Context/SiteContextGeneratorTests.cs b/src/Pretzel.Tests/Templating/Context/SiteContextGeneratorTests.cs
index 7b631e91e..556520d7e 100644
--- a/src/Pretzel.Tests/Templating/Context/SiteContextGeneratorTests.cs
+++ b/src/Pretzel.Tests/Templating/Context/SiteContextGeneratorTests.cs
@@ -83,9 +83,12 @@ public void posts_without_front_matter_get_processed()
[Fact]
public void posts_without_front_matter_uses_convention_to_render_folder()
{
- fileSystem.AddFile(@"C:\TestSite\_posts\SomeFile.md", new MockFileData("# Title"));
+ var file = new MockFileData("# Title");
+ var lastmod = new DateTime(2000,1,1);
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(@"C:\TestSite\_posts\SomeFile.md", file);
- var outputPath = string.Format("/{0}/{1}", DateTime.Now.ToString("yyyy'/'MM'/'dd"), "SomeFile.html");
+ var outputPath = string.Format("/{0}/{1}", lastmod.ToString("yyyy'/'MM'/'dd"), "SomeFile.html");
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
@@ -98,10 +101,13 @@ public void posts_without_front_matter_uses_convention_to_render_folder()
[Fact]
public void posts_without_front_matter_and_override_config_renders_folder()
{
- fileSystem.AddFile(@"C:\TestSite\_posts\SomeFile.md", new MockFileData("# Title"));
+ var post = new MockFileData("# Title");
+ var lastmod = new DateTime(2015, 03, 14);
+ post.LastWriteTime = lastmod;
+ fileSystem.AddFile(@"C:\TestSite\_posts\SomeFile.md", post);
fileSystem.AddFile(@"C:\TestSite\_config.yml", new MockFileData("permalink: /blog/:year/:month/:day/:title.html"));
- var outputPath = string.Format("/blog/{0}/{1}", DateTime.Now.ToString("yyyy'/'MM'/'dd"), "SomeFile.html");
+ var outputPath = string.Format("/blog/{0}/{1}",lastmod.ToString("yyyy'/'MM'/'dd"), "SomeFile.html");
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
@@ -299,13 +305,16 @@ public void site_context_generator_finds_posts_and_drafts()
public void site_context_pages_have_date_in_bag(string fileName, bool useDefault)
{
// note - this test does not include the time component.
+ var lastmod = new DateTime(2014, 09, 22);
// arrange
var expectedDate = useDefault
- ? DateTime.Now.ToString("yyyy-MM-dd")
+ ? lastmod.ToString("yyyy-MM-dd")
: "2014-01-01";
- fileSystem.AddFile(fileName, new MockFileData(ToPageContent("# Title")));
+ var file = new MockFileData(ToPageContent("# Title"));
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(fileName, file);
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
@@ -698,16 +707,20 @@ public void file_with_published_false_is_not_processed()
[Fact]
public void page_default_values()
{
- fileSystem.AddFile(@"C:\TestSite\SomeFile.md", new MockFileData(@"---
+ var filename = @"C:\TestSite\SomeFile.md";
+ var file = new MockFileData(@"---
param: value
----# Title"));
+---# Title");
+ var lastmod = new DateTime(2012,03,21);
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(filename, file);
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
Assert.Equal(1, siteContext.Pages.Count);
Assert.Equal("this is a post", siteContext.Pages[0].Title);
- Assert.Equal(DateTime.Now.Date, siteContext.Pages[0].Date.Date);
+ Assert.Equal(lastmod, siteContext.Pages[0].Date.Date);
Assert.Equal("Title
", siteContext.Pages[0].Content.TrimEnd());
Assert.Equal(@"C:\TestSite\_site\SomeFile.md", siteContext.Pages[0].Filepath);
Assert.Equal(@"C:\TestSite\SomeFile.md", siteContext.Pages[0].File);
@@ -769,18 +782,21 @@ public void page_with_date_in_title()
public void page_with_false_date_in_title()
{
var currentDate = new DateTime(2015, 1, 26).ToShortDateString();
+ var lastmod = new DateTime(2012,03,12);
var filePath = string.Format(@"C:\TestSite\{0}SomeFile.md", currentDate.Replace("/", "-"));
- fileSystem.AddFile(filePath, new MockFileData(string.Format(@"---
+ var file = new MockFileData(string.Format(@"---
param: value
---# Title",
- currentDate)));
+ currentDate));
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(filePath, file);
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
Assert.Equal(1, siteContext.Pages.Count);
Assert.Equal("this is a post", siteContext.Pages[0].Title);
- Assert.Equal(DateTime.Now.Date, siteContext.Pages[0].Date.Date);
+ Assert.Equal(lastmod, siteContext.Pages[0].Date.Date);
Assert.Equal("Title
", siteContext.Pages[0].Content.RemoveWhiteSpace());
Assert.Equal(string.Format(@"C:\TestSite\_site\{0}SomeFile.md", currentDate.Replace("/", "-")), siteContext.Pages[0].Filepath);
Assert.Equal(filePath, siteContext.Pages[0].File);
@@ -791,16 +807,20 @@ public void page_with_false_date_in_title()
[Fact]
public void post_default_values()
{
- fileSystem.AddFile(@"C:\TestSite\_posts\SomeFile.md", new MockFileData(@"---
+ var filename = @"C:\TestSite\_posts\SomeFile.md";
+ var file = new MockFileData(@"---
param: value
----# Title"));
+---# Title");
+ var lastmod = new DateTime(2014, 04, 01);
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(filename, file);
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
Assert.Equal(1, siteContext.Posts.Count);
Assert.Equal("this is a post", siteContext.Posts[0].Title);
- Assert.Equal(DateTime.Now.Date, siteContext.Posts[0].Date.Date);
+ Assert.Equal(lastmod, siteContext.Posts[0].Date.Date);
Assert.Equal("Title
", siteContext.Posts[0].Content.RemoveWhiteSpace());
Assert.Equal(@"C:\TestSite\_site\SomeFile.md", siteContext.Posts[0].Filepath);
Assert.Equal(@"C:\TestSite\_posts\SomeFile.md", siteContext.Posts[0].File);
@@ -862,19 +882,22 @@ public void post_with_date_in_title()
public void post_with_false_date_in_title()
{
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
+ var lastmod = new DateTime(2011,10,11);
var currentDate = new DateTime(2015, 1, 26).ToShortDateString();
var filePath = string.Format(@"C:\TestSite\_posts\{0}SomeFile.md", currentDate.Replace("/", "-"));
- fileSystem.AddFile(filePath, new MockFileData(string.Format(@"---
+ var file = new MockFileData(string.Format(@"---
param: value
---# Title",
- currentDate)));
+ currentDate));
+ file.LastWriteTime = lastmod;
+ fileSystem.AddFile(filePath, file);
// act
var siteContext = generator.BuildContext(@"C:\TestSite", @"C:\TestSite\_site", false);
Assert.Equal(1, siteContext.Posts.Count);
Assert.Equal("this is a post", siteContext.Posts[0].Title);
- Assert.Equal(DateTime.Now.Date, siteContext.Posts[0].Date.Date);
+ Assert.Equal(lastmod, siteContext.Posts[0].Date.Date);
Assert.Equal("Title
", siteContext.Posts[0].Content.RemoveWhiteSpace());
Assert.Equal(string.Format(@"C:\TestSite\_site\{0}SomeFile.md", currentDate.Replace("/", "\\")), siteContext.Posts[0].Filepath);
Assert.Equal(filePath, siteContext.Posts[0].File);
diff --git a/src/Pretzel.Tests/Templating/Jekyll/LiquidEngineTests.cs b/src/Pretzel.Tests/Templating/Jekyll/LiquidEngineTests.cs
index 74b7637cc..5bfc9eecd 100644
--- a/src/Pretzel.Tests/Templating/Jekyll/LiquidEngineTests.cs
+++ b/src/Pretzel.Tests/Templating/Jekyll/LiquidEngineTests.cs
@@ -815,7 +815,7 @@ public override LiquidEngine Given()
public override void When()
{
- FileSystem.AddFile(@"C:\website\_site\BadFormat.md", new MockFileData(OriginalPageContents) { LastWriteTime = new DateTime(2010, 01, 5) });
+ FileSystem.AddFile(@"C:\website\_site\BadFormat.md", new MockFileData(OriginalPageContents) { LastWriteTime = new DateTime(2011, 01, 5) });
FileSystem.AddFile(@"C:\website\BadFormat.md", new MockFileData(PageContents) { LastWriteTime = new DateTime(2010, 01, 3) });
var generator = GetSiteContextGenerator(FileSystem);
diff --git a/src/Pretzel.Tests/app.config b/src/Pretzel.Tests/app.config
index 34c3bce98..8f6de1a42 100644
--- a/src/Pretzel.Tests/app.config
+++ b/src/Pretzel.Tests/app.config
@@ -1,11 +1,11 @@
-
+
-
-
+
+
-
+
diff --git a/src/Pretzel.Tests/packages.config b/src/Pretzel.Tests/packages.config
index 40ef33cc6..e8c5df8aa 100644
--- a/src/Pretzel.Tests/packages.config
+++ b/src/Pretzel.Tests/packages.config
@@ -4,8 +4,8 @@
-
-
+
+
diff --git a/src/Pretzel/Pretzel.csproj b/src/Pretzel/Pretzel.csproj
index 0cd6925c9..4f6bc08d5 100644
--- a/src/Pretzel/Pretzel.csproj
+++ b/src/Pretzel/Pretzel.csproj
@@ -61,7 +61,7 @@
- ..\packages\System.IO.Abstractions.2.0.0.104\lib\net40\System.IO.Abstractions.dll
+ ..\packages\System.IO.Abstractions.2.0.0.116\lib\net40\System.IO.Abstractions.dll
..\packages\Microsoft.AspNet.Razor.3.0.0\lib\net45\System.Web.Razor.dll
diff --git a/src/Pretzel/packages.config b/src/Pretzel/packages.config
index beb4a6db4..60de4f1f9 100644
--- a/src/Pretzel/packages.config
+++ b/src/Pretzel/packages.config
@@ -10,7 +10,7 @@
-
+
\ No newline at end of file