github.com/jamiefdhurst/journal@v0.9.2/internal/app/controller/web/index_test.go (about) 1 package web 2 3 import ( 4 "net/http" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/jamiefdhurst/journal/internal/app" 10 "github.com/jamiefdhurst/journal/test/mocks/controller" 11 "github.com/jamiefdhurst/journal/test/mocks/database" 12 ) 13 14 func TestIndex_Run(t *testing.T) { 15 db := &database.MockSqlite{} 16 configuration := app.DefaultConfiguration() 17 configuration.ArticlesPerPage = 2 18 container := &app.Container{Configuration: configuration, Db: db} 19 response := controller.NewMockResponse() 20 controller := &Index{} 21 os.Chdir(os.Getenv("GOPATH") + "/src/github.com/jamiefdhurst/journal") 22 23 // Test showing all Journals 24 db.EnableMultiMode() 25 db.AppendResult(&database.MockPagination_Result{TotalResults: 2}) 26 db.AppendResult(&database.MockJournal_MultipleRows{}) 27 request, _ := http.NewRequest("GET", "/", strings.NewReader("")) 28 controller.Init(container, []string{"", "0"}, request) 29 controller.Run(response, request) 30 if !strings.Contains(response.Content, "Title 2") { 31 t.Error("Expected all journals to be displayed on screen") 32 } 33 if !strings.Contains(response.Content, "<title>Jamie's Journal</title>") { 34 t.Error("Expected default HTML title to be in place") 35 } 36 if !strings.Contains(response.Content, "<meta name=\"description\" content=\"A private journal") { 37 t.Error("Expected default HTML description to be in place") 38 } 39 40 // Test pagination 41 db.EnableMultiMode() 42 db.AppendResult(&database.MockPagination_Result{TotalResults: 4}) 43 db.AppendResult(&database.MockJournal_MultipleRows{}) 44 request, _ = http.NewRequest("GET", "/?page=2", strings.NewReader("")) 45 controller.Run(response, request) 46 if !strings.Contains(response.Content, "Title 2") { 47 t.Error("Expected all journals to be displayed on screen") 48 } 49 if !strings.Contains(response.Content, `class="current"`) { 50 t.Error("Expected pagination to work") 51 } 52 53 // Test saved banner showing 54 response.Reset() 55 db.AppendResult(&database.MockPagination_Result{TotalResults: 2}) 56 db.AppendResult(&database.MockJournal_MultipleRows{}) 57 controller.Init(container, []string{"", "0"}, request) 58 controller.Session.AddFlash("saved") 59 controller.SessionStore.Save(response) 60 request, _ = http.NewRequest("GET", "/", strings.NewReader("")) 61 request.Header.Add("Cookie", response.Headers.Get("Set-Cookie")) 62 controller.Init(container, []string{"", "0"}, request) 63 controller.Run(response, request) 64 if !strings.Contains(response.Content, "Journal saved") { 65 t.Error("Expected saved banner to be displayed on screen") 66 } 67 response.Reset() 68 db.AppendResult(&database.MockPagination_Result{TotalResults: 2}) 69 db.AppendResult(&database.MockJournal_MultipleRows{}) 70 request, _ = http.NewRequest("GET", "/", strings.NewReader("")) 71 controller.Run(response, request) 72 if strings.Contains(response.Content, "Journal saved") { 73 t.Error("Expected saved banner to be hidden, but it is showing") 74 } 75 }