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  }