198 lines
6.6 KiB
Rust
198 lines
6.6 KiB
Rust
use galaxy_core::ui::appearance::Appearance;
|
|
use galaxyui::platform::WindowStyle;
|
|
use galaxyui::{App, ViewHandle};
|
|
|
|
use crate::auth::AuthStateProvider;
|
|
use crate::cloud_object::model::actions::ObjectActions;
|
|
use crate::cloud_object::model::persistence::CloudModel;
|
|
use crate::cloud_object::model::view::CloudViewModel;
|
|
use crate::env_vars::active_env_var_collection_data::SavingStatus;
|
|
use crate::env_vars::view::env_var_collection::EnvVarCollectionView;
|
|
use crate::network::NetworkStatus;
|
|
use crate::server::cloud_objects::update_manager::UpdateManager;
|
|
use crate::server::server_api::ServerApiProvider;
|
|
use crate::server::sync_queue::SyncQueue;
|
|
use crate::settings_view::keybindings::KeybindingChangedNotifier;
|
|
use crate::test_util::settings::initialize_settings_for_tests;
|
|
use crate::workspace::ActiveSession;
|
|
use crate::workspaces::team_tester::TeamTesterStatus;
|
|
use crate::workspaces::user_profiles::UserProfiles;
|
|
use crate::workspaces::user_workspaces::UserWorkspaces;
|
|
use crate::{GlobalResourceHandles, GlobalResourceHandlesProvider};
|
|
|
|
fn initialize_app(app: &mut App) {
|
|
initialize_settings_for_tests(app);
|
|
|
|
let global_resources = GlobalResourceHandles::mock(app);
|
|
app.add_singleton_model(|_| GlobalResourceHandlesProvider::new(global_resources));
|
|
app.add_singleton_model(CloudModel::mock);
|
|
app.add_singleton_model(|_| NetworkStatus::new());
|
|
app.add_singleton_model(|_| Appearance::mock());
|
|
|
|
app.add_singleton_model(UserWorkspaces::default_mock);
|
|
app.add_singleton_model(SyncQueue::mock);
|
|
app.add_singleton_model(TeamTesterStatus::mock);
|
|
app.add_singleton_model(UpdateManager::mock);
|
|
app.add_singleton_model(CloudViewModel::mock);
|
|
app.add_singleton_model(|_| UserProfiles::new(vec![]));
|
|
app.add_singleton_model(|_| ServerApiProvider::new_for_test());
|
|
app.add_singleton_model(|_| ActiveSession::default());
|
|
app.add_singleton_model(|_| ObjectActions::new(Vec::new()));
|
|
app.add_singleton_model(|_| KeybindingChangedNotifier::mock());
|
|
app.add_singleton_model(|_| AuthStateProvider::new_for_test());
|
|
|
|
#[cfg(feature = "voice_input")]
|
|
app.add_singleton_model(voice_input::VoiceInput::new);
|
|
}
|
|
|
|
fn create_env_var_collection_view(app: &mut App) -> ViewHandle<EnvVarCollectionView> {
|
|
initialize_app(app);
|
|
let (_, env_var_collection_view) = app.add_window(WindowStyle::NotStealFocus, |ctx| {
|
|
EnvVarCollectionView::new(ctx)
|
|
});
|
|
|
|
env_var_collection_view
|
|
}
|
|
|
|
#[test]
|
|
fn test_variable_row_addition_and_removal() {
|
|
App::test((), |mut app| async move {
|
|
let env_var_collection_view = create_env_var_collection_view(&mut app);
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.open_new_env_var_collection(
|
|
crate::cloud_object::Owner::mock_current_user(),
|
|
None,
|
|
ctx,
|
|
);
|
|
});
|
|
|
|
// New EVCs should open with a new row
|
|
env_var_collection_view.read(&app, |view, _| {
|
|
assert_eq!(view.variable_rows.len(), 1);
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.add_variable_row(ctx);
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.variable_rows[1]
|
|
.variable_description_editor
|
|
.update(ctx, |editor, ctx| {
|
|
editor.set_buffer_text("description for foo_1", ctx);
|
|
});
|
|
|
|
view.delete_row(0, ctx);
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert_eq!(view.variable_rows.len(), 1);
|
|
assert_eq!(
|
|
view.variable_rows[0]
|
|
.variable_description_editor
|
|
.as_ref(ctx)
|
|
.buffer_text(ctx),
|
|
"description for foo_1".to_owned()
|
|
)
|
|
});
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn test_saving_status() {
|
|
App::test((), |mut app| async move {
|
|
let env_var_collection_view = create_env_var_collection_view(&mut app);
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert_eq!(
|
|
view.active_env_var_collection_data
|
|
.as_ref(ctx)
|
|
.saving_status,
|
|
SavingStatus::Saved
|
|
);
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.add_variable_row(ctx);
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert_eq!(
|
|
view.active_env_var_collection_data
|
|
.as_ref(ctx)
|
|
.saving_status,
|
|
SavingStatus::Unsaved
|
|
);
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.active_env_var_collection_data.update(ctx, |data, _| {
|
|
data.saving_status = SavingStatus::Saved;
|
|
})
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.delete_row(0, ctx);
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert_eq!(
|
|
view.active_env_var_collection_data
|
|
.as_ref(ctx)
|
|
.saving_status,
|
|
SavingStatus::Unsaved
|
|
);
|
|
});
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn test_should_disable_save() {
|
|
App::test((), |mut app| async move {
|
|
let env_var_collection_view = create_env_var_collection_view(&mut app);
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert!(view.should_disable_save(ctx));
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.add_variable_row(ctx);
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert!(view.should_disable_save(ctx));
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.variable_rows[0]
|
|
.variable_name_editor
|
|
.update(ctx, |editor, ctx| {
|
|
editor.set_buffer_text("Test", ctx);
|
|
});
|
|
|
|
view.variable_rows[0]
|
|
.variable_value_editor
|
|
.update(ctx, |editor, ctx| {
|
|
editor.set_buffer_text("Test", ctx);
|
|
})
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert!(!view.should_disable_save(ctx));
|
|
});
|
|
|
|
env_var_collection_view.update(&mut app, |view, ctx| {
|
|
view.variable_rows[0]
|
|
.variable_value_editor
|
|
.update(ctx, |editor, ctx| {
|
|
editor.clear_buffer(ctx);
|
|
})
|
|
});
|
|
|
|
env_var_collection_view.read(&app, |view, ctx| {
|
|
assert!(view.should_disable_save(ctx));
|
|
});
|
|
});
|
|
}
|