generated from PenaSide/GolangTemplate
add test
This commit is contained in:
parent
e289cffba5
commit
fbf19a2630
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"math"
|
||||
"net/http"
|
||||
"os"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
@ -43,6 +44,8 @@ type clients struct {
|
||||
currency *client.CurrencyClient
|
||||
discount *client.DiscountClient
|
||||
payment *client.PaymentClient
|
||||
verify *client.VerificationClient
|
||||
template *client.TemplateClient
|
||||
}
|
||||
|
||||
var _ ServerInterface = (*API2)(nil)
|
||||
@ -594,17 +597,150 @@ func (api *API2) ChangeCurrency(ctx echo.Context) error {
|
||||
return ctx.JSON(http.StatusOK, updatedAccount)
|
||||
}
|
||||
|
||||
// todo need tests
|
||||
func (api *API2) CalculateLTV(ctx echo.Context) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
var req CalculateLTVJSONBody
|
||||
|
||||
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 {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
userID, ok := ctx.Get(models.AuthJWTDecodedUserIDKey).(string)
|
||||
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 {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
historyID := ctx.Param("id")
|
||||
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.GET(baseURL+"/accounts", wrapper.PaginationAccounts)
|
||||
router.DELETE(baseURL+"/cart", wrapper.RemoveFromCart)//-
|
||||
router.PATCH(baseURL+"/cart", wrapper.Add2cart)
|
||||
router.POST(baseURL+"/cart/pay", wrapper.PayCart)
|
||||
router.PATCH(baseURL+"/cart", wrapper.Add2cart)//+
|
||||
router.POST(baseURL+"/cart/pay", wrapper.PayCart)//+
|
||||
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.POST(baseURL+"/history/ltv", wrapper.CalculateLTV)
|
||||
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