fonchain-fiee/pkg/utils/pdf_competitor_test.go

176 lines
7.2 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 utils
import (
"fmt"
"os"
"path/filepath"
"testing"
)
// getProjectRoot 获取项目根目录
func getProjectRoot() string {
// 假设测试从项目根目录运行
dir, _ := os.Getwd()
// 向上查找 go.mod 确定项目根目录
for {
if _, err := os.Stat(filepath.Join(dir, "go.mod")); err == nil {
return dir
}
parent := filepath.Dir(dir)
if parent == dir {
break
}
dir = parent
}
return ""
}
// TestGenerateCompetitorReportPDF 测试生成竞品报告PDF
func TestGenerateCompetitorReportPDF(t *testing.T) {
// 获取项目根目录
root := getProjectRoot()
fmt.Printf("项目根目录: %s\n", root)
// 准备测试数据
data := CompetitorReportData{
HighlightAnalysis: HighlightAnalysisData{
Summary: "本视频通过展示产品使用的真实场景,突出用户产品优势和痛点,内容详实且具有吸引力。",
Points: PointsData{
Theme: "标题简洁有力,突出核心卖点'省时省力',引发用户好奇心",
Narrative: "采用情景剧形式展示产品使用场景,剧情贴近生活,易引发共鸣",
Content: "通过前后对比展示产品效果,直观呈现产品价值",
Copywriting: "文案简洁明了,突出用户痛点解决方案,语气亲切自然",
Data: "点赞量10万+评论5000+分享2万+,数据表现优异",
Music: "背景音乐节奏轻快,与视频内容匹配度高,增强观看体验",
},
},
DataPerformance: DataPerformanceData{
Views: "播放量突破500万推荐流量占比60%,自然流量表现优秀",
Completion: "完播率45%高于同类视频平均值30%前3秒吸引力强",
Engagement: "点赞率2%评论率0.1%分享率0.4%,互动数据表现优秀",
},
OverallSummary: "整体来看该竞品视频在内容策划、表现形式和互动数据方面都表现优秀。优势在于1内容真实可信通过实际使用场景展示产品效果2剧情设计合理前3秒抓住用户注意力3文案简洁有力直击用户痛点。建议优化方向1可以增加更多用户评价内容增强可信度2适当增加福利引导提高转化率3结尾可以增加引导关注话术提升粉丝沉淀。",
}
// 模板路径
templatePath := filepath.Join(root, "data", "竞品报告pdf模板.pdf")
// 输出路径
outputPath := filepath.Join(root, "data", "output", "竞品报告测试_multicell.pdf")
// 确保输出目录存在
outputDir := filepath.Dir(outputPath)
if err := os.MkdirAll(outputDir, 0755); err != nil {
t.Errorf("创建输出目录失败: %v", err)
return
}
// 调用函数生成PDF
err := GenerateCompetitorReportPDF(templatePath, outputPath, data)
if err != nil {
t.Errorf("生成竞品报告PDF失败: %v", err)
return
}
fmt.Printf("PDF生成成功: %s\n", outputPath)
}
// TestGenerateCompetitorReportPDFImageOnly 测试仅图片的竞品报告PDF无配乐和完播率
func TestGenerateCompetitorReportPDFImageOnly(t *testing.T) {
// 获取项目根目录
root := getProjectRoot()
// 准备测试数据(仅图片,没有视频的配乐和完播率)
data := CompetitorReportData{
HighlightAnalysis: HighlightAnalysisData{
Summary: "该图文内容通过精美的视觉设计和精准的标签定位,成功吸引目标用户关注。",
Points: PointsData{
Theme: "标题设置悬念,引发用户点击欲望",
Narrative: "采用九宫格形式展示产品特点,视觉冲击力强",
Content: "内容排版清晰,重点突出,便于用户快速获取信息",
Copywriting: "文案简洁,配合表情符号增加趣味性",
Data: "收藏量5万+评论1000+分享8000+",
Music: "", // 图片无配乐
},
},
DataPerformance: DataPerformanceData{
Views: "曝光量100万+点击率3%,表现良好",
Completion: "", // 图文无完播率
Engagement: "收藏率5%评论率0.1%分享率0.8%",
},
OverallSummary: "该图文内容整体表现优秀特别是在视觉设计和内容排版方面。亮点1九宫格形式统一视觉效果好2标签设置精准触达目标用户3发布时间合理获得更多曝光。优化建议1可以增加更多用户案例展示2适当加入互动话题提高评论量。",
}
// 模板路径
templatePath := filepath.Join(root, "data", "竞品报告pdf模板.pdf")
// 输出路径
outputPath := filepath.Join(root, "data", "output", "竞品报告测试_图文11.pdf")
// 确保输出目录存在
outputDir := filepath.Dir(outputPath)
if err := os.MkdirAll(outputDir, 0755); err != nil {
t.Errorf("创建输出目录失败: %v", err)
return
}
// 调用函数生成PDF
err := GenerateCompetitorReportPDF(templatePath, outputPath, data)
if err != nil {
t.Errorf("生成竞品报告PDF失败: %v", err)
return
}
fmt.Printf("PDF生成成功: %s\n", outputPath)
}
// TestGenerateCompetitorReportPDFWithImage 测试带图片的竞品报告PDF
// 注意:此测试需要网络连接来下载图片,如果网络不可用会被跳过
func TestGenerateCompetitorReportPDFWithImage(t *testing.T) {
// 获取项目根目录
root := getProjectRoot()
// 准备测试数据(带图片)
// 使用一个已知可用的测试图片URL
data := CompetitorReportData{
HighlightAnalysis: HighlightAnalysisData{
Summary: "本视频通过展示产品使用的真实场景,突出用户产品优势和痛点,内容详实且具有吸引力。",
Points: PointsData{
Theme: "标题简洁有力,突出核心卖点'省时省力',引发用户好奇心",
Narrative: "采用情景剧形式展示产品使用场景,剧情贴近生活,易引发共鸣",
Content: "通过前后对比展示产品效果,直观呈现产品价值",
Copywriting: "文案简洁明了,突出用户痛点解决方案,语气亲切自然",
Data: "点赞量10万+评论5000+分享2万+,数据表现优异",
Music: "背景音乐节奏轻快,与视频内容匹配度高,增强观看体验",
},
},
DataPerformance: DataPerformanceData{
Views: "播放量突破500万推荐流量占比60%,自然流量表现优秀",
Completion: "完播率45%高于同类视频平均值30%前3秒吸引力强",
Engagement: "点赞率2%评论率0.1%分享率0.4%,互动数据表现优秀",
},
OverallSummary: "整体来看,该竞品视频在内容策划、表现形式和互动数据方面都表现优秀。",
ImageURL: "https://cdn-test.szjixun.cn/fonchain-main/test/image/12345/artwork/0.png", // 测试用图片URL
}
// 模板路径
templatePath := filepath.Join(root, "data", "竞品报告pdf模板.pdf")
// 输出路径
outputPath := filepath.Join(root, "data", "output", "竞品报告测试_带图片.pdf")
// 确保输出目录存在
outputDir := filepath.Dir(outputPath)
if err := os.MkdirAll(outputDir, 0755); err != nil {
t.Errorf("创建输出目录失败: %v", err)
return
}
// 调用函数生成PDF
err := GenerateCompetitorReportPDF(templatePath, outputPath, data)
if err != nil {
t.Logf("图片下载测试跳过(网络问题): %v", err)
t.Skip("网络不可用,跳过图片测试")
return
}
fmt.Printf("PDF生成成功: %s\n", outputPath)
}