File size: 10,203 Bytes
2b89d68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
"""
HTML Report Generator with modern, colorful UI
"""

import os
from datetime import datetime
from typing import Optional


def _base_html(title: str, body_html: str) -> str:
    return f"""
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>{title}</title>
  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap" rel="stylesheet">
  <style>
    :root {{
      --bg: #0f172a;
      --card: #111827;
      --text: #e5e7eb;
      --muted: #94a3b8;
      --primary: #06b6d4;
      --primary-2: #3b82f6;
      --ok: #22c55e;
      --warn: #f59e0b;
      --crit: #ef4444;
    }}
    * {{ box-sizing: border-box; }}
    body {{ margin: 0; font-family: Inter, system-ui, -apple-system, Segoe UI, Roboto, Arial; background: linear-gradient(180deg, #0b1022, #0f172a); color: var(--text); }}
    .container {{ max-width: 1080px; margin: 32px auto; padding: 0 16px; }}
    .header {{ background: radial-gradient(1200px 400px at 20% -10%, rgba(59,130,246,.25), transparent), radial-gradient(900px 400px at 80% 0%, rgba(6,182,212,.25), transparent); border-radius: 16px; padding: 24px; border: 1px solid rgba(255,255,255,.06); }}
    h1 {{ margin: 0 0 8px; font-size: 28px; font-weight: 700; letter-spacing: .3px; }}
    .meta {{ color: var(--muted); font-size: 13px; }}
    .grid {{ display: grid; gap: 16px; grid-template-columns: repeat(12, 1fr); margin-top: 24px; }}
    .card {{ grid-column: span 12; background: linear-gradient(180deg, #0f172a, #0b1324); border: 1px solid rgba(255,255,255,.06); border-radius: 14px; padding: 18px; }}
    @media (min-width: 900px) {{ .span-6 {{ grid-column: span 6; }} }}
    h2 {{ margin: 0 0 12px; font-size: 20px; font-weight: 700; color: #ffffff; }}
    h3 {{ margin: 16px 0 8px; font-size: 16px; font-weight: 700; color: #ffffff; }}
    p {{ color: var(--text); line-height: 1.6; margin: 8px 0; }}
    .status {{ display: inline-block; padding: 2px 8px; border-radius: 999px; font-size: 12px; font-weight: 600; margin-left: 8px; }}
    .ok {{ background: rgba(34,197,94,.12); color: var(--ok); border: 1px solid rgba(34,197,94,.3); }}
    .warn {{ background: rgba(245,158,11,.12); color: var(--warn); border: 1px solid rgba(245,158,11,.3); }}
    .crit {{ background: rgba(239,68,68,.12); color: var(--crit); border: 1px solid rgba(239,68,68,.3); }}
    ul {{ margin: 8px 0 8px 20px; color: var(--text); }}
    li {{ margin: 6px 0; }}
    .pill {{ display:inline-block; padding: 2px 10px; margin: 2px 6px 2px 0; border-radius: 999px; background: rgba(255,255,255,.06); color: var(--muted); font-size: 12px; }}
    .footer {{ margin-top: 24px; color: var(--muted); font-size: 12px; text-align: center; }}
    a {{ color: var(--primary-2); text-decoration: none; }}
    a:hover {{ text-decoration: underline; }}
  </style>
</head>
<body>
  <div class="container">
    <div class="header">
      <h1>{title}</h1>
      <div class="meta">Generated at {datetime.now().isoformat()}</div>
    </div>
    <div class="grid">
      {body_html}
    </div>
    <div class="footer">Fagun AI Testing Agent • Modern HTML Report</div>
  </div>
</body>
</html>
"""


def generate_html_report_file(title: str, body_html: str, output_dir: str = "reports", filename: Optional[str] = None) -> str:
    os.makedirs(output_dir, exist_ok=True)
    if not filename:
        filename = f"report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html"
    path = os.path.join(output_dir, filename)
    html = _base_html(title, body_html)
    with open(path, "w", encoding="utf-8") as f:
        f.write(html)
    return path


def generate_markopolo_sample_report() -> str:
    title = "Comprehensive Testing Report for Markopolo.ai Platform"
    # Body authored as HTML blocks for fidelity
    sections = [
        (
            "Executive Summary",
            """
            <p>I have conducted a comprehensive test of the Markopolo.ai platform, focusing on the onboarding process, data connections, integrations, and core modules. The testing revealed several critical issues that prevent full platform functionality, particularly with Shopify integration and data connectivity.</p>
            """,
        ),
        (
            "Test Results by Module",
            """
            <div class="card"><h3>1. Onboarding Process <span class="status warn">Partially Successful</span></h3>
              <ul>
                <li>✅ Successfully logged into the platform</li>
                <li>✅ Initial onboarding screen accessed</li>
                <li>❌ Onboarding process appeared to be skipped or completed automatically</li>
                <li>❌ No guided onboarding flow was experienced</li>
              </ul>
            </div>

            <div class="card"><h3>2. Dataroom & Data Container <span class="status warn">Mixed Results</span></h3>
              <h4>Client-side MarkTag</h4>
              <ul>
                <li>✅ Successfully connected and active</li>
                <li>✅ Basic setup completed without issues</li>
              </ul>
              <h4>Server-side MarkTag</h4>
              <ul>
                <li>❌ <b>Critical Failure</b>: DNS verification failed repeatedly</li>
                <li>❌ Unable to verify DNS records (CNAME and TXT records)</li>
                <li>❌ System consistently showed "Records failed to verify"</li>
                <li><b>Impact</b>: Server-side tracking capabilities unavailable</li>
              </ul>
            </div>

            <div class="card"><h3>3. Integrations <span class="status warn">Mixed Results</span></h3>
              <h4>Email Services</h4>
              <ul>
                <li>✅ <b>SendGrid</b>: Successfully connected using provided API key</li>
                <li>✅ <b>Resend</b>: Already connected and functional</li>
                <li>❌ <b>Twilio</b>: Failed to validate credentials despite multiple attempts<br/>Error: "Failed to save information!"</li>
              </ul>
              <h4>WhatsApp Integration</h4>
              <ul>
                <li>❌ <b>Critical Failure</b>: Unable to connect (dependent on Twilio)</li>
              </ul>
              <h4>CRM Integrations</h4>
              <ul>
                <li>✅ <b>HubSpot</b>: Connected</li>
                <li>✅ <b>Pipedrive</b>: Connected</li>
                <li>❌ <b>Salesforce</b>: Connection failed - no credentials</li>
                <li>❌ <b>Zoho CRM</b>: Connection failed - no credentials</li>
              </ul>
            </div>

            <div class="card"><h3>4. Shopify Integration <span class="status crit">Critical Failure</span></h3>
              <ul>
                <li>✅ Accessed Shopify connection interface</li>
                <li>✅ Entered test store URL: <code>testshop.myshopify.com</code></li>
                <li>✅ Navigated to Shopify login page</li>
                <li>❌ Unauthorized Access Error upon login attempt</li>
              </ul>
              <p><b>Impact</b>: Unable to test Shopify-specific flows (campaigns, discounts, event tracking).</p>
            </div>

            <div class="card"><h3>5. Users Module <span class="status warn">Partially Tested</span></h3>
              <ul>
                <li>✅ Accessed Users interface</li>
                <li>✅ Download template works</li>
                <li>❌ Unable to upload leads: File upload requires pre-defined file paths</li>
              </ul>
            </div>

            <div class="card"><h3>6. Audience Studio <span class="status warn">Functional but Limited</span></h3>
              <ul>
                <li>✅ Interface accessible</li>
                <li>❌ AI query failure prevented audience creation</li>
              </ul>
            </div>

            <div class="card"><h3>7. Analytics Module <span class="status warn">Limited Functionality</span></h3>
              <ul>
                <li>✅ Interface accessible</li>
                <li>❌ No data available; tracking not validated</li>
              </ul>
            </div>

            <div class="card"><h3>8. Knowledge Base <span class="status warn">Not Tested</span></h3>
              <ul><li>❌ Not located during testing</li></ul>
            </div>
            """,
        ),
        (
            "Critical Issues Identified",
            """
            <ul>
              <li><b>Shopify Integration</b> – <span class="status crit">Critical</span>: Unauthorized access blocking store connection</li>
              <li><b>Server-side MarkTag DNS</b> – <span class="status warn">High</span>: DNS verification failing</li>
              <li><b>Twilio Integration</b> – <span class="status warn">High</span>: Credential validation failing</li>
              <li><b>Data Connectivity</b> – <span class="status warn">Medium</span>: Multiple integration failures</li>
            </ul>
            """,
        ),
        (
            "Recommendations",
            """
            <ol>
              <li><b>Priority 1</b>: Resolve Shopify authentication issues</li>
              <li><b>Priority 1</b>: Fix Twilio credential validation</li>
              <li><b>Priority 2</b>: Address server-side MarkTag DNS verification</li>
              <li><b>Priority 2</b>: Improve error messaging and user guidance</li>
              <li><b>Priority 3</b>: Validate file upload flow with proper file handling</li>
            </ol>
            """,
        ),
        (
            "Conclusion",
            """
            <p><b>Overall Platform Readiness</b>: <span class="status warn">Limited</span> – key flows blocked by integration failures. Retest end-to-end journey after addressing blockers, especially Shopify.</p>
            """,
        ),
    ]

    body = "".join([f'<div class="card"><h2>{h}</h2>{c}</div>' for h, c in sections])
    return generate_html_report_file(title, body, output_dir="reports", filename=f"markopolo_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.html")