Skip to content
Snippets Groups Projects
Commit cb2bff18 authored by meskio's avatar meskio :tent:
Browse files

Add purchases from admin for other members

parent be1bae9f
No related branches found
No related tags found
No related merge requests found
......@@ -39,7 +39,8 @@ func Init(dbPath string, signKey string, mail *Mail, r *mux.Router) error {
r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.GetMember)).Methods("GET")
r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.UpdateMember)).Methods("PUT")
r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.DeleteMember)).Methods("DELETE")
r.HandleFunc("/member/{num:[0-9]+}/purchase", a.authAdmin(a.GetMemberTransactions)).Methods("GET")
r.HandleFunc("/member/{num:[0-9]+}/transactions", a.authAdmin(a.GetMemberTransactions)).Methods("GET")
r.HandleFunc("/member/{num:[0-9]+}/purchase", a.authAdmin(a.AddMemberPurchase)).Methods("POST")
r.HandleFunc("/product", a.auth(a.ListProducts)).Methods("GET")
r.HandleFunc("/product", a.authAdmin(a.AddProduct)).Methods("POST")
......
......@@ -5,8 +5,10 @@ import (
"errors"
"log"
"net/http"
"strconv"
"0xacab.org/meskio/cicer/api/db"
"github.com/gorilla/mux"
)
func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
......@@ -40,3 +42,9 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
}
}
func (a *api) AddMemberPurchase(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
num, _ := strconv.Atoi(vars["num"])
a.AddPurchase(num, w, req)
}
package api
import (
"fmt"
"net/http"
"testing"
......@@ -63,3 +64,60 @@ func TestPurchaseAddListMine(t *testing.T) {
t.Error("Wrong product balance:", member.Balance)
}
}
func TestMemberPurchase(t *testing.T) {
tapi := newTestAPI(t)
defer tapi.close()
tapi.addTestMember()
tapi.addTestProducts()
products := []db.Purchase{
{
ProductCode: testProduct.Code,
Amount: 5,
},
}
resp := tapi.doAdmin("POST", fmt.Sprintf("/member/%d/purchase", testMember.Num), products, nil)
if resp.StatusCode != http.StatusCreated {
t.Fatal("Can't create purchase:", resp.Status)
}
var transactions []db.Transaction
resp = tapi.do("GET", "/transaction/mine", nil, &transactions)
if resp.StatusCode != http.StatusOK {
t.Fatal("Can't get transactions:", resp.Status)
}
if len(transactions) != 1 {
t.Fatal("Wrong number of transactions", len(transactions), transactions)
}
if transactions[0].Total != -testProduct.Price*products[0].Amount {
t.Error("Wrong total:", transactions[0].Total)
}
if len(transactions[0].Purchase) != 1 {
t.Fatal("Wrong number of products", len(transactions[0].Purchase), transactions[0].Purchase)
}
if transactions[0].Purchase[0].ProductCode != testProduct.Code {
t.Error("Wrong product code:", transactions[0].Purchase[0].ProductCode)
}
if transactions[0].Purchase[0].Price != testProduct.Price {
t.Error("Wrong product price:", transactions[0].Purchase[0].Price)
}
var product db.Product
resp = tapi.do("GET", "/product/234", nil, &product)
if resp.StatusCode != http.StatusOK {
t.Error("Can't find the product:", resp.Status)
}
if product.Stock != testProduct.Stock-products[0].Amount {
t.Error("Wrong product stock:", product)
}
var member db.Member
resp = tapi.do("GET", "/member/me", nil, &member)
if resp.StatusCode != http.StatusOK {
t.Error("Can't find the member:", resp.Status)
}
if member.Balance != testMember.Balance-(testProduct.Price*products[0].Amount) {
t.Error("Wrong product balance:", member.Balance)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment