package integration_test import ( "context" "testing" "github.com/stretchr/testify/assert" "github.com/walkerus/go-wiremock" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "gitea.pena/PenaSide/treasurer/internal/models" "gitea.pena/PenaSide/treasurer/internal/models/yandex" "gitea.pena/PenaSide/treasurer/internal/proto/treasurer" "gitea.pena/PenaSide/treasurer/pkg/array" "gitea.pena/PenaSide/treasurer/pkg/mongo" "gitea.pena/PenaSide/treasurer/tests/data" "gitea.pena/PenaSide/treasurer/tests/helpers" ) func TestCreatePaymentQIWI(t *testing.T) { mockClient := wiremock.NewClient("http://localhost:8000") t.Run("Успешное создание платежа qiwi", func(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() clientConnection, grpcErr := grpc.Dial("localhost:8081", grpc.WithTransportCredentials(insecure.NewCredentials())) if isNoError := assert.NoError(t, grpcErr); !isNoError { return } mongoHelper, mongoErr := helpers.NewMongoHelper(ctx, &mongo.Configuration{ Host: "localhost", Port: "27017", User: "admin", Password: "admin", Auth: "admin", DatabaseName: "admin", }) if isNoError := assert.NoError(t, mongoErr); !isNoError { return } treasurerClient := treasurer.NewTreasurerServiceClient(clientConnection) payment := models.Payment{ UserID: "217c2d28-0969-11ee-be56-0242ac120002", PaymentID: "1423d832-0965-11ee-be56-0242ac120002", ClientIP: "192.186.0.1", Currency: "RUB", Amount: 15000, Type: models.PaymentTypeQiwi, Status: models.PaymentStatusWaiting, CallbackHostGRPC: []string{"http://localhost/callback"}, Completed: false, IsDeleted: false, } yandexPayment := yandex.Payment{ ID: payment.PaymentID, Status: yandex.PaymentStatusWaiting, Amount: yandex.Amount{ Value: "150.00", Currency: payment.Currency, }, PaymentMethod: yandex.PaymentMethodPhone{ Type: yandex.PaymentTypeQiwi, Phone: "+79015396311", }, Confirmation: &data.ConfirmationRedirectDefault, } createBankCardPaymentErr := mockClient.StubFor(wiremock. Post(wiremock.URLPathEqualTo("/payments")). WillReturnJSON(&yandexPayment, map[string]string{"Content-Type": "application/json"}, 200). AtPriority(1), ) if isNoError := assert.NoError(t, createBankCardPaymentErr); !isNoError { return } response, requestErr := treasurerClient.GetPaymentLinkQIWI(ctx, &treasurer.GetPhonePaymentLinkRequest{ MainSettings: &treasurer.MainPaymentSettings{ Currency: payment.Currency, Amount: payment.Amount, CallbackHostGRPC: payment.CallbackHostGRPC, ReturnURL: "", UserID: payment.UserID, ClientIP: payment.ClientIP, }, Phone: "+79015396311", }) if isNoError := assert.NoError(t, requestErr); !isNoError { return } assert.Equal(t, yandexPayment.Confirmation.ConfirmationURL, response.RedirectURL) payments, getPaymentsErr := mongoHelper.GetPayments(ctx) if isNoError := assert.NoError(t, getPaymentsErr); !isNoError { return } findedPayment := array.Find(payments, func(currentPayment models.Payment, _ int, _ []models.Payment) bool { return currentPayment.PaymentID == payment.PaymentID }) if isNotNil := assert.NotNil(t, findedPayment); !isNotNil { return } assert.Equal(t, payment.UserID, findedPayment.UserID) assert.Equal(t, payment.PaymentID, findedPayment.PaymentID) assert.Equal(t, payment.ClientIP, findedPayment.ClientIP) assert.Equal(t, payment.Currency, findedPayment.Currency) assert.Equal(t, payment.Amount, findedPayment.Amount) assert.Equal(t, payment.Type, findedPayment.Type) assert.Equal(t, payment.Status, findedPayment.Status) assert.Equal(t, payment.Completed, findedPayment.Completed) assert.Equal(t, payment.IsDeleted, findedPayment.IsDeleted) assert.Equal(t, payment.CallbackHostGRPC, findedPayment.CallbackHostGRPC) defer func() { mongoClearErr := mongoHelper.Clear(ctx) mockClearErr := mockClient.Clear() assert.NoError(t, mongoClearErr) assert.NoError(t, mockClearErr) }() }) }