add post transactions endpoint
parent
03ec3247f9
commit
1345071f0a
26
server.go
26
server.go
|
|
@ -22,6 +22,8 @@ func (server Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||
switch r.Method + r.URL.Path {
|
||||
case "GET/api/transactions":
|
||||
server.getTransactions(w, r)
|
||||
case "POST/api/transactions":
|
||||
server.postTransactions(w, r)
|
||||
case "PUT/api/transactions":
|
||||
server.putTransactions(w, r)
|
||||
case "GET/api/balances":
|
||||
|
|
@ -50,6 +52,30 @@ func (server Server) getTransactions(w http.ResponseWriter, r *http.Request) {
|
|||
json.NewEncoder(w).Encode(map[string]interface{}{"Transactions": transactions})
|
||||
}
|
||||
|
||||
func (server Server) postTransactions(w http.ResponseWriter, r *http.Request) {
|
||||
var request struct {
|
||||
Transaction
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
||||
server.err(w, r, err)
|
||||
return
|
||||
}
|
||||
if err := server.ledger.NewTransaction(); err != nil {
|
||||
server.err(w, r, err)
|
||||
return
|
||||
}
|
||||
transactions, err := server.ledger.Transactions()
|
||||
if err != nil {
|
||||
server.err(w, r, err)
|
||||
return
|
||||
}
|
||||
if err := server.ledger.SetTransaction(len(transactions)-1, request.Transaction); err != nil {
|
||||
server.err(w, r, err)
|
||||
return
|
||||
}
|
||||
json.NewEncoder(w).Encode(map[string]interface{}{"ok": true})
|
||||
}
|
||||
|
||||
func (server Server) putTransactions(w http.ResponseWriter, r *http.Request) {
|
||||
var request struct {
|
||||
IDX int `json:"idx"`
|
||||
|
|
|
|||
|
|
@ -0,0 +1,48 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestServerPostTransactions(t *testing.T) {
|
||||
path := testLedgerFile(t)
|
||||
ledger, err := NewLedger(path)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
server := Server{ledger: ledger}
|
||||
|
||||
r := httptest.NewRequest(http.MethodPost, "/", strings.NewReader(`{
|
||||
"Date": "2099-02-03",
|
||||
"Description": "test",
|
||||
"Payer": "payer",
|
||||
"Payee": "payee",
|
||||
"Amount": 1.02
|
||||
}`))
|
||||
w := httptest.NewRecorder()
|
||||
server.postTransactions(w, r)
|
||||
|
||||
if w.Code != http.StatusOK {
|
||||
t.Fatal(w.Code)
|
||||
}
|
||||
if s := strings.TrimSpace(string(w.Body.Bytes())); s != `{"ok":true}` {
|
||||
t.Fatal(s)
|
||||
}
|
||||
|
||||
transactions, err := ledger.Transactions()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if transactions[len(transactions)-1] != (Transaction{
|
||||
Date: "2099-02-03",
|
||||
Description: "test",
|
||||
Payer: "payer",
|
||||
Payee: "payee",
|
||||
Amount: 1.02,
|
||||
}) {
|
||||
t.Fatal(transactions[len(transactions)-1])
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue