naise_pos/db/sqlc/product_test.go

134 lines
4.0 KiB
Go
Raw Normal View History

2023-03-05 23:35:41 +07:00
package db
import (
"context"
"database/sql"
"testing"
"time"
2023-03-07 18:52:37 +07:00
"git.nochill.in/nochill/naice_pos/util"
2023-03-05 23:35:41 +07:00
"github.com/google/uuid"
"github.com/stretchr/testify/require"
)
func createRandomProduct(t *testing.T) (Product, CreateProductParams) {
2023-03-12 11:01:43 +07:00
sellingPrice := util.RandomFloat(999, 99999)
purchasePrice := util.RandomFloat(999, 9999)
stock := util.RandomFloat(10, 10000)
2023-03-16 20:37:20 +07:00
productCategory := createRandomProductCategory(t)
2023-03-06 15:15:11 +07:00
2023-03-05 23:35:41 +07:00
arg := CreateProductParams{
2023-03-22 13:40:18 +07:00
MerchantID: uuid.MustParse("7e525a4b-4208-4f05-99a1-a75df475dd9b"),
ProductTypeID: 1,
2023-03-16 20:37:20 +07:00
Name: util.RandomString(10),
SellingPrice: sellingPrice,
PurchasePrice: purchasePrice,
ProductCategoryID: productCategory.ID,
Stock: stock,
2023-04-05 14:04:49 +07:00
Image: sql.NullString{Valid: false},
2023-03-05 23:35:41 +07:00
}
product, err := testQueries.CreateProduct(context.Background(), arg)
require.NoError(t, err)
return product, arg
}
func TestCreateProduct(t *testing.T) {
product, arg := createRandomProduct(t)
require.NotEmpty(t, product)
require.Equal(t, arg.Name, product.Name)
require.Equal(t, arg.MerchantID, product.MerchantID)
require.Equal(t, arg.SellingPrice, product.SellingPrice)
require.Equal(t, arg.PurchasePrice, product.PurchasePrice)
require.Equal(t, arg.Stock, product.Stock)
require.NotZero(t, product.ID)
require.NotZero(t, product.CreatedAt)
require.NotZero(t, product.UpdatedAt)
}
func TestGetProduct(t *testing.T) {
createProduct, _ := createRandomProduct(t)
getProduct, err := testQueries.GetProduct(context.Background(), createProduct.ID)
require.NoError(t, err)
require.NotEmpty(t, getProduct)
require.Equal(t, createProduct.ID, getProduct.ID)
require.Equal(t, createProduct.MerchantID, getProduct.MerchantID)
require.Equal(t, createProduct.Name, getProduct.Name)
require.Equal(t, createProduct.PurchasePrice, getProduct.PurchasePrice)
require.Equal(t, createProduct.SellingPrice, getProduct.SellingPrice)
require.Equal(t, createProduct.Stock, getProduct.Stock)
require.WithinDuration(t, createProduct.CreatedAt.Time, getProduct.CreatedAt.Time, time.Second)
require.WithinDuration(t, createProduct.UpdatedAt.Time, getProduct.UpdatedAt.Time, time.Second)
}
func TestUpdateProduct(t *testing.T) {
createProduct, _ := createRandomProduct(t)
getProduct, err := testQueries.GetProduct(context.Background(), createProduct.ID)
require.NoError(t, err)
arg := UpdateProductParams{
ID: getProduct.ID,
Name: util.RandomString(6),
SellingPrice: float64(200),
PurchasePrice: float64(200),
}
updatedProduct, err := testQueries.UpdateProduct(context.Background(), arg)
require.NotEmpty(t, updatedProduct)
require.NoError(t, err)
require.Equal(t, arg.ID, updatedProduct.ID)
require.Equal(t, arg.Name, updatedProduct.Name)
require.Equal(t, arg.PurchasePrice, updatedProduct.PurchasePrice)
require.Equal(t, arg.SellingPrice, updatedProduct.SellingPrice)
require.NotSame(t, createProduct.Name, updatedProduct.Name)
require.NotSame(t, createProduct.SellingPrice, updatedProduct.SellingPrice)
require.NotSame(t, createProduct.PurchasePrice, updatedProduct.PurchasePrice)
require.NotSame(t, createProduct.Stock, updatedProduct.Stock)
}
func TestDeleteProduct(t *testing.T) {
product1, _ := createRandomProduct(t)
err := testQueries.DeleteProduct(context.Background(), product1.ID)
require.NoError(t, err)
product2, err := testQueries.GetProduct(context.Background(), product1.ID)
require.Error(t, err)
require.EqualError(t, err, sql.ErrNoRows.Error())
require.Empty(t, product2)
}
func TestGetProducts(t *testing.T) {
2023-03-15 15:00:36 +07:00
var lastProduct Product
2023-03-05 23:35:41 +07:00
for i := 0; i < 6; i++ {
2023-03-15 15:00:36 +07:00
lastProduct, _ = createRandomProduct(t)
2023-03-05 23:35:41 +07:00
}
arg := ListProductsParams{
2023-03-15 15:00:36 +07:00
MerchantID: lastProduct.MerchantID,
Limit: 5,
Offset: 0,
2023-03-05 23:35:41 +07:00
}
products, err := testQueries.ListProducts(context.Background(), arg)
require.NoError(t, err)
2023-03-15 15:00:36 +07:00
require.NotEmpty(t, products)
2023-03-05 23:35:41 +07:00
for _, product := range products {
require.NotEmpty(t, product)
2023-03-15 15:00:36 +07:00
require.Equal(t, lastProduct.MerchantID, product.MerchantID)
2023-03-05 23:35:41 +07:00
}
}