#![cfg(feature = "integration")]
mod common;
use viewpoint_core::{Cookie, DocumentLoadState};
#[tokio::test]
async fn test_storage_state() {
common::init_tracing();
let (browser, context, page) = common::launch_with_page().await;
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
let state = context
.storage_state()
.await
.expect("Failed to get storage state");
let _ = state.cookies;
let _ = state.origins;
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_storage_state_succeeds_after_page_close() {
common::init_tracing();
let browser = common::launch_browser().await;
let context = browser
.new_context()
.await
.expect("Failed to create context");
let mut page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
page.close().await.expect("Failed to close page");
let state = context
.storage_state()
.await
.expect("storage_state() should succeed after closing page");
let _ = state.cookies;
let _ = state.origins;
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_storage_state_cookies_after_all_pages_closed() {
common::init_tracing();
let browser = common::launch_browser().await;
let context = browser
.new_context()
.await
.expect("Failed to create context");
let mut page = context.new_page().await.expect("Failed to create page");
page.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate");
context
.add_cookies(vec![
Cookie::new("test_cookie", "test_value").domain("example.com"),
])
.await
.expect("Failed to add cookie");
page.close().await.expect("Failed to close page");
let state = context
.storage_state()
.await
.expect("storage_state() should succeed after closing page");
assert!(!state.cookies.is_empty(), "Should have cookies");
browser.close().await.expect("Failed to close browser");
}
#[tokio::test]
async fn test_storage_state_with_multiple_pages_some_closed() {
common::init_tracing();
let browser = common::launch_browser().await;
let context = browser
.new_context()
.await
.expect("Failed to create context");
let mut page1 = context.new_page().await.expect("Failed to create page 1");
page1
.goto("https://example.com")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate page 1");
let page2 = context.new_page().await.expect("Failed to create page 2");
page2
.goto("https://httpbin.org/html")
.wait_until(DocumentLoadState::DomContentLoaded)
.goto()
.await
.expect("Failed to navigate page 2");
page1.close().await.expect("Failed to close page 1");
let state = context
.storage_state()
.await
.expect("storage_state() should succeed with remaining pages");
let _ = state.cookies;
let _ = state.origins;
browser.close().await.expect("Failed to close browser");
}