mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 07:52:24 +00:00
92 lines
3.3 KiB
Python
92 lines
3.3 KiB
Python
from playwright.sync_api import sync_playwright
|
|
import time
|
|
|
|
def verify_moderation_dom(page):
|
|
print("Navigating to app...")
|
|
page.goto("http://localhost:8080")
|
|
|
|
# Wait for the app to initialize
|
|
print("Waiting for #videoList...")
|
|
page.wait_for_selector("#videoList", timeout=30000)
|
|
|
|
# Inject logic to manipulate DOM directly to verify structure
|
|
# This bypasses the need for the app logic to work perfectly in this headless environment
|
|
# We just want to ensure the HTML structure and CSS are correct.
|
|
print("Manipulating DOM to show modal...")
|
|
page.evaluate("""
|
|
const modal = document.getElementById('playerModal');
|
|
modal.classList.remove('hidden');
|
|
modal.removeAttribute('hidden');
|
|
document.body.classList.add('modal-open');
|
|
|
|
// Find the moderation bar and show it
|
|
const bar = modal.querySelector('[data-moderation-bar]');
|
|
if (bar) {
|
|
bar.removeAttribute('hidden');
|
|
// Force text
|
|
const text = bar.querySelector('[data-moderation-text]');
|
|
if (text) text.textContent = "BLOCKED TEST";
|
|
}
|
|
|
|
// Blur the video container
|
|
const stage = modal.querySelector('.video-modal__video');
|
|
if (stage) {
|
|
stage.dataset.visualState = 'blurred';
|
|
}
|
|
""")
|
|
|
|
time.sleep(1)
|
|
page.screenshot(path="verification/1_forced_blocked.png")
|
|
print("Screenshot 1 taken: Forced Blocked state")
|
|
|
|
# Verify structure: Bar should be strictly before Video container
|
|
# .video-modal__moderation-bar should be previous sibling of .video-modal__video (ignoring text nodes/comments if any, but in flex column gap-6)
|
|
|
|
# Actually, they are siblings in .video-modal__stage (or primary)
|
|
# Let's check their order via bounding box
|
|
|
|
bar_bbox = page.locator("[data-moderation-bar]").bounding_box()
|
|
video_bbox = page.locator(".video-modal__video").bounding_box()
|
|
|
|
if bar_bbox and video_bbox:
|
|
print(f"Bar Y: {bar_bbox['y']}, Video Y: {video_bbox['y']}")
|
|
if bar_bbox['y'] < video_bbox['y']:
|
|
print("SUCCESS: Moderation bar is above the video.")
|
|
else:
|
|
print("FAILURE: Moderation bar is NOT above the video.")
|
|
else:
|
|
print("FAILURE: Could not find bounding boxes.")
|
|
|
|
# Now simulate "Show Anyway" -> Remove blur but KEEP bar
|
|
print("Simulating 'Show Anyway'...")
|
|
page.evaluate("""
|
|
const modal = document.getElementById('playerModal');
|
|
// Unblur
|
|
const stage = modal.querySelector('.video-modal__video');
|
|
if (stage) {
|
|
delete stage.dataset.visualState;
|
|
}
|
|
// Bar stays visible!
|
|
// (No action needed as it is already visible, but we verify it stays)
|
|
""")
|
|
|
|
time.sleep(1)
|
|
page.screenshot(path="verification/2_forced_shown.png")
|
|
print("Screenshot 2 taken: Forced Shown state")
|
|
|
|
bar_visible = page.locator("[data-moderation-bar]").is_visible()
|
|
if bar_visible:
|
|
print("SUCCESS: Moderation bar remains visible after unblurring.")
|
|
else:
|
|
print("FAILURE: Moderation bar disappeared.")
|
|
|
|
with sync_playwright() as p:
|
|
browser = p.chromium.launch(headless=True)
|
|
page = browser.new_page()
|
|
try:
|
|
verify_moderation_dom(page)
|
|
except Exception as e:
|
|
print(f"Verification failed: {e}")
|
|
finally:
|
|
browser.close()
|