Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
use super::*;
|
||||
use anyhow::anyhow;
|
||||
use chrono::{TimeZone, Utc};
|
||||
|
||||
#[cfg(feature = "local_fs")]
|
||||
use crate::ai::artifact_download::default_download_filename;
|
||||
use crate::server::server_api::ai::{
|
||||
ArtifactDownloadCommonFields, FileArtifactResponseData, ScreenshotArtifactResponseData,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn test_parse_github_pr_url() {
|
||||
assert_eq!(
|
||||
parse_github_pr_url("https://github.com/owner/repo/pull/123"),
|
||||
Some(("repo".to_string(), 123))
|
||||
);
|
||||
assert_eq!(
|
||||
parse_github_pr_url("https://github.com/my-org/my-repo/pull/456"),
|
||||
Some(("my-repo".to_string(), 456))
|
||||
);
|
||||
assert_eq!(
|
||||
parse_github_pr_url("https://github.com/my-org/my-repo"),
|
||||
None
|
||||
);
|
||||
assert_eq!(parse_github_pr_url("not a url"), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn skips_lightbox_update_for_non_screenshot_artifact() {
|
||||
let image = screenshot_lightbox_image_from_download_result(
|
||||
Ok(ArtifactDownloadResponse::File {
|
||||
common: ArtifactDownloadCommonFields {
|
||||
artifact_uid: "artifact-123".to_string(),
|
||||
created_at: Utc.with_ymd_and_hms(2024, 1, 15, 10, 30, 0).unwrap(),
|
||||
},
|
||||
data: FileArtifactResponseData {
|
||||
download_url: "https://storage.example.com/report.txt".to_string(),
|
||||
expires_at: Utc.with_ymd_and_hms(2024, 1, 15, 11, 30, 0).unwrap(),
|
||||
content_type: "text/plain".to_string(),
|
||||
filepath: "outputs/report.txt".to_string(),
|
||||
filename: "report.txt".to_string(),
|
||||
description: Some("daily summary".to_string()),
|
||||
size_bytes: Some(42),
|
||||
},
|
||||
}),
|
||||
"artifact-123",
|
||||
0,
|
||||
);
|
||||
|
||||
assert!(image.is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn returns_failure_placeholder_for_screenshot_load_errors() {
|
||||
let image = screenshot_lightbox_image_from_download_result(
|
||||
Err(anyhow!("network error")),
|
||||
"artifact-123",
|
||||
0,
|
||||
)
|
||||
.expect("expected failure placeholder");
|
||||
|
||||
assert!(matches!(image.source, LightboxImageSource::Loading));
|
||||
assert_eq!(image.description.as_deref(), Some("Failed to load"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resolves_lightbox_image_for_screenshot_artifact() {
|
||||
let image = screenshot_lightbox_image_from_download_result(
|
||||
Ok(ArtifactDownloadResponse::Screenshot {
|
||||
common: ArtifactDownloadCommonFields {
|
||||
artifact_uid: "screenshot-123".to_string(),
|
||||
created_at: Utc.with_ymd_and_hms(2024, 1, 15, 10, 30, 0).unwrap(),
|
||||
},
|
||||
data: ScreenshotArtifactResponseData {
|
||||
download_url: "https://storage.example.com/screenshot.png".to_string(),
|
||||
expires_at: Utc.with_ymd_and_hms(2024, 1, 15, 11, 30, 0).unwrap(),
|
||||
content_type: "image/png".to_string(),
|
||||
description: Some("dashboard screenshot".to_string()),
|
||||
},
|
||||
}),
|
||||
"screenshot-123",
|
||||
0,
|
||||
)
|
||||
.expect("expected screenshot image");
|
||||
|
||||
assert!(matches!(image.source, LightboxImageSource::Resolved { .. }));
|
||||
assert_eq!(image.description.as_deref(), Some("dashboard screenshot"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file_button_label_prefers_filename() {
|
||||
assert_eq!(
|
||||
file_button_label("report.txt", "outputs/other.txt"),
|
||||
"report.txt"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file_button_label_falls_back_to_filepath_basename() {
|
||||
assert_eq!(file_button_label("", "outputs/report.txt"), "report.txt");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn file_button_label_falls_back_to_generic_label() {
|
||||
assert_eq!(file_button_label("", ""), "File");
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(feature = "local_fs")]
|
||||
fn default_download_filename_prefers_server_filename() {
|
||||
assert_eq!(
|
||||
default_download_filename(&ArtifactDownloadResponse::File {
|
||||
common: ArtifactDownloadCommonFields {
|
||||
artifact_uid: "artifact-123".to_string(),
|
||||
created_at: Utc.with_ymd_and_hms(2024, 1, 15, 10, 30, 0).unwrap(),
|
||||
},
|
||||
data: FileArtifactResponseData {
|
||||
download_url: "https://storage.example.com/report.txt".to_string(),
|
||||
expires_at: Utc.with_ymd_and_hms(2024, 1, 15, 11, 30, 0).unwrap(),
|
||||
content_type: "text/plain".to_string(),
|
||||
filepath: "outputs/report.txt".to_string(),
|
||||
filename: "report.txt".to_string(),
|
||||
description: Some("daily summary".to_string()),
|
||||
size_bytes: Some(42),
|
||||
},
|
||||
}),
|
||||
"report.txt"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(feature = "local_fs")]
|
||||
fn default_download_filename_falls_back_to_artifact_uid_with_extension() {
|
||||
assert_eq!(
|
||||
default_download_filename(&ArtifactDownloadResponse::File {
|
||||
common: ArtifactDownloadCommonFields {
|
||||
artifact_uid: "artifact-123".to_string(),
|
||||
created_at: Utc.with_ymd_and_hms(2024, 1, 15, 10, 30, 0).unwrap(),
|
||||
},
|
||||
data: FileArtifactResponseData {
|
||||
download_url: "https://storage.example.com/report.txt".to_string(),
|
||||
expires_at: Utc.with_ymd_and_hms(2024, 1, 15, 11, 30, 0).unwrap(),
|
||||
content_type: "text/plain".to_string(),
|
||||
filepath: "outputs/report.txt".to_string(),
|
||||
filename: "".to_string(),
|
||||
description: Some("daily summary".to_string()),
|
||||
size_bytes: Some(42),
|
||||
},
|
||||
}),
|
||||
"artifact-artifact-123.txt"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn converts_graphql_file_artifact() {
|
||||
let artifact = Artifact::try_from(warp_graphql::ai::AIConversationArtifact::FileArtifact(
|
||||
warp_graphql::ai::FileArtifact {
|
||||
artifact_uid: "artifact-file-1".into(),
|
||||
filepath: "outputs/report.txt".to_string(),
|
||||
mime_type: "text/plain".to_string(),
|
||||
description: Some("Daily summary".to_string()),
|
||||
size_bytes: Some(42),
|
||||
},
|
||||
))
|
||||
.expect("expected file artifact conversion");
|
||||
|
||||
assert_eq!(
|
||||
artifact,
|
||||
Artifact::File {
|
||||
artifact_uid: "artifact-file-1".to_string(),
|
||||
filepath: "outputs/report.txt".to_string(),
|
||||
filename: "report.txt".to_string(),
|
||||
mime_type: "text/plain".to_string(),
|
||||
description: Some("Daily summary".to_string()),
|
||||
size_bytes: Some(42),
|
||||
}
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user