test: add test that cookie jar loads cookies

This commit is contained in:
James Houlahan
2020-08-13 11:39:28 +02:00
parent 209af59232
commit 66082af40f
3 changed files with 50 additions and 14 deletions

View File

@ -41,7 +41,7 @@ type GetterSetter interface {
} }
func NewCookieJar(getterSetter GetterSetter) (*Jar, error) { func NewCookieJar(getterSetter GetterSetter) (*Jar, error) {
pantry := &pantry{prefs: getterSetter} pantry := &pantry{gs: getterSetter}
cookies, err := pantry.loadCookies() cookies, err := pantry.loadCookies()
if err != nil { if err != nil {

View File

@ -26,27 +26,24 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestJar(t *testing.T) { func TestJarGetSet(t *testing.T) {
testCookies := []testCookie{ ts := getTestServer(t, []testCookie{
{"TestName1", "TestValue1"}, {"TestName1", "TestValue1"},
{"TestName2", "TestValue2"}, {"TestName2", "TestValue2"},
{"TestName3", "TestValue3"}, {"TestName3", "TestValue3"},
} })
ts := getTestServer(t, testCookies...)
defer ts.Close() defer ts.Close()
jar, err := NewCookieJar(make(testGetterSetter)) client := getClientWithJar(t, make(testGetterSetter))
require.NoError(t, err)
client := &http.Client{Jar: jar}
// Hit a server that sets some cookies.
setRes, err := client.Get(ts.URL + "/set") setRes, err := client.Get(ts.URL + "/set")
if err != nil { if err != nil {
t.FailNow() t.FailNow()
} }
require.NoError(t, setRes.Body.Close()) require.NoError(t, setRes.Body.Close())
// Hit a server that checks the cookies are there.
getRes, err := client.Get(ts.URL + "/get") getRes, err := client.Get(ts.URL + "/get")
if err != nil { if err != nil {
t.FailNow() t.FailNow()
@ -54,11 +51,50 @@ func TestJar(t *testing.T) {
require.NoError(t, getRes.Body.Close()) require.NoError(t, getRes.Body.Close())
} }
func TestJarLoad(t *testing.T) {
ts := getTestServer(t, []testCookie{
{"TestName1", "TestValue1"},
{"TestName2", "TestValue2"},
{"TestName3", "TestValue3"},
})
defer ts.Close()
// This will be our "persistent storage" from which the cookie jar should load cookies.
gs := make(testGetterSetter)
// This client saves cookies to persistent storage.
oldClient := getClientWithJar(t, gs)
// Hit a server that sets some cookies.
setRes, err := oldClient.Get(ts.URL + "/set")
if err != nil {
t.FailNow()
}
require.NoError(t, setRes.Body.Close())
// This client loads cookies from persistent storage.
newClient := getClientWithJar(t, gs)
// Hit a server that checks the cookies are there.
getRes, err := newClient.Get(ts.URL + "/get")
if err != nil {
t.FailNow()
}
require.NoError(t, getRes.Body.Close())
}
type testCookie struct { type testCookie struct {
name, value string name, value string
} }
func getTestServer(t *testing.T, wantCookies ...testCookie) *httptest.Server { func getClientWithJar(t *testing.T, gs GetterSetter) *http.Client {
jar, err := NewCookieJar(gs)
require.NoError(t, err)
return &http.Client{Jar: jar}
}
func getTestServer(t *testing.T, wantCookies []testCookie) *httptest.Server {
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc("/set", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { mux.HandleFunc("/set", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

View File

@ -25,7 +25,7 @@ import (
) )
type pantry struct { type pantry struct {
prefs GetterSetter gs GetterSetter
} }
func (p *pantry) persistCookies(url string, cookies []*http.Cookie) error { func (p *pantry) persistCookies(url string, cookies []*http.Cookie) error {
@ -68,7 +68,7 @@ func (p *pantry) loadCookies() (map[string][]*http.Cookie, error) {
type dataStructure map[string]string type dataStructure map[string]string
func (p *pantry) loadFromJSON() (dataStructure, error) { func (p *pantry) loadFromJSON() (dataStructure, error) {
b := p.prefs.Get(preferences.CookiesKey) b := p.gs.Get(preferences.CookiesKey)
if b == "" { if b == "" {
return make(dataStructure), nil return make(dataStructure), nil
@ -89,7 +89,7 @@ func (p *pantry) saveToJSON(val dataStructure) error {
return err return err
} }
p.prefs.Set(preferences.CookiesKey, string(b)) p.gs.Set(preferences.CookiesKey, string(b))
return nil return nil
} }