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
« 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
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()
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"
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()
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"
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()
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"
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()
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"
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")
164 resp = client_nc.get(f"/dramas/{series_id}/{season_id}")
165 resp_data = resp.json()
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
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}")
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")
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
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")
285 resp = client_nc.get(f"/dramas/{series_id}/{season_id}")
286 resp_data = resp.json()
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
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}")
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")
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
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")
434 resp = client_nc.get(f"/dramas/{series_id}/{season_id}")
435 resp_data = resp.json()
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
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}")
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")
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
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")
582 resp = client_nc.get(f"/dramas/{series_id}/{season_id}")
583 resp_data = resp.json()
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
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}")
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")
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
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)
624 title = get_json_val(drama, "$.title")
625 series_id = get_json_val(drama, "$.series")
626 season_id = get_json_val(drama, "$.season")
628 resp = client_nc.get(f"/dramas/{series_id}/{season_id}")
629 resp_data = resp.json()
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
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")
672 slug = f"dramas/{series_id}/{season_id}"
673 last_page = get_reviews_last_page(slug)
675 resp = client_nc.get(f"{slug}/reviews?page={last_page}")
676 resp_data = resp.json()
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
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}")
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
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")
733 resp = client_nc.get(f"dramas/{series_id}/{season_id}/reviews/622799")
734 resp_data = resp.json()
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
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}")
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")
759def test_review_with_results(client_nc, caplog) -> None:
760 title = "魔女ユヒ"
761 original_title = "마녀유희"
762 series_id = 11358
763 season_id = 15763
765 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews")
766 resp_data = resp.json()
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
779def test_review_without_results(client_nc, caplog) -> None:
780 title = "魔女ユヒ"
781 original_title = "마녀유희"
782 series_id = 11358
783 season_id = 15763
785 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews?page=5")
786 resp_data = resp.json()
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
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)
804 title = get_json_val(drama, "$.title")
805 series_id = get_json_val(drama, "$.series")
806 season_id = get_json_val(drama, "$.season")
808 resp = client_nc.get(f"/dramas/{series_id}/{season_id}/reviews")
809 resp_data = resp.json()
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