shithub: hugo

Download patch

ref: 4724a5794eaaf582252b988a7def8a792b5bccdf
parent: f7b2e532e21c74a0825b39332ec595b95c1f6b23
author: Hanchen Wang <[email protected]>
date: Wed May 11 07:45:09 EDT 2016

hugolib: Refactor page.ShouldBuild and table driven test

--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -468,13 +468,22 @@
 }
 
 func (p *Page) ShouldBuild() bool {
-	if (viper.GetBool("BuildFuture") || p.PublishDate.IsZero() || p.PublishDate.Before(time.Now())) &&
-		(viper.GetBool("BuildExpired") || p.ExpiryDate.IsZero() || p.ExpiryDate.After(time.Now())) {
-		if viper.GetBool("BuildDrafts") || !p.Draft {
-			return true
-		}
+	return AssertShouldBuild(viper.GetBool("BuildFuture"), viper.GetBool("BuildExpired"),
+		viper.GetBool("BuildDrafts"), p.Draft, p.PublishDate, p.ExpiryDate)
+}
+
+func AssertShouldBuild(buildFuture bool, buildExpired bool, buildDrafts bool, Draft bool,
+	publishDate time.Time, expiryDate time.Time) bool {
+	if !(buildDrafts || !Draft) {
+		return false
 	}
-	return false
+	if !buildFuture && !publishDate.IsZero() && publishDate.After(time.Now()) {
+		return false
+	}
+	if !buildExpired && !expiryDate.IsZero() && expiryDate.Before(time.Now()) {
+		return false
+	}
+	return true
 }
 
 func (p *Page) IsDraft() bool {
--- a/hugolib/page_test.go
+++ b/hugolib/page_test.go
@@ -1089,3 +1089,49 @@
 
 	return strings.Join(aStr, "") == strings.Join(bStr, "")
 }
+
+func TestAssertShouldBuild(t *testing.T) {
+	var past = time.Date(2009, 11, 17, 20, 34, 58, 651387237, time.UTC)
+	var future = time.Date(2037, 11, 17, 20, 34, 58, 651387237, time.UTC)
+	var zero = time.Time{}
+
+	var publishSettings = []struct {
+		buildFuture  bool
+		buildExpired bool
+		buildDrafts  bool
+		draft        bool
+		publishDate  time.Time
+		expiryDate   time.Time
+		out          bool
+	}{
+		// publishDate and expiryDate
+		{false, false, false, false, zero, zero, true},
+		{false, false, false, false, zero, future, true},
+		{false, false, false, false, past, zero, true},
+		{false, false, false, false, past, future, true},
+		{false, false, false, false, past, past, false},
+		{false, false, false, false, future, future, false},
+		{false, false, false, false, future, past, false},
+
+		// buildFuture and buildExpired
+		{false, true, false, false, past, past, true},
+		{true, true, false, false, past, past, true},
+		{true, false, false, false, past, past, false},
+		{true, false, false, false, future, future, true},
+		{true, true, false, false, future, future, true},
+		{false, true, false, false, future, past, false},
+
+		// buildDrafts and draft
+		{true, true, false, true, past, future, false},
+		{true, true, true, true, past, future, true},
+		{true, true, true, true, past, future, true},
+	}
+
+	for _, ps := range publishSettings {
+		s := AssertShouldBuild(ps.buildFuture, ps.buildExpired, ps.buildDrafts, ps.draft,
+			ps.publishDate, ps.expiryDate)
+		if s != ps.out {
+			t.Errorf("AssertShouldBuild unexpected output with params: %+v", ps)
+		}
+	}
+}