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  }