mirror of https://github.com/buster-so/buster.git
143 lines
5.5 KiB
Rust
143 lines
5.5 KiB
Rust
// Tests for public sharing parameter fixes
|
|
// Integration tests for public sharing parameters
|
|
use anyhow::Result;
|
|
use chrono::{Duration, Utc};
|
|
use database::{
|
|
enums::AssetPermissionRole,
|
|
helpers::{
|
|
metric_files::fetch_metric_file_with_permissions,
|
|
dashboard_files::fetch_dashboard_file_with_permission,
|
|
},
|
|
pool::get_pg_pool,
|
|
};
|
|
use handlers::metrics::sharing::{update_metric_sharing_handler, UpdateMetricSharingRequest, ShareRecipient as MetricShareRecipient};
|
|
use handlers::dashboards::sharing::{update_dashboard_sharing_handler, UpdateDashboardSharingRequest};
|
|
use middleware::AuthenticatedUser;
|
|
use sharing::types::UpdateField;
|
|
use uuid::Uuid;
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Integration test requires database test infrastructure"]
|
|
async fn test_metric_public_updates() -> Result<()> {
|
|
// This test verifies that public sharing updates work correctly for metrics
|
|
// It's marked as ignored since it requires the database test infrastructure
|
|
|
|
// Test cases include:
|
|
// 1. Make public with password and expiry
|
|
// 2. Remove password but keep public
|
|
// 3. Make private
|
|
// 4. Clear all public settings
|
|
|
|
// Since we're not running the actual test, just make sure the request structs work correctly
|
|
let expiry_date = Utc::now() + Duration::days(7);
|
|
let _request = UpdateMetricSharingRequest {
|
|
users: None,
|
|
publicly_accessible: Some(true),
|
|
public_password: UpdateField::Update("secretpass123".to_string()),
|
|
public_expiry_date: UpdateField::Update(expiry_date),
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Integration test requires database test infrastructure"]
|
|
async fn test_dashboard_public_updates() -> Result<()> {
|
|
// This test verifies that public sharing updates work correctly for dashboards
|
|
// It's marked as ignored since it requires the database test infrastructure
|
|
|
|
// Test cases include:
|
|
// 1. Make public with expiry but no password
|
|
// 2. Add password to public dashboard
|
|
// 3. Update expiry only
|
|
// 4. Make private but keep password and expiry
|
|
// 5. Clear all public settings
|
|
|
|
// Since we're not running the actual test, just make sure the request structs work correctly
|
|
let expiry_date = Utc::now() + Duration::days(7);
|
|
let _request = UpdateDashboardSharingRequest {
|
|
users: None,
|
|
publicly_accessible: Some(true), // Make public
|
|
public_password: UpdateField::NoChange, // Don't set password
|
|
public_expiry_date: UpdateField::Update(expiry_date), // Set expiry
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Integration test requires database test infrastructure"]
|
|
async fn test_public_update_edge_cases() -> Result<()> {
|
|
// This test verifies edge cases for public sharing updates
|
|
// It's marked as ignored since it requires the database test infrastructure
|
|
|
|
// Test cases include:
|
|
// 1. Make public with expired date (should fail)
|
|
// 2. Update with empty password (should fail)
|
|
|
|
// Since we're not running the actual test, just make sure the request structs work correctly
|
|
let _past_date_request = UpdateMetricSharingRequest {
|
|
users: None,
|
|
publicly_accessible: Some(true),
|
|
public_password: UpdateField::NoChange,
|
|
public_expiry_date: UpdateField::Update(Utc::now() - Duration::days(1)), // Past date
|
|
};
|
|
|
|
let _empty_password_request = UpdateMetricSharingRequest {
|
|
users: None,
|
|
publicly_accessible: Some(true),
|
|
public_password: UpdateField::Update("".to_string()), // Empty password
|
|
public_expiry_date: UpdateField::NoChange,
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Integration test requires database test infrastructure"]
|
|
async fn test_public_update_permissions() -> Result<()> {
|
|
// This test verifies permission checks for public sharing updates
|
|
// It's marked as ignored since it requires the database test infrastructure
|
|
|
|
// Test cases include:
|
|
// 1. Try to make public with viewer account (should fail)
|
|
|
|
// Since we're not running the actual test, just make sure the request structs work correctly
|
|
let _request = UpdateMetricSharingRequest {
|
|
users: None,
|
|
publicly_accessible: Some(true), // Attempt to make public
|
|
public_password: UpdateField::NoChange,
|
|
public_expiry_date: UpdateField::NoChange,
|
|
};
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore = "Integration test requires database test infrastructure"]
|
|
async fn test_sharing_with_users() -> Result<()> {
|
|
// This test verifies that sharing with users and public settings can be updated together
|
|
// It's marked as ignored since it requires the database test infrastructure
|
|
|
|
// Test cases include:
|
|
// 1. Share with users while also updating public settings
|
|
|
|
// Since we're not running the actual test, just make sure the request structs work correctly
|
|
let _request = UpdateMetricSharingRequest {
|
|
users: Some(vec![
|
|
MetricShareRecipient {
|
|
email: "test-user1@example.com".to_string(),
|
|
role: AssetPermissionRole::CanView, // Read-only access
|
|
},
|
|
MetricShareRecipient {
|
|
email: "test-user2@example.com".to_string(),
|
|
role: AssetPermissionRole::CanEdit, // Edit access
|
|
},
|
|
]),
|
|
publicly_accessible: Some(true), // Also make public
|
|
public_password: UpdateField::Update("shared-password".to_string()), // With password
|
|
public_expiry_date: UpdateField::Update(Utc::now() + Duration::days(30)), // And expiry
|
|
};
|
|
|
|
Ok(())
|
|
} |