sub_format_changer_test.go 11 KB

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