generated from PenaSide/GolangTemplate
add test
This commit is contained in:
parent
e289cffba5
commit
fbf19a2630
@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -43,6 +44,8 @@ type clients struct {
|
|||||||
currency *client.CurrencyClient
|
currency *client.CurrencyClient
|
||||||
discount *client.DiscountClient
|
discount *client.DiscountClient
|
||||||
payment *client.PaymentClient
|
payment *client.PaymentClient
|
||||||
|
verify *client.VerificationClient
|
||||||
|
template *client.TemplateClient
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ ServerInterface = (*API2)(nil)
|
var _ ServerInterface = (*API2)(nil)
|
||||||
@ -594,17 +597,150 @@ func (api *API2) ChangeCurrency(ctx echo.Context) error {
|
|||||||
return ctx.JSON(http.StatusOK, updatedAccount)
|
return ctx.JSON(http.StatusOK, updatedAccount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// todo need tests
|
||||||
func (api *API2) CalculateLTV(ctx echo.Context) error {
|
func (api *API2) CalculateLTV(ctx echo.Context) error {
|
||||||
//TODO implement me
|
var req CalculateLTVJSONBody
|
||||||
panic("implement me")
|
|
||||||
|
if err := ctx.Bind(&req); err != nil {
|
||||||
|
api.logger.Error("failed to bind request", zap.Error(err))
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "failed to bind request")
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.From > req.To && req.To != 0 {
|
||||||
|
api.logger.Error("From timestamp must be less than To timestamp unless To is 0")
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "From timestamp must be less than To timestamp unless To is 0")
|
||||||
|
}
|
||||||
|
|
||||||
|
ltv, err := api.history.CalculateCustomerLTV(ctx.Request().Context(), req.From, req.To)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error("failed to calculate LTV", zap.Error(err))
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
response := struct {
|
||||||
|
LTV int64 `json:"LTV"`
|
||||||
|
}{
|
||||||
|
LTV: ltv,
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.JSON(http.StatusOK, response)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API2) GetRecentTariffs(ctx echo.Context) error {
|
func (api *API2) GetRecentTariffs(ctx echo.Context) error {
|
||||||
//TODO implement me
|
userID, ok := ctx.Get(models.AuthJWTDecodedUserIDKey).(string)
|
||||||
panic("implement me")
|
if !ok {
|
||||||
|
api.logger.Error("failed to convert jwt payload to string on <GetRecentTariffs> of <API2>")
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "failed to convert jwt payload to string")
|
||||||
|
}
|
||||||
|
|
||||||
|
if userID == "" {
|
||||||
|
api.logger.Error("user id is missing in <GetRecentTariffs> of <API2>")
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "user id is missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
tariffs, err := api.history.GetRecentTariffs(ctx.Request().Context(), userID)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error("failed to get recent tariffs on <GetRecentTariffs> of <API2>",
|
||||||
|
zap.String("userId", userID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.JSON(http.StatusOK, tariffs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (api *API2) SendReport(ctx echo.Context) error {
|
func (api *API2) SendReport(ctx echo.Context) error {
|
||||||
//TODO implement me
|
historyID := ctx.Param("id")
|
||||||
panic("implement me")
|
if historyID == "" {
|
||||||
|
api.logger.Error("history id is missing in <GetHistoryById> of <HistoryService>")
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "history id is missing")
|
||||||
|
}
|
||||||
|
|
||||||
|
tariffs, err := api.history.GetHistoryByID(ctx.Request().Context(), historyID)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error(
|
||||||
|
"failed to get history by id in <GetHistoryById> of <HistoryService>",
|
||||||
|
zap.String("historyID", historyID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if tariffs.Key != models.CustomerHistoryKeyPayCart {
|
||||||
|
api.logger.Error(
|
||||||
|
"invalid history record key",
|
||||||
|
zap.String("historyID", historyID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "invalid history record key")
|
||||||
|
}
|
||||||
|
|
||||||
|
historyMap, err := api.history.GetDocNumber(ctx.Request().Context(), tariffs.UserID)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error(
|
||||||
|
"failed to get history of sorting by date created in <GetDocNumber> of <HistoryService>",
|
||||||
|
zap.String("historyID", historyID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
verifuser, err := api.clients.verify.GetVerification(ctx.Request().Context(), tariffs.UserID)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error("failed to get user verification on <GetHistoryById> of <HistoryService>",
|
||||||
|
zap.Error(err),
|
||||||
|
zap.String("userID", tariffs.UserID),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
if !verifuser.Accepted {
|
||||||
|
api.logger.Error(
|
||||||
|
"verification not accepted",
|
||||||
|
zap.String("userID", tariffs.UserID),
|
||||||
|
zap.Error(err),
|
||||||
|
)
|
||||||
|
return api.error(ctx, http.StatusBadRequest, "verification not accepted")
|
||||||
|
}
|
||||||
|
|
||||||
|
authuser, err := api.clients.auth.GetUser(ctx.Request().Context(), tariffs.UserID)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error("failed to get user on <GetHistoryById> of <HistoryService>",
|
||||||
|
zap.Error(err),
|
||||||
|
zap.String("userID", tariffs.UserID),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fileContents, readerr := os.ReadFile("./report.docx")
|
||||||
|
if readerr != nil {
|
||||||
|
return api.error(ctx, http.StatusInternalServerError, "failed to read file")
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tariff := range tariffs.RawDetails.Tariffs {
|
||||||
|
totalAmount := uint64(0)
|
||||||
|
for _, privilege := range tariff.Privileges {
|
||||||
|
totalAmount += privilege.Amount
|
||||||
|
}
|
||||||
|
data := models.RespGeneratorService{
|
||||||
|
DocNumber: historyMap[historyID] + 1,
|
||||||
|
Date: time.Now().Format("2006-01-02"),
|
||||||
|
OrgTaxNum: verifuser.TaxNumber,
|
||||||
|
OrgName: models.Name{Orgname: "Orgname"},
|
||||||
|
Name: tariff.Name,
|
||||||
|
Amount: totalAmount,
|
||||||
|
Price: tariffs.RawDetails.Price,
|
||||||
|
Sum: tariffs.RawDetails.Price,
|
||||||
|
}
|
||||||
|
err = api.clients.template.SendData(ctx.Request().Context(), data, fileContents, authuser.Email)
|
||||||
|
if err != nil {
|
||||||
|
api.logger.Error("failed to send report to user on <GetHistoryById> of <HistoryService>",
|
||||||
|
zap.Error(err),
|
||||||
|
zap.String("userID", tariffs.UserID),
|
||||||
|
)
|
||||||
|
return api.errorOld(ctx, err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ctx.NoContent(http.StatusOK)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -411,10 +411,10 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
|
|||||||
router.PATCH(baseURL+"/account/:userId", wrapper.SetAccountVerificationStatus)
|
router.PATCH(baseURL+"/account/:userId", wrapper.SetAccountVerificationStatus)
|
||||||
router.GET(baseURL+"/accounts", wrapper.PaginationAccounts)
|
router.GET(baseURL+"/accounts", wrapper.PaginationAccounts)
|
||||||
router.DELETE(baseURL+"/cart", wrapper.RemoveFromCart)//-
|
router.DELETE(baseURL+"/cart", wrapper.RemoveFromCart)//-
|
||||||
router.PATCH(baseURL+"/cart", wrapper.Add2cart)
|
router.PATCH(baseURL+"/cart", wrapper.Add2cart)//+
|
||||||
router.POST(baseURL+"/cart/pay", wrapper.PayCart)
|
router.POST(baseURL+"/cart/pay", wrapper.PayCart)//+
|
||||||
router.GET(baseURL+"/currencies", wrapper.GetCurrencies)
|
router.GET(baseURL+"/currencies", wrapper.GetCurrencies)
|
||||||
router.PUT(baseURL+"/currencies", wrapper.UpdateCurrencies)
|
router.PUT(baseURL+"/currencies", wrapper.UpdateCurrencies)//-
|
||||||
router.GET(baseURL+"/history", wrapper.GetHistory)
|
router.GET(baseURL+"/history", wrapper.GetHistory)
|
||||||
router.POST(baseURL+"/history/ltv", wrapper.CalculateLTV)
|
router.POST(baseURL+"/history/ltv", wrapper.CalculateLTV)
|
||||||
router.GET(baseURL+"/recent", wrapper.GetRecentTariffs)
|
router.GET(baseURL+"/recent", wrapper.GetRecentTariffs)
|
||||||
|
|||||||
34
tests/e2e/сurrencies_test.go
Normal file
34
tests/e2e/сurrencies_test.go
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
package e2e_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"net/http"
|
||||||
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/internal/models"
|
||||||
|
"penahub.gitlab.yandexcloud.net/pena-services/customer/pkg/client"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCurrencies(t *testing.T) {
|
||||||
|
t.Run("Получение текущих доступных курсов", func(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
responseGetCurrencies, errCurrencies := client.Get[[]models.CurrencyList, models.ResponseErrorHTTP](ctx, &client.RequestSettings{
|
||||||
|
URL: "http://localhost:8000/currencies",
|
||||||
|
})
|
||||||
|
if isNoError := assert.NoError(t, errCurrencies); !isNoError {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if isNoRequestError := assert.Nil(t, responseGetCurrencies.Error); !isNoRequestError {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(responseGetCurrencies.Body)
|
||||||
|
assert.Equal(t, http.StatusOK, responseGetCurrencies.StatusCode)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user