[hw-3] loms service

This commit is contained in:
Никита Шубин
2025-06-20 10:11:59 +00:00
parent c8e056bc99
commit b88dfe6db5
73 changed files with 8837 additions and 52 deletions

View File

@@ -7,6 +7,7 @@ import (
"context"
"encoding/json"
"fmt"
"net"
"net/http"
"net/http/httptest"
"testing"
@@ -16,13 +17,17 @@ import (
"github.com/ozontech/allure-go/pkg/framework/suite"
"github.com/testcontainers/testcontainers-go"
"github.com/testcontainers/testcontainers-go/wait"
"google.golang.org/grpc"
lomsService "route256/cart/internal/adapter/client/loms"
productsService "route256/cart/internal/adapter/client/products"
"route256/cart/internal/app"
"route256/cart/internal/domain/cart/repository"
cartService "route256/cart/internal/domain/cart/service"
"route256/cart/internal/domain/entity"
"route256/cart/internal/domain/model"
productsService "route256/cart/internal/domain/products/service"
"route256/cart/internal/domain/repository"
cartService "route256/cart/internal/domain/service"
pbLoms "route256/pkg/api/loms/v1"
)
const (
@@ -34,12 +39,27 @@ const (
testUID = entity.UID(1337)
)
type lomsServerMock struct {
pbLoms.UnimplementedLOMSServer
}
func (lomsServerMock) OrderCreate(_ context.Context, _ *pbLoms.OrderCreateRequest) (*pbLoms.OrderCreateResponse, error) {
return &pbLoms.OrderCreateResponse{OrderId: 1}, nil
}
func (lomsServerMock) StocksInfo(_ context.Context, _ *pbLoms.StocksInfoRequest) (*pbLoms.StocksInfoResponse, error) {
return &pbLoms.StocksInfoResponse{Count: 1000}, nil
}
type CartHandlerSuite struct {
suite.Suite
psContainer testcontainers.Container
server *httptest.Server
lomsSrv *grpc.Server
lomsConn *grpc.ClientConn
server *httptest.Server
cartSvc *cartService.CartService
}
@@ -72,6 +92,20 @@ func (s *CartHandlerSuite) BeforeAll(t provider.T) {
productURL = endpoint
})
t.WithNewStep("start loms grpc server", func(st provider.StepCtx) {
lis, err := net.Listen("tcp", "127.0.0.1:0")
st.Require().NoError(err)
s.lomsSrv = grpc.NewServer()
pbLoms.RegisterLOMSServer(s.lomsSrv, &lomsServerMock{})
go s.lomsSrv.Serve(lis)
conn, err := grpc.Dial(lis.Addr().String(), grpc.WithInsecure(), grpc.WithBlock())
st.Require().NoError(err)
s.lomsConn = conn
})
t.WithNewStep("init cart-service", func(sCtx provider.StepCtx) {
prodClient := productsService.NewProductService(
*http.DefaultClient,
@@ -79,8 +113,10 @@ func (s *CartHandlerSuite) BeforeAll(t provider.T) {
productURL,
)
lomsClient := pbLoms.NewLOMSClient(s.lomsConn)
repo := repository.NewInMemoryRepository(10)
s.cartSvc = cartService.NewCartService(repo, prodClient)
s.cartSvc = cartService.NewCartService(repo, prodClient, lomsService.NewLomsService(lomsClient))
appSrv := &app.App{}
@@ -89,8 +125,11 @@ func (s *CartHandlerSuite) BeforeAll(t provider.T) {
}
func (s *CartHandlerSuite) AfterAll(t provider.T) {
_ = s.psContainer.Terminate(context.Background())
s.server.Close()
s.lomsSrv.Stop()
s.lomsConn.Close()
_ = s.psContainer.Terminate(context.Background())
}
// DELETE /user/<user_id>/cart/<sku_id>