sub_format_changer_test.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. package sub_formatter
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/dao"
  4. "github.com/allanpk716/ChineseSubFinder/internal/models"
  5. "github.com/allanpk716/ChineseSubFinder/internal/pkg"
  6. "github.com/allanpk716/ChineseSubFinder/internal/pkg/sub_formatter/common"
  7. "path"
  8. "testing"
  9. )
  10. func TestSubFormatChanger_AutoDetectThenChangeTo(t *testing.T) {
  11. testDataPath := "../../../TestData/sub_format_changer"
  12. testRootDir, err := pkg.CopyTestData(testDataPath)
  13. if err != nil {
  14. t.Fatal(err)
  15. }
  16. movie_name := "AAA"
  17. series_name := "Loki"
  18. // Emby 的信息
  19. movieDir_org_emby := path.Join(testRootDir, "movie_org_emby")
  20. seriesDir_org_emby := path.Join(testRootDir, "series_org_emby")
  21. movieOneDir_org_emby := path.Join(movieDir_org_emby, movie_name)
  22. seriesOneDir_org_emby := path.Join(seriesDir_org_emby, series_name, "Season 1")
  23. // Normal 的信息
  24. movieDir_org_normal := path.Join(testRootDir, "movie_org_normal")
  25. seriesDir_org_normal := path.Join(testRootDir, "series_org_normal")
  26. movieOneDir_org_normal := path.Join(movieDir_org_normal, movie_name)
  27. seriesOneDir_org_normal := path.Join(seriesDir_org_normal, series_name, "Season 1")
  28. // emby 转 emby 理论上不应该改文件
  29. movieDir_emby_2_emby := path.Join(testRootDir, "movie_emby_2_emby")
  30. seriesDir_emby_2_emby := path.Join(testRootDir, "series_emby_2_emby")
  31. type fields struct {
  32. movieRootDir string
  33. seriesRootDir string
  34. }
  35. type args struct {
  36. desFormatter common.FormatterName
  37. }
  38. tests := []struct {
  39. name string
  40. fields fields
  41. args args
  42. want RenameResults
  43. wantErr bool
  44. }{
  45. {name: "emby 2 normal",
  46. fields: fields{movieRootDir: movieDir_org_emby, seriesRootDir: seriesDir_org_emby},
  47. args: args{desFormatter: common.Normal},
  48. want: RenameResults{
  49. RenamedFiles: map[string]int{
  50. path.Join(movieOneDir_org_emby, "AAA.zh.ass"): 2,
  51. path.Join(movieOneDir_org_emby, "AAA.zh.default.ass"): 1,
  52. path.Join(movieOneDir_org_emby, "AAA.zh.srt"): 1,
  53. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.ass"): 5,
  54. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.default.ass"): 1,
  55. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.srt"): 1,
  56. },
  57. }, wantErr: false},
  58. {name: "normal 2 emby",
  59. fields: fields{movieRootDir: movieDir_org_normal, seriesRootDir: seriesDir_org_normal},
  60. args: args{desFormatter: common.Emby},
  61. want: RenameResults{
  62. RenamedFiles: map[string]int{
  63. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).ass"): 1,
  64. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).default.ass"): 1,
  65. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).srt"): 1,
  66. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(繁英).ass"): 1,
  67. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(简英).default.ass"): 1,
  68. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(简英).srt"): 1,
  69. },
  70. }, wantErr: false},
  71. {name: "emby 2 emby",
  72. fields: fields{movieRootDir: movieDir_emby_2_emby, seriesRootDir: seriesDir_emby_2_emby},
  73. args: args{desFormatter: common.Emby},
  74. want: RenameResults{},
  75. wantErr: false},
  76. }
  77. for _, tt := range tests {
  78. t.Run(tt.name, func(t *testing.T) {
  79. s := NewSubFormatChanger(tt.fields.movieRootDir, tt.fields.seriesRootDir)
  80. got, err := s.AutoDetectThenChangeTo(tt.args.desFormatter)
  81. if (err != nil) != tt.wantErr {
  82. t.Errorf("AutoDetectThenChangeTo() error = %v, wantErr %v", err, tt.wantErr)
  83. return
  84. }
  85. if len(got.ErrFiles) > 0 {
  86. t.Errorf("AutoDetectThenChangeTo() got.ErrFiles len > 0")
  87. return
  88. }
  89. for fileName, counter := range got.RenamedFiles {
  90. if tt.want.RenamedFiles[fileName] != counter {
  91. t.Errorf("AutoDetectThenChangeTo() RenamedFiles %v got = %v, want %v", fileName, counter, tt.want.RenamedFiles[fileName])
  92. return
  93. }
  94. }
  95. })
  96. }
  97. }
  98. func TestSubFormatChangerProcess(t *testing.T) {
  99. // 先删除 db
  100. err := dao.DeleteDbFile()
  101. if err != nil {
  102. t.Fatal(err)
  103. }
  104. testDataPath := "../../../TestData/sub_format_changer"
  105. testRootDir, err := pkg.CopyTestData(testDataPath)
  106. if err != nil {
  107. t.Fatal(err)
  108. }
  109. movie_name := "AAA"
  110. series_name := "Loki"
  111. // Emby 的信息
  112. movieDir_org_emby := path.Join(testRootDir, "movie_org_emby")
  113. seriesDir_org_emby := path.Join(testRootDir, "series_org_emby")
  114. movieOneDir_org_emby := path.Join(movieDir_org_emby, movie_name)
  115. seriesOneDir_org_emby := path.Join(seriesDir_org_emby, series_name, "Season 1")
  116. // Normal 的信息
  117. movieDir_org_normal := path.Join(testRootDir, "movie_org_normal")
  118. seriesDir_org_normal := path.Join(testRootDir, "series_org_normal")
  119. movieOneDir_org_normal := path.Join(movieDir_org_normal, movie_name)
  120. seriesOneDir_org_normal := path.Join(seriesDir_org_normal, series_name, "Season 1")
  121. // emby 转 emby 理论上不应该改文件
  122. movieDir_emby_2_emby := path.Join(testRootDir, "movie_emby_2_emby")
  123. seriesDir_emby_2_emby := path.Join(testRootDir, "series_emby_2_emby")
  124. type args struct {
  125. movieRootDir string
  126. seriesRootDir string
  127. nowDesFormatter common.FormatterName
  128. }
  129. tests := []struct {
  130. name string
  131. args args
  132. want RenameResults
  133. wantErr bool
  134. }{
  135. // 先从 emby 2 normal
  136. {name: "emby 2 normal",
  137. args: args{movieRootDir: movieDir_org_emby, seriesRootDir: seriesDir_org_emby, nowDesFormatter: common.Normal},
  138. want: RenameResults{
  139. RenamedFiles: map[string]int{
  140. path.Join(movieOneDir_org_emby, "AAA.zh.ass"): 2,
  141. path.Join(movieOneDir_org_emby, "AAA.zh.default.ass"): 1,
  142. path.Join(movieOneDir_org_emby, "AAA.zh.srt"): 1,
  143. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.ass"): 5,
  144. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.default.ass"): 1,
  145. path.Join(seriesOneDir_org_emby, "Loki - S01E01.zh.srt"): 1,
  146. },
  147. }, wantErr: false},
  148. // 然后从上面一个测试用例的文件夹中,继续,转 normal 2 emby
  149. {name: "normal 2 emby",
  150. args: args{movieRootDir: movieDir_org_emby, seriesRootDir: movieDir_org_emby, nowDesFormatter: common.Emby},
  151. want: RenameResults{
  152. RenamedFiles: map[string]int{
  153. path.Join(movieOneDir_org_emby, "AAA.chinese(简英).ass"): 1,
  154. path.Join(movieOneDir_org_emby, "AAA.chinese(简英).default.ass"): 1,
  155. path.Join(movieOneDir_org_emby, "AAA.chinese(简英).srt"): 1,
  156. path.Join(seriesOneDir_org_emby, "Loki - S01E01.chinese(繁英).ass"): 1,
  157. path.Join(seriesOneDir_org_emby, "Loki - S01E01.chinese(简英).default.ass"): 1,
  158. path.Join(seriesOneDir_org_emby, "Loki - S01E01.chinese(简英).srt"): 1,
  159. },
  160. }, wantErr: false},
  161. {name: "emby 2 emby",
  162. args: args{movieRootDir: movieDir_emby_2_emby, seriesRootDir: seriesDir_emby_2_emby, nowDesFormatter: common.Emby},
  163. want: RenameResults{},
  164. wantErr: false},
  165. // 重新评估 normal 2 emby ,需要清理数据库
  166. {name: "normal 2 emby new",
  167. args: args{movieRootDir: movieDir_org_normal, seriesRootDir: seriesDir_org_normal, nowDesFormatter: common.Emby},
  168. want: RenameResults{
  169. RenamedFiles: map[string]int{
  170. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).ass"): 1,
  171. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).default.ass"): 1,
  172. path.Join(movieOneDir_org_normal, "AAA.chinese(简英).srt"): 1,
  173. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(繁英).ass"): 1,
  174. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(简英).default.ass"): 1,
  175. path.Join(seriesOneDir_org_normal, "Loki - S01E01.chinese(简英).srt"): 1,
  176. },
  177. }, wantErr: false},
  178. // 然后从上面一个测试用例的文件夹中,继续,转 emby 2 normal
  179. {name: "emby 2 normal new",
  180. args: args{movieRootDir: movieDir_org_normal, seriesRootDir: seriesDir_org_normal, nowDesFormatter: common.Normal},
  181. want: RenameResults{
  182. RenamedFiles: map[string]int{
  183. path.Join(movieOneDir_org_normal, "AAA.zh.ass"): 1,
  184. path.Join(movieOneDir_org_normal, "AAA.zh.default.ass"): 1,
  185. path.Join(movieOneDir_org_normal, "AAA.zh.srt"): 1,
  186. path.Join(seriesOneDir_org_normal, "Loki - S01E01.zh.ass"): 1,
  187. path.Join(seriesOneDir_org_normal, "Loki - S01E01.zh.default.ass"): 1,
  188. path.Join(seriesOneDir_org_normal, "Loki - S01E01.zh.srt"): 1,
  189. },
  190. }, wantErr: false},
  191. }
  192. for i, tt := range tests {
  193. t.Run(tt.name, func(t *testing.T) {
  194. if i == 0 || i == 2 || i == 3 {
  195. // 0 - 1 轮次,测试的是 先从 emby 2 normal
  196. // 然后从上面一个测试用例的文件夹中,继续,转 normal 2 emby
  197. // 先删除 db
  198. err = dao.DeleteDbFile()
  199. if err != nil {
  200. t.Fatal(err)
  201. }
  202. err = dao.InitDb()
  203. if err != nil {
  204. t.Fatal(err)
  205. }
  206. }
  207. got, err := SubFormatChangerProcess(tt.args.movieRootDir, tt.args.seriesRootDir, tt.args.nowDesFormatter)
  208. if err != nil != tt.wantErr {
  209. t.Errorf("SubFormatChangerProcess() error = %v, wantErr %v", err, tt.wantErr)
  210. }
  211. if len(got.ErrFiles) > 0 {
  212. t.Errorf("SubFormatChangerProcess() got.ErrFiles len > 0")
  213. return
  214. }
  215. for fileName, counter := range got.RenamedFiles {
  216. if tt.want.RenamedFiles[fileName] != counter {
  217. t.Errorf("SubFormatChangerProcess() RenamedFiles %v got = %v, want %v", fileName, counter, tt.want.RenamedFiles[fileName])
  218. return
  219. }
  220. }
  221. if i == 0 {
  222. // 这里需要校验一次数据库的赋值是否正确
  223. var subFormatRec models.SubFormatRec
  224. dao.GetDb().First(&subFormatRec)
  225. if subFormatRec.FormatName != int(common.Normal) || subFormatRec.Done == false {
  226. t.Fatal(tt.name, "i == 0 check db result")
  227. }
  228. }
  229. if i == 1 {
  230. // 这里需要校验一次数据库的赋值是否正确
  231. var subFormatRec models.SubFormatRec
  232. dao.GetDb().First(&subFormatRec)
  233. if subFormatRec.FormatName != int(common.Emby) || subFormatRec.Done == false {
  234. t.Fatal(tt.name, "i == 1 check db result")
  235. }
  236. }
  237. if i == 3 {
  238. // 这里需要校验一次数据库的赋值是否正确
  239. var subFormatRec models.SubFormatRec
  240. dao.GetDb().First(&subFormatRec)
  241. if subFormatRec.FormatName != int(common.Emby) || subFormatRec.Done == false {
  242. t.Fatal(tt.name, "i == 3 check db result")
  243. }
  244. }
  245. if i == 4 {
  246. // 这里需要校验一次数据库的赋值是否正确
  247. var subFormatRec models.SubFormatRec
  248. dao.GetDb().First(&subFormatRec)
  249. if subFormatRec.FormatName != int(common.Normal) || subFormatRec.Done == false {
  250. t.Fatal(tt.name, "i == 4 check db result")
  251. }
  252. }
  253. })
  254. }
  255. }