1pub mod content;
4pub mod info;
5#[cfg(feature = "tmdb")]
6pub mod tmdb;
7pub mod watched;
8
9#[cfg(test)]
10mod tests {
11 use flix_model::numbers::{EpisodeNumber, SeasonNumber};
12 #[cfg(feature = "tmdb")]
13 use flix_tmdb::model::id::TmdbRepr as TmdbReprId;
14
15 use sea_orm::ActiveValue::Set;
16 use sea_orm::DatabaseConnection;
17 use sea_orm::DbErr;
18 use sea_orm::entity::prelude::*;
19 use sea_orm::sqlx::error::ErrorKind;
20 use seamantic::model::id::SeaOrmRepr as SeaOrmReprId;
21
22 use crate::entity;
23 use crate::entity::content::test::{
24 make_content_collection, make_content_episode, make_content_library, make_content_movie,
25 make_content_season, make_content_show,
26 };
27 #[cfg(feature = "tmdb")]
28 use crate::entity::tmdb::test::{
29 make_tmdb_collection, make_tmdb_episode, make_tmdb_movie, make_tmdb_season, make_tmdb_show,
30 };
31 use crate::entity::watched::test::{make_watched_episode, make_watched_movie};
32 use crate::tests::new_initialized_memory_db;
33
34 #[derive(Debug)]
35 pub enum ErrorKindError {
36 NotRuntimeError,
37 NotSqlxError,
38 NotDatabaseError,
39 }
40
41 pub fn get_error_kind(error: DbErr) -> Result<ErrorKind, ErrorKindError> {
42 let runtime_err = match error {
43 DbErr::Conn(runtime_err) => runtime_err,
44 DbErr::Exec(runtime_err) => runtime_err,
45 DbErr::Query(runtime_err) => runtime_err,
46 _ => return Err(ErrorKindError::NotRuntimeError),
47 };
48
49 let sqlx_err = match runtime_err {
50 sea_orm::RuntimeErr::SqlxError(sqlx_err) => sqlx_err,
51 _ => return Err(ErrorKindError::NotSqlxError),
52 };
53
54 let database_err = match sqlx_err.as_ref() {
55 sea_orm::SqlxError::Database(database_err) => database_err,
56 _ => return Err(ErrorKindError::NotDatabaseError),
57 };
58
59 Ok(database_err.kind())
60 }
61
62 macro_rules! notsettable {
65 ($field:ident, $value:expr $(, $($skip:ident),+)?) => {
66 if notsettable!(@skip, $field $(, $($skip),+)?) {
67 NotSet
68 } else {
69 Set($value)
70 }
71 };
72 (@skip, $field:ident $(, $skip:ident),*) => {
73 false $(|| stringify!($field) == stringify!($skip))*
74 };
75 }
76 pub(super) use notsettable;
77
78 macro_rules! noneable {
81 ($field:ident, $value:expr $(, $($skip:ident),+)?) => {
82 if noneable!(@skip, $field $(, $($skip),+)?) {
83 None
84 } else {
85 Some($value)
86 }
87 };
88 (@skip, $field:ident $(, $skip:ident),*) => {
89 false $(|| stringify!($field) == stringify!($skip))*
90 };
91 }
92 pub(super) use noneable;
93
94 struct FlixId {
95 collection: SeaOrmReprId,
96 movie: SeaOrmReprId,
97 show: SeaOrmReprId,
98 season: u32,
99 episode: u32,
100 }
101
102 #[cfg(feature = "tmdb")]
103 struct TmdbId {
104 collection: TmdbReprId,
105 movie: TmdbReprId,
106 show: TmdbReprId,
107 season: u32,
108 episode: u32,
109 }
110
111 struct ContentId {
112 library: SeaOrmReprId,
113 }
114
115 struct WatchId {
116 user: SeaOrmReprId,
117 }
118
119 struct DbId {
120 flix: FlixId,
121 #[cfg(feature = "tmdb")]
122 tmdb: TmdbId,
123 content: ContentId,
124 watch: WatchId,
125 }
126
127 impl Default for DbId {
128 fn default() -> Self {
129 Self {
130 flix: FlixId {
131 collection: 1,
132 movie: 2,
133 show: 3,
134 season: 4,
135 episode: 5,
136 },
137 #[cfg(feature = "tmdb")]
138 tmdb: TmdbId {
139 collection: 6,
140 movie: 7,
141 show: 8,
142 season: 9,
143 episode: 10,
144 },
145 content: ContentId { library: 11 },
146 watch: WatchId { user: 12 },
147 }
148 }
149 }
150
151 async fn initialize_deletion_test_database(id: &DbId) -> DatabaseConnection {
152 let db = new_initialized_memory_db().await;
153
154 make_content_library!(&db, id.content.library);
156 make_content_collection!(&db, id.content.library, id.flix.collection, None);
157 make_content_movie!(
158 &db,
159 id.content.library,
160 id.flix.movie,
161 Some(id.flix.collection)
162 );
163 make_content_show!(
164 &db,
165 id.content.library,
166 id.flix.show,
167 Some(id.flix.collection)
168 );
169 make_content_season!(&db, id.content.library, id.flix.show, id.flix.season);
170 make_content_episode!(
171 &db,
172 id.content.library,
173 id.flix.show,
174 id.flix.season,
175 id.flix.episode
176 );
177
178 #[cfg(feature = "tmdb")]
179 make_tmdb_collection!(&db, id.tmdb.collection, id.flix.collection);
180 #[cfg(feature = "tmdb")]
181 make_tmdb_movie!(&db, id.tmdb.movie, id.flix.movie);
182 #[cfg(feature = "tmdb")]
183 make_tmdb_show!(&db, id.tmdb.show, id.flix.show);
184 #[cfg(feature = "tmdb")]
185 make_tmdb_season!(
186 &db,
187 id.tmdb.show,
188 id.tmdb.season,
189 id.flix.show,
190 id.flix.season
191 );
192 #[cfg(feature = "tmdb")]
193 make_tmdb_episode!(
194 &db,
195 id.tmdb.show,
196 id.tmdb.season,
197 id.tmdb.episode,
198 id.flix.show,
199 id.flix.season,
200 id.flix.episode
201 );
202
203 make_watched_movie!(&db, id.flix.movie, id.watch.user);
204 make_watched_episode!(
205 &db,
206 id.flix.show,
207 id.flix.season,
208 id.flix.episode,
209 id.watch.user
210 );
211
212 assert_eq!(
214 Ok(1),
215 entity::info::collections::Entity::find().count(&db).await
216 );
217 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
218 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
219 assert_eq!(
220 Ok(1),
221 entity::info::seasons::Entity::find().count(&db).await
222 );
223 assert_eq!(
224 Ok(1),
225 entity::info::episodes::Entity::find().count(&db).await
226 );
227
228 #[cfg(feature = "tmdb")]
229 assert_eq!(
230 Ok(1),
231 entity::tmdb::collections::Entity::find().count(&db).await
232 );
233 #[cfg(feature = "tmdb")]
234 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
235 #[cfg(feature = "tmdb")]
236 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
237 #[cfg(feature = "tmdb")]
238 assert_eq!(
239 Ok(1),
240 entity::tmdb::seasons::Entity::find().count(&db).await
241 );
242 #[cfg(feature = "tmdb")]
243 assert_eq!(
244 Ok(1),
245 entity::tmdb::episodes::Entity::find().count(&db).await
246 );
247
248 assert_eq!(
249 Ok(1),
250 entity::content::libraries::Entity::find().count(&db).await
251 );
252 assert_eq!(
253 Ok(1),
254 entity::content::collections::Entity::find()
255 .count(&db)
256 .await
257 );
258 assert_eq!(
259 Ok(1),
260 entity::content::movies::Entity::find().count(&db).await
261 );
262 assert_eq!(
263 Ok(1),
264 entity::content::shows::Entity::find().count(&db).await
265 );
266 assert_eq!(
267 Ok(1),
268 entity::content::seasons::Entity::find().count(&db).await
269 );
270 assert_eq!(
271 Ok(1),
272 entity::content::episodes::Entity::find().count(&db).await
273 );
274
275 assert_eq!(
276 Ok(1),
277 entity::watched::movies::Entity::find().count(&db).await
278 );
279 assert_eq!(
280 Ok(1),
281 entity::watched::episodes::Entity::find().count(&db).await
282 );
283
284 db
285 }
286
287 #[tokio::test]
288 async fn test_delete_info_collection() {
289 let id = DbId::default();
290 let db = initialize_deletion_test_database(&id).await;
291
292 entity::info::collections::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
293 id.flix.collection,
294 ))
295 .exec(&db)
296 .await
297 .expect("Entity::delete_by_id");
298
299 assert_eq!(
300 Ok(0),
301 entity::info::collections::Entity::find().count(&db).await
302 );
303 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
304 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
305 assert_eq!(
306 Ok(1),
307 entity::info::seasons::Entity::find().count(&db).await
308 );
309 assert_eq!(
310 Ok(1),
311 entity::info::episodes::Entity::find().count(&db).await
312 );
313
314 #[cfg(feature = "tmdb")]
315 assert_eq!(
316 Ok(0),
317 entity::tmdb::collections::Entity::find().count(&db).await
318 );
319 #[cfg(feature = "tmdb")]
320 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
321 #[cfg(feature = "tmdb")]
322 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
323 #[cfg(feature = "tmdb")]
324 assert_eq!(
325 Ok(1),
326 entity::tmdb::seasons::Entity::find().count(&db).await
327 );
328 #[cfg(feature = "tmdb")]
329 assert_eq!(
330 Ok(1),
331 entity::tmdb::episodes::Entity::find().count(&db).await
332 );
333
334 assert_eq!(
335 Ok(1),
336 entity::content::libraries::Entity::find().count(&db).await
337 );
338 assert_eq!(
339 Ok(0),
340 entity::content::collections::Entity::find()
341 .count(&db)
342 .await
343 );
344 assert_eq!(
345 Ok(0),
346 entity::content::movies::Entity::find().count(&db).await
347 );
348 assert_eq!(
349 Ok(0),
350 entity::content::shows::Entity::find().count(&db).await
351 );
352 assert_eq!(
353 Ok(0),
354 entity::content::seasons::Entity::find().count(&db).await
355 );
356 assert_eq!(
357 Ok(0),
358 entity::content::episodes::Entity::find().count(&db).await
359 );
360
361 assert_eq!(
362 Ok(1),
363 entity::watched::movies::Entity::find().count(&db).await
364 );
365 assert_eq!(
366 Ok(1),
367 entity::watched::episodes::Entity::find().count(&db).await
368 );
369 }
370
371 #[tokio::test]
372 async fn test_delete_info_movie() {
373 let id = DbId::default();
374 let db = initialize_deletion_test_database(&id).await;
375
376 entity::info::movies::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
377 id.flix.movie,
378 ))
379 .exec(&db)
380 .await
381 .expect("Entity::delete_by_id");
382
383 assert_eq!(
384 Ok(1),
385 entity::info::collections::Entity::find().count(&db).await
386 );
387 assert_eq!(Ok(0), entity::info::movies::Entity::find().count(&db).await);
388 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
389 assert_eq!(
390 Ok(1),
391 entity::info::seasons::Entity::find().count(&db).await
392 );
393 assert_eq!(
394 Ok(1),
395 entity::info::episodes::Entity::find().count(&db).await
396 );
397
398 #[cfg(feature = "tmdb")]
399 assert_eq!(
400 Ok(1),
401 entity::tmdb::collections::Entity::find().count(&db).await
402 );
403 #[cfg(feature = "tmdb")]
404 assert_eq!(Ok(0), entity::tmdb::movies::Entity::find().count(&db).await);
405 #[cfg(feature = "tmdb")]
406 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
407 #[cfg(feature = "tmdb")]
408 assert_eq!(
409 Ok(1),
410 entity::tmdb::seasons::Entity::find().count(&db).await
411 );
412 #[cfg(feature = "tmdb")]
413 assert_eq!(
414 Ok(1),
415 entity::tmdb::episodes::Entity::find().count(&db).await
416 );
417
418 assert_eq!(
419 Ok(1),
420 entity::content::libraries::Entity::find().count(&db).await
421 );
422 assert_eq!(
423 Ok(1),
424 entity::content::collections::Entity::find()
425 .count(&db)
426 .await
427 );
428 assert_eq!(
429 Ok(0),
430 entity::content::movies::Entity::find().count(&db).await
431 );
432 assert_eq!(
433 Ok(1),
434 entity::content::shows::Entity::find().count(&db).await
435 );
436 assert_eq!(
437 Ok(1),
438 entity::content::seasons::Entity::find().count(&db).await
439 );
440 assert_eq!(
441 Ok(1),
442 entity::content::episodes::Entity::find().count(&db).await
443 );
444
445 assert_eq!(
446 Ok(0),
447 entity::watched::movies::Entity::find().count(&db).await
448 );
449 assert_eq!(
450 Ok(1),
451 entity::watched::episodes::Entity::find().count(&db).await
452 );
453 }
454
455 #[tokio::test]
456 async fn test_delete_info_show() {
457 let id = DbId::default();
458 let db = initialize_deletion_test_database(&id).await;
459
460 entity::info::shows::Entity::delete_by_id(seamantic::model::id::Id::from_raw(id.flix.show))
461 .exec(&db)
462 .await
463 .expect("Entity::delete_by_id");
464
465 assert_eq!(
466 Ok(1),
467 entity::info::collections::Entity::find().count(&db).await
468 );
469 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
470 assert_eq!(Ok(0), entity::info::shows::Entity::find().count(&db).await);
471 assert_eq!(
472 Ok(0),
473 entity::info::seasons::Entity::find().count(&db).await
474 );
475 assert_eq!(
476 Ok(0),
477 entity::info::episodes::Entity::find().count(&db).await
478 );
479
480 #[cfg(feature = "tmdb")]
481 assert_eq!(
482 Ok(1),
483 entity::tmdb::collections::Entity::find().count(&db).await
484 );
485 #[cfg(feature = "tmdb")]
486 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
487 #[cfg(feature = "tmdb")]
488 assert_eq!(Ok(0), entity::tmdb::shows::Entity::find().count(&db).await);
489 #[cfg(feature = "tmdb")]
490 assert_eq!(
491 Ok(0),
492 entity::tmdb::seasons::Entity::find().count(&db).await
493 );
494 #[cfg(feature = "tmdb")]
495 assert_eq!(
496 Ok(0),
497 entity::tmdb::episodes::Entity::find().count(&db).await
498 );
499
500 assert_eq!(
501 Ok(1),
502 entity::content::libraries::Entity::find().count(&db).await
503 );
504 assert_eq!(
505 Ok(1),
506 entity::content::collections::Entity::find()
507 .count(&db)
508 .await
509 );
510 assert_eq!(
511 Ok(1),
512 entity::content::movies::Entity::find().count(&db).await
513 );
514 assert_eq!(
515 Ok(0),
516 entity::content::shows::Entity::find().count(&db).await
517 );
518 assert_eq!(
519 Ok(0),
520 entity::content::seasons::Entity::find().count(&db).await
521 );
522 assert_eq!(
523 Ok(0),
524 entity::content::episodes::Entity::find().count(&db).await
525 );
526
527 assert_eq!(
528 Ok(1),
529 entity::watched::movies::Entity::find().count(&db).await
530 );
531 assert_eq!(
532 Ok(0),
533 entity::watched::episodes::Entity::find().count(&db).await
534 );
535 }
536
537 #[tokio::test]
538 async fn test_delete_info_season() {
539 let id = DbId::default();
540 let db = initialize_deletion_test_database(&id).await;
541
542 entity::info::seasons::Entity::delete_by_id((
543 seamantic::model::id::Id::from_raw(id.flix.show),
544 SeasonNumber::new(id.flix.season),
545 ))
546 .exec(&db)
547 .await
548 .expect("Entity::delete_by_id");
549
550 assert_eq!(
551 Ok(1),
552 entity::info::collections::Entity::find().count(&db).await
553 );
554 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
555 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
556 assert_eq!(
557 Ok(0),
558 entity::info::seasons::Entity::find().count(&db).await
559 );
560 assert_eq!(
561 Ok(0),
562 entity::info::episodes::Entity::find().count(&db).await
563 );
564
565 #[cfg(feature = "tmdb")]
566 assert_eq!(
567 Ok(1),
568 entity::tmdb::collections::Entity::find().count(&db).await
569 );
570 #[cfg(feature = "tmdb")]
571 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
572 #[cfg(feature = "tmdb")]
573 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
574 #[cfg(feature = "tmdb")]
575 assert_eq!(
576 Ok(0),
577 entity::tmdb::seasons::Entity::find().count(&db).await
578 );
579 #[cfg(feature = "tmdb")]
580 assert_eq!(
581 Ok(0),
582 entity::tmdb::episodes::Entity::find().count(&db).await
583 );
584
585 assert_eq!(
586 Ok(1),
587 entity::content::libraries::Entity::find().count(&db).await
588 );
589 assert_eq!(
590 Ok(1),
591 entity::content::collections::Entity::find()
592 .count(&db)
593 .await
594 );
595 assert_eq!(
596 Ok(1),
597 entity::content::movies::Entity::find().count(&db).await
598 );
599 assert_eq!(
600 Ok(1),
601 entity::content::shows::Entity::find().count(&db).await
602 );
603 assert_eq!(
604 Ok(0),
605 entity::content::seasons::Entity::find().count(&db).await
606 );
607 assert_eq!(
608 Ok(0),
609 entity::content::episodes::Entity::find().count(&db).await
610 );
611
612 assert_eq!(
613 Ok(1),
614 entity::watched::movies::Entity::find().count(&db).await
615 );
616 assert_eq!(
617 Ok(0),
618 entity::watched::episodes::Entity::find().count(&db).await
619 );
620 }
621
622 #[tokio::test]
623 async fn test_delete_info_episodes() {
624 let id = DbId::default();
625 let db = initialize_deletion_test_database(&id).await;
626
627 entity::info::episodes::Entity::delete_by_id((
628 seamantic::model::id::Id::from_raw(id.flix.show),
629 SeasonNumber::new(id.flix.season),
630 EpisodeNumber::new(id.flix.episode),
631 ))
632 .exec(&db)
633 .await
634 .expect("Entity::delete_by_id");
635
636 assert_eq!(
637 Ok(1),
638 entity::info::collections::Entity::find().count(&db).await
639 );
640 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
641 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
642 assert_eq!(
643 Ok(1),
644 entity::info::seasons::Entity::find().count(&db).await
645 );
646 assert_eq!(
647 Ok(0),
648 entity::info::episodes::Entity::find().count(&db).await
649 );
650
651 #[cfg(feature = "tmdb")]
652 assert_eq!(
653 Ok(1),
654 entity::tmdb::collections::Entity::find().count(&db).await
655 );
656 #[cfg(feature = "tmdb")]
657 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
658 #[cfg(feature = "tmdb")]
659 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
660 #[cfg(feature = "tmdb")]
661 assert_eq!(
662 Ok(1),
663 entity::tmdb::seasons::Entity::find().count(&db).await
664 );
665 #[cfg(feature = "tmdb")]
666 assert_eq!(
667 Ok(0),
668 entity::tmdb::episodes::Entity::find().count(&db).await
669 );
670
671 assert_eq!(
672 Ok(1),
673 entity::content::libraries::Entity::find().count(&db).await
674 );
675 assert_eq!(
676 Ok(1),
677 entity::content::collections::Entity::find()
678 .count(&db)
679 .await
680 );
681 assert_eq!(
682 Ok(1),
683 entity::content::movies::Entity::find().count(&db).await
684 );
685 assert_eq!(
686 Ok(1),
687 entity::content::shows::Entity::find().count(&db).await
688 );
689 assert_eq!(
690 Ok(1),
691 entity::content::seasons::Entity::find().count(&db).await
692 );
693 assert_eq!(
694 Ok(0),
695 entity::content::episodes::Entity::find().count(&db).await
696 );
697
698 assert_eq!(
699 Ok(1),
700 entity::watched::movies::Entity::find().count(&db).await
701 );
702 assert_eq!(
703 Ok(0),
704 entity::watched::episodes::Entity::find().count(&db).await
705 );
706 }
707
708 #[cfg(feature = "tmdb")]
709 #[tokio::test]
710 async fn test_delete_tmdb_collection() {
711 let id = DbId::default();
712 let db = initialize_deletion_test_database(&id).await;
713
714 entity::tmdb::collections::Entity::delete_by_id(flix_tmdb::model::id::Id::from_raw(
715 id.tmdb.collection,
716 ))
717 .exec(&db)
718 .await
719 .expect("Entity::delete_by_id");
720
721 assert_eq!(
722 Ok(1),
723 entity::info::collections::Entity::find().count(&db).await
724 );
725 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
726 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
727 assert_eq!(
728 Ok(1),
729 entity::info::seasons::Entity::find().count(&db).await
730 );
731 assert_eq!(
732 Ok(1),
733 entity::info::episodes::Entity::find().count(&db).await
734 );
735
736 #[cfg(feature = "tmdb")]
737 assert_eq!(
738 Ok(0),
739 entity::tmdb::collections::Entity::find().count(&db).await
740 );
741 #[cfg(feature = "tmdb")]
742 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
743 #[cfg(feature = "tmdb")]
744 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
745 #[cfg(feature = "tmdb")]
746 assert_eq!(
747 Ok(1),
748 entity::tmdb::seasons::Entity::find().count(&db).await
749 );
750 #[cfg(feature = "tmdb")]
751 assert_eq!(
752 Ok(1),
753 entity::tmdb::episodes::Entity::find().count(&db).await
754 );
755
756 assert_eq!(
757 Ok(1),
758 entity::content::libraries::Entity::find().count(&db).await
759 );
760 assert_eq!(
761 Ok(1),
762 entity::content::collections::Entity::find()
763 .count(&db)
764 .await
765 );
766 assert_eq!(
767 Ok(1),
768 entity::content::movies::Entity::find().count(&db).await
769 );
770 assert_eq!(
771 Ok(1),
772 entity::content::shows::Entity::find().count(&db).await
773 );
774 assert_eq!(
775 Ok(1),
776 entity::content::seasons::Entity::find().count(&db).await
777 );
778 assert_eq!(
779 Ok(1),
780 entity::content::episodes::Entity::find().count(&db).await
781 );
782
783 assert_eq!(
784 Ok(1),
785 entity::watched::movies::Entity::find().count(&db).await
786 );
787 assert_eq!(
788 Ok(1),
789 entity::watched::episodes::Entity::find().count(&db).await
790 );
791 }
792
793 #[cfg(feature = "tmdb")]
794 #[tokio::test]
795 async fn test_delete_tmdb_movie() {
796 let id = DbId::default();
797 let db = initialize_deletion_test_database(&id).await;
798
799 entity::tmdb::movies::Entity::delete_by_id(flix_tmdb::model::id::Id::from_raw(
800 id.tmdb.movie,
801 ))
802 .exec(&db)
803 .await
804 .expect("Entity::delete_by_id");
805
806 assert_eq!(
807 Ok(1),
808 entity::info::collections::Entity::find().count(&db).await
809 );
810 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
811 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
812 assert_eq!(
813 Ok(1),
814 entity::info::seasons::Entity::find().count(&db).await
815 );
816 assert_eq!(
817 Ok(1),
818 entity::info::episodes::Entity::find().count(&db).await
819 );
820
821 #[cfg(feature = "tmdb")]
822 assert_eq!(
823 Ok(1),
824 entity::tmdb::collections::Entity::find().count(&db).await
825 );
826 #[cfg(feature = "tmdb")]
827 assert_eq!(Ok(0), entity::tmdb::movies::Entity::find().count(&db).await);
828 #[cfg(feature = "tmdb")]
829 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
830 #[cfg(feature = "tmdb")]
831 assert_eq!(
832 Ok(1),
833 entity::tmdb::seasons::Entity::find().count(&db).await
834 );
835 #[cfg(feature = "tmdb")]
836 assert_eq!(
837 Ok(1),
838 entity::tmdb::episodes::Entity::find().count(&db).await
839 );
840
841 assert_eq!(
842 Ok(1),
843 entity::content::libraries::Entity::find().count(&db).await
844 );
845 assert_eq!(
846 Ok(1),
847 entity::content::collections::Entity::find()
848 .count(&db)
849 .await
850 );
851 assert_eq!(
852 Ok(1),
853 entity::content::movies::Entity::find().count(&db).await
854 );
855 assert_eq!(
856 Ok(1),
857 entity::content::shows::Entity::find().count(&db).await
858 );
859 assert_eq!(
860 Ok(1),
861 entity::content::seasons::Entity::find().count(&db).await
862 );
863 assert_eq!(
864 Ok(1),
865 entity::content::episodes::Entity::find().count(&db).await
866 );
867
868 assert_eq!(
869 Ok(1),
870 entity::watched::movies::Entity::find().count(&db).await
871 );
872 assert_eq!(
873 Ok(1),
874 entity::watched::episodes::Entity::find().count(&db).await
875 );
876 }
877
878 #[cfg(feature = "tmdb")]
879 #[tokio::test]
880 async fn test_delete_tmdb_show() {
881 let id = DbId::default();
882 let db = initialize_deletion_test_database(&id).await;
883
884 entity::tmdb::shows::Entity::delete_by_id(flix_tmdb::model::id::Id::from_raw(id.tmdb.show))
885 .exec(&db)
886 .await
887 .expect("Entity::delete_by_id");
888
889 assert_eq!(
890 Ok(1),
891 entity::info::collections::Entity::find().count(&db).await
892 );
893 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
894 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
895 assert_eq!(
896 Ok(1),
897 entity::info::seasons::Entity::find().count(&db).await
898 );
899 assert_eq!(
900 Ok(1),
901 entity::info::episodes::Entity::find().count(&db).await
902 );
903
904 #[cfg(feature = "tmdb")]
905 assert_eq!(
906 Ok(1),
907 entity::tmdb::collections::Entity::find().count(&db).await
908 );
909 #[cfg(feature = "tmdb")]
910 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
911 #[cfg(feature = "tmdb")]
912 assert_eq!(Ok(0), entity::tmdb::shows::Entity::find().count(&db).await);
913 #[cfg(feature = "tmdb")]
914 assert_eq!(
915 Ok(0),
916 entity::tmdb::seasons::Entity::find().count(&db).await
917 );
918 #[cfg(feature = "tmdb")]
919 assert_eq!(
920 Ok(0),
921 entity::tmdb::episodes::Entity::find().count(&db).await
922 );
923
924 assert_eq!(
925 Ok(1),
926 entity::content::libraries::Entity::find().count(&db).await
927 );
928 assert_eq!(
929 Ok(1),
930 entity::content::collections::Entity::find()
931 .count(&db)
932 .await
933 );
934 assert_eq!(
935 Ok(1),
936 entity::content::movies::Entity::find().count(&db).await
937 );
938 assert_eq!(
939 Ok(1),
940 entity::content::shows::Entity::find().count(&db).await
941 );
942 assert_eq!(
943 Ok(1),
944 entity::content::seasons::Entity::find().count(&db).await
945 );
946 assert_eq!(
947 Ok(1),
948 entity::content::episodes::Entity::find().count(&db).await
949 );
950
951 assert_eq!(
952 Ok(1),
953 entity::watched::movies::Entity::find().count(&db).await
954 );
955 assert_eq!(
956 Ok(1),
957 entity::watched::episodes::Entity::find().count(&db).await
958 );
959 }
960
961 #[cfg(feature = "tmdb")]
962 #[tokio::test]
963 async fn test_delete_tmdb_season() {
964 let id = DbId::default();
965 let db = initialize_deletion_test_database(&id).await;
966
967 entity::tmdb::seasons::Entity::delete_by_id((
968 flix_tmdb::model::id::Id::from_raw(id.tmdb.show),
969 SeasonNumber::new(id.tmdb.season),
970 ))
971 .exec(&db)
972 .await
973 .expect("Entity::delete_by_id");
974
975 assert_eq!(
976 Ok(1),
977 entity::info::collections::Entity::find().count(&db).await
978 );
979 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
980 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
981 assert_eq!(
982 Ok(1),
983 entity::info::seasons::Entity::find().count(&db).await
984 );
985 assert_eq!(
986 Ok(1),
987 entity::info::episodes::Entity::find().count(&db).await
988 );
989
990 #[cfg(feature = "tmdb")]
991 assert_eq!(
992 Ok(1),
993 entity::tmdb::collections::Entity::find().count(&db).await
994 );
995 #[cfg(feature = "tmdb")]
996 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
997 #[cfg(feature = "tmdb")]
998 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
999 #[cfg(feature = "tmdb")]
1000 assert_eq!(
1001 Ok(0),
1002 entity::tmdb::seasons::Entity::find().count(&db).await
1003 );
1004 #[cfg(feature = "tmdb")]
1005 assert_eq!(
1006 Ok(0),
1007 entity::tmdb::episodes::Entity::find().count(&db).await
1008 );
1009
1010 assert_eq!(
1011 Ok(1),
1012 entity::content::libraries::Entity::find().count(&db).await
1013 );
1014 assert_eq!(
1015 Ok(1),
1016 entity::content::collections::Entity::find()
1017 .count(&db)
1018 .await
1019 );
1020 assert_eq!(
1021 Ok(1),
1022 entity::content::movies::Entity::find().count(&db).await
1023 );
1024 assert_eq!(
1025 Ok(1),
1026 entity::content::shows::Entity::find().count(&db).await
1027 );
1028 assert_eq!(
1029 Ok(1),
1030 entity::content::seasons::Entity::find().count(&db).await
1031 );
1032 assert_eq!(
1033 Ok(1),
1034 entity::content::episodes::Entity::find().count(&db).await
1035 );
1036
1037 assert_eq!(
1038 Ok(1),
1039 entity::watched::movies::Entity::find().count(&db).await
1040 );
1041 assert_eq!(
1042 Ok(1),
1043 entity::watched::episodes::Entity::find().count(&db).await
1044 );
1045 }
1046
1047 #[cfg(feature = "tmdb")]
1048 #[tokio::test]
1049 async fn test_delete_tmdb_episode() {
1050 let id = DbId::default();
1051 let db = initialize_deletion_test_database(&id).await;
1052
1053 entity::tmdb::episodes::Entity::delete_by_id((
1054 flix_tmdb::model::id::Id::from_raw(id.tmdb.show),
1055 SeasonNumber::new(id.tmdb.season),
1056 EpisodeNumber::new(id.tmdb.episode),
1057 ))
1058 .exec(&db)
1059 .await
1060 .expect("Entity::delete_by_id");
1061
1062 assert_eq!(
1063 Ok(1),
1064 entity::info::collections::Entity::find().count(&db).await
1065 );
1066 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1067 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1068 assert_eq!(
1069 Ok(1),
1070 entity::info::seasons::Entity::find().count(&db).await
1071 );
1072 assert_eq!(
1073 Ok(1),
1074 entity::info::episodes::Entity::find().count(&db).await
1075 );
1076
1077 #[cfg(feature = "tmdb")]
1078 assert_eq!(
1079 Ok(1),
1080 entity::tmdb::collections::Entity::find().count(&db).await
1081 );
1082 #[cfg(feature = "tmdb")]
1083 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1084 #[cfg(feature = "tmdb")]
1085 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1086 #[cfg(feature = "tmdb")]
1087 assert_eq!(
1088 Ok(1),
1089 entity::tmdb::seasons::Entity::find().count(&db).await
1090 );
1091 #[cfg(feature = "tmdb")]
1092 assert_eq!(
1093 Ok(0),
1094 entity::tmdb::episodes::Entity::find().count(&db).await
1095 );
1096
1097 assert_eq!(
1098 Ok(1),
1099 entity::content::libraries::Entity::find().count(&db).await
1100 );
1101 assert_eq!(
1102 Ok(1),
1103 entity::content::collections::Entity::find()
1104 .count(&db)
1105 .await
1106 );
1107 assert_eq!(
1108 Ok(1),
1109 entity::content::movies::Entity::find().count(&db).await
1110 );
1111 assert_eq!(
1112 Ok(1),
1113 entity::content::shows::Entity::find().count(&db).await
1114 );
1115 assert_eq!(
1116 Ok(1),
1117 entity::content::seasons::Entity::find().count(&db).await
1118 );
1119 assert_eq!(
1120 Ok(1),
1121 entity::content::episodes::Entity::find().count(&db).await
1122 );
1123
1124 assert_eq!(
1125 Ok(1),
1126 entity::watched::movies::Entity::find().count(&db).await
1127 );
1128 assert_eq!(
1129 Ok(1),
1130 entity::watched::episodes::Entity::find().count(&db).await
1131 );
1132 }
1133
1134 #[tokio::test]
1135 async fn test_delete_content_library() {
1136 let id = DbId::default();
1137 let db = initialize_deletion_test_database(&id).await;
1138
1139 entity::content::libraries::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
1140 id.content.library,
1141 ))
1142 .exec(&db)
1143 .await
1144 .expect("Entity::delete_by_id");
1145
1146 assert_eq!(
1147 Ok(1),
1148 entity::info::collections::Entity::find().count(&db).await
1149 );
1150 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1151 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1152 assert_eq!(
1153 Ok(1),
1154 entity::info::seasons::Entity::find().count(&db).await
1155 );
1156 assert_eq!(
1157 Ok(1),
1158 entity::info::episodes::Entity::find().count(&db).await
1159 );
1160
1161 #[cfg(feature = "tmdb")]
1162 assert_eq!(
1163 Ok(1),
1164 entity::tmdb::collections::Entity::find().count(&db).await
1165 );
1166 #[cfg(feature = "tmdb")]
1167 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1168 #[cfg(feature = "tmdb")]
1169 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1170 #[cfg(feature = "tmdb")]
1171 assert_eq!(
1172 Ok(1),
1173 entity::tmdb::seasons::Entity::find().count(&db).await
1174 );
1175 #[cfg(feature = "tmdb")]
1176 assert_eq!(
1177 Ok(1),
1178 entity::tmdb::episodes::Entity::find().count(&db).await
1179 );
1180
1181 assert_eq!(
1182 Ok(0),
1183 entity::content::libraries::Entity::find().count(&db).await
1184 );
1185 assert_eq!(
1186 Ok(0),
1187 entity::content::collections::Entity::find()
1188 .count(&db)
1189 .await
1190 );
1191 assert_eq!(
1192 Ok(0),
1193 entity::content::movies::Entity::find().count(&db).await
1194 );
1195 assert_eq!(
1196 Ok(0),
1197 entity::content::shows::Entity::find().count(&db).await
1198 );
1199 assert_eq!(
1200 Ok(0),
1201 entity::content::seasons::Entity::find().count(&db).await
1202 );
1203 assert_eq!(
1204 Ok(0),
1205 entity::content::episodes::Entity::find().count(&db).await
1206 );
1207
1208 assert_eq!(
1209 Ok(1),
1210 entity::watched::movies::Entity::find().count(&db).await
1211 );
1212 assert_eq!(
1213 Ok(1),
1214 entity::watched::episodes::Entity::find().count(&db).await
1215 );
1216 }
1217
1218 #[tokio::test]
1219 async fn test_delete_content_collection() {
1220 let id = DbId::default();
1221 let db = initialize_deletion_test_database(&id).await;
1222
1223 entity::content::collections::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
1224 id.flix.collection,
1225 ))
1226 .exec(&db)
1227 .await
1228 .expect("Entity::delete_by_id");
1229
1230 assert_eq!(
1231 Ok(1),
1232 entity::info::collections::Entity::find().count(&db).await
1233 );
1234 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1235 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1236 assert_eq!(
1237 Ok(1),
1238 entity::info::seasons::Entity::find().count(&db).await
1239 );
1240 assert_eq!(
1241 Ok(1),
1242 entity::info::episodes::Entity::find().count(&db).await
1243 );
1244
1245 #[cfg(feature = "tmdb")]
1246 assert_eq!(
1247 Ok(1),
1248 entity::tmdb::collections::Entity::find().count(&db).await
1249 );
1250 #[cfg(feature = "tmdb")]
1251 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1252 #[cfg(feature = "tmdb")]
1253 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1254 #[cfg(feature = "tmdb")]
1255 assert_eq!(
1256 Ok(1),
1257 entity::tmdb::seasons::Entity::find().count(&db).await
1258 );
1259 #[cfg(feature = "tmdb")]
1260 assert_eq!(
1261 Ok(1),
1262 entity::tmdb::episodes::Entity::find().count(&db).await
1263 );
1264
1265 assert_eq!(
1266 Ok(1),
1267 entity::content::libraries::Entity::find().count(&db).await
1268 );
1269 assert_eq!(
1270 Ok(0),
1271 entity::content::collections::Entity::find()
1272 .count(&db)
1273 .await
1274 );
1275 assert_eq!(
1276 Ok(0),
1277 entity::content::movies::Entity::find().count(&db).await
1278 );
1279 assert_eq!(
1280 Ok(0),
1281 entity::content::shows::Entity::find().count(&db).await
1282 );
1283 assert_eq!(
1284 Ok(0),
1285 entity::content::seasons::Entity::find().count(&db).await
1286 );
1287 assert_eq!(
1288 Ok(0),
1289 entity::content::episodes::Entity::find().count(&db).await
1290 );
1291
1292 assert_eq!(
1293 Ok(1),
1294 entity::watched::movies::Entity::find().count(&db).await
1295 );
1296 assert_eq!(
1297 Ok(1),
1298 entity::watched::episodes::Entity::find().count(&db).await
1299 );
1300 }
1301
1302 #[tokio::test]
1303 async fn test_delete_content_movie() {
1304 let id = DbId::default();
1305 let db = initialize_deletion_test_database(&id).await;
1306
1307 entity::content::movies::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
1308 id.flix.movie,
1309 ))
1310 .exec(&db)
1311 .await
1312 .expect("Entity::delete_by_id");
1313
1314 assert_eq!(
1315 Ok(1),
1316 entity::info::collections::Entity::find().count(&db).await
1317 );
1318 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1319 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1320 assert_eq!(
1321 Ok(1),
1322 entity::info::seasons::Entity::find().count(&db).await
1323 );
1324 assert_eq!(
1325 Ok(1),
1326 entity::info::episodes::Entity::find().count(&db).await
1327 );
1328
1329 #[cfg(feature = "tmdb")]
1330 assert_eq!(
1331 Ok(1),
1332 entity::tmdb::collections::Entity::find().count(&db).await
1333 );
1334 #[cfg(feature = "tmdb")]
1335 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1336 #[cfg(feature = "tmdb")]
1337 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1338 #[cfg(feature = "tmdb")]
1339 assert_eq!(
1340 Ok(1),
1341 entity::tmdb::seasons::Entity::find().count(&db).await
1342 );
1343 #[cfg(feature = "tmdb")]
1344 assert_eq!(
1345 Ok(1),
1346 entity::tmdb::episodes::Entity::find().count(&db).await
1347 );
1348
1349 assert_eq!(
1350 Ok(1),
1351 entity::content::libraries::Entity::find().count(&db).await
1352 );
1353 assert_eq!(
1354 Ok(1),
1355 entity::content::collections::Entity::find()
1356 .count(&db)
1357 .await
1358 );
1359 assert_eq!(
1360 Ok(0),
1361 entity::content::movies::Entity::find().count(&db).await
1362 );
1363 assert_eq!(
1364 Ok(1),
1365 entity::content::shows::Entity::find().count(&db).await
1366 );
1367 assert_eq!(
1368 Ok(1),
1369 entity::content::seasons::Entity::find().count(&db).await
1370 );
1371 assert_eq!(
1372 Ok(1),
1373 entity::content::episodes::Entity::find().count(&db).await
1374 );
1375
1376 assert_eq!(
1377 Ok(1),
1378 entity::watched::movies::Entity::find().count(&db).await
1379 );
1380 assert_eq!(
1381 Ok(1),
1382 entity::watched::episodes::Entity::find().count(&db).await
1383 );
1384 }
1385
1386 #[tokio::test]
1387 async fn test_delete_content_show() {
1388 let id = DbId::default();
1389 let db = initialize_deletion_test_database(&id).await;
1390
1391 entity::content::shows::Entity::delete_by_id(seamantic::model::id::Id::from_raw(
1392 id.flix.show,
1393 ))
1394 .exec(&db)
1395 .await
1396 .expect("Entity::delete_by_id");
1397
1398 assert_eq!(
1399 Ok(1),
1400 entity::info::collections::Entity::find().count(&db).await
1401 );
1402 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1403 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1404 assert_eq!(
1405 Ok(1),
1406 entity::info::seasons::Entity::find().count(&db).await
1407 );
1408 assert_eq!(
1409 Ok(1),
1410 entity::info::episodes::Entity::find().count(&db).await
1411 );
1412
1413 #[cfg(feature = "tmdb")]
1414 assert_eq!(
1415 Ok(1),
1416 entity::tmdb::collections::Entity::find().count(&db).await
1417 );
1418 #[cfg(feature = "tmdb")]
1419 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1420 #[cfg(feature = "tmdb")]
1421 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1422 #[cfg(feature = "tmdb")]
1423 assert_eq!(
1424 Ok(1),
1425 entity::tmdb::seasons::Entity::find().count(&db).await
1426 );
1427 #[cfg(feature = "tmdb")]
1428 assert_eq!(
1429 Ok(1),
1430 entity::tmdb::episodes::Entity::find().count(&db).await
1431 );
1432
1433 assert_eq!(
1434 Ok(1),
1435 entity::content::libraries::Entity::find().count(&db).await
1436 );
1437 assert_eq!(
1438 Ok(1),
1439 entity::content::collections::Entity::find()
1440 .count(&db)
1441 .await
1442 );
1443 assert_eq!(
1444 Ok(1),
1445 entity::content::movies::Entity::find().count(&db).await
1446 );
1447 assert_eq!(
1448 Ok(0),
1449 entity::content::shows::Entity::find().count(&db).await
1450 );
1451 assert_eq!(
1452 Ok(0),
1453 entity::content::seasons::Entity::find().count(&db).await
1454 );
1455 assert_eq!(
1456 Ok(0),
1457 entity::content::episodes::Entity::find().count(&db).await
1458 );
1459
1460 assert_eq!(
1461 Ok(1),
1462 entity::watched::movies::Entity::find().count(&db).await
1463 );
1464 assert_eq!(
1465 Ok(1),
1466 entity::watched::episodes::Entity::find().count(&db).await
1467 );
1468 }
1469
1470 #[tokio::test]
1471 async fn test_delete_content_season() {
1472 let id = DbId::default();
1473 let db = initialize_deletion_test_database(&id).await;
1474
1475 entity::content::seasons::Entity::delete_by_id((
1476 seamantic::model::id::Id::from_raw(id.flix.show),
1477 SeasonNumber::new(id.flix.season),
1478 ))
1479 .exec(&db)
1480 .await
1481 .expect("Entity::delete_by_id");
1482
1483 assert_eq!(
1484 Ok(1),
1485 entity::info::collections::Entity::find().count(&db).await
1486 );
1487 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1488 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1489 assert_eq!(
1490 Ok(1),
1491 entity::info::seasons::Entity::find().count(&db).await
1492 );
1493 assert_eq!(
1494 Ok(1),
1495 entity::info::episodes::Entity::find().count(&db).await
1496 );
1497
1498 #[cfg(feature = "tmdb")]
1499 assert_eq!(
1500 Ok(1),
1501 entity::tmdb::collections::Entity::find().count(&db).await
1502 );
1503 #[cfg(feature = "tmdb")]
1504 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1505 #[cfg(feature = "tmdb")]
1506 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1507 #[cfg(feature = "tmdb")]
1508 assert_eq!(
1509 Ok(1),
1510 entity::tmdb::seasons::Entity::find().count(&db).await
1511 );
1512 #[cfg(feature = "tmdb")]
1513 assert_eq!(
1514 Ok(1),
1515 entity::tmdb::episodes::Entity::find().count(&db).await
1516 );
1517
1518 assert_eq!(
1519 Ok(1),
1520 entity::content::libraries::Entity::find().count(&db).await
1521 );
1522 assert_eq!(
1523 Ok(1),
1524 entity::content::collections::Entity::find()
1525 .count(&db)
1526 .await
1527 );
1528 assert_eq!(
1529 Ok(1),
1530 entity::content::movies::Entity::find().count(&db).await
1531 );
1532 assert_eq!(
1533 Ok(1),
1534 entity::content::shows::Entity::find().count(&db).await
1535 );
1536 assert_eq!(
1537 Ok(0),
1538 entity::content::seasons::Entity::find().count(&db).await
1539 );
1540 assert_eq!(
1541 Ok(0),
1542 entity::content::episodes::Entity::find().count(&db).await
1543 );
1544
1545 assert_eq!(
1546 Ok(1),
1547 entity::watched::movies::Entity::find().count(&db).await
1548 );
1549 assert_eq!(
1550 Ok(1),
1551 entity::watched::episodes::Entity::find().count(&db).await
1552 );
1553 }
1554
1555 #[tokio::test]
1556 async fn test_delete_content_episode() {
1557 let id = DbId::default();
1558 let db = initialize_deletion_test_database(&id).await;
1559
1560 entity::content::episodes::Entity::delete_by_id((
1561 seamantic::model::id::Id::from_raw(id.flix.show),
1562 SeasonNumber::new(id.flix.season),
1563 EpisodeNumber::new(id.flix.episode),
1564 ))
1565 .exec(&db)
1566 .await
1567 .expect("Entity::delete_by_id");
1568
1569 assert_eq!(
1570 Ok(1),
1571 entity::info::collections::Entity::find().count(&db).await
1572 );
1573 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1574 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1575 assert_eq!(
1576 Ok(1),
1577 entity::info::seasons::Entity::find().count(&db).await
1578 );
1579 assert_eq!(
1580 Ok(1),
1581 entity::info::episodes::Entity::find().count(&db).await
1582 );
1583
1584 #[cfg(feature = "tmdb")]
1585 assert_eq!(
1586 Ok(1),
1587 entity::tmdb::collections::Entity::find().count(&db).await
1588 );
1589 #[cfg(feature = "tmdb")]
1590 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1591 #[cfg(feature = "tmdb")]
1592 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1593 #[cfg(feature = "tmdb")]
1594 assert_eq!(
1595 Ok(1),
1596 entity::tmdb::seasons::Entity::find().count(&db).await
1597 );
1598 #[cfg(feature = "tmdb")]
1599 assert_eq!(
1600 Ok(1),
1601 entity::tmdb::episodes::Entity::find().count(&db).await
1602 );
1603
1604 assert_eq!(
1605 Ok(1),
1606 entity::content::libraries::Entity::find().count(&db).await
1607 );
1608 assert_eq!(
1609 Ok(1),
1610 entity::content::collections::Entity::find()
1611 .count(&db)
1612 .await
1613 );
1614 assert_eq!(
1615 Ok(1),
1616 entity::content::movies::Entity::find().count(&db).await
1617 );
1618 assert_eq!(
1619 Ok(1),
1620 entity::content::shows::Entity::find().count(&db).await
1621 );
1622 assert_eq!(
1623 Ok(1),
1624 entity::content::seasons::Entity::find().count(&db).await
1625 );
1626 assert_eq!(
1627 Ok(0),
1628 entity::content::episodes::Entity::find().count(&db).await
1629 );
1630
1631 assert_eq!(
1632 Ok(1),
1633 entity::watched::movies::Entity::find().count(&db).await
1634 );
1635 assert_eq!(
1636 Ok(1),
1637 entity::watched::episodes::Entity::find().count(&db).await
1638 );
1639 }
1640
1641 #[tokio::test]
1642 async fn test_delete_watched_movie() {
1643 let id = DbId::default();
1644 let db = initialize_deletion_test_database(&id).await;
1645
1646 entity::watched::movies::Entity::delete_by_id((
1647 seamantic::model::id::Id::from_raw(id.flix.movie),
1648 id.watch.user,
1649 ))
1650 .exec(&db)
1651 .await
1652 .expect("Entity::delete_by_id");
1653
1654 assert_eq!(
1655 Ok(1),
1656 entity::info::collections::Entity::find().count(&db).await
1657 );
1658 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1659 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1660 assert_eq!(
1661 Ok(1),
1662 entity::info::seasons::Entity::find().count(&db).await
1663 );
1664 assert_eq!(
1665 Ok(1),
1666 entity::info::episodes::Entity::find().count(&db).await
1667 );
1668
1669 #[cfg(feature = "tmdb")]
1670 assert_eq!(
1671 Ok(1),
1672 entity::tmdb::collections::Entity::find().count(&db).await
1673 );
1674 #[cfg(feature = "tmdb")]
1675 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1676 #[cfg(feature = "tmdb")]
1677 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1678 #[cfg(feature = "tmdb")]
1679 assert_eq!(
1680 Ok(1),
1681 entity::tmdb::seasons::Entity::find().count(&db).await
1682 );
1683 #[cfg(feature = "tmdb")]
1684 assert_eq!(
1685 Ok(1),
1686 entity::tmdb::episodes::Entity::find().count(&db).await
1687 );
1688
1689 assert_eq!(
1690 Ok(1),
1691 entity::content::libraries::Entity::find().count(&db).await
1692 );
1693 assert_eq!(
1694 Ok(1),
1695 entity::content::collections::Entity::find()
1696 .count(&db)
1697 .await
1698 );
1699 assert_eq!(
1700 Ok(1),
1701 entity::content::movies::Entity::find().count(&db).await
1702 );
1703 assert_eq!(
1704 Ok(1),
1705 entity::content::shows::Entity::find().count(&db).await
1706 );
1707 assert_eq!(
1708 Ok(1),
1709 entity::content::seasons::Entity::find().count(&db).await
1710 );
1711 assert_eq!(
1712 Ok(1),
1713 entity::content::episodes::Entity::find().count(&db).await
1714 );
1715
1716 assert_eq!(
1717 Ok(0),
1718 entity::watched::movies::Entity::find().count(&db).await
1719 );
1720 assert_eq!(
1721 Ok(1),
1722 entity::watched::episodes::Entity::find().count(&db).await
1723 );
1724 }
1725
1726 #[tokio::test]
1727 async fn test_delete_watched_episode() {
1728 let id = DbId::default();
1729 let db = initialize_deletion_test_database(&id).await;
1730
1731 entity::watched::episodes::Entity::delete_by_id((
1732 seamantic::model::id::Id::from_raw(id.flix.show),
1733 SeasonNumber::new(id.flix.season),
1734 EpisodeNumber::new(id.flix.episode),
1735 id.watch.user,
1736 ))
1737 .exec(&db)
1738 .await
1739 .expect("Entity::delete_by_id");
1740
1741 assert_eq!(
1742 Ok(1),
1743 entity::info::collections::Entity::find().count(&db).await
1744 );
1745 assert_eq!(Ok(1), entity::info::movies::Entity::find().count(&db).await);
1746 assert_eq!(Ok(1), entity::info::shows::Entity::find().count(&db).await);
1747 assert_eq!(
1748 Ok(1),
1749 entity::info::seasons::Entity::find().count(&db).await
1750 );
1751 assert_eq!(
1752 Ok(1),
1753 entity::info::episodes::Entity::find().count(&db).await
1754 );
1755
1756 #[cfg(feature = "tmdb")]
1757 assert_eq!(
1758 Ok(1),
1759 entity::tmdb::collections::Entity::find().count(&db).await
1760 );
1761 #[cfg(feature = "tmdb")]
1762 assert_eq!(Ok(1), entity::tmdb::movies::Entity::find().count(&db).await);
1763 #[cfg(feature = "tmdb")]
1764 assert_eq!(Ok(1), entity::tmdb::shows::Entity::find().count(&db).await);
1765 #[cfg(feature = "tmdb")]
1766 assert_eq!(
1767 Ok(1),
1768 entity::tmdb::seasons::Entity::find().count(&db).await
1769 );
1770 #[cfg(feature = "tmdb")]
1771 assert_eq!(
1772 Ok(1),
1773 entity::tmdb::episodes::Entity::find().count(&db).await
1774 );
1775
1776 assert_eq!(
1777 Ok(1),
1778 entity::content::libraries::Entity::find().count(&db).await
1779 );
1780 assert_eq!(
1781 Ok(1),
1782 entity::content::collections::Entity::find()
1783 .count(&db)
1784 .await
1785 );
1786 assert_eq!(
1787 Ok(1),
1788 entity::content::movies::Entity::find().count(&db).await
1789 );
1790 assert_eq!(
1791 Ok(1),
1792 entity::content::shows::Entity::find().count(&db).await
1793 );
1794 assert_eq!(
1795 Ok(1),
1796 entity::content::seasons::Entity::find().count(&db).await
1797 );
1798 assert_eq!(
1799 Ok(1),
1800 entity::content::episodes::Entity::find().count(&db).await
1801 );
1802
1803 assert_eq!(
1804 Ok(1),
1805 entity::watched::movies::Entity::find().count(&db).await
1806 );
1807 assert_eq!(
1808 Ok(0),
1809 entity::watched::episodes::Entity::find().count(&db).await
1810 );
1811 }
1812}