Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,121 @@
|
||||
use serde_json::Value;
|
||||
use warpui::{App, SingletonEntity};
|
||||
|
||||
use super::Prompt;
|
||||
use crate::auth::AuthStateProvider;
|
||||
use crate::settings::WarpPromptSeparator;
|
||||
use crate::test_util::settings::initialize_settings_for_tests;
|
||||
use crate::workspaces::user_workspaces::UserWorkspaces;
|
||||
use crate::{
|
||||
context_chips::{
|
||||
prompt::{PromptConfiguration, PromptSelection},
|
||||
ContextChipKind,
|
||||
},
|
||||
terminal::session_settings::SessionSettings,
|
||||
};
|
||||
|
||||
fn initialize_app(app: &mut App) {
|
||||
initialize_settings_for_tests(app);
|
||||
app.add_singleton_model(UserWorkspaces::default_mock);
|
||||
app.add_singleton_model(|_| AuthStateProvider::new_for_test());
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Legacy prompt configs do not have git diff stats, so it should be added after normalization.
|
||||
// `did_separate_git_diff_stats` is set to `false`.
|
||||
fn test_prompt_config_adds_git_diff_stats_for_legacy_config() {
|
||||
let config = PromptConfiguration::from_chips(
|
||||
[
|
||||
ContextChipKind::WorkingDirectory,
|
||||
ContextChipKind::ShellGitBranch,
|
||||
],
|
||||
false,
|
||||
WarpPromptSeparator::None,
|
||||
);
|
||||
let mut serialized = serde_json::to_value(config).expect("serialize prompt config");
|
||||
|
||||
let Value::Object(ref mut map) = serialized else {
|
||||
panic!("expected object");
|
||||
};
|
||||
map.remove("did_separate_git_diff_stats");
|
||||
|
||||
let legacy_config: PromptConfiguration =
|
||||
serde_json::from_value(serialized).expect("deserialize legacy config");
|
||||
let normalized = legacy_config.normalize_custom_prompt_config();
|
||||
|
||||
assert_eq!(
|
||||
normalized.chip_kinds(),
|
||||
vec![
|
||||
ContextChipKind::WorkingDirectory,
|
||||
ContextChipKind::ShellGitBranch,
|
||||
ContextChipKind::GitDiffStats,
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Ensure that prompt configs don't re-insert git diff stats if they were explicitly removed.
|
||||
// `did_separate_git_diff_stats` is set to `true`.
|
||||
fn test_prompt_config_after_nomalization() {
|
||||
let config = PromptConfiguration::from_chips(
|
||||
[ContextChipKind::ShellGitBranch],
|
||||
false,
|
||||
WarpPromptSeparator::None,
|
||||
);
|
||||
let normalized = config.normalize_custom_prompt_config();
|
||||
|
||||
assert_eq!(
|
||||
normalized.chip_kinds(),
|
||||
vec![ContextChipKind::ShellGitBranch]
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_prompt_settings() {
|
||||
App::test((), |mut app| async move {
|
||||
initialize_app(&mut app);
|
||||
|
||||
let session_settings = SessionSettings::handle(&app);
|
||||
let default_prompt = PromptConfiguration::default_prompt();
|
||||
|
||||
let prompt = app.add_singleton_model(Prompt::new);
|
||||
|
||||
// First, the default prompt should be set.
|
||||
let current_prompt_chips = prompt.read(&app, |prompt, _| prompt.chip_kinds());
|
||||
assert_eq!(current_prompt_chips, default_prompt.chip_kinds());
|
||||
session_settings.read(&app, |settings, _| {
|
||||
assert_eq!(settings.saved_prompt.to_owned(), PromptSelection::Default)
|
||||
});
|
||||
|
||||
// Now, set a new prompt.
|
||||
let new_chips = [ContextChipKind::Ssh, ContextChipKind::WorkingDirectory];
|
||||
prompt.update(&mut app, |prompt, ctx| {
|
||||
prompt
|
||||
.update(new_chips.clone(), false, WarpPromptSeparator::None, ctx)
|
||||
.expect("Saving prompt failed")
|
||||
});
|
||||
|
||||
// The configuration should be updated both in-memory and in settings.
|
||||
let new_prompt_chips = prompt.read(&app, |prompt, _| prompt.chip_kinds());
|
||||
assert_eq!(
|
||||
new_prompt_chips,
|
||||
vec![ContextChipKind::Ssh, ContextChipKind::WorkingDirectory]
|
||||
);
|
||||
session_settings.read(&app, |settings, _| {
|
||||
assert_eq!(
|
||||
settings.saved_prompt.to_owned(),
|
||||
PromptConfiguration::from_chips(new_chips, false, WarpPromptSeparator::None).into()
|
||||
);
|
||||
});
|
||||
|
||||
// If we reset the prompt, settings are cleared.
|
||||
prompt.update(&mut app, |prompt, ctx| {
|
||||
prompt.reset(ctx).expect("Saving prompt failed");
|
||||
});
|
||||
let reset_prompt_chips = prompt.read(&app, |prompt, _| prompt.chip_kinds());
|
||||
assert_eq!(reset_prompt_chips, default_prompt.chip_kinds());
|
||||
session_settings.read(&app, |settings, _| {
|
||||
assert_eq!(settings.saved_prompt.to_owned(), PromptSelection::Default);
|
||||
});
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user