|
1 | | -use hightorrent::{MagnetLink, TorrentID}; |
| 1 | +use hightorrent::{MagnetLink, TorrentFile, TorrentID}; |
2 | 2 | use sea_orm::entity::prelude::*; |
3 | 3 | use sea_orm::*; |
4 | 4 |
|
@@ -465,3 +465,102 @@ async fn test_torrent_real_optional_notset() { |
465 | 465 | assert_eq!(saved_model.magnet.as_ref(), None); |
466 | 466 | assert_eq!(nonactive_model.magnet.as_ref(), None); |
467 | 467 | } |
| 468 | + |
| 469 | +#[tokio::test] |
| 470 | +async fn test_torrent_real_db() { |
| 471 | + use sea_orm_migration::*; |
| 472 | + |
| 473 | + let tmpdir = async_tempfile::TempDir::new().await.unwrap(); |
| 474 | + let sqlite = tmpdir.join("mixed.sqlite"); |
| 475 | + let sqlite_str = sqlite.to_str().unwrap(); |
| 476 | + |
| 477 | + let db = sea_orm::Database::connect(&format!("sqlite://{}?mode=rwc", sqlite_str)) |
| 478 | + .await |
| 479 | + .unwrap(); |
| 480 | + mixed_torrent::Migrator::up(&db, None).await.unwrap(); |
| 481 | + |
| 482 | + let torrent = |
| 483 | + TorrentFile::from_slice(&std::fs::read("tests/bittorrent-v2-test.torrent").unwrap()) |
| 484 | + .unwrap(); |
| 485 | + |
| 486 | + let model = mixed_torrent::ActiveModel { |
| 487 | + torrent_id: Set(torrent.id()), |
| 488 | + torrent_file: Set(torrent.clone()), |
| 489 | + ..Default::default() |
| 490 | + } |
| 491 | + .save(&db) |
| 492 | + .await |
| 493 | + .unwrap(); |
| 494 | + |
| 495 | + let torrent2 = |
| 496 | + TorrentFile::from_slice(&std::fs::read("tests/bittorrent-v2-hybrid-test.torrent").unwrap()) |
| 497 | + .unwrap(); |
| 498 | + |
| 499 | + let model2 = mixed_torrent::ActiveModel { |
| 500 | + torrent_id: Set(torrent2.id()), |
| 501 | + torrent_file: Set(torrent2.clone()), |
| 502 | + ..Default::default() |
| 503 | + } |
| 504 | + .save(&db) |
| 505 | + .await |
| 506 | + .unwrap(); |
| 507 | + |
| 508 | + let nonactive_model = model.try_into_model().unwrap(); |
| 509 | + let saved_model_by_id = mixed_torrent::Entity::find_by_id(nonactive_model.id) |
| 510 | + .one(&db) |
| 511 | + .await |
| 512 | + .unwrap() |
| 513 | + .unwrap(); |
| 514 | + assert_eq!(saved_model_by_id, nonactive_model); |
| 515 | + assert_eq!(saved_model_by_id.torrent_file, torrent); |
| 516 | + assert_eq!(nonactive_model.torrent_file, torrent); |
| 517 | + |
| 518 | + let nonactive_model2 = model2.try_into_model().unwrap(); |
| 519 | + let saved_model_by_id2 = mixed_torrent::Entity::find_by_id(nonactive_model2.id) |
| 520 | + .one(&db) |
| 521 | + .await |
| 522 | + .unwrap() |
| 523 | + .unwrap(); |
| 524 | + assert_eq!(saved_model_by_id2, nonactive_model2); |
| 525 | + assert_eq!(saved_model_by_id2.torrent_file, torrent2); |
| 526 | + assert_eq!(nonactive_model2.torrent_file, torrent2); |
| 527 | + |
| 528 | + // Try query by TorrentID |
| 529 | + let saved_model_by_torrentid = mixed_torrent::Entity::find() |
| 530 | + .filter(mixed_torrent::Column::TorrentId.eq(torrent.id())) |
| 531 | + .one(&db) |
| 532 | + .await |
| 533 | + .unwrap() |
| 534 | + .unwrap(); |
| 535 | + assert_eq!(saved_model_by_id, nonactive_model); |
| 536 | + assert_eq!(saved_model_by_torrentid.torrent_file, torrent); |
| 537 | + |
| 538 | + // Try query by TorrentFile |
| 539 | + let saved_model_by_torrent = mixed_torrent::Entity::find() |
| 540 | + .filter(mixed_torrent::Column::TorrentFile.eq(torrent.clone())) |
| 541 | + .one(&db) |
| 542 | + .await |
| 543 | + .unwrap() |
| 544 | + .unwrap(); |
| 545 | + assert_eq!(saved_model_by_id, nonactive_model); |
| 546 | + assert_eq!(saved_model_by_torrent.torrent_file, torrent); |
| 547 | + |
| 548 | + // Try listing torrents |
| 549 | + let mut found_one = false; |
| 550 | + let mut found_two = false; |
| 551 | + let list = mixed_torrent::Entity::find().all(&db).await.unwrap(); |
| 552 | + println!("{:?}", list); |
| 553 | + for entry in list { |
| 554 | + if entry.torrent_file == torrent && entry.torrent_id == torrent.id() { |
| 555 | + found_one = true; |
| 556 | + continue; |
| 557 | + } |
| 558 | + |
| 559 | + if entry.torrent_file == torrent2 && entry.torrent_id == torrent2.id() { |
| 560 | + found_two = true; |
| 561 | + } |
| 562 | + } |
| 563 | + |
| 564 | + assert!(found_one); |
| 565 | + assert!(found_two); |
| 566 | +} |
0 commit comments