github.com/jamiefdhurst/journal@v0.9.2/internal/app/controller/web/edit_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 TestEdit_Run(t *testing.T) { 15 db := &database.MockSqlite{} 16 configuration := app.DefaultConfiguration() 17 configuration.EnableEdit = true 18 container := &app.Container{Configuration: configuration, Db: db} 19 response := controller.NewMockResponse() 20 controller := &Edit{} 21 os.Chdir(os.Getenv("GOPATH") + "/src/github.com/jamiefdhurst/journal") 22 23 // Test not found/error with GET/POST 24 db.Rows = &database.MockRowsEmpty{} 25 request := &http.Request{Method: "GET"} 26 controller.Init(container, []string{"", "0"}, request) 27 controller.Run(response, request) 28 if response.StatusCode != 404 || !strings.Contains(response.Content, "Page Not Found") { 29 t.Error("Expected 404 error when journal not found") 30 } 31 32 response.Reset() 33 request = &http.Request{Method: "POST"} 34 controller.Init(container, []string{"", "0"}, request) 35 controller.Run(response, request) 36 if response.StatusCode != 404 || !strings.Contains(response.Content, "Page Not Found") { 37 t.Error("Expected 404 error when journal not found") 38 } 39 40 // Display error when cookie was set 41 response.Reset() 42 controller.Init(container, []string{"", "0"}, request) 43 controller.Session.AddFlash("error") 44 controller.SessionStore.Save(response) 45 request, _ = http.NewRequest("GET", "/test/edit", strings.NewReader("")) 46 request.Header.Add("Cookie", response.Headers.Get("Set-Cookie")) 47 response.Reset() 48 db.Rows = &database.MockJournal_SingleRow{} 49 controller.Init(container, []string{"", "0"}, request) 50 controller.Run(response, request) 51 if !controller.Error || !strings.Contains(response.Content, "div class=\"error\"") { 52 t.Error("Expected error to be shown in form") 53 } 54 55 // Display no error 56 response.Reset() 57 request, _ = http.NewRequest("GET", "/slug/edit", strings.NewReader("")) 58 db.Rows = &database.MockJournal_SingleRow{} 59 controller.Error = false 60 controller.Init(container, []string{"", "0"}, request) 61 controller.Run(response, request) 62 if controller.Error || strings.Contains(response.Content, "div class=\"error\"") { 63 t.Error("Expected no error to be shown in form") 64 } 65 if !strings.Contains(response.Content, "<title>Edit Title - Jamie's Journal</title>") { 66 t.Error("Expected HTML title to be in place") 67 } 68 69 // Redirect if empty content on POST 70 response.Reset() 71 request, _ = http.NewRequest("POST", "/slug/edit", strings.NewReader("title=&date=&content=")) 72 request.Header.Add("Content-Type", "application/x-www-form-urlencoded") 73 db.Rows = &database.MockJournal_SingleRow{} 74 controller.Init(container, []string{"", "0"}, request) 75 controller.Run(response, request) 76 if response.StatusCode != 302 || response.Headers.Get("Location") != "/slug/edit" { 77 t.Error("Expected redirect back to same page") 78 } 79 80 // Validate error cookie on redirect 81 request, _ = http.NewRequest("GET", "/", strings.NewReader("")) 82 request.Header.Add("Cookie", response.Headers.Get("Set-Cookie")) 83 controller.Init(container, []string{"", "0"}, request) 84 flash := controller.Session.GetFlash() 85 if flash == nil || flash[0] != "error" { 86 t.Error("Expected cookie to contain error value") 87 } 88 89 // Redirect on success 90 response.Reset() 91 request, _ = http.NewRequest("POST", "/slug/edit", strings.NewReader("title=Title&date=2018-02-01&content=Test+again")) 92 request.Header.Add("Content-Type", "application/x-www-form-urlencoded") 93 db.Rows = &database.MockJournal_SingleRow{} 94 controller.Init(container, []string{"", "0"}, request) 95 controller.Run(response, request) 96 if response.StatusCode != 302 || response.Headers.Get("Location") != "/" { 97 t.Error("Expected redirect back to home with saved banner shown") 98 } 99 100 // Validate saved cookie on redirect 101 request, _ = http.NewRequest("GET", "/", strings.NewReader("")) 102 request.Header.Add("Cookie", response.Headers.Get("Set-Cookie")) 103 controller.Init(container, []string{"", "0"}, request) 104 flash = controller.Session.GetFlash() 105 if flash == nil || flash[0] != "saved" { 106 t.Error("Expected cookie to contain saved value") 107 } 108 }