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) {
pantry := &pantry{prefs: getterSetter}
pantry := &pantry{gs: getterSetter}
cookies, err := pantry.loadCookies()
if err != nil {

View File

@ -26,27 +26,24 @@ import (
"github.com/stretchr/testify/require"
)
func TestJar(t *testing.T) {
testCookies := []testCookie{
func TestJarGetSet(t *testing.T) {
ts := getTestServer(t, []testCookie{
{"TestName1", "TestValue1"},
{"TestName2", "TestValue2"},
{"TestName3", "TestValue3"},
}
ts := getTestServer(t, testCookies...)
})
defer ts.Close()
jar, err := NewCookieJar(make(testGetterSetter))
require.NoError(t, err)
client := &http.Client{Jar: jar}
client := getClientWithJar(t, make(testGetterSetter))
// Hit a server that sets some cookies.
setRes, err := client.Get(ts.URL + "/set")
if err != nil {
t.FailNow()
}
require.NoError(t, setRes.Body.Close())
// Hit a server that checks the cookies are there.
getRes, err := client.Get(ts.URL + "/get")
if err != nil {
t.FailNow()
@ -54,11 +51,50 @@ func TestJar(t *testing.T) {
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 {
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.HandleFunc("/set", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

View File

@ -25,7 +25,7 @@ import (
)
type pantry struct {
prefs GetterSetter
gs GetterSetter
}
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
func (p *pantry) loadFromJSON() (dataStructure, error) {
b := p.prefs.Get(preferences.CookiesKey)
b := p.gs.Get(preferences.CookiesKey)
if b == "" {
return make(dataStructure), nil
@ -89,7 +89,7 @@ func (p *pantry) saveToJSON(val dataStructure) error {
return err
}
p.prefs.Set(preferences.CookiesKey, string(b))
p.gs.Set(preferences.CookiesKey, string(b))
return nil
}