Files
smart-search-back/tests/full_flow_test.go
vallyenfail 6cb3063a1d
Some checks failed
Deploy Smart Search Backend Test / deploy (push) Failing after 28s
add service
2026-01-19 19:29:53 +03:00

316 lines
8.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package tests
import (
"context"
authpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/auth"
invitepb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/invite"
requestpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/request"
supplierpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/supplier"
userpb "git.techease.ru/Smart-search/smart-search-back/pkg/pb/user"
)
func (s *IntegrationSuite) TestFullFlow_CompleteRequestLifecycle() {
ctx := context.Background()
loginReq := &authpb.LoginRequest{
Email: "test@example.com",
Password: "testpassword",
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
loginResp, err := s.authClient.Login(ctx, loginReq)
s.NoError(err)
s.NotEmpty(loginResp.AccessToken)
s.NotEmpty(loginResp.RefreshToken)
validateReq := &authpb.ValidateRequest{
AccessToken: loginResp.AccessToken,
}
validateResp, err := s.authClient.Validate(ctx, validateReq)
s.NoError(err)
s.True(validateResp.Valid)
userID := validateResp.UserId
getUserInfoReq := &userpb.GetInfoRequest{
UserId: userID,
}
userInfoResp, err := s.userClient.GetInfo(ctx, getUserInfoReq)
s.NoError(err)
s.NotNil(userInfoResp)
s.Equal("test@example.com", userInfoResp.Email)
getBalanceReq := &userpb.GetBalanceRequest{
UserId: userID,
}
balanceResp, err := s.userClient.GetBalance(ctx, getBalanceReq)
s.NoError(err)
s.GreaterOrEqual(balanceResp.Balance, 0.0)
createTZReq := &requestpb.CreateTZRequest{
UserId: userID,
RequestTxt: "Нужны поставщики металлоконструкций",
}
createTZResp, err := s.requestClient.CreateTZ(ctx, createTZReq)
if err != nil {
s.T().Logf("CreateTZ failed: %v", err)
return
}
s.NotEmpty(createTZResp.RequestId)
s.NotEmpty(createTZResp.TzText)
requestID := createTZResp.RequestId
approveTZReq := &requestpb.ApproveTZRequest{
RequestId: requestID,
FinalTz: "Утвержденное ТЗ для поставщиков металлоконструкций",
UserId: userID,
}
approveTZResp, err := s.requestClient.ApproveTZ(ctx, approveTZReq)
if err != nil {
s.T().Logf("ApproveTZ failed: %v", err)
return
}
s.True(approveTZResp.Success)
getMailingListReq := &requestpb.GetMailingListRequest{
UserId: userID,
}
mailingListResp, err := s.requestClient.GetMailingList(ctx, getMailingListReq)
s.NoError(err)
s.NotNil(mailingListResp.Items)
s.GreaterOrEqual(len(mailingListResp.Items), 1)
getMailingListByIDReq := &requestpb.GetMailingListByIDRequest{
RequestId: requestID,
UserId: userID,
}
mailingListByIDResp, err := s.requestClient.GetMailingListByID(ctx, getMailingListByIDReq)
if err != nil {
s.T().Logf("GetMailingListByID failed: %v", err)
return
}
s.NotNil(mailingListByIDResp.Item)
s.Equal(requestID, mailingListByIDResp.Item.RequestId)
exportExcelReq := &supplierpb.ExportExcelRequest{
RequestId: requestID,
UserId: userID,
}
exportExcelResp, err := s.supplierClient.ExportExcel(ctx, exportExcelReq)
if err != nil {
s.T().Logf("ExportExcel failed (expected if no suppliers): %v", err)
} else {
s.NotNil(exportExcelResp)
s.NotEmpty(exportExcelResp.FileName)
}
getStatisticsReq := &userpb.GetStatisticsRequest{
UserId: userID,
}
statisticsResp, err := s.userClient.GetStatistics(ctx, getStatisticsReq)
s.NoError(err)
s.NotEmpty(statisticsResp.RequestsCount)
logoutReq := &authpb.LogoutRequest{
AccessToken: loginResp.AccessToken,
}
logoutResp, err := s.authClient.Logout(ctx, logoutReq)
s.NoError(err)
s.True(logoutResp.Success)
}
func (s *IntegrationSuite) TestFullFlow_InviteCodeLifecycle() {
ctx := context.Background()
loginReq := &authpb.LoginRequest{
Email: "test@example.com",
Password: "testpassword",
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
loginResp, err := s.authClient.Login(ctx, loginReq)
s.NoError(err)
validateReq := &authpb.ValidateRequest{
AccessToken: loginResp.AccessToken,
}
validateResp, err := s.authClient.Validate(ctx, validateReq)
s.NoError(err)
userID := validateResp.UserId
generateInviteReq := &invitepb.GenerateRequest{
UserId: userID,
TtlDays: 7,
MaxUses: 5,
}
generateInviteResp, err := s.inviteClient.Generate(ctx, generateInviteReq)
s.NoError(err)
s.NotEmpty(generateInviteResp.Code)
s.Greater(generateInviteResp.MaxUses, int32(0))
inviteCode := generateInviteResp.Code
getInviteInfoReq := &invitepb.GetInfoRequest{
Code: inviteCode,
}
inviteInfoResp, err := s.inviteClient.GetInfo(ctx, getInviteInfoReq)
s.NoError(err)
s.Equal(inviteCode, inviteInfoResp.Code)
s.Equal(userID, inviteInfoResp.UserId)
s.Equal(generateInviteResp.MaxUses, inviteInfoResp.CanBeUsedCount)
s.True(inviteInfoResp.IsActive)
logoutReq := &authpb.LogoutRequest{
AccessToken: loginResp.AccessToken,
}
logoutResp, err := s.authClient.Logout(ctx, logoutReq)
s.NoError(err)
s.True(logoutResp.Success)
}
func (s *IntegrationSuite) TestFullFlow_CreateTZ_ApproveTZ_GetMailingListByID_ExportExcel() {
ctx := context.Background()
loginReq := &authpb.LoginRequest{
Email: "test@example.com",
Password: "testpassword",
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
loginResp, err := s.authClient.Login(ctx, loginReq)
s.NoError(err)
s.NotEmpty(loginResp.AccessToken)
validateReq := &authpb.ValidateRequest{
AccessToken: loginResp.AccessToken,
}
validateResp, err := s.authClient.Validate(ctx, validateReq)
s.NoError(err)
s.True(validateResp.Valid)
userID := validateResp.UserId
createTZReq := &requestpb.CreateTZRequest{
UserId: userID,
RequestTxt: "Нужны поставщики офисной мебели: столы 20 шт, стулья 50 шт",
}
createTZResp, err := s.requestClient.CreateTZ(ctx, createTZReq)
s.NoError(err)
s.NotEmpty(createTZResp.RequestId)
s.NotEmpty(createTZResp.TzText)
requestID := createTZResp.RequestId
approveTZReq := &requestpb.ApproveTZRequest{
RequestId: requestID,
FinalTz: createTZResp.TzText,
UserId: userID,
}
approveTZResp, err := s.requestClient.ApproveTZ(ctx, approveTZReq)
s.NoError(err)
s.True(approveTZResp.Success)
getMailingListByIDReq := &requestpb.GetMailingListByIDRequest{
RequestId: requestID,
UserId: userID,
}
mailingListByIDResp, err := s.requestClient.GetMailingListByID(ctx, getMailingListByIDReq)
s.NoError(err)
s.NotNil(mailingListByIDResp.Item)
s.Equal(requestID, mailingListByIDResp.Item.RequestId)
s.Greater(mailingListByIDResp.Item.SuppliersFound, int32(0))
exportExcelReq := &supplierpb.ExportExcelRequest{
RequestId: requestID,
UserId: userID,
}
exportExcelResp, err := s.supplierClient.ExportExcel(ctx, exportExcelReq)
s.NoError(err)
s.NotNil(exportExcelResp)
s.NotEmpty(exportExcelResp.FileName)
s.NotEmpty(exportExcelResp.FileData)
s.Equal("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", exportExcelResp.MimeType)
s.Greater(len(exportExcelResp.FileData), 0)
logoutReq := &authpb.LogoutRequest{
AccessToken: loginResp.AccessToken,
}
logoutResp, err := s.authClient.Logout(ctx, logoutReq)
s.NoError(err)
s.True(logoutResp.Success)
}
func (s *IntegrationSuite) TestFullFlow_MultipleRefresh() {
ctx := context.Background()
loginReq := &authpb.LoginRequest{
Email: "test@example.com",
Password: "testpassword",
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
loginResp, err := s.authClient.Login(ctx, loginReq)
s.NoError(err)
s.NotEmpty(loginResp.AccessToken)
s.NotEmpty(loginResp.RefreshToken)
refreshToken := loginResp.RefreshToken
refreshReq1 := &authpb.RefreshRequest{
RefreshToken: refreshToken,
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
refreshResp1, err := s.authClient.Refresh(ctx, refreshReq1)
s.NoError(err)
s.NotEmpty(refreshResp1.AccessToken)
refreshReq2 := &authpb.RefreshRequest{
RefreshToken: refreshToken,
Ip: "127.0.0.1",
UserAgent: "integration-test",
}
refreshResp2, err := s.authClient.Refresh(ctx, refreshReq2)
s.NoError(err)
s.NotEmpty(refreshResp2.AccessToken)
validateReq := &authpb.ValidateRequest{
AccessToken: refreshResp2.AccessToken,
}
validateResp, err := s.authClient.Validate(ctx, validateReq)
s.NoError(err)
s.True(validateResp.Valid)
logoutReq := &authpb.LogoutRequest{
AccessToken: refreshResp2.AccessToken,
}
logoutResp, err := s.authClient.Logout(ctx, logoutReq)
s.NoError(err)
s.True(logoutResp.Success)
}