61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
QwenPaw Plugin Manager end-to-end tests.
|
|
|
|
UI-driven only: any pure API/contract checks for the Plugin Manager
|
|
endpoints belong in ``tests/integration/`` (which already covers them).
|
|
|
|
Cases:
|
|
- PLUGIN-001 P0 test_plugin_manager_page_loads
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
import pytest
|
|
from playwright.sync_api import expect
|
|
|
|
from pages.plugin_page import PluginPage
|
|
from utils.helpers import log_test_step, log_test_result
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
# ============================================================================
|
|
# PLUGIN-001 P0 — Plugin Manager page loads
|
|
# ============================================================================
|
|
|
|
@pytest.mark.integration
|
|
@pytest.mark.p0
|
|
@pytest.mark.plugins
|
|
class TestPluginManagerPageLoads:
|
|
"""PLUGIN-001: /plugin-manager renders header, install button, two tabs."""
|
|
|
|
@pytest.mark.test_id("PLUGIN-001")
|
|
def test_plugin_manager_page_loads(
|
|
self,
|
|
plugin_page: PluginPage,
|
|
request: pytest.FixtureRequest,
|
|
) -> None:
|
|
test_name = request.node.name
|
|
|
|
log_test_step("1. Navigate to /plugin-manager")
|
|
plugin_page.open()
|
|
|
|
log_test_step("2. 'Install Plugin' button visible (page-ready signal)")
|
|
expect(
|
|
plugin_page.page.locator(plugin_page.INSTALL_BTN).first
|
|
).to_be_visible(timeout=plugin_page.timeout)
|
|
|
|
log_test_step("3. 'Installed' and 'Official' tabs both visible")
|
|
expect(
|
|
plugin_page.page.locator(plugin_page.TAB_INSTALLED).first
|
|
).to_be_visible(timeout=plugin_page.timeout)
|
|
expect(
|
|
plugin_page.page.locator(plugin_page.TAB_OFFICIAL).first
|
|
).to_be_visible(timeout=plugin_page.timeout)
|
|
|
|
log_test_result(test_name, True, 0)
|
|
logger.info(f"Test {test_name} passed")
|