diff --git a/examples/types/notifications.rs b/examples/types/notifications.rs new file mode 100644 index 000000000..9f5136659 --- /dev/null +++ b/examples/types/notifications.rs @@ -0,0 +1,8 @@ +use stremio_core::types::notification::notification_item::tests::NOTIFICATION; + +#[test] +fn test_notification_json() { + let notification = NOTIFICATION.clone(); + + println!("{}", serde_json::to_string_pretty(¬ification).unwrap()); +} diff --git a/src/models/ctx/ctx.rs b/src/models/ctx/ctx.rs index 06e5c58ae..76194f891 100644 --- a/src/models/ctx/ctx.rs +++ b/src/models/ctx/ctx.rs @@ -1,9 +1,6 @@ use crate::constants::LIBRARY_COLLECTION_NAME; use crate::models::common::{DescriptorLoadable, ResourceLoadable}; -use crate::models::ctx::{ - update_library, update_notifications, update_profile, update_trakt_addon, CtxError, -}; -use crate::models::ctx::{update_library, update_profile, update_streams, CtxError, OtherError}; +use crate::models::ctx::{update_library, update_profile, update_trakt_addon,update_notifications, update_streams, CtxError}; use crate::runtime::msg::{Action, ActionCtx, Event, Internal, Msg}; use crate::runtime::{Effect, EffectFuture, Effects, Env, EnvFutureExt, Update}; use crate::types::api::{ diff --git a/src/unit_tests/catalog_with_filters/load_action.rs b/src/unit_tests/catalog_with_filters/load_action.rs index 03b8d569a..2a100070f 100644 --- a/src/unit_tests/catalog_with_filters/load_action.rs +++ b/src/unit_tests/catalog_with_filters/load_action.rs @@ -8,6 +8,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::Profile; use crate::types::resource::MetaItemPreview; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, EVENTS, FETCH_HANDLER, REQUESTS, STATES, }; @@ -46,6 +47,7 @@ fn default_catalog() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (discover, effects) = CatalogWithFilters::::new(&ctx.profile); @@ -144,6 +146,7 @@ fn search_catalog() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (discover, effects) = CatalogWithFilters::::new(&ctx.profile); diff --git a/src/unit_tests/ctx/add_to_library.rs b/src/unit_tests/ctx/add_to_library.rs index 2f068a280..ca7ea5e32 100644 --- a/src/unit_tests/ctx/add_to_library.rs +++ b/src/unit_tests/ctx/add_to_library.rs @@ -8,6 +8,7 @@ use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::resource::{MetaItemBehaviorHints, MetaItemPreview, PosterShape}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, NOW, REQUESTS, STORAGE, }; @@ -103,6 +104,7 @@ fn actionctx_addtolibrary() { uid: Some("id".to_owned()), ..Default::default() }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -237,6 +239,7 @@ fn actionctx_addtolibrary_already_added() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/authenticate.rs b/src/unit_tests/ctx/authenticate.rs index d47dfb04b..93ee08a5b 100644 --- a/src/unit_tests/ctx/authenticate.rs +++ b/src/unit_tests/ctx/authenticate.rs @@ -1,4 +1,5 @@ use crate::types::notifications::NotificationsBucket; +use crate::types::streams::StreamsBucket; use crate::{ constants::{LIBRARY_RECENT_STORAGE_KEY, LIBRARY_STORAGE_KEY, PROFILE_STORAGE_KEY}, models::ctx::Ctx, @@ -86,6 +87,7 @@ fn actionctx_authenticate_login() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (runtime, _rx) = Runtime::::new(TestModel { ctx }, vec![], 1000); @@ -290,6 +292,7 @@ fn actionctx_authenticate_login_with_token() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (runtime, _rx) = Runtime::::new(TestModel { ctx }, vec![], 1000); @@ -493,6 +496,7 @@ fn actionctx_authenticate_register() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (runtime, _rx) = Runtime::::new(TestModel { ctx }, vec![], 1000); diff --git a/src/unit_tests/ctx/install_addon.rs b/src/unit_tests/ctx/install_addon.rs index 295e82df6..f66dd39ad 100644 --- a/src/unit_tests/ctx/install_addon.rs +++ b/src/unit_tests/ctx/install_addon.rs @@ -8,6 +8,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS, STORAGE, }; @@ -52,6 +53,7 @@ fn actionctx_installaddon_install() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -155,6 +157,7 @@ fn actionctx_installaddon_install_with_user() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -275,6 +278,7 @@ fn actionctx_installaddon_update() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -349,6 +353,7 @@ fn actionctx_installaddon_already_installed() { ctx: Ctx::new( profile, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/logout.rs b/src/unit_tests/ctx/logout.rs index efc8bf984..5d76a5503 100644 --- a/src/unit_tests/ctx/logout.rs +++ b/src/unit_tests/ctx/logout.rs @@ -7,6 +7,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS, STORAGE, }; @@ -82,6 +83,7 @@ fn actionctx_logout() { ctx: Ctx::new( profile, library, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/notifications/notifications.rs b/src/unit_tests/ctx/notifications/notifications.rs index 20435c22d..64cf1c1ed 100644 --- a/src/unit_tests/ctx/notifications/notifications.rs +++ b/src/unit_tests/ctx/notifications/notifications.rs @@ -5,6 +5,7 @@ use crate::types::addon::{Descriptor, ResourceResponse}; use crate::types::library::{LibraryBucket, LibraryItem}; use crate::types::notifications::{NotificationItem, NotificationsBucket}; use crate::types::profile::Profile; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{default_fetch_handler, Request, TestEnv, FETCH_HANDLER}; use enclose::enclose; use futures::future; @@ -28,7 +29,7 @@ struct TestData { fn notifications() { let tests = serde_json::from_slice::>(DATA).unwrap(); for test in tests { - #[derive(Model)] + #[derive(Model, Clone, Debug)] #[model(TestEnv)] struct TestModel { ctx: Ctx, @@ -50,6 +51,7 @@ fn notifications() { ..Default::default() }, LibraryBucket::new(None, test.library_items), + StreamsBucket::default(), NotificationsBucket::new::(None, test.notification_items), ), }, diff --git a/src/unit_tests/ctx/pull_addons_from_api.rs b/src/unit_tests/ctx/pull_addons_from_api.rs index 06f983925..b887d2c3c 100644 --- a/src/unit_tests/ctx/pull_addons_from_api.rs +++ b/src/unit_tests/ctx/pull_addons_from_api.rs @@ -7,6 +7,7 @@ use crate::types::api::{APIResult, CollectionResponse}; use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS, STORAGE, }; @@ -40,6 +41,7 @@ fn actionctx_pulladdonsfromapi() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -146,6 +148,7 @@ fn actionctx_pulladdonsfromapi_with_user() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/pull_notifications.rs b/src/unit_tests/ctx/pull_notifications.rs index 0372c04b8..e73b5645b 100644 --- a/src/unit_tests/ctx/pull_notifications.rs +++ b/src/unit_tests/ctx/pull_notifications.rs @@ -13,6 +13,7 @@ use crate::types::profile::Profile; use crate::types::resource::{ MetaItem, MetaItemPreview, PosterShape, SeriesInfo, Stream, StreamSource, Video, }; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS}; use chrono::TimeZone; use chrono::Utc; @@ -24,7 +25,7 @@ use url::Url; #[test] fn pull_notifications() { - #[derive(Model)] + #[derive(Model, Clone, Debug)] #[model(TestEnv)] struct TestModel { ctx: Ctx, @@ -197,6 +198,7 @@ fn pull_notifications() { behavior_hints: Default::default(), }], ), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), player: Default::default(), diff --git a/src/unit_tests/ctx/push_addons_to_api.rs b/src/unit_tests/ctx/push_addons_to_api.rs index 1ed9efb8a..46abefaa4 100644 --- a/src/unit_tests/ctx/push_addons_to_api.rs +++ b/src/unit_tests/ctx/push_addons_to_api.rs @@ -7,6 +7,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS}; use futures::future; use semver::Version; @@ -48,6 +49,7 @@ fn actionctx_pushaddonstoapi() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -135,6 +137,7 @@ fn actionctx_pushaddonstoapi_with_user() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/remove_from_library.rs b/src/unit_tests/ctx/remove_from_library.rs index feda4f14a..506e884e3 100644 --- a/src/unit_tests/ctx/remove_from_library.rs +++ b/src/unit_tests/ctx/remove_from_library.rs @@ -7,6 +7,7 @@ use crate::types::library::{LibraryBucket, LibraryItem}; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, NOW, REQUESTS, STORAGE, }; @@ -97,6 +98,7 @@ fn actionctx_removefromlibrary() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -182,6 +184,7 @@ fn actionctx_removefromlibrary_not_added() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/rewind_library_item.rs b/src/unit_tests/ctx/rewind_library_item.rs index a5ed4d012..508bbde89 100644 --- a/src/unit_tests/ctx/rewind_library_item.rs +++ b/src/unit_tests/ctx/rewind_library_item.rs @@ -7,6 +7,7 @@ use crate::types::library::{LibraryBucket, LibraryItem, LibraryItemState}; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, NOW, REQUESTS, STORAGE, }; @@ -103,6 +104,7 @@ fn actionctx_rewindlibraryitem() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -191,6 +193,7 @@ fn actionctx_rewindlibraryitem_not_added() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/sync_library_with_api.rs b/src/unit_tests/ctx/sync_library_with_api.rs index 8ed05719f..748e0c786 100644 --- a/src/unit_tests/ctx/sync_library_with_api.rs +++ b/src/unit_tests/ctx/sync_library_with_api.rs @@ -7,6 +7,7 @@ use crate::types::library::{LibraryBucket, LibraryItem}; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS, STORAGE, }; @@ -29,6 +30,7 @@ fn actionctx_synclibrarywithapi() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (runtime, _rx) = Runtime::::new(TestModel { ctx }, vec![], 1000); @@ -286,6 +288,7 @@ fn actionctx_synclibrarywithapi_with_user() { .into_iter() .collect(), }, + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -421,6 +424,7 @@ fn actionctx_synclibrarywithapi_with_user_empty_library() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/uninstall_addon.rs b/src/unit_tests/ctx/uninstall_addon.rs index b8d29658a..619e17d4a 100644 --- a/src/unit_tests/ctx/uninstall_addon.rs +++ b/src/unit_tests/ctx/uninstall_addon.rs @@ -8,6 +8,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Auth, AuthKey, GDPRConsent, Profile, User}; use crate::types::True; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS, STORAGE, }; @@ -57,6 +58,7 @@ fn actionctx_uninstalladdon() { ctx: Ctx::new( profile, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -166,7 +168,7 @@ fn actionctx_uninstalladdon_with_user() { TestModel { ctx: Ctx::new( profile, - LibraryBucket::default(), + LibraryBucket::default(),StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -256,7 +258,7 @@ fn actionctx_uninstalladdon_protected() { TestModel { ctx: Ctx::new( profile, - LibraryBucket::default(), + LibraryBucket::default(),StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -329,7 +331,7 @@ fn actionctx_uninstalladdon_not_installed() { TestModel { ctx: Ctx::new( profile, - LibraryBucket::default(), + LibraryBucket::default(),StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/update_settings.rs b/src/unit_tests/ctx/update_settings.rs index c127a1f75..1ecdaee38 100644 --- a/src/unit_tests/ctx/update_settings.rs +++ b/src/unit_tests/ctx/update_settings.rs @@ -5,6 +5,7 @@ use crate::runtime::{Runtime, RuntimeAction}; use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::{Profile, Settings}; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{TestEnv, REQUESTS, STORAGE}; use stremio_derive::Model; @@ -24,6 +25,7 @@ fn actionctx_updatesettings() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); let (runtime, _rx) = Runtime::::new(TestModel { ctx }, vec![], 1000); @@ -80,6 +82,7 @@ fn actionctx_updatesettings_not_changed() { ctx: Ctx::new( profile, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/ctx/upgrade_addon.rs b/src/unit_tests/ctx/upgrade_addon.rs index cead9647a..42d7d41fd 100644 --- a/src/unit_tests/ctx/upgrade_addon.rs +++ b/src/unit_tests/ctx/upgrade_addon.rs @@ -6,6 +6,7 @@ use crate::types::addon::{Descriptor, Manifest}; use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::Profile; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{TestEnv, REQUESTS, STORAGE}; use semver::Version; use stremio_derive::Model; @@ -84,6 +85,7 @@ fn actionctx_addon_upgrade() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, @@ -173,6 +175,7 @@ fn actionctx_addon_upgrade_fail_due_to_different_url() { ..Default::default() }, LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), }, diff --git a/src/unit_tests/data_export.rs b/src/unit_tests/data_export.rs index 563d6960b..ab56f63a4 100644 --- a/src/unit_tests/data_export.rs +++ b/src/unit_tests/data_export.rs @@ -8,6 +8,7 @@ use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::Profile; use crate::types::profile::{Auth, AuthKey, User}; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{ default_fetch_handler, Request, TestEnv, EVENTS, FETCH_HANDLER, REQUESTS, STATES, }; @@ -51,6 +52,7 @@ fn data_export_with_user() { let mut ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); ctx.profile.auth = Some(Auth { @@ -130,6 +132,7 @@ fn data_export_without_a_user() { let ctx = Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ); diff --git a/src/unit_tests/link.rs b/src/unit_tests/link.rs index 712a403b7..55849663c 100644 --- a/src/unit_tests/link.rs +++ b/src/unit_tests/link.rs @@ -7,6 +7,7 @@ use crate::types::api::{APIResult, LinkAuthKey, LinkCodeResponse, LinkDataRespon use crate::types::library::LibraryBucket; use crate::types::notifications::NotificationsBucket; use crate::types::profile::Profile; +use crate::types::streams::StreamsBucket; use crate::unit_tests::{default_fetch_handler, Request, TestEnv, FETCH_HANDLER, REQUESTS}; use futures::future; use std::any::Any; @@ -59,6 +60,7 @@ fn create_link_code() { ctx: Ctx::new( Profile::default(), LibraryBucket::default(), + StreamsBucket::default(), NotificationsBucket::new::(None, vec![]), ), link: Link::default(),