feat(demo-app): demo.sonicjs.com app with auto-reseed #1286
Annotations
10 errors and 3 warnings
|
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — happy path (credentials present) > graphql_error: logs warning when GraphQL request fails (non-200):
packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L168
AssertionError: expected "warn" to be called with arguments: [ …(2) ]
Number of calls: 0
❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:168:18
|
|
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — happy path (credentials present) > ok: logs reconciliation result when rows are returned and updated:
packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L152
AssertionError: expected "log" to be called with arguments: [ StringContaining{…}, …(1) ]
Number of calls: 0
❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:152:17
|
|
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — happy path (credentials present) > no_rows: logs the no_rows outcome when GraphQL returns empty array (#701 observability):
packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L130
AssertionError: expected "log" to be called at least once
❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:130:17
|
|
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — credential check > logs and skips when EMAIL_API_TOKEN is missing:
packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L79
AssertionError: expected "warn" to be called with arguments: [ StringContaining{…}, …(1) ]
Number of calls: 0
❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:79:18
|
|
src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts > onCronTick — credential check > logs and skips when CF_ZONE_ID is missing:
packages/core/src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts#L62
AssertionError: expected "warn" to be called with arguments: [ StringContaining{…}, …(1) ]
Number of calls: 0
❯ src/plugins/core-plugins/email-plugin/hooks/on-cron-tick.test.ts:62:18
|
|
src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts:
packages/core/src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts#L18
Error: Cannot find module '../../../../services/email-service-singleton' imported from /home/runner/work/sonicjs/sonicjs/packages/core/src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts
❯ src/plugins/core-plugins/email-plugin/__tests__/integration.test.ts:18:1
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Serialized Error: { code: 'ERR_MODULE_NOT_FOUND' }
|
|
src/__tests__/routes/api-content-crud-documents.integration.test.ts > api-content-crud → documents (decommission step) > PUT saves a new draft and republishes it:
packages/core/src/__tests__/routes/api-content-crud-documents.integration.test.ts#L70
AssertionError: expected 1 to be 2 // Object.is equality
- Expected
+ Received
- 2
+ 1
❯ src/__tests__/routes/api-content-crud-documents.integration.test.ts:70:98
|
|
src/__tests__/routes/admin-content-docbacked.integration.test.ts > admin-content Option B (document-backed blog_post) — integration > does NOT offer internal/auth-owned types on the new-content collection selector:
packages/core/src/__tests__/routes/admin-content-docbacked.integration.test.ts#L170
AssertionError: expected '\n <!DOCTYPE html>\n <h…' not to contain '?collection=media_asset'
- Expected
+ Received
- ?collection=media_asset
+
+ <!DOCTYPE html>
+ <html>
+ <head>
+ <title>Select Collection - SonicJS AI Admin</title>
+ <script src="https://cdn.tailwindcss.com"></script>
+ </head>
+ <body class="bg-gray-900 text-white">
+ <div class="min-h-screen flex items-center justify-center">
+ <div class="max-w-2xl w-full mx-auto p-8">
+ <h1 class="text-3xl font-bold mb-8 text-center">Create New Content</h1>
+ <p class="text-gray-300 text-center mb-8">Select a collection to create content in:</p>
+
+ <div class="grid gap-4">
+
+ <a href="/admin/content/new?collection=blog_post"
+ class="block p-6 bg-gray-800 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700">
+ <h3 class="text-xl font-semibold mb-2">Blog Post</h3>
+ <p class="text-gray-400">Blog post (document-backed; edited via the content collection UI)</p>
+ </a>
+
+ <a href="/admin/content/new?collection=media_asset"
+ class="block p-6 bg-gray-800 rounded-lg hover:bg-gray-700 transition-colors border border-gray-700">
+ <h3 class="text-xl font-semibold mb-2">Media Asset</h3>
+ <p class="text-gray-400">Media file metadata (R2 object key + intrinsic properties; URL derived at read time)</p>
+ </a>
+
+ </div>
+
+ <div class="mt-8 text-center">
+ <a href="/admin/content" class="text-blue-400 hover:text-blue-300">← Back to Content List</a>
+ </div>
+ </div>
+ </div>
+ </body>
+ </html>
+
❯ src/__tests__/routes/admin-content-docbacked.integration.test.ts:170:28
|
|
src/__tests__/routes/admin-content-docbacked.integration.test.ts > admin-content Option B (document-backed blog_post) — integration > does NOT offer internal/auth-owned types as content models in the filter dropdown:
packages/core/src/__tests__/routes/admin-content-docbacked.integration.test.ts#L158
AssertionError: expected '<!DOCTYPE html>\n<html lang="en" clas…' not to contain 'value="media_asset"'
- Expected
+ Received
- value="media_asset"
+ <!DOCTYPE html>
+ <html lang="en" class="dark">
+ <head>
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Content Management - SonicJS AI Admin</title>
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
+
+ <!-- Tailwind CSS -->
+ <script src="https://cdn.tailwindcss.com"></script>
+ <script>
+ tailwind.config = {
+ darkMode: 'class',
+ theme: {
+ extend: {
+ colors: {
+ zinc: {
+ 50: '#fafafa',
+ 100: '#f4f4f5',
+ 200: '#e4e4e7',
+ 300: '#d4d4d8',
+ 400: '#a1a1aa',
+ 500: '#71717a',
+ 600: '#52525b',
+ 700: '#3f3f46',
+ 800: '#27272a',
+ 900: '#18181b',
+ 950: '#09090b'
+ }
+ }
+ }
+ }
+ }
+ </script>
+
+ <!-- Additional Styles -->
+ <style>
+ @import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap');
+
+ * {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+ }
+
+ body {
+ font-family: 'Inter', system-ui, -apple-system, sans-serif;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ }
+
+ /* Custom scrollbar */
+ ::-webkit-scrollbar {
+ width: 8px;
+ height: 8px;
+ }
+
+ ::-webkit-scrollbar-track {
+ background: #27272a;
+ }
+
+ ::-webkit-scrollbar-thumb {
+ background: #52525b;
+ border-radius: 4px;
+ }
+
+ ::-webkit-scrollbar-thumb:hover {
+ background: #71717a;
+ }
+
+ /* Smooth transitions */
+ * {
+ transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
+ transition-duration: 150ms;
+ }
+ .plugins-closed [data-plugins-submenu] { display: none; }
+ </style>
+ <!-- Restore plugins submenu state before first paint (no flash) -->
+ <script>(function(){try{var c=document.cookie.split(';').reduce(function(v,p){var t=p.trim().split('=');return t[0]==='plugins_menu_open'?t[1]:v;},null);if(c==='0'){document.documentElement.classList.add('plugins-closed');document.addEventListener('DOMContentLoaded',function(){var ch=document.querySelector('[data-plugins-chevron]');if(ch)ch.classList.remove('rotate-180');});};}catch(e){}})();</script>
+
+ <!-- Scripts -->
+ <script src="https://unpkg.com/htmx.org@2.0.3"></script>
+ <script src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js" defer></script>
+ <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
+
+ <!-- CSRF: Auto-attach token to all HTMX and fetch requests -->
+ <script>
+ function getCsrfToken() {
+ var cookie = document.cookie.split('; ')
+ .find(function(row) { return row.startsWith('csrf_token='); });
+ return cookie ? cookie.substring(cookie.indexOf('=') + 1) : '';
+ }
+
+ document.addEventListener('htmx:configRequest', function(event) {
+ var token = getCsrfToken();
+ if (token) {
+ event.detail.headers['X-CSRF-Token'] = token;
+ }
+ });
+
+ (function() {
+ var originalFetch = window.fetch;
+ window.fetch = function(url, options) {
+ options = options || {};
+ var method = (options.method || 'GET').toUpperCase();
+ if (method !== 'GET' && method !== 'HEAD' && method !== 'OPTIONS') {
+ options.headers = options.headers || {};
+ if (options.headers instanceof Headers) {
+ if (!options.headers.has('X-CSRF-Token')) {
+ options.headers.set('X-CSRF-Token', getCsrfToken());
+ }
+ } else if (!Array.isArray(options.headers) && !options.headers['X-CSRF
|
|
src/__tests__/routes/admin-content-docbacked.integration.test.ts > admin-content Option B (document-backed blog_post) — integration > update creates a new version and republishes it (v2 becomes the live revision):
packages/core/src/__tests__/routes/admin-content-docbacked.integration.test.ts#L124
AssertionError: expected 1 to be 2 // Object.is equality
- Expected
+ Received
- 2
+ 1
❯ src/__tests__/routes/admin-content-docbacked.integration.test.ts:124:94
|
|
test
Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/checkout@v4, actions/setup-node@v4, actions/upload-artifact@v4. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/
|
|
test
No files were found with the provided path: test-results/**/*.webm
playwright-report/**/*.webm. No artifacts will be uploaded.
|
|
test
No files were found with the provided path: playwright-report/. No artifacts will be uploaded.
|