diff --git a/web/handlers/admin/set_language_test.go b/web/handlers/admin/set_language_test.go new file mode 100644 index 0000000..41b283f --- /dev/null +++ b/web/handlers/admin/set_language_test.go @@ -0,0 +1,45 @@ +package admin + +import ( + "net/http" + "strings" + "testing" + + "github.com/ssb-ngi-pointer/go-ssb-room/web/router" + "github.com/stretchr/testify/assert" +) + + +/* can't test English atm due to web/i18n/i18ntesting/testing.go:justTheKeys, which generates translations that are just +* translationLabel = "translationLabel" +*/ +// func TestLanguageSetDefaultLanguageEnglish(t *testing.T) { +// ts := newSession(t) +// a := assert.New(t) +// +// ts.ConfigDB.GetDefaultLanguageReturns("en", nil) +// +// u := ts.URLTo(router.AdminSettings) +// html, resp := ts.Client.GetHTML(u) +// a.Equal(http.StatusOK, resp.Code, "Wrong HTTP status code") +// +// fmt.Println(html.Html()) +// summaryElement := html.Find("#language-summary") +// summaryText := strings.TrimSpace(summaryElement.Text()) +// a.Equal("English", summaryText, "summary language should display english translation of language name") +// } + +func TestLanguageSetDefaultLanguage(t *testing.T) { + ts := newSession(t) + a := assert.New(t) + + ts.ConfigDB.GetDefaultLanguageReturns("de", nil) + + u := ts.URLTo(router.AdminSettings) + html, resp := ts.Client.GetHTML(u) + a.Equal(http.StatusOK, resp.Code, "Wrong HTTP status code") + + summaryElement := html.Find("#language-summary") + summaryText := strings.TrimSpace(summaryElement.Text()) + a.Equal("Deutsch", summaryText, "summary language should display german translation of language name") +} diff --git a/web/handlers/set_language_test.go b/web/handlers/set_language_test.go new file mode 100644 index 0000000..ea20502 --- /dev/null +++ b/web/handlers/set_language_test.go @@ -0,0 +1,84 @@ +package handlers + +import ( + "fmt" + "net/http" + "net/url" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + + // "github.com/ssb-ngi-pointer/go-ssb-room/roomdb" + "github.com/ssb-ngi-pointer/go-ssb-room/web/i18n" + "github.com/ssb-ngi-pointer/go-ssb-room/web/router" +) + +func TestLanguageDefaultNoCookie(t *testing.T) { + ts := setup(t) + a := assert.New(t) + route := ts.URLTo(router.CompleteIndex) + postEndpoint := ts.URLTo(router.CompleteSetLanguage) + formAction := postEndpoint.Path + + html, res := ts.Client.GetHTML(route) + a.Equal(http.StatusOK, res.Code, "wrong HTTP status code") + + languageForms := html.Find(fmt.Sprintf(`form[action="%s"]`, formAction)) + // two languages: english, deutsch => two
elements + a.Equal(2, languageForms.Length()) + + // verify there is no language cookie to set yet + cookieHeader := res.Header()["Set-Cookie"] + for _, cookie := range cookieHeader { + cookieName := strings.Split(cookie, "=")[0] + a.NotEqual(cookieName, i18n.LanguageCookieName) + } +} + +func TestLanguageChooseGerman(t *testing.T) { + ts := setup(t) + a := assert.New(t) + route := ts.URLTo(router.CompleteIndex) + postEndpoint := ts.URLTo(router.CompleteSetLanguage) + formAction := postEndpoint.Path + + html, res := ts.Client.GetHTML(route) + a.Equal(http.StatusOK, res.Code, "wrong HTTP status code") + + csrfTokenElem := html.Find(fmt.Sprintf(`form[action="%s"] input[type="hidden"]`, formAction)) + a.Equal(6, csrfTokenElem.Length()) + + csrfName, has := csrfTokenElem.First().Attr("name") + a.True(has, "should have a name attribute") + + csrfValue, has := csrfTokenElem.First().Attr("value") + a.True(has, "should have value attribute") + + // construct the post request fields, simulating picking a language + setLanguageFields := url.Values{ + "lang": []string{"de"}, + "page": []string{"/"}, + csrfName: []string{csrfValue}, + } + + // set the referer header (important! otherwise our nicely crafted request yields a 500 :'() + var refererHeader = make(http.Header) + refererHeader.Set("Referer", "https://localhost") + ts.Client.SetHeaders(refererHeader) + + // send the post request + postRes := ts.Client.PostForm(postEndpoint, setLanguageFields) + a.Equal(http.StatusSeeOther, postRes.Code, "wrong HTTP status code for sign in") + + // verify there is one language cookie to set + cookieHeader := postRes.Header()["Set-Cookie"] + var languageCookies int + for _, cookie := range cookieHeader { + cookieName := strings.Split(cookie, "=")[0] + if cookieName == i18n.LanguageCookieName { + languageCookies += 1 + } + } + a.Equal(1, languageCookies, "should have one language cookie set after posting") +} diff --git a/web/templates/admin/settings.tmpl b/web/templates/admin/settings.tmpl index f2100a8..3fb1171 100644 --- a/web/templates/admin/settings.tmpl +++ b/web/templates/admin/settings.tmpl @@ -60,7 +60,7 @@

{{ i18n "SetDefaultLanguageTitle" }}

- + {{ $.CurrentLanguage }}