mirror of
				https://github.com/aclindsa/moneygo.git
				synced 2025-10-30 09:33:25 -04:00 
			
		
		
		
	testing: Add account tests
This commit is contained in:
		| @@ -528,10 +528,19 @@ func AccountHandler(w http.ResponseWriter, r *http.Request, db *DB) { | |||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			if account.ParentAccountId == account.AccountId { | ||||||
|  | 				WriteError(w, 3 /*Invalid Request*/) | ||||||
|  | 				return | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			err = UpdateAccount(db, &account) | 			err = UpdateAccount(db, &account) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
|  | 				if _, ok := err.(ParentAccountMissingError); ok { | ||||||
|  | 					WriteError(w, 3 /*Invalid Request*/) | ||||||
|  | 				} else { | ||||||
| 					WriteError(w, 999 /*Internal Error*/) | 					WriteError(w, 999 /*Internal Error*/) | ||||||
| 					log.Print(err) | 					log.Print(err) | ||||||
|  | 				} | ||||||
| 				return | 				return | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										159
									
								
								internal/handlers/accounts_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										159
									
								
								internal/handlers/accounts_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,159 @@ | |||||||
|  | package handlers_test | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"github.com/aclindsa/moneygo/internal/handlers" | ||||||
|  | 	"net/http" | ||||||
|  | 	"strconv" | ||||||
|  | 	"testing" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func createAccount(client *http.Client, account *handlers.Account) (*handlers.Account, error) { | ||||||
|  | 	var a handlers.Account | ||||||
|  | 	err := create(client, account, &a, "/account/", "account") | ||||||
|  | 	return &a, err | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func getAccount(client *http.Client, accountid int64) (*handlers.Account, error) { | ||||||
|  | 	var a handlers.Account | ||||||
|  | 	err := read(client, &a, "/account/"+strconv.FormatInt(accountid, 10), "account") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return &a, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func updateAccount(client *http.Client, account *handlers.Account) (*handlers.Account, error) { | ||||||
|  | 	var a handlers.Account | ||||||
|  | 	err := update(client, account, &a, "/account/"+strconv.FormatInt(account.AccountId, 10), "account") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return nil, err | ||||||
|  | 	} | ||||||
|  | 	return &a, nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func deleteAccount(client *http.Client, a *handlers.Account) error { | ||||||
|  | 	err := remove(client, "/account/"+strconv.FormatInt(a.AccountId, 10), "account") | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestCreateAccount(t *testing.T) { | ||||||
|  | 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||||
|  | 		for i := 1; i < len(data[0].accounts); i++ { | ||||||
|  | 			orig := data[0].accounts[i] | ||||||
|  | 			a := d.accounts[i] | ||||||
|  |  | ||||||
|  | 			if a.AccountId == 0 { | ||||||
|  | 				t.Errorf("Unable to create security: %+v", a) | ||||||
|  | 			} | ||||||
|  | 			if a.Type != orig.Type { | ||||||
|  | 				t.Errorf("Type doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.Name != orig.Name { | ||||||
|  | 				t.Errorf("Name doesn't match") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestGetAccount(t *testing.T) { | ||||||
|  | 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||||
|  | 		for i := 1; i < len(data[0].accounts); i++ { | ||||||
|  | 			orig := data[0].accounts[i] | ||||||
|  | 			curr := d.accounts[i] | ||||||
|  |  | ||||||
|  | 			a, err := getAccount(d.clients[orig.UserId], curr.AccountId) | ||||||
|  | 			if err != nil { | ||||||
|  | 				t.Fatalf("Error fetching accounts: %s\n", err) | ||||||
|  | 			} | ||||||
|  | 			if a.SecurityId != curr.SecurityId { | ||||||
|  | 				t.Errorf("SecurityId doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.Type != orig.Type { | ||||||
|  | 				t.Errorf("Type doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.Name != orig.Name { | ||||||
|  | 				t.Errorf("Name doesn't match") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestUpdateAccount(t *testing.T) { | ||||||
|  | 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||||
|  | 		for i := 1; i < len(data[0].accounts); i++ { | ||||||
|  | 			orig := data[0].accounts[i] | ||||||
|  | 			curr := d.accounts[i] | ||||||
|  |  | ||||||
|  | 			curr.Name = "blah" | ||||||
|  | 			curr.Type = handlers.Payable | ||||||
|  | 			curr.SecurityId = d.securities[1].SecurityId | ||||||
|  |  | ||||||
|  | 			a, err := updateAccount(d.clients[orig.UserId], &curr) | ||||||
|  | 			if err != nil { | ||||||
|  | 				t.Fatalf("Error updating account: %s\n", err) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if a.AccountId != curr.AccountId { | ||||||
|  | 				t.Errorf("AccountId doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.Type != curr.Type { | ||||||
|  | 				t.Errorf("Type doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.Name != curr.Name { | ||||||
|  | 				t.Errorf("Name doesn't match") | ||||||
|  | 			} | ||||||
|  | 			if a.SecurityId != curr.SecurityId { | ||||||
|  | 				t.Errorf("SecurityId doesn't match") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		orig := data[0].accounts[0] | ||||||
|  | 		curr := d.accounts[0] | ||||||
|  | 		curr.ParentAccountId = curr.AccountId | ||||||
|  |  | ||||||
|  | 		a, err := updateAccount(d.clients[orig.UserId], &curr) | ||||||
|  | 		if err == nil { | ||||||
|  | 			t.Fatalf("Expected error updating account to be own parent: %+v\n", a) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		orig = data[0].accounts[0] | ||||||
|  | 		curr = d.accounts[0] | ||||||
|  | 		curr.ParentAccountId = 999999 | ||||||
|  |  | ||||||
|  | 		a, err = updateAccount(d.clients[orig.UserId], &curr) | ||||||
|  | 		if err == nil { | ||||||
|  | 			t.Fatalf("Expected error updating account with invalid parent: %+v\n", a) | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		// TODO ensure you can't create cycles with ParentAccountId | ||||||
|  | 	}) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func TestDeleteAccount(t *testing.T) { | ||||||
|  | 	RunWith(t, &data[0], func(t *testing.T, d *TestData) { | ||||||
|  | 		for i := 1; i < len(data[0].accounts); i++ { | ||||||
|  | 			orig := data[0].accounts[i] | ||||||
|  | 			curr := d.accounts[i] | ||||||
|  |  | ||||||
|  | 			err := deleteAccount(d.clients[orig.UserId], &curr) | ||||||
|  | 			if err != nil { | ||||||
|  | 				t.Fatalf("Error deleting account: %s\n", err) | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			_, err = getAccount(d.clients[orig.UserId], curr.AccountId) | ||||||
|  | 			if err == nil { | ||||||
|  | 				t.Fatalf("Expected error fetching deleted account") | ||||||
|  | 			} | ||||||
|  | 			if herr, ok := err.(*handlers.Error); ok { | ||||||
|  | 				if herr.ErrorId != 3 { // Invalid requeset | ||||||
|  | 					t.Fatalf("Unexpected API error fetching deleted account: %s", herr) | ||||||
|  | 				} | ||||||
|  | 			} else { | ||||||
|  | 				t.Fatalf("Unexpected error fetching deleted account") | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	}) | ||||||
|  | } | ||||||
| @@ -87,6 +87,18 @@ func (t *TestData) Initialize() (*TestData, error) { | |||||||
| 		t2.securities = append(t2.securities, *s2) | 		t2.securities = append(t2.securities, *s2) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	for i, account := range t.accounts { | ||||||
|  | 		account.SecurityId = t2.securities[t.accounts[i].SecurityId].SecurityId | ||||||
|  | 		if account.ParentAccountId != -1 { | ||||||
|  | 			account.ParentAccountId = t2.accounts[t.accounts[i].AccountId].AccountId | ||||||
|  | 		} | ||||||
|  | 		a2, err := createAccount(t2.clients[account.UserId], &account) | ||||||
|  | 		if err != nil { | ||||||
|  | 			return nil, err | ||||||
|  | 		} | ||||||
|  | 		t2.accounts = append(t2.accounts, *a2) | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	t2.initialized = true | 	t2.initialized = true | ||||||
| 	return &t2, nil | 	return &t2, nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user