package tests
import (
"context"
_ "embed"
"encoding/json"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/pioz/faker"
"github.com/stretchr/testify/assert"
"io/ioutil"
"os"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/clients"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"penahub.gitlab.yandexcloud.net/backend/quiz/worker/internal/answerwc"
senders2 "penahub.gitlab.yandexcloud.net/backend/quiz/worker/internal/senders"
"strings"
"testing"
"time"
)
//go:embed mail/to_client.tmpl
var toClientTemplate string
//go:embed mail/reminder.tmpl
var reminderTemplate string
//go:embed mail/client_tg.tmpl
var tgClientTemplate string
func TestProcessMessageToSMTP(t *testing.T) {
clientDeps := clients.Deps{
SmtpHost: "connect.mailclient.bz",
SmtpPort: "587",
SmtpSender: "skeris@mailing.pena.digital",
ApiKey: "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev",
SmtpApiUrl: "https://api.smtp.bz/v1/smtp/send",
FiberClient: &fiber.Client{},
}
client := clients.NewSmtpClient(clientDeps)
recipient := "pashamullin2001@gmail.com"
subject := "Test"
data := senders2.TemplateData{
QuizConfig: model.ResultInfo{
Theme: "
+723456789
@test",
Wechat: "test_wechat",
Viber: "+723456789",
Vk: "test_vk",
Skype: "test_skype",
Whatsup: "test_whatsup",
Messenger: "test_messenger",
},
AllAnswers: []model.ResultAnswer{
{AnswerID: 1, QuestionID: 1, Content: "https://www.google.com/search?sca_esv=c51a80de1a7d45f0&sxsrf=ACQVn08xG-a0eH1Vds246-fONoSvvjzVMw:1707762485524&q=ku,n&tbm=isch&source=lnms&sa=X&ved=2ahUKEwi7ub2Ct6aEAxVVb_UHHQIQBVoQ0pQJegQIDRAB&biw=1536&bih=703&dpr=1.25#imgrc=0PWwTuuH2uBQ3M|html", CreatedAt: time.Now()},
{AnswerID: 2, QuestionID: 2, Content: "From a friend", CreatedAt: time.Now()},
{AnswerID: 3, QuestionID: 3, Content: "From a friend", CreatedAt: time.Now()},
{AnswerID: 4, QuestionID: 4, Content: `{"Image":"https://letsenhance.io/static/8f5e523ee6b2479e26ecc91b9c25261e/1015f/MainAfter.jpg","Description":"Gekon"}`, CreatedAt: time.Now()},
},
QuestionsMap: map[uint64]string{
1: "?",
2: "How did you hear about us?",
3: "que 3",
4: "que 4",
},
AnswerTime: time.Now().Format("Monday, 2 January 2006 г., 15:04 UTC-07:00"),
}
mailSender := senders2.NewMailLeadSender(client)
err := mailSender.SendMailWithAttachment(recipient, subject, toClientTemplate, data, nil)
if err != nil {
t.Errorf("Error sending email: %v", err)
}
}
func TestProcessReminderToClient(t *testing.T) {
clientDeps := clients.Deps{
SmtpHost: "connect.mailclient.bz",
SmtpPort: "587",
SmtpSender: "skeris@mailing.pena.digital",
ApiKey: "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev",
FiberClient: &fiber.Client{},
}
client := clients.NewSmtpClient(clientDeps)
recipient := "mullinp@internet.ru"
subject := "Test Reminder"
quizConfig := model.ResultInfo{
ReplName: "Test Quiz",
Reply: "mullinp@internet.ru",
Theme: "Reminder Theme",
}
mailSender := senders2.NewMailLeadSender(client)
err := mailSender.SendMailWithAttachment(recipient, subject, reminderTemplate, senders2.TemplateData{
QuizConfig: quizConfig,
AnswerContent: model.ResultContent{},
AllAnswers: []model.ResultAnswer{},
QuestionsMap: nil,
}, nil)
if err != nil {
t.Errorf("Error sending email: %v", err)
}
}
func TestProcessMessageToClient(t *testing.T) {
smtpData := clients.Deps{
SmtpApiUrl: "https://api.smtp.bz/v1/smtp/send",
SmtpHost: "connect.mailclient.bz",
SmtpPort: "587",
SmtpSender: "skeris@mailing.pena.digital",
ApiKey: "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev",
FiberClient: &fiber.Client{},
}
mailClient := clients.NewSmtpClient(smtpData)
mailSender := senders2.NewMailLeadSender(mailClient)
tgSender, err := senders2.NewTgSender("6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8")
assert.NoError(t, err)
ctx := context.Background()
repo, err := dal.New(ctx, "host=localhost port=35432 user=squiz password=Redalert2 dbname=squiz sslmode=disable", nil)
assert.NoError(t, err)
deps := answerwc.DepsSendToClient{
Redis: nil,
Dal: repo,
LeadSenders: []senders2.LeadSender{mailSender, tgSender},
CustomerService: nil,
}
errChan := make(chan<- error)
w := answerwc.NewSendToClient(deps, errChan)
quizConfig := model.QuizConfig{
Mailing: model.ResultInfo{
Theme: faker.String(),
},
}
questionsMap := map[uint64]string{
1: faker.String(),
2: faker.String(),
}
account := model.Account{
UserID: "64f2cd7a7047f28fdabf6d9e",
}
file, err := os.Open("img_contents.json")
if err != nil {
fmt.Println("Failed to open file", err)
return
}
defer file.Close()
bytes, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("Failed to read file", err)
return
}
var items []model.ImageContent
err = json.Unmarshal(bytes, &items)
if err != nil {
fmt.Println("Failed to unmarshal JSON:", err)
return
}
fmt.Println(len(items))
allAnswers := []model.ResultAnswer{
{
Content: "",
AnswerID: 2,
QuestionID: 2,
},
}
answersIMG := model.ResultAnswer{
Content: "",
AnswerID: 1,
QuestionID: 1,
}
var imageLinks []string
for _, item := range items {
str, err := json.Marshal(item)
if err != nil {
fmt.Println("error marshal item to str:", err)
return
}
imageLinks = append(imageLinks, fmt.Sprintf("`%s`", string(str)))
}
fmt.Println(len(imageLinks))
answersIMG.Content = strings.Join(imageLinks, ",")
allAnswers = append(allAnswers, answersIMG)
answerContent := model.ResultContent{
Name: "Pasha",
Phone: "+723456789",
Email: "test@example.com",
//Adress: "chtoto tam",
Telegram: "@test",
Wechat: "test_wechat",
Viber: "+723456789",
Vk: "test_vk",
Skype: "test_skype",
Whatsup: "test_whatsup",
Messenger: "test_messenger",
}
answerTime := time.Now()
err = w.ProcessMessageToClient(ctx, answerwc.DepsProcessMsgToClient{
QuizConfig: quizConfig,
QuestionsMap: questionsMap,
Account: account,
AllAnswers: allAnswers,
AnswerContent: answerContent,
AnswerTime: answerTime,
Quiz: &model.Quiz{
Id: 26324,
AccountId: "64f2cd7a7047f28fdabf6d9e",
},
})
err = w.ProcessReminderToClient(ctx, account, model.QuizConfig{
Mailing: model.ResultInfo{
When: "email",
Theme: fmt.Sprintf("не удалось отправить заявку по опросу\"%s\"", "test"),
Reply: "noreply@pena.digital",
ReplName: "Reminder",
},
}, &model.Quiz{
Id: 26324,
AccountId: "64f2cd7a7047f28fdabf6d9e",
})
assert.NoError(t, err)
}
//func TestManyImg(t *testing.T) {
// smtpData := clients.Deps{
// SmtpApiUrl: "https://api.smtp.bz/v1/smtp/send",
// SmtpHost: "connect.mailclient.bz",
// SmtpPort: "587",
// SmtpSender: "skeris@mailing.pena.digital",
// ApiKey: "P0YsjUB137upXrr1NiJefHmXVKW1hmBWlpev",
// FiberClient: &fiber.Client{},
// }
//
// mailClient := clients.NewSmtpClient(smtpData)
// mailSender := senders.NewMailLeadSender(mailClient)
// tgSender, err := senders.NewTgSender("6712573453:AAFqTOsgwe_j48ZQ1GzWKQDT5Nwr-SAWjz8")
// assert.NoError(t, err)
//
// ctx := context.Background()
//
// repo, err := dal.New(ctx, "host=localhost port=35432 user=squiz password=Redalert2 dbname=squiz sslmode=disable", nil)
// assert.NoError(t, err)
//
// deps := answerwc.DepsSendToClient{
// Redis: nil,
// Dal: repo,
// LeadSenders: []senders.LeadSender{mailSender, tgSender},
// CustomerService: nil,
// }
//
// errChan := make(chan<- error)
//
// w := answerwc.NewSendToClient(deps, errChan)
//}