diff --git a/domain/page/page.go b/domain/page/page.go index 6d93a646..3b8a57c5 100644 --- a/domain/page/page.go +++ b/domain/page/page.go @@ -18,7 +18,7 @@ import ( // LevelizeDocument generates level and sequence numbers for all document sections func (h *Handler) LevelizeDocument(ctx domain.RequestContext, documentID string) { - method := "page.Levelize" + method := "page.LevelizeDocument" var err error ctx.Transaction.Commit() diff --git a/model/page/numbering.go b/model/page/numbering.go index 1cac8951..976f96dd 100644 --- a/model/page/numbering.go +++ b/model/page/numbering.go @@ -23,7 +23,7 @@ func Numberize(pages []Page) { for i, p := range pages { // handle bad data - if p.Level == 0 { + if p.Level == 0 || (i == 0 && p.Level > 1) { p.Level = 1 } diff --git a/model/page/numbering_test.go b/model/page/numbering_test.go index a8f62839..29e6013b 100644 --- a/model/page/numbering_test.go +++ b/model/page/numbering_test.go @@ -145,6 +145,34 @@ func TestNumberize4(t *testing.T) { } } +// Tests that numbering does not crash because of bad data +func TestNumberize5(t *testing.T) { + pages := []Page{} + + // corruption starts at the top with sequence 0 + pages = append(pages, Page{Level: 2, Sequence: 0}) + pages = append(pages, Page{Level: 1, Sequence: 1}) + pages = append(pages, Page{Level: 2, Sequence: 4}) + pages = append(pages, Page{Level: 2, Sequence: 8}) + pages = append(pages, Page{Level: 2, Sequence: 16}) + + Numberize(pages) + + expecting := []string{ + "1", + "2", + "2.1", + "2.2", + "2.3", + } + + for i, p := range pages { + if p.Numbering != expecting[i] { + t.Errorf("(Test 4) Position %d: expecting %s got %s\n", i, expecting[i], p.Numbering) + } + } +} + // Tests that good level data is not messed with func TestLevelize1(t *testing.T) { pages := []Page{}