Coverage for tests\drama\test_drama_info.py: 100%

249 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, DRAMA_ENG 

3import json 

4import pytest 

5 

6 

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

8 "abc/xyz", 

9 "6055/t", 

10 "hi/8586", 

11 "6055/8586", 

12 "6055/8586", 

13]) 

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

15 resp = client_nc.get(f"/dramas/{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 ("6055/t", ""), 

26 ("hi/8586", ""), 

27 ("6055/8586", ""), 

28 ("6055/8586", ""), 

29 ("6055/8586", "?page"), 

30 ("6055/8586", "?page="), 

31 ("6055/8586", "?page=def"), 

32 ("6055/8586", "?page=2"), 

33]) 

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

35 resp = client_nc.get(f"/dramas/{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 ("6055/8586", "?page=0"), 

45]) 

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

47 resp = client_nc.get(f"/dramas/{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 ("6055/8586", "?page=10001"), 

57]) 

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

59 resp = client_nc.get(f"/dramas/{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": "コード・ブルー ドクターヘリ緊急救命 1st season", 

72 "rating": 4.2, 

73 "mark_count": 17200, 

74 "clip_count": 2747, 

75 "series_id": 1137, 

76 "season_id": 2418, 

77 "link": "https://filmarks.com/dramas/1137/2418", 

78 "production_year_link": "https://filmarks.com/list-drama/year/2000s/2008", 

79 "production_year": 2008, 

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

81 "playback_time": "47分", 

82 "country_of_origin": [ 

83 { 

84 "name": "日本", 

85 "id": 144, 

86 "link": "https://filmarks.com/list-drama/country/144", 

87 } 

88 ], 

89 "cast": [ 

90 { 

91 "name": "山下智久", 

92 "character": "藍沢 耕作", 

93 "id": 182202, 

94 "link": "https://filmarks.com/people/182202", 

95 }, 

96 { 

97 "name": "新垣結衣", 

98 "character": "白石 恵", 

99 "id": 95311, 

100 "link": "https://filmarks.com/people/95311", 

101 }, 

102 { 

103 "name": "戸田恵梨香", 

104 "character": "緋山 美帆子", 

105 "id": 125964, 

106 "link": "https://filmarks.com/people/125964", 

107 }, 

108 { 

109 "name": "比嘉愛未", 

110 "character": "冴島 はるか", 

111 "id": 123887, 

112 "link": "https://filmarks.com/people/123887", 

113 }, 

114 { 

115 "name": "浅利陽介", 

116 "character": "藤川 一男", 

117 "id": 57612, 

118 "link": "https://filmarks.com/people/57612", 

119 }, 

120 { 

121 "name": "児玉清", 

122 "character": "田所 良昭", 

123 "id": 35808, 

124 "link": "https://filmarks.com/people/35808", 

125 }, 

126 { 

127 "name": "勝村政信", 

128 "character": "森本 忠士", 

129 "id": 178763, 

130 "link": "https://filmarks.com/people/178763", 

131 }, 

132 { 

133 "name": "寺島進", 

134 "character": "梶 寿志", 

135 "id": 67642, 

136 "link": "https://filmarks.com/people/67642", 

137 }, 

138 { 

139 "name": "杉本哲太", 

140 "character": "西条 章", 

141 "id": 537, 

142 "link": "https://filmarks.com/people/537", 

143 }, 

144 { 

145 "name": "りょう", 

146 "character": "三井 環奈", 

147 "id": 179914, 

148 "link": "https://filmarks.com/people/179914", 

149 }, 

150 { 

151 "name": "柳葉敏郎", 

152 "character": "黒田 脩二", 

153 "id": 146784, 

154 "link": "https://filmarks.com/people/146784", 

155 }, 

156 ], 

157 }, 

158 ], 

159) 

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

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

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

163 

164 resp = client_nc.get(f"/dramas/{series_id}/{season_id}") 

165 resp_data = resp.json() 

166 

167 assert resp.status_code == 200 

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

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

170 assert DRAMA_ENG in caplog.text 

171 

172 fields = [ 

173 "title", 

174 "link", 

175 "production_year_link", 

176 "production_year", 

177 "release_date", 

178 "playback_time", 

179 "country_of_origin", 

180 "cast", 

181 ] 

182 for field in fields: 

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

184 

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

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

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

188 

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

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

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

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

193 assert get_json_val(resp_data, "$.data.genre") is None 

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

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

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

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

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

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

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

201 

202 

203@pytest.mark.parametrize( 

204 "test_data", 

205 [ 

206 { 

207 "title": "魔女ユヒ", 

208 "original_title": "마녀유희", 

209 "rating": 3.5, 

210 "mark_count": 49, 

211 "clip_count": 13, 

212 "series_id": 11358, 

213 "season_id": 15763, 

214 "link": "https://filmarks.com/dramas/11358/15763", 

215 "production_year_link": "https://filmarks.com/list-drama/year/2000s/2007", 

216 "production_year": 2007, 

217 "country_of_origin": [ 

218 { 

219 "name": "韓国", 

220 "id": 147, 

221 "link": "https://filmarks.com/list-drama/country/147", 

222 } 

223 ], 

224 "cast": [ 

225 { 

226 "name": "ハン・ガイン", 

227 "character": "マ・ユヒ", 

228 "id": 175097, 

229 "link": "https://filmarks.com/people/175097", 

230 }, 

231 { 

232 "name": "ジェヒ", 

233 "character": "チェ・ムリョン", 

234 "id": 4988, 

235 "link": "https://filmarks.com/people/4988", 

236 }, 

237 { 

238 "name": "キム・ジョンフン", 

239 "character": "ユ・ジュナ", 

240 "id": 91733, 

241 "link": "https://filmarks.com/people/91733", 

242 }, 

243 { 

244 "name": "チョン・ヘビン", 

245 "character": "ナム・スンミ", 

246 "id": 74428, 

247 "link": "https://filmarks.com/people/74428", 

248 }, 

249 { 

250 "name": "ピョン・ヒボン", 

251 "character": "マ会長", 

252 "id": 50683, 

253 "link": "https://filmarks.com/people/50683", 

254 }, 

255 { 

256 "name": "アン・ソクファン", 

257 "character": "チェ・ビョンソ", 

258 "id": 185994, 

259 "link": "https://filmarks.com/people/185994", 

260 }, 

261 { 

262 "name": "イ・チェヨン", 

263 "id": 194890, 

264 "link": "https://filmarks.com/people/194890", 

265 }, 

266 { 

267 "name": "ソン・ドンイル", 

268 "character": "イ・チーフ", 

269 "id": 176298, 

270 "link": "https://filmarks.com/people/176298", 

271 }, 

272 { 

273 "name": "パク・ボヨン", 

274 "id": 85588, 

275 "link": "https://filmarks.com/people/85588", 

276 }, 

277 ], 

278 }, 

279 ], 

280) 

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

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

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

284 

285 resp = client_nc.get(f"/dramas/{series_id}/{season_id}") 

286 resp_data = resp.json() 

287 

288 assert resp.status_code == 200 

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

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

291 assert DRAMA_ENG in caplog.text 

292 

293 fields = [ 

294 "title", 

295 "original_title", 

296 "link", 

297 "production_year_link", 

298 "production_year", 

299 "country_of_origin", 

300 "cast", 

301 ] 

302 for field in fields: 

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

304 

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

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

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

308 

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

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

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

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

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

314 assert get_json_val(resp_data, "$.data.genre") is None 

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

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

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

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

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

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

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

322 

323 

324@pytest.mark.parametrize( 

325 "test_data", 

326 [ 

327 { 

328 "title": "プリズン・ブレイク", 

329 "original_title": "Prison Break Season 1", 

330 "rating": 4.4, 

331 "mark_count": 32252, 

332 "clip_count": 10595, 

333 "series_id": 88, 

334 "season_id": 335, 

335 "link": "https://filmarks.com/dramas/88/335", 

336 "poster": "https://d2ueuvlup6lbue.cloudfront.net/variants/production/store/fitpad/520/728/w7jq3266nw2prtezaccj8i6nnlgd/_.jpg", 

337 "production_year_link": "https://filmarks.com/list-drama/year/2000s/2005", 

338 "production_year": 2005, 

339 "playback_time": "43分", 

340 "country_of_origin": [ 

341 { 

342 "name": "アメリカ", 

343 "id": 5, 

344 "link": "https://filmarks.com/list-drama/country/5", 

345 } 

346 ], 

347 "cast": [ 

348 { 

349 "name": "ウェントワース・ミラー", 

350 "character": "マイケル・スコフィールド", 

351 "id": 19531, 

352 "link": "https://filmarks.com/people/19531", 

353 }, 

354 { 

355 "name": "ドミニク・パーセル", 

356 "character": "リンカーン・バローズ", 

357 "id": 2622, 

358 "link": "https://filmarks.com/people/2622", 

359 }, 

360 { 

361 "name": "ピーター・ストーメア", 

362 "character": "ジョン・アブルッチ", 

363 "id": 182555, 

364 "link": "https://filmarks.com/people/182555", 

365 }, 

366 { 

367 "name": "ロバート・ネッパー", 

368 "character": "セオドア・“ティーバッグ”・バッグウェル", 

369 "id": 52665, 

370 "link": "https://filmarks.com/people/52665", 

371 }, 

372 { 

373 "name": "アマウリー・ノラスコ", 

374 "character": "フェルナンド・スクレ", 

375 "id": 18339, 

376 "link": "https://filmarks.com/people/18339", 

377 }, 

378 { 

379 "name": "ミューズ・ワトソン", 

380 "character": "チャールズ・ウエストモアランド", 

381 "id": 137504, 

382 "link": "https://filmarks.com/people/137504", 

383 }, 

384 { 

385 "name": "ステイシー・キーチ", 

386 "character": "ヘンリー・ポープ刑務所長", 

387 "id": 177702, 

388 "link": "https://filmarks.com/people/177702", 

389 }, 

390 { 

391 "name": "サラ・ウェイン・キャリーズ", 

392 "character": "サラ・タンクレディ医師", 

393 "id": 84424, 

394 "link": "https://filmarks.com/people/84424", 

395 }, 

396 { 

397 "name": "ウェイド・ウィリアムズ", 

398 "character": "ブラッド・ベリック刑務長", 

399 "id": 7781, 

400 "link": "https://filmarks.com/people/7781", 

401 }, 

402 { 

403 "name": "ロビン・タニー", 

404 "character": "ベロニカ・ドノバン", 

405 "id": 116127, 

406 "link": "https://filmarks.com/people/116127", 

407 }, 

408 { 

409 "name": "マーシャル・オールマン", 

410 "character": "LJ・バローズ", 

411 "id": 64759, 

412 "link": "https://filmarks.com/people/64759", 

413 }, 

414 { 

415 "name": "フランク・グリロ", 

416 "character": "ニック・サブリン", 

417 "id": 77096, 

418 "link": "https://filmarks.com/people/77096", 

419 }, 

420 { 

421 "name": "ポール・アデルスタイン", 

422 "character": "シークレットサービス ケラーマン捜査官", 

423 "id": 127871, 

424 "link": "https://filmarks.com/people/127871", 

425 }, 

426 ], 

427 }, 

428 ], 

429) 

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

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

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

433 

434 resp = client_nc.get(f"/dramas/{series_id}/{season_id}") 

435 resp_data = resp.json() 

436 

437 assert resp.status_code == 200 

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

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

440 assert DRAMA_ENG in caplog.text 

441 

442 fields = [ 

443 "title", 

444 "original_title", 

445 "link", 

446 "production_year_link", 

447 "production_year", 

448 "playback_time", 

449 "country_of_origin", 

450 "cast", 

451 ] 

452 for field in fields: 

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

454 

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

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

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

458 

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

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

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

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

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

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

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

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

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

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

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

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

471 

472 

473@pytest.mark.parametrize( 

474 "test_data", 

475 [ 

476 { 

477 "title": "ぼくたちん家", 

478 "rating": 3.7, 

479 "mark_count": 300, 

480 "clip_count": 2034, 

481 "series_id": 16808, 

482 "season_id": 22629, 

483 "link": "https://filmarks.com/dramas/16808/22629", 

484 "official_site": "https://www.ntv.co.jp/bokutachinchi/", 

485 "production_year_link": "https://filmarks.com/list-drama/year/2020s/2025", 

486 "production_year": 2025, 

487 "release_date": "2025年10月12日", 

488 "country_of_origin": [ 

489 { 

490 "name": "日本", 

491 "id": 144, 

492 "link": "https://filmarks.com/list-drama/country/144", 

493 } 

494 ], 

495 "cast": [ 

496 { 

497 "name": "及川光博", 

498 "character": "波多野玄一", 

499 "id": 177749, 

500 "link": "https://filmarks.com/people/177749" 

501 }, 

502 { 

503 "name": "手越祐也", 

504 "character": "作田索", 

505 "id": 29565, 

506 "link": "https://filmarks.com/people/29565" 

507 }, 

508 { 

509 "name": "白鳥玉季", 

510 "character": "楠ほたる", 

511 "id": 239988, 

512 "link": "https://filmarks.com/people/239988" 

513 }, 

514 { 

515 "name": "田中直樹", 

516 "character": "岡部成治", 

517 "id": 131931, 

518 "link": "https://filmarks.com/people/131931" 

519 }, 

520 { 

521 "name": "井之脇海", 

522 "character": "吉田亮太", 

523 "id": 66476, 

524 "link": "https://filmarks.com/people/66476" 

525 }, 

526 { 

527 "name": "渋谷凪咲", 

528 "character": "百瀬まどか", 

529 "id": 221263, 

530 "link": "https://filmarks.com/people/221263" 

531 }, 

532 { 

533 "name": "久保田磨希", 

534 "character": "栗田美緒", 

535 "id": 14820, 

536 "link": "https://filmarks.com/people/14820" 

537 }, 

538 { 

539 "name": "土居志央梨", 

540 "character": "松梅子", 

541 "id": 210783, 

542 "link": "https://filmarks.com/people/210783" 

543 }, 

544 { 

545 "name": "川口凉旺", 

546 "character": "藤沢辰哉", 

547 "id": 365881, 

548 "link": "https://filmarks.com/people/365881" 

549 }, 

550 { 

551 "name": "大谷亮平", 

552 "character": "鯉登裕太郎", 

553 "id": 158528, 

554 "link": "https://filmarks.com/people/158528" 

555 }, 

556 { 

557 "name": "坂井真紀", 

558 "character": "井の頭今日子", 

559 "id": 7221, 

560 "link": "https://filmarks.com/people/7221" 

561 }, 

562 { 

563 "name": "光石研", 

564 "character": "市ヶ谷仁", 

565 "id": 135880, 

566 "link": "https://filmarks.com/people/135880" 

567 }, 

568 { 

569 "name": "麻生久美子", 

570 "character": "楠ともえ", 

571 "id": 6488, 

572 "link": "https://filmarks.com/people/6488" 

573 } 

574 ], 

575 }, 

576 ], 

577) 

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

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

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

581 

582 resp = client_nc.get(f"/dramas/{series_id}/{season_id}") 

583 resp_data = resp.json() 

584 

585 assert resp.status_code == 200 

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 DRAMA_ENG in caplog.text 

589 

590 fields = [ 

591 "title", 

592 "link", 

593 "official_site", 

594 "production_year_link", 

595 "production_year", 

596 "release_date", 

597 "country_of_origin", 

598 "cast", 

599 ] 

600 for field in fields: 

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

602 

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

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

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

606 

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

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

609 assert get_json_val(resp_data, "$.data.genre") is not None 

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

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

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

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

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

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

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

617 

618 

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

620 with open(file="tests/drama/100_dramas.json", mode="r", encoding="utf-8") as f: 

621 test_data = json.load(f) 

622 drama = choice(test_data) 

623 

624 title = get_json_val(drama, "$.title") 

625 series_id = get_json_val(drama, "$.series") 

626 season_id = get_json_val(drama, "$.season") 

627 

628 resp = client_nc.get(f"/dramas/{series_id}/{season_id}") 

629 resp_data = resp.json() 

630 

631 assert resp.status_code == 200 

632 assert DRAMA_ENG in caplog.text 

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

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

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

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

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

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

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

640 

641 

642@pytest.mark.parametrize( 

643 "test_data", 

644 [ 

645 { 

646 "title": "のだめカンタービレ", 

647 "rating": 4.2, 

648 "series_id": 2767, 

649 "season_id": 4530, 

650 "link": "https://filmarks.com/dramas/2767/4530", 

651 "reviews": { 

652 "user": { 

653 "name": "yumi", 

654 "id": "__yumyumyumi", 

655 "link": "https://filmarks.com/users/__yumyumyumi", 

656 }, 

657 "review": { 

658 "date": "2018/06/16 08:15", 

659 "rating": 3.9, 

660 "id": 622799, 

661 "link": "https://filmarks.com/dramas/2767/4530/reviews/622799", 

662 "contents": "クラシックを使用するドラマは見ていて飽きない。こんなにも恥を捨てた俳優さん達の演技が素晴らしい!", 

663 }, 

664 }, 

665 }, 

666 ], 

667) 

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

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

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

671 

672 slug = f"dramas/{series_id}/{season_id}" 

673 last_page = get_reviews_last_page(slug) 

674 

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

676 resp_data = resp.json() 

677 

678 assert resp.status_code == 200 

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

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

681 assert DRAMA_ENG in caplog.text 

682 

683 review_fields = [ 

684 "user.name", 

685 "user.id", 

686 "user.link", 

687 "review.date", 

688 "review.rating", 

689 "review.id", 

690 "review.link", 

691 "review.contents" 

692 ] 

693 for field in review_fields: 

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

695 

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

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

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

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

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

701 

702 

703@pytest.mark.parametrize( 

704 "test_data", 

705 [ 

706 { 

707 "title": "のだめカンタービレ", 

708 "rating": 4.2, 

709 "series_id": 2767, 

710 "season_id": 4530, 

711 "review_id": 622799, 

712 "link": "https://filmarks.com/dramas/2767/4530/reviews/622799", 

713 "review": { 

714 "user": { 

715 "name": "yumi", 

716 "id": "__yumyumyumi", 

717 "link": "https://filmarks.com/users/__yumyumyumi", 

718 }, 

719 "review": { 

720 "date": "2018/06/16 08:15", 

721 "rating": 3.9, 

722 "contents": "クラシックを使用するドラマは見ていて飽きない。こんなにも恥を捨てた俳優さん達の演技が素晴らしい!", 

723 }, 

724 }, 

725 }, 

726 ], 

727) 

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

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

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

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

732 

733 resp = client_nc.get(f"dramas/{series_id}/{season_id}/reviews/622799") 

734 resp_data = resp.json() 

735 

736 assert resp.status_code == 200 

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

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

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

740 assert DRAMA_ENG in caplog.text 

741 

742 review_fields = [ 

743 "user.name", 

744 "user.id", 

745 "user.link", 

746 "review.date", 

747 "review.rating", 

748 "review.contents" 

749 ] 

750 for field in review_fields: 

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

752 

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

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

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

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

757 

758 

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

760 title = "魔女ユヒ" 

761 original_title = "마녀유희" 

762 series_id = 11358 

763 season_id = 15763 

764 

765 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews") 

766 resp_data = resp.json() 

767 

768 assert resp.status_code == 200 

769 assert DRAMA_ENG in caplog.text 

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

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

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

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

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

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

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

777 

778 

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

780 title = "魔女ユヒ" 

781 original_title = "마녀유희" 

782 series_id = 11358 

783 season_id = 15763 

784 

785 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews?page=5") 

786 resp_data = resp.json() 

787 

788 assert resp.status_code == 200 

789 assert DRAMA_ENG in caplog.text 

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

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

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

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

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

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

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

797 

798 

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

800 with open(file="tests/drama/100_dramas.json", mode="r", encoding="utf-8") as f: 

801 test_data = json.load(f) 

802 drama = choice(test_data) 

803 

804 title = get_json_val(drama, "$.title") 

805 series_id = get_json_val(drama, "$.series") 

806 season_id = get_json_val(drama, "$.season") 

807 

808 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews") 

809 resp_data = resp.json() 

810 

811 assert resp.status_code == 200 

812 assert DRAMA_ENG in caplog.text 

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

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

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

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

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

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