Coverage for tests\anime\test_anime_info.py: 100%

266 statements  

« prev     ^ index     » next       coverage.py v7.10.1, created at 2025-10-19 21:13 +0800

1from random import choice 

2from tests.conftest import get_json_val, get_reviews_last_page, ANIME_ENG 

3import json 

4import pytest 

5 

6 

7@pytest.mark.parametrize("path", [ 

8 "abc/xyz", 

9 "2592/t", 

10 "hi/3304", 

11 "2592/3304", 

12 "2592/3304", 

13]) 

14def test_info_input_not_valid_integer(client_nc, path) -> None: 

15 resp = client_nc.get(f"/animes/{path}") 

16 resp_data = resp.json() 

17 

18 assert resp.status_code == 422 

19 for err in get_json_val(resp_data, "$.detail"): 

20 assert get_json_val(err, "$.msg") == "Input should be a valid integer, unable to parse string as an integer" 

21 

22 

23@pytest.mark.parametrize("path", [ 

24 ("abc/xyz", ""), 

25 ("2592/t", ""), 

26 ("hi/3304", ""), 

27 ("2592/3304", ""), 

28 ("2592/3304", ""), 

29 ("2592/3304", "?page"), 

30 ("2592/3304", "?page="), 

31 ("2592/3304", "?page=def"), 

32 ("2592/3304", "?page=2"), 

33]) 

34def test_review_input_not_valid_integer(client_nc, path) -> None: 

35 resp = client_nc.get(f"/animes/{path[0]}/reviews{path[1]}") 

36 resp_data = resp.json() 

37 

38 assert resp.status_code == 422 

39 for err in get_json_val(resp_data, "$.detail"): 

40 assert get_json_val(err, "$.msg") == "Input should be a valid integer, unable to parse string as an integer" 

41 

42 

43@pytest.mark.parametrize("path", [ 

44 ("2592/3304", "?page=0"), 

45]) 

46def test_review_input_less_than_min_threshold(client_nc, path) -> None: 

47 resp = client_nc.get(f"/animes/{path[0]}/reviews{path[1]}") 

48 resp_data = resp.json() 

49 

50 assert resp.status_code == 422 

51 for err in get_json_val(resp_data, "$.detail"): 

52 assert get_json_val(err, "$.msg") == "Input should be greater than 0" 

53 

54 

55@pytest.mark.parametrize("path", [ 

56 ("2592/3304", "?page=10001"), 

57]) 

58def test_review_input_more_than_max_threshold(client_nc, path) -> None: 

59 resp = client_nc.get(f"/animes/{path[0]}/reviews{path[1]}") 

60 resp_data = resp.json() 

61 

62 assert resp.status_code == 422 

63 for err in get_json_val(resp_data, "$.detail"): 

64 assert get_json_val(err, "$.msg") == "Input should be less than or equal to 10000" 

65 

66 

67@pytest.mark.parametrize( 

68 "test_data", 

69 [ 

70 { 

71 "title": "デジモンアドベンチャー", 

72 "rating": 4.3, 

73 "mark_count": 2293, 

74 "clip_count": 587, 

75 "series_id": 2592, 

76 "season_id": 3304, 

77 "link": "https://filmarks.com/animes/2592/3304", 

78 "production_year_link": "https://filmarks.com/list-anime/year/1990s/1999", 

79 "production_year": 1999, 

80 "release_date": "1999年03月07日", 

81 "playback_time": "23分", 

82 "country_of_origin": ["日本"], 

83 "production_company": [ 

84 { 

85 "name": "東映アニメーション", 

86 "id": 41, 

87 "link": "https://filmarks.com/list-anime/company/41", 

88 } 

89 ], 

90 "cast": [ 

91 { 

92 "name": "藤田淑子", 

93 "character": "八神太一", 

94 "id": 44556, 

95 "link": "https://filmarks.com/people/44556", 

96 }, 

97 { 

98 "name": "坂本千夏", 

99 "character": "アグモン", 

100 "id": 122276, 

101 "link": "https://filmarks.com/people/122276", 

102 }, 

103 { 

104 "name": " 風間勇刀", 

105 "character": "石田ヤマト", 

106 "id": 240716, 

107 "link": "https://filmarks.com/people/240716", 

108 }, 

109 { 

110 "name": "山口眞弓", 

111 "character": "ガブモン", 

112 "id": 214280, 

113 "link": "https://filmarks.com/people/214280", 

114 }, 

115 { 

116 "name": "水谷優子", 

117 "character": "武之内空", 

118 "id": 214749, 

119 "link": "https://filmarks.com/people/214749", 

120 }, 

121 { 

122 "name": "重松花鳥", 

123 "character": "ピヨモン", 

124 "id": 214279, 

125 "link": "https://filmarks.com/people/214279", 

126 }, 

127 { 

128 "name": "天神有海", 

129 "character": "泉光子郎", 

130 "id": 240715, 

131 "link": "https://filmarks.com/people/240715", 

132 }, 

133 { 

134 "name": "櫻井孝宏", 

135 "character": "テントモン", 

136 "id": 187531, 

137 "link": "https://filmarks.com/people/187531", 

138 }, 

139 { 

140 "name": "前田愛", 

141 "character": "太刀川ミミ", 

142 "id": 274563, 

143 "link": "https://filmarks.com/people/274563", 

144 }, 

145 { 

146 "name": "山田きのこ", 

147 "character": "パルモン", 

148 "id": 214281, 

149 "link": "https://filmarks.com/people/214281", 

150 }, 

151 { 

152 "name": "菊池正美", 

153 "character": "城戸丈", 

154 "id": 220563, 

155 "link": "https://filmarks.com/people/220563", 

156 }, 

157 { 

158 "name": "竹内順子", 

159 "character": "ゴマモン", 

160 "id": 189557, 

161 "link": "https://filmarks.com/people/189557", 

162 }, 

163 { 

164 "name": "小西寛子", 

165 "character": "高石タケル", 

166 "id": 240717, 

167 "link": "https://filmarks.com/people/240717", 

168 }, 

169 { 

170 "name": "松本美和", 

171 "character": "パタモン", 

172 "id": 75432, 

173 "link": "https://filmarks.com/people/75432", 

174 }, 

175 { 

176 "name": "荒木香恵", 

177 "character": "八神ヒカリ", 

178 "id": 237819, 

179 "link": "https://filmarks.com/people/237819", 

180 }, 

181 { 

182 "name": "徳光由禾", 

183 "character": "テイルモン", 

184 "id": 214282, 

185 "link": "https://filmarks.com/people/214282", 

186 }, 

187 ], 

188 }, 

189 ], 

190) 

191def test_info_with_results_single_1(client_nc, test_data, caplog) -> None: 

192 series_id = get_json_val(test_data, "$.series_id") 

193 season_id = get_json_val(test_data, "$.season_id") 

194 

195 resp = client_nc.get(f"/animes/{series_id}/{season_id}") 

196 resp_data = resp.json() 

197 

198 assert resp.status_code == 200 

199 assert get_json_val(resp_data, "$.data.series_id") == series_id 

200 assert get_json_val(resp_data, "$.data.season_id") == season_id 

201 assert ANIME_ENG in caplog.text 

202 

203 fields = [ 

204 "title", 

205 "link", 

206 "production_year_link", 

207 "production_year", 

208 "release_date", 

209 "playback_time", 

210 "country_of_origin", 

211 "production_company", 

212 "cast", 

213 ] 

214 for field in fields: 

215 assert get_json_val(resp_data, f"$.data.{field}") == get_json_val(test_data, f"$.{field}") 

216 

217 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

218 assert get_json_val(resp_data, "$.data.mark_count") >= get_json_val(test_data, "$.mark_count") 

219 assert get_json_val(resp_data, "$.data.clip_count") >= get_json_val(test_data, "$.clip_count") 

220 

221 assert get_json_val(resp_data, "$.data.original_title") is None 

222 assert get_json_val(resp_data, "$.data.synopsis") is not None 

223 assert get_json_val(resp_data, "$.data.official_site") is None 

224 assert get_json_val(resp_data, "$.data.poster") is not None 

225 assert get_json_val(resp_data, "$.data.creator") is not None 

226 assert get_json_val(resp_data, "$.data.planner") is None 

227 assert get_json_val(resp_data, "$.data.producer") is None 

228 assert get_json_val(resp_data, "$.data.executive_producer") is None 

229 assert get_json_val(resp_data, "$.data.chief_director") is None 

230 assert get_json_val(resp_data, "$.data.director") is None 

231 assert get_json_val(resp_data, "$.data.series_composer") is not None 

232 assert get_json_val(resp_data, "$.data.scriptwriter") is not None 

233 assert get_json_val(resp_data, "$.data.character_original_designer") is None 

234 assert get_json_val(resp_data, "$.data.character_designer") is not None 

235 assert get_json_val(resp_data, "$.data.narrator") is not None 

236 assert get_json_val(resp_data, "$.data.artist") is not None 

237 

238 

239@pytest.mark.parametrize( 

240 "test_data", 

241 [ 

242 { 

243 "title": "DEATH NOTE", 

244 "rating": 4.3, 

245 "mark_count": 14633, 

246 "clip_count": 3233, 

247 "series_id": 1533, 

248 "season_id": 2046, 

249 "link": "https://filmarks.com/animes/1533/2046", 

250 "production_year_link": "https://filmarks.com/list-anime/year/2000s/2006", 

251 "production_year": 2006, 

252 "release_date": "2006年10月04日", 

253 "country_of_origin": ["日本"], 

254 "production_company": [ 

255 { 

256 "name": "マッドハウス", 

257 "id": 43, 

258 "link": "https://filmarks.com/list-anime/company/43", 

259 } 

260 ], 

261 "cast": [ 

262 { 

263 "name": "宮野真守", 

264 "character": "夜神月", 

265 "id": 52736, 

266 "link": "https://filmarks.com/people/52736", 

267 }, 

268 { 

269 "name": "山口勝平", 

270 "character": "L", 

271 "id": 123348, 

272 "link": "https://filmarks.com/people/123348", 

273 }, 

274 { 

275 "name": "日髙のり子", 

276 "character": "ニア", 

277 "id": 271949, 

278 "link": "https://filmarks.com/people/271949", 

279 }, 

280 { 

281 "name": "佐々木望", 

282 "character": "メロ", 

283 "id": 158771, 

284 "link": "https://filmarks.com/people/158771", 

285 }, 

286 { 

287 "name": "平野綾", 

288 "character": "弥海砂 ", 

289 "id": 186905, 

290 "link": "https://filmarks.com/people/186905", 

291 }, 

292 { 

293 "name": "松風雅也", 

294 "character": "魅上照", 

295 "id": 143856, 

296 "link": "https://filmarks.com/people/143856", 

297 }, 

298 { 

299 "name": "岡村麻純", 

300 "character": "高田清美", 

301 "id": 275804, 

302 "link": "https://filmarks.com/people/275804", 

303 }, 

304 ], 

305 }, 

306 ], 

307) 

308def test_info_with_results_single_2(client_nc, test_data, caplog) -> None: 

309 series_id = get_json_val(test_data, "$.series_id") 

310 season_id = get_json_val(test_data, "$.season_id") 

311 

312 resp = client_nc.get(f"/animes/{series_id}/{season_id}") 

313 resp_data = resp.json() 

314 

315 assert resp.status_code == 200 

316 assert get_json_val(resp_data, "$.data.series_id") == series_id 

317 assert get_json_val(resp_data, "$.data.season_id") == season_id 

318 assert ANIME_ENG in caplog.text 

319 

320 fields = [ 

321 "title", 

322 "link", 

323 "production_year_link", 

324 "production_year", 

325 "release_date", 

326 "playback_time", 

327 "country_of_origin", 

328 "production_company", 

329 "cast", 

330 ] 

331 for field in fields: 

332 assert get_json_val(resp_data, f"$.data.{field}") == get_json_val(test_data, f"$.{field}") 

333 

334 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

335 assert get_json_val(resp_data, "$.data.mark_count") >= get_json_val(test_data, "$.mark_count") 

336 assert get_json_val(resp_data, "$.data.clip_count") >= get_json_val(test_data, "$.clip_count") 

337 

338 assert get_json_val(resp_data, "$.data.original_title") is None 

339 assert get_json_val(resp_data, "$.data.synopsis") is not None 

340 assert get_json_val(resp_data, "$.data.official_site") is None 

341 assert get_json_val(resp_data, "$.data.poster") is not None 

342 assert get_json_val(resp_data, "$.data.creator") is not None 

343 assert get_json_val(resp_data, "$.data.planner") is None 

344 assert get_json_val(resp_data, "$.data.producer") is None 

345 assert get_json_val(resp_data, "$.data.executive_producer") is None 

346 assert get_json_val(resp_data, "$.data.chief_director") is None 

347 assert get_json_val(resp_data, "$.data.director") is not None 

348 assert get_json_val(resp_data, "$.data.series_composer") is not None 

349 assert get_json_val(resp_data, "$.data.scriptwriter") is None 

350 assert get_json_val(resp_data, "$.data.character_original_designer") is None 

351 assert get_json_val(resp_data, "$.data.character_designer") is not None 

352 assert get_json_val(resp_data, "$.data.narrator") is None 

353 assert get_json_val(resp_data, "$.data.artist") is not None 

354 

355 

356@pytest.mark.parametrize( 

357 "test_data", 

358 [ 

359 { 

360 "title": "アバター 伝説の少年アン:火の巻", 

361 "original_title": "Avatar: The Last Airbender:Fire", 

362 "rating": 4.5, 

363 "mark_count": 75, 

364 "clip_count": 37, 

365 "series_id": 3691, 

366 "season_id": 4983, 

367 "link": "https://filmarks.com/animes/3691/4983", 

368 "production_year_link": "https://filmarks.com/list-anime/year/2000s/2007", 

369 "production_year": 2007, 

370 "country_of_origin": ["アメリカ"], 

371 "production_company": [ 

372 { 

373 "name": "MOI Animation", 

374 "id": 432, 

375 "link": "https://filmarks.com/list-anime/company/432", 

376 } 

377 ], 

378 "cast": [ 

379 { 

380 "name": "ザック・タイラー", 

381 "character": "アン", 

382 "id": 47745, 

383 "link": "https://filmarks.com/people/47745", 

384 }, 

385 { 

386 "name": "メイ・ホイットマン", 

387 "character": "カタラ", 

388 "id": 12018, 

389 "link": "https://filmarks.com/people/12018", 

390 }, 

391 { 

392 "name": "ジャック・デ・セナ", 

393 "character": "サカ", 

394 "id": 231429, 

395 "link": "https://filmarks.com/people/231429", 

396 }, 

397 { 

398 "name": "ディー・ブラッドリー・ベイカー", 

399 "character": "アッパ/モモ", 

400 "id": 192081, 

401 "link": "https://filmarks.com/people/192081", 

402 }, 

403 { 

404 "name": "ダンテ・バスコ", 

405 "character": "ズーコ", 

406 "id": 123497, 

407 "link": "https://filmarks.com/people/123497", 

408 }, 

409 { 

410 "name": "ジェシー・フラワー", 

411 "character": "トフ", 

412 "id": 307449, 

413 "link": "https://filmarks.com/people/307449", 

414 }, 

415 ], 

416 }, 

417 ], 

418) 

419def test_info_with_results_single_3(client_nc, test_data, caplog) -> None: 

420 series_id = get_json_val(test_data, "$.series_id") 

421 season_id = get_json_val(test_data, "$.season_id") 

422 

423 resp = client_nc.get(f"/animes/{series_id}/{season_id}") 

424 resp_data = resp.json() 

425 

426 assert resp.status_code == 200 

427 assert get_json_val(resp_data, "$.data.series_id") == series_id 

428 assert get_json_val(resp_data, "$.data.season_id") == season_id 

429 assert ANIME_ENG in caplog.text 

430 

431 fields = [ 

432 "title", 

433 "original_title", 

434 "link", 

435 "production_year_link", 

436 "production_year", 

437 "country_of_origin", 

438 "production_company", 

439 "cast", 

440 ] 

441 for field in fields: 

442 assert get_json_val(resp_data, f"$.data.{field}") == get_json_val(test_data, f"$.{field}") 

443 

444 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

445 assert get_json_val(resp_data, "$.data.mark_count") >= get_json_val(test_data, "$.mark_count") 

446 assert get_json_val(resp_data, "$.data.clip_count") >= get_json_val(test_data, "$.clip_count") 

447 

448 assert get_json_val(resp_data, "$.data.synopsis") is not None 

449 assert get_json_val(resp_data, "$.data.official_site") is None 

450 assert get_json_val(resp_data, "$.data.poster") is not None 

451 assert get_json_val(resp_data, "$.data.release_date") is None 

452 assert get_json_val(resp_data, "$.data.playback_time") is None 

453 assert get_json_val(resp_data, "$.data.creator") is None 

454 assert get_json_val(resp_data, "$.data.planner") is None 

455 assert get_json_val(resp_data, "$.data.producer") is None 

456 assert get_json_val(resp_data, "$.data.executive_producer") is not None 

457 assert get_json_val(resp_data, "$.data.chief_director") is None 

458 assert get_json_val(resp_data, "$.data.director") is not None 

459 assert get_json_val(resp_data, "$.data.series_composer") is None 

460 assert get_json_val(resp_data, "$.data.scriptwriter") is not None 

461 assert get_json_val(resp_data, "$.data.character_original_designer") is None 

462 assert get_json_val(resp_data, "$.data.character_designer") is None 

463 assert get_json_val(resp_data, "$.data.narrator") is None 

464 assert get_json_val(resp_data, "$.data.artist") is None 

465 

466 

467@pytest.mark.parametrize( 

468 "test_data", 

469 [ 

470 { 

471 "title": "タコピーの原罪", 

472 "rating": 4.1, 

473 "mark_count": 15740, 

474 "clip_count": 6837, 

475 "series_id": 4809, 

476 "season_id": 6518, 

477 "link": "https://filmarks.com/animes/4809/6518", 

478 "official_site": "https://www.tbs.co.jp/anime/takopi_project/", 

479 "production_year_link": "https://filmarks.com/list-anime/year/2020s/2025", 

480 "production_year": 2025, 

481 "release_date": "2025年06月28日", 

482 "playback_time": "25分", 

483 "country_of_origin": ["日本"], 

484 "production_company": [ 

485 { 

486 "name": "ENISHIYA", 

487 "id": 1152, 

488 "link": "https://filmarks.com/list-anime/company/1152" 

489 } 

490 ], 

491 "cast": [ 

492 { 

493 "name": "間宮くるみ", 

494 "character": "タコピー", 

495 "id": 220117, 

496 "link": "https://filmarks.com/people/220117" 

497 }, 

498 { 

499 "name": "上田麗奈", 

500 "character": "しずか", 

501 "id": 192831, 

502 "link": "https://filmarks.com/people/192831" 

503 }, 

504 { 

505 "name": "小原好美", 

506 "character": "まりな\t", 

507 "id": 220426, 

508 "link": "https://filmarks.com/people/220426" 

509 }, 

510 { 

511 "name": "永瀬アンナ", 

512 "character": "東", 

513 "id": 287199, 

514 "link": "https://filmarks.com/people/287199" 

515 } 

516 ], 

517 }, 

518 ], 

519) 

520def test_info_with_results_single_4(client_nc, test_data, caplog) -> None: 

521 series_id = get_json_val(test_data, "$.series_id") 

522 season_id = get_json_val(test_data, "$.season_id") 

523 

524 resp = client_nc.get(f"/animes/{series_id}/{season_id}") 

525 resp_data = resp.json() 

526 

527 assert resp.status_code == 200 

528 assert get_json_val(resp_data, "$.data.series_id") == series_id 

529 assert get_json_val(resp_data, "$.data.season_id") == season_id 

530 assert ANIME_ENG in caplog.text 

531 

532 fields = [ 

533 "title", 

534 "link", 

535 "official_site", 

536 "production_year_link", 

537 "production_year", 

538 "release_date", 

539 "playback_time", 

540 "country_of_origin", 

541 "production_company", 

542 "cast", 

543 ] 

544 for field in fields: 

545 assert get_json_val(resp_data, f"$.data.{field}") == get_json_val(test_data, f"$.{field}") 

546 

547 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

548 assert get_json_val(resp_data, "$.data.mark_count") >= get_json_val(test_data, "$.mark_count") 

549 assert get_json_val(resp_data, "$.data.clip_count") >= get_json_val(test_data, "$.clip_count") 

550 

551 assert get_json_val(resp_data, "$.data.original_title") is None 

552 assert get_json_val(resp_data, "$.data.synopsis") is not None 

553 assert get_json_val(resp_data, "$.data.poster") is not None 

554 assert get_json_val(resp_data, "$.data.creator") is not None 

555 assert get_json_val(resp_data, "$.data.planner") is None 

556 assert get_json_val(resp_data, "$.data.producer") is None 

557 assert get_json_val(resp_data, "$.data.executive_producer") is None 

558 assert get_json_val(resp_data, "$.data.chief_director") is None 

559 assert get_json_val(resp_data, "$.data.director") is not None 

560 assert get_json_val(resp_data, "$.data.series_composer") is not None 

561 assert get_json_val(resp_data, "$.data.scriptwriter") is None 

562 assert get_json_val(resp_data, "$.data.character_original_designer") is None 

563 assert get_json_val(resp_data, "$.data.character_designer") is not None 

564 assert get_json_val(resp_data, "$.data.narrator") is None 

565 assert get_json_val(resp_data, "$.data.artist") is not None 

566 

567 

568def test_info_with_results_random(client_nc, caplog) -> None: 

569 with open(file="tests/anime/100_animes.json", mode="r", encoding="utf-8") as f: 

570 test_data = json.load(f) 

571 anime = choice(test_data) 

572 

573 title = get_json_val(anime, "$.title") 

574 series_id = get_json_val(anime, "$.series") 

575 season_id = get_json_val(anime, "$.season") 

576 

577 resp = client_nc.get(f"/animes/{series_id}/{season_id}") 

578 resp_data = resp.json() 

579 

580 assert resp.status_code == 200 

581 assert ANIME_ENG in caplog.text 

582 assert get_json_val(resp_data, "$.data.title") == title 

583 assert get_json_val(resp_data, "$.data.rating") is not None 

584 assert get_json_val(resp_data, "$.data.mark_count") is not None 

585 assert get_json_val(resp_data, "$.data.clip_count") is not None 

586 assert get_json_val(resp_data, "$.data.series_id") == series_id 

587 assert get_json_val(resp_data, "$.data.season_id") == season_id 

588 assert get_json_val(resp_data, "$.data.link") is not None 

589 

590 

591@pytest.mark.parametrize( 

592 "test_data", 

593 [ 

594 { 

595 "title": "DEATH NOTE", 

596 "rating": 4.3, 

597 "series_id": 1533, 

598 "season_id": 2046, 

599 "link": "https://filmarks.com/animes/1533/2046", 

600 "reviews": { 

601 "user": { 

602 "name": "ChameleonBaby", 

603 "id": "Nick575", 

604 "link": "https://filmarks.com/users/Nick575", 

605 }, 

606 "review": { 

607 "date": "2020/11/20 19:29", 

608 "rating": 4, 

609 "id": 292787, 

610 "link": "https://filmarks.com/animes/1533/2046/reviews/292787", 

611 "contents": "原作が素晴らしいが、アニメ化も素晴らしかった。 特にシブタクの人気が圧倒的。 数々のMAD素材にもなったことから、当時のニコニコ動画文化に根強く浸透している。", 

612 }, 

613 }, 

614 }, 

615 ], 

616) 

617def test_review_with_results_full(client_nc, test_data, caplog) -> None: 

618 series_id = get_json_val(test_data, "$.series_id") 

619 season_id = get_json_val(test_data, "$.season_id") 

620 

621 slug = f"animes/{series_id}/{season_id}" 

622 last_page = get_reviews_last_page(slug) 

623 

624 resp = client_nc.get(f"{slug}/reviews?page={last_page}") 

625 resp_data = resp.json() 

626 

627 assert resp.status_code == 200 

628 assert get_json_val(resp_data, "$.data.series_id") == series_id 

629 assert get_json_val(resp_data, "$.data.season_id") == season_id 

630 assert ANIME_ENG in caplog.text 

631 

632 review_fields = [ 

633 "user.name", 

634 "user.id", 

635 "user.link", 

636 "review.date", 

637 "review.rating", 

638 "review.id", 

639 "review.link", 

640 "review.contents" 

641 ] 

642 for field in review_fields: 

643 assert get_json_val(resp_data, f"$.data.reviews[-1].{field}") == get_json_val(test_data, f"$.reviews.{field}") 

644 

645 assert get_json_val(resp_data, "$.data.title") == get_json_val(test_data, "$.title") 

646 assert get_json_val(resp_data, "$.data.original_title") is None 

647 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

648 assert get_json_val(resp_data, "$.data.link") == f"{get_json_val(test_data, "$.link")}?page={last_page}" 

649 assert len(get_json_val(resp_data, "$.data.reviews")) > 0 

650 

651 

652@pytest.mark.parametrize( 

653 "test_data", 

654 [ 

655 { 

656 "title": "DEATH NOTE", 

657 "rating": 4.3, 

658 "series_id": 1533, 

659 "season_id": 2046, 

660 "review_id": 292787, 

661 "link": "https://filmarks.com/animes/1533/2046/reviews/292787", 

662 "review": { 

663 "user": { 

664 "name": "ChameleonBaby", 

665 "id": "Nick575", 

666 "link": "https://filmarks.com/users/Nick575", 

667 }, 

668 "review": { 

669 "date": "2020/11/20 19:29", 

670 "rating": 4, 

671 "contents": "原作が素晴らしいが、アニメ化も素晴らしかった。 特にシブタクの人気が圧倒的。 数々のMAD素材にもなったことから、当時のニコニコ動画文化に根強く浸透している。", 

672 }, 

673 }, 

674 }, 

675 ], 

676) 

677def test_review_with_results_specific(client_nc, test_data, caplog) -> None: 

678 series_id = get_json_val(test_data, "$.series_id") 

679 season_id = get_json_val(test_data, "$.season_id") 

680 review_id = get_json_val(test_data, "$.review_id") 

681 

682 resp = client_nc.get(f"animes/{series_id}/{season_id}/reviews/292787") 

683 resp_data = resp.json() 

684 

685 assert resp.status_code == 200 

686 assert get_json_val(resp_data, "$.data.series_id") == series_id 

687 assert get_json_val(resp_data, "$.data.season_id") == season_id 

688 assert get_json_val(resp_data, "$.data.review_id") == review_id 

689 assert ANIME_ENG in caplog.text 

690 

691 review_fields = [ 

692 "user.name", 

693 "user.id", 

694 "user.link", 

695 "review.date", 

696 "review.rating", 

697 "review.contents" 

698 ] 

699 for field in review_fields: 

700 assert get_json_val(resp_data, f"$.data.review.{field}") == get_json_val(test_data, f"$.review.{field}") 

701 

702 assert get_json_val(resp_data, "$.data.title") == get_json_val(test_data, "$.title") 

703 assert get_json_val(resp_data, "$.data.original_title") is None 

704 assert get_json_val(resp_data, "$.data.rating") == pytest.approx(get_json_val(test_data, "$.rating"), abs=0.5) 

705 assert get_json_val(resp_data, "$.data.link") == get_json_val(test_data, "$.link") 

706 

707 

708def test_review_with_results(client_nc, caplog) -> None: 

709 title = "ラグラッツ シーズン1" 

710 original_title = "Rugrats Season 1" 

711 series_id = 3980 

712 season_id = 5380 

713 

714 resp = client_nc.get(f"/animes/{series_id}/{season_id}/reviews") 

715 resp_data = resp.json() 

716 

717 assert resp.status_code == 200 

718 assert ANIME_ENG in caplog.text 

719 assert get_json_val(resp_data, "$.data.title") == title 

720 assert get_json_val(resp_data, "$.data.original_title") == original_title 

721 assert get_json_val(resp_data, "$.data.rating") is not None 

722 assert get_json_val(resp_data, "$.data.series_id") == series_id 

723 assert get_json_val(resp_data, "$.data.season_id") == season_id 

724 assert get_json_val(resp_data, "$.data.link") is not None 

725 assert len(get_json_val(resp_data, "$.data.reviews")) > 0 

726 

727 

728def test_review_without_results(client_nc, caplog) -> None: 

729 title = "ラグラッツ シーズン1" 

730 original_title = "Rugrats Season 1" 

731 series_id = 3980 

732 season_id = 5380 

733 

734 resp = client_nc.get(f"/animes/{series_id}/{season_id}/reviews?page=10") 

735 resp_data = resp.json() 

736 

737 assert resp.status_code == 200 

738 assert ANIME_ENG in caplog.text 

739 assert get_json_val(resp_data, "$.data.title") == title 

740 assert get_json_val(resp_data, "$.data.original_title") == original_title 

741 assert get_json_val(resp_data, "$.data.rating") is not None 

742 assert get_json_val(resp_data, "$.data.series_id") == series_id 

743 assert get_json_val(resp_data, "$.data.season_id") == season_id 

744 assert get_json_val(resp_data, "$.data.link") is not None 

745 assert len(get_json_val(resp_data, "$.data.reviews")) == 0 

746 

747 

748def test_review_with_results_random(client_nc, caplog) -> None: 

749 with open(file="tests/anime/100_animes.json", mode="r", encoding="utf-8") as f: 

750 test_data = json.load(f) 

751 anime = choice(test_data) 

752 

753 title = get_json_val(anime, "$.title") 

754 series_id = get_json_val(anime, "$.series") 

755 season_id = get_json_val(anime, "$.season") 

756 

757 resp = client_nc.get(f"/animes/{series_id}/{season_id}/reviews") 

758 resp_data = resp.json() 

759 

760 assert resp.status_code == 200 

761 assert ANIME_ENG in caplog.text 

762 assert get_json_val(resp_data, "$.data.title") == title 

763 assert get_json_val(resp_data, "$.data.rating") is not None 

764 assert get_json_val(resp_data, "$.data.series_id") == series_id 

765 assert get_json_val(resp_data, "$.data.season_id") == season_id 

766 assert get_json_val(resp_data, "$.data.link") is not None 

767 assert len(get_json_val(resp_data, "$.data.reviews")) > 0