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:
parent
bd52df65cd
commit
2decf765ac
@ -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 {
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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",
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -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")
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user