Skip to content
Snippets Groups Projects
product_test.go 2.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • meskio's avatar
    meskio committed
    package api
    
    import (
    	"net/http"
    	"testing"
    )
    
    
    meskio's avatar
    meskio committed
    var testProduct = Product{
    	Code:  234,
    	Name:  "Aceite",
    	Price: 1700,
    	Stock: 10,
    }
    
    
    meskio's avatar
    meskio committed
    func TestProductAddList(t *testing.T) {
    	tapi := newTestAPI(t)
    	defer tapi.close()
    
    meskio's avatar
    meskio committed
    	tapi.addTestProducts()
    
    meskio's avatar
    meskio committed
    
    	var products []Product
    
    meskio's avatar
    meskio committed
    	resp := tapi.do("GET", "/product", nil, &products)
    
    meskio's avatar
    meskio committed
    	if resp.StatusCode != http.StatusOK {
    		t.Fatal("Can't get products:", resp.Status)
    	}
    
    	if len(products) != 1 {
    		t.Fatal("Wrong number of products", len(products), products)
    	}
    
    meskio's avatar
    meskio committed
    	if products[0].Name != testProduct.Name {
    
    meskio's avatar
    meskio committed
    		t.Error("Wrong name:", products[0].Name)
    	}
    
    meskio's avatar
    meskio committed
    	if products[0].Price != testProduct.Price {
    
    meskio's avatar
    meskio committed
    		t.Error("Wrong price:", products[0].Price)
    	}
    }
    
    func TestProductGetDelete(t *testing.T) {
    	tapi := newTestAPI(t)
    	defer tapi.close()
    
    	resp := tapi.do("GET", "/product/234", nil, nil)
    	if resp.StatusCode != http.StatusNotFound {
    		t.Error("Expected not found:", resp.Status, resp.Body)
    	}
    
    meskio's avatar
    meskio committed
    	tapi.addTestProducts()
    
    meskio's avatar
    meskio committed
    
    	var gotProduct Product
    	resp = tapi.do("GET", "/product/234", nil, &gotProduct)
    	if resp.StatusCode != http.StatusOK {
    		t.Error("Can't find the product:", resp.Status)
    	}
    
    meskio's avatar
    meskio committed
    	if gotProduct.Code != testProduct.Code {
    
    meskio's avatar
    meskio committed
    		t.Error("Wrong product:", gotProduct.Code)
    	}
    
    meskio's avatar
    meskio committed
    	resp = tapi.doAdmin("DELETE", "/product/234", nil, nil)
    
    meskio's avatar
    meskio committed
    	if resp.StatusCode != http.StatusOK {
    		t.Error("Can't find the product:", resp.Status)
    	}
    
    	resp = tapi.do("GET", "/product/234", nil, nil)
    	if resp.StatusCode != http.StatusNotFound {
    		t.Error("Expected not found after delete:", resp.Status, resp.Body)
    	}
    }
    
    func TestProductUpdate(t *testing.T) {
    	tapi := newTestAPI(t)
    	defer tapi.close()
    
    meskio's avatar
    meskio committed
    	tapi.addTestProducts()
    
    meskio's avatar
    meskio committed
    
    
    meskio's avatar
    meskio committed
    	product := testProduct
    	product.Stock = testProduct.Stock - 5
    
    meskio's avatar
    meskio committed
    	resp := tapi.doAdmin("PUT", "/product/234", product, nil)
    
    meskio's avatar
    meskio committed
    	if resp.StatusCode != http.StatusAccepted {
    		t.Fatal("Can't update product:", resp.Status)
    	}
    
    	var gotProduct Product
    	resp = tapi.do("GET", "/product/234", nil, &gotProduct)
    	if resp.StatusCode != http.StatusOK {
    		t.Error("Can't find the product:", resp.Status)
    	}
    	if gotProduct.Stock != 5 {
    		t.Error("Wrong sotck:", gotProduct)
    	}
    }
    
    meskio's avatar
    meskio committed
    
    func (tapi *testAPI) addTestProducts() {
    
    meskio's avatar
    meskio committed
    	resp := tapi.doAdmin("POST", "/product", testProduct, nil)
    
    meskio's avatar
    meskio committed
    	if resp.StatusCode != http.StatusCreated {
    		tapi.t.Fatal("Can't create product:", resp.Status)
    	}
    }