1
0
mirror of https://github.com/aclindsa/moneygo.git synced 2024-12-26 23:42:29 -05:00

testing: Add common way to POST objects

This commit is contained in:
Aaron Lindsay 2017-10-08 21:18:30 -04:00
parent bd52df65cd
commit 2decf765ac
4 changed files with 88 additions and 65 deletions

View File

@ -2,6 +2,8 @@ package handlers_test
import ( import (
"database/sql" "database/sql"
"encoding/json"
"fmt"
"github.com/aclindsa/moneygo/internal/config" "github.com/aclindsa/moneygo/internal/config"
"github.com/aclindsa/moneygo/internal/db" "github.com/aclindsa/moneygo/internal/db"
"github.com/aclindsa/moneygo/internal/handlers" "github.com/aclindsa/moneygo/internal/handlers"
@ -35,6 +37,43 @@ func PutForm(client *http.Client, url string, data url.Values) (*http.Response,
return client.Do(request) return client.Do(request)
} }
type TransactType interface {
Read(string) error
}
func create(c *http.Client, input TransactType, output TransactType, urlsuffix, key string) error {
bytes, err := json.Marshal(input)
if err != nil {
return err
}
response, err := c.PostForm(server.URL+urlsuffix, url.Values{key: {string(bytes)}})
if err != nil {
return err
}
body, err := ioutil.ReadAll(response.Body)
response.Body.Close()
if err != nil {
return err
}
var e handlers.Error
err = (&e).Read(string(body))
if err != nil {
return err
}
if e.ErrorId != 0 || len(e.ErrorString) != 0 {
return fmt.Errorf("Error when creating %s: %+v", key, e)
}
err = output.Read(string(body))
if err != nil {
return err
}
return nil
}
func RunWith(t *testing.T, d *TestData, fn TestDataFunc) { func RunWith(t *testing.T, d *TestData, fn TestDataFunc) {
testdata, err := d.Initialize() testdata, err := d.Initialize()
if err != nil { if err != nil {

View File

@ -1,7 +1,6 @@
package handlers_test package handlers_test
import ( import (
"encoding/json"
"fmt" "fmt"
"github.com/aclindsa/moneygo/internal/handlers" "github.com/aclindsa/moneygo/internal/handlers"
"io/ioutil" "io/ioutil"
@ -13,7 +12,6 @@ import (
func newSession(user *User) (*http.Client, error) { func newSession(user *User) (*http.Client, error) {
var u User var u User
var e handlers.Error
jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: nil}) jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: nil})
if err != nil { if err != nil {
@ -23,34 +21,7 @@ func newSession(user *User) (*http.Client, error) {
client := server.Client() client := server.Client()
client.Jar = jar client.Jar = jar
bytes, err := json.Marshal(user) create(client, user, &u, "/session/", "user")
if err != nil {
return nil, err
}
response, err := client.PostForm(server.URL+"/session/", url.Values{"user": {string(bytes)}})
if err != nil {
return nil, err
}
body, err := ioutil.ReadAll(response.Body)
response.Body.Close()
if err != nil {
return nil, err
}
err = (&u).Read(string(body))
if err != nil {
return nil, err
}
err = (&e).Read(string(body))
if err != nil {
return nil, err
}
if e.ErrorId != 0 || len(e.ErrorString) != 0 {
return nil, fmt.Errorf("Unexpected error when creating session %+v", e)
}
return client, nil return client, nil
} }

View File

@ -35,8 +35,8 @@ type TestData struct {
initialized bool initialized bool
users []User users []User
clients []*http.Client clients []*http.Client
accounts []handlers.Account
securities []handlers.Security securities []handlers.Security
accounts []handlers.Account // accounts must appear after their parents in this slice
transactions []handlers.Transaction transactions []handlers.Transaction
prices []handlers.Price prices []handlers.Price
reports []handlers.Report reports []handlers.Report
@ -107,5 +107,46 @@ var data = []TestData{
Email: "jsmith@example.com", Email: "jsmith@example.com",
}, },
}, },
securities: []handlers.Security{
handlers.Security{
UserId: 0,
Name: "USD",
Description: "US Dollar",
Symbol: "$",
Precision: 2,
Type: handlers.Currency,
AlternateId: "840",
},
},
accounts: []handlers.Account{
handlers.Account{
UserId: 0,
SecurityId: 0,
ParentAccountId: -1,
Type: handlers.Asset,
Name: "Assets",
},
handlers.Account{
UserId: 0,
SecurityId: 0,
ParentAccountId: 0,
Type: handlers.Asset,
Name: "Credit Union Checking",
},
handlers.Account{
UserId: 0,
SecurityId: 0,
ParentAccountId: -1,
Type: handlers.Expense,
Name: "Expenses",
},
handlers.Account{
UserId: 0,
SecurityId: 0,
ParentAccountId: 2,
Type: handlers.Expense,
Name: "Groceries",
},
},
}, },
} }

View File

@ -12,41 +12,9 @@ import (
) )
func createUser(user *User) (*User, error) { func createUser(user *User) (*User, error) {
bytes, err := json.Marshal(user)
if err != nil {
return nil, err
}
response, err := server.Client().PostForm(server.URL+"/user/", url.Values{"user": {string(bytes)}})
if err != nil {
return nil, err
}
body, err := ioutil.ReadAll(response.Body)
response.Body.Close()
if err != nil {
return nil, err
}
var e handlers.Error
err = (&e).Read(string(body))
if err != nil {
return nil, err
}
if e.ErrorId != 0 || len(e.ErrorString) != 0 {
return nil, fmt.Errorf("Error when creating user %+v", e)
}
var u User var u User
err = (&u).Read(string(body)) err := create(server.Client(), user, &u, "/user/", "user")
if err != nil { return &u, err
return nil, err
}
if u.UserId == 0 || len(u.Username) == 0 {
return nil, fmt.Errorf("Unable to create user: %+v", user)
}
return &u, nil
} }
func updateUser(client *http.Client, user *User) (*User, error) { func updateUser(client *http.Client, user *User) (*User, error) {
@ -147,6 +115,10 @@ func getUser(client *http.Client, userid int64) (*User, error) {
func TestCreateUser(t *testing.T) { func TestCreateUser(t *testing.T) {
RunWith(t, &data[0], func(t *testing.T, d *TestData) { RunWith(t, &data[0], func(t *testing.T, d *TestData) {
if d.users[0].UserId == 0 || len(d.users[0].Username) == 0 {
t.Errorf("Unable to create user: %+v", data[0].users[0])
}
if len(d.users[0].Password) != 0 || len(d.users[0].PasswordHash) != 0 { if len(d.users[0].Password) != 0 || len(d.users[0].PasswordHash) != 0 {
t.Error("Never send password, only send password hash when necessary") t.Error("Never send password, only send password hash when necessary")
} }