131 lines
4.3 KiB
Go
131 lines
4.3 KiB
Go
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"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/models"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/models/yandex"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/internal/proto/treasurer"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/pkg/array"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/pkg/mongo"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/tests/data"
|
|
"penahub.gitlab.yandexcloud.net/external/treasurer/tests/helpers"
|
|
)
|
|
|
|
func TestCreatePaymentSberpay(t *testing.T) {
|
|
mockClient := wiremock.NewClient("http://localhost:8000")
|
|
|
|
t.Run("Успешное создание платежа sberpay", 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.PaymentTypeSberPay,
|
|
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.PaymentTypeSberPay,
|
|
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.GetPaymentLinkSberPay(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)
|
|
}()
|
|
})
|
|
}
|