test language picking
This commit is contained in:
parent
8d1f790f57
commit
0574c9a235
|
@ -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")
|
||||||
|
}
|
|
@ -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 <form> 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")
|
||||||
|
}
|
|
@ -60,7 +60,7 @@
|
||||||
</p>
|
</p>
|
||||||
<h3 class="text-gray-400 text-sm font-bold mb-2">{{ i18n "SetDefaultLanguageTitle" }}</h3>
|
<h3 class="text-gray-400 text-sm font-bold mb-2">{{ i18n "SetDefaultLanguageTitle" }}</h3>
|
||||||
<details class="mb-8 self-start max-w-sm">
|
<details class="mb-8 self-start max-w-sm">
|
||||||
<summary class="px-3 py-1 max-w-sm rounded shadow bg-white ring-1 ring-gray-300 hover:bg-gray-100 cursor-pointer">
|
<summary id="language-summary" class="px-3 py-1 max-w-sm rounded shadow bg-white ring-1 ring-gray-300 hover:bg-gray-100 cursor-pointer">
|
||||||
{{ $.CurrentLanguage }}
|
{{ $.CurrentLanguage }}
|
||||||
</summary>
|
</summary>
|
||||||
<div class="mt-2 bg-gray bg-white px-3 rounded ring-1 ring-gray-300">
|
<div class="mt-2 bg-gray bg-white px-3 rounded ring-1 ring-gray-300">
|
||||||
|
|
Loading…
Reference in New Issue