@nextsparkjs/theme-default 0.1.0-beta.38 β 0.1.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/ai-chat/ChatPanel.tsx +1 -1
- package/components/ai-chat/Message.tsx +1 -1
- package/components/ai-chat/MessageInput.tsx +1 -1
- package/components/ai-chat/MessageList.tsx +1 -1
- package/components/ai-chat/TypingIndicator.tsx +1 -1
- package/lib/selectors.ts +2 -3
- package/package.json +3 -2
- package/tests/cypress/e2e/api/_core/billing/BillingAPIController.js +1 -1
- package/tests/cypress/e2e/api/_core/settings/api-keys.crud.cy.ts +1 -1
- package/tests/cypress/e2e/api/_core/users/users-crud.cy.ts +1 -1
- package/tests/cypress/e2e/api/_core/users/users-metas.cy.ts +1 -1
- package/tests/cypress/e2e/api/entities/customers/customers-crud.cy.ts +1 -1
- package/tests/cypress/e2e/api/entities/customers/customers-metas.cy.ts +1 -1
- package/tests/cypress/e2e/api/entities/tasks/tasks-crud.cy.ts +1 -1
- package/tests/cypress/e2e/api/entities/tasks/tasks-metas.cy.ts +1 -1
- package/tests/cypress/e2e/uat/_core/teams/team-switcher.md +2 -2
- package/tests/cypress/src/core/BasePOM.ts +23 -76
- package/tests/cypress/src/core/DashboardEntityPOM.ts +17 -668
- package/tests/cypress/src/entities/TasksPOM.ts +70 -0
- package/tests/cypress/src/helpers/ApiInterceptor.ts +14 -171
- package/tests/cypress.config.ts +12 -17
- package/tests/cypress/e2e/_utils/docs/tutorials/sector7-superadmin-teams.narration.json +0 -155
- package/tests/cypress/e2e/_utils/docs/tutorials/sector7-superadmin.cy.ts +0 -390
- package/tests/cypress/e2e/_utils/docs/tutorials/teams-system.doc.cy.ts +0 -349
- package/tests/cypress/e2e/_utils/docs/tutorials/teams-system.narration.json +0 -165
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
/// <reference types="cypress" />
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Sector 7 - SuperAdmin Teams View - Documentation Video
|
|
5
|
-
*
|
|
6
|
-
* This test generates a documentation video showing how a superadmin
|
|
7
|
-
* can access Sector 7 and view all teams in the system.
|
|
8
|
-
*
|
|
9
|
-
* Run: NEXT_PUBLIC_ACTIVE_THEME=default pnpm cy:run --spec "sector7-superadmin-teams.doc.cy.ts"
|
|
10
|
-
*
|
|
11
|
-
* Output:
|
|
12
|
-
* - Video: cypress/videos/docs/tutorials/superadmin-superadmin-teams.doc.cy.ts.mp4
|
|
13
|
-
* - Narrations: cypress/docs-output/narrations/superadmin-superadmin-teams.doc-narrations.json
|
|
14
|
-
*
|
|
15
|
-
* @tags @doc, @tutorial, @sector7, @superadmin
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
// Import slow-down plugin
|
|
19
|
-
import { slowCypressDown } from 'cypress-slow-down'
|
|
20
|
-
import 'cypress-slow-down/commands'
|
|
21
|
-
|
|
22
|
-
// Import POMs
|
|
23
|
-
import { LoginForm } from '../../../../../../../../test/cypress/src/classes/components/auth/LoginForm.js'
|
|
24
|
-
import { TopNavbar } from '../../../../../../../../test/cypress/src/classes/components/navigation/TopNavbar.js'
|
|
25
|
-
import { SuperadminNavigation } from '../../../../../../../../test/cypress/src/classes/superadmin/SuperadminNavigation.js'
|
|
26
|
-
import { TeamsTable } from '../../../../../../../../test/cypress/src/classes/superadmin/TeamsTable.js'
|
|
27
|
-
import { Session } from '../../../../../../../../test/cypress/src/classes/shared'
|
|
28
|
-
|
|
29
|
-
// ============================================
|
|
30
|
-
// Configuration
|
|
31
|
-
// ============================================
|
|
32
|
-
|
|
33
|
-
const CONFIG = {
|
|
34
|
-
// Speed control (ms between commands) - FAST for ~1:30 video
|
|
35
|
-
commandDelay: 200,
|
|
36
|
-
|
|
37
|
-
// Narration timing (ms) - Optimized for short video
|
|
38
|
-
narration: {
|
|
39
|
-
short: 1000, // ~8 words
|
|
40
|
-
medium: 1500, // ~12-15 words
|
|
41
|
-
long: 2000, // ~20 words
|
|
42
|
-
chapter: 1000, // Chapter title display
|
|
43
|
-
pause: 400, // Pause for emphasis
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
// SuperAdmin credentials (from sample data)
|
|
47
|
-
superadmin: {
|
|
48
|
-
email: 'superadmin@nextspark.dev',
|
|
49
|
-
password: 'Pandora1234',
|
|
50
|
-
},
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// ============================================
|
|
54
|
-
// Narration Helpers
|
|
55
|
-
// ============================================
|
|
56
|
-
|
|
57
|
-
interface NarrationEntry {
|
|
58
|
-
timestamp: number
|
|
59
|
-
step: number
|
|
60
|
-
text: string
|
|
61
|
-
chapter?: string
|
|
62
|
-
duration: number
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
let narrations: NarrationEntry[] = []
|
|
66
|
-
let stepCounter = 0
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Log narration and wait for reading time
|
|
70
|
-
*/
|
|
71
|
-
function narrate(text: string, durationMs: number = CONFIG.narration.medium) {
|
|
72
|
-
stepCounter++
|
|
73
|
-
const entry: NarrationEntry = {
|
|
74
|
-
timestamp: Date.now(),
|
|
75
|
-
step: stepCounter,
|
|
76
|
-
text,
|
|
77
|
-
duration: durationMs,
|
|
78
|
-
}
|
|
79
|
-
narrations.push(entry)
|
|
80
|
-
|
|
81
|
-
// Visual log (appears in video)
|
|
82
|
-
cy.log(`ποΈ **[${stepCounter}]** ${text}`)
|
|
83
|
-
|
|
84
|
-
// Wait for narration duration
|
|
85
|
-
cy.wait(durationMs, { log: false })
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Add chapter marker
|
|
90
|
-
*/
|
|
91
|
-
function chapter(title: string) {
|
|
92
|
-
stepCounter++
|
|
93
|
-
narrations.push({
|
|
94
|
-
timestamp: Date.now(),
|
|
95
|
-
step: stepCounter,
|
|
96
|
-
text: `=== ${title} ===`,
|
|
97
|
-
chapter: title,
|
|
98
|
-
duration: CONFIG.narration.chapter,
|
|
99
|
-
})
|
|
100
|
-
|
|
101
|
-
cy.log(`π βββββββββββββββββββββββββββββββ`)
|
|
102
|
-
cy.log(`π **${title.toUpperCase()}**`)
|
|
103
|
-
cy.log(`π βββββββββββββββββββββββββββββββ`)
|
|
104
|
-
cy.wait(CONFIG.narration.chapter, { log: false })
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Pause for emphasis
|
|
109
|
-
*/
|
|
110
|
-
function pause(ms: number = CONFIG.narration.pause) {
|
|
111
|
-
cy.wait(ms, { log: false })
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Highlight element with visual indicator
|
|
116
|
-
*/
|
|
117
|
-
function highlight(selector: string, duration: number = 1200) {
|
|
118
|
-
cy.get(selector).then($el => {
|
|
119
|
-
$el.css({
|
|
120
|
-
outline: '4px solid #ef4444',
|
|
121
|
-
outlineOffset: '4px',
|
|
122
|
-
boxShadow: '0 0 20px rgba(239, 68, 68, 0.5)',
|
|
123
|
-
transition: 'all 0.3s ease',
|
|
124
|
-
})
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
cy.wait(duration, { log: false })
|
|
128
|
-
|
|
129
|
-
cy.get(selector).then($el => {
|
|
130
|
-
$el.css({
|
|
131
|
-
outline: 'none',
|
|
132
|
-
outlineOffset: '0',
|
|
133
|
-
boxShadow: 'none',
|
|
134
|
-
})
|
|
135
|
-
})
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
// ============================================
|
|
139
|
-
// Documentation Test
|
|
140
|
-
// ============================================
|
|
141
|
-
|
|
142
|
-
describe('Tutorial: Sector 7 - SuperAdmin Teams View', {
|
|
143
|
-
tags: ['@doc', '@tutorial', '@sector7', '@superadmin'],
|
|
144
|
-
retries: 0, // No retries for documentation videos
|
|
145
|
-
}, () => {
|
|
146
|
-
const loginForm = new LoginForm()
|
|
147
|
-
const topNavbar = new TopNavbar()
|
|
148
|
-
const sector7Nav = new SuperadminNavigation()
|
|
149
|
-
const teamsTable = new TeamsTable()
|
|
150
|
-
|
|
151
|
-
before(() => {
|
|
152
|
-
// Enable slow mode for documentation
|
|
153
|
-
slowCypressDown(CONFIG.commandDelay)
|
|
154
|
-
|
|
155
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
156
|
-
cy.log('π¬ **DOCUMENTATION VIDEO RECORDING**')
|
|
157
|
-
cy.log('π¬ Sector 7 - SuperAdmin Teams View')
|
|
158
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
159
|
-
})
|
|
160
|
-
|
|
161
|
-
beforeEach(() => {
|
|
162
|
-
// Reset narrations before each test/retry
|
|
163
|
-
narrations = []
|
|
164
|
-
stepCounter = 0
|
|
165
|
-
|
|
166
|
-
// Setup real authentication test
|
|
167
|
-
Session.setupRealAuthenticationTest()
|
|
168
|
-
})
|
|
169
|
-
|
|
170
|
-
after(() => {
|
|
171
|
-
// Save narrations to file
|
|
172
|
-
const specName = 'sector7-superadmin-teams.doc'
|
|
173
|
-
cy.task('saveNarrations', { specName, narrations })
|
|
174
|
-
|
|
175
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
176
|
-
cy.log('π¬ **RECORDING COMPLETE**')
|
|
177
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
// ============================================
|
|
181
|
-
// Single test that captures the entire tutorial
|
|
182
|
-
// ============================================
|
|
183
|
-
|
|
184
|
-
it('demuestra cΓ³mo un superadmin accede a Sector 7 para ver todos los teams', () => {
|
|
185
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
186
|
-
// CHAPTER 1: IntroducciΓ³n
|
|
187
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
188
|
-
chapter('IntroducciΓ³n')
|
|
189
|
-
|
|
190
|
-
narrate(
|
|
191
|
-
'Bienvenido a Sector 7, el Γ‘rea exclusiva para super administradores.',
|
|
192
|
-
CONFIG.narration.medium
|
|
193
|
-
)
|
|
194
|
-
|
|
195
|
-
narrate(
|
|
196
|
-
'Hoy veremos cΓ³mo acceder y visualizar todos los equipos del sistema.',
|
|
197
|
-
CONFIG.narration.medium
|
|
198
|
-
)
|
|
199
|
-
|
|
200
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
201
|
-
// CHAPTER 2: Login como SuperAdmin
|
|
202
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
203
|
-
chapter('Login como SuperAdmin')
|
|
204
|
-
|
|
205
|
-
// Navigate to login
|
|
206
|
-
cy.visit('/login')
|
|
207
|
-
cy.wait(1500, { log: false })
|
|
208
|
-
|
|
209
|
-
narrate(
|
|
210
|
-
'Iniciamos sesiΓ³n con las credenciales de superadmin.',
|
|
211
|
-
CONFIG.narration.short
|
|
212
|
-
)
|
|
213
|
-
|
|
214
|
-
// Click to show email form, wait for form to appear
|
|
215
|
-
cy.get('[data-cy="login-show-email"]').should('be.visible').click()
|
|
216
|
-
cy.wait(500, { log: false })
|
|
217
|
-
|
|
218
|
-
// Wait for form inputs to be visible (separate chain to avoid detachment issues)
|
|
219
|
-
cy.get('[data-cy="login-email-input"]', { timeout: 10000 }).should('be.visible')
|
|
220
|
-
cy.get('[data-cy="login-password-input"]', { timeout: 10000 }).should('be.visible')
|
|
221
|
-
pause(500)
|
|
222
|
-
|
|
223
|
-
narrate(
|
|
224
|
-
'Usamos el email del superadmin de prueba.',
|
|
225
|
-
CONFIG.narration.short
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
// Fill email (separate get to avoid detachment)
|
|
229
|
-
cy.get('[data-cy="login-email-input"]').clear().type(CONFIG.superadmin.email)
|
|
230
|
-
pause(300)
|
|
231
|
-
|
|
232
|
-
narrate(
|
|
233
|
-
'Ingresamos la contraseΓ±a y enviamos.',
|
|
234
|
-
CONFIG.narration.short
|
|
235
|
-
)
|
|
236
|
-
|
|
237
|
-
// Fill password (separate get)
|
|
238
|
-
cy.get('[data-cy="login-password-input"]').clear().type(CONFIG.superadmin.password, { log: false })
|
|
239
|
-
pause(200)
|
|
240
|
-
|
|
241
|
-
// Submit (separate get)
|
|
242
|
-
cy.get('[data-cy="login-submit"]').click()
|
|
243
|
-
|
|
244
|
-
// Wait for dashboard
|
|
245
|
-
cy.url().should('include', '/dashboard', { timeout: 15000 })
|
|
246
|
-
pause(500)
|
|
247
|
-
|
|
248
|
-
narrate(
|
|
249
|
-
'Acceso concedido. Observa el icono de Sector 7 en la barra superior.',
|
|
250
|
-
CONFIG.narration.medium
|
|
251
|
-
)
|
|
252
|
-
|
|
253
|
-
// Highlight Sector 7 icon
|
|
254
|
-
highlight('[data-cy="topnav-superadmin"]', 1200)
|
|
255
|
-
|
|
256
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
257
|
-
// CHAPTER 3: NavegaciΓ³n a Sector 7
|
|
258
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
259
|
-
chapter('NavegaciΓ³n a Sector 7')
|
|
260
|
-
|
|
261
|
-
narrate(
|
|
262
|
-
'Hacemos clic para ingresar al Γ‘rea restringida.',
|
|
263
|
-
CONFIG.narration.short
|
|
264
|
-
)
|
|
265
|
-
|
|
266
|
-
// Navigate to Sector 7
|
|
267
|
-
topNavbar.navigateToSuperadmin()
|
|
268
|
-
|
|
269
|
-
// Wait for Sector 7 page
|
|
270
|
-
cy.url().should('include', '/superadmin')
|
|
271
|
-
cy.contains('Super Administrator Control Panel').should('be.visible')
|
|
272
|
-
pause(500)
|
|
273
|
-
|
|
274
|
-
narrate(
|
|
275
|
-
'Este es el panel de control del super administrador.',
|
|
276
|
-
CONFIG.narration.medium
|
|
277
|
-
)
|
|
278
|
-
|
|
279
|
-
pause(300)
|
|
280
|
-
|
|
281
|
-
narrate(
|
|
282
|
-
'En el menΓΊ lateral vemos las opciones disponibles.',
|
|
283
|
-
CONFIG.narration.short
|
|
284
|
-
)
|
|
285
|
-
|
|
286
|
-
// Highlight Teams nav option
|
|
287
|
-
highlight('[data-cy="superadmin-nav-teams"]', 1000)
|
|
288
|
-
|
|
289
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
290
|
-
// CHAPTER 4: VisualizaciΓ³n de Teams
|
|
291
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
292
|
-
chapter('VisualizaciΓ³n de Teams')
|
|
293
|
-
|
|
294
|
-
narrate(
|
|
295
|
-
'Navegamos a la secciΓ³n de Equipos.',
|
|
296
|
-
CONFIG.narration.short
|
|
297
|
-
)
|
|
298
|
-
|
|
299
|
-
// Navigate to Teams
|
|
300
|
-
sector7Nav.navigateToTeams()
|
|
301
|
-
|
|
302
|
-
// Wait for teams page
|
|
303
|
-
cy.url().should('include', '/superadmin/teams')
|
|
304
|
-
cy.contains('Team Management').should('be.visible')
|
|
305
|
-
pause(500)
|
|
306
|
-
|
|
307
|
-
narrate(
|
|
308
|
-
'AquΓ vemos todos los equipos del sistema con estadΓsticas.',
|
|
309
|
-
CONFIG.narration.medium
|
|
310
|
-
)
|
|
311
|
-
|
|
312
|
-
// Highlight stats card
|
|
313
|
-
cy.get('.text-2xl.font-bold').first().then($el => {
|
|
314
|
-
$el.css({
|
|
315
|
-
outline: '4px solid #22c55e',
|
|
316
|
-
outlineOffset: '4px',
|
|
317
|
-
boxShadow: '0 0 15px rgba(34, 197, 94, 0.4)',
|
|
318
|
-
})
|
|
319
|
-
})
|
|
320
|
-
pause(1000)
|
|
321
|
-
cy.get('.text-2xl.font-bold').first().then($el => {
|
|
322
|
-
$el.css({ outline: 'none', boxShadow: 'none' })
|
|
323
|
-
})
|
|
324
|
-
|
|
325
|
-
narrate(
|
|
326
|
-
'La pestaΓ±a Work Teams muestra equipos colaborativos.',
|
|
327
|
-
CONFIG.narration.medium
|
|
328
|
-
)
|
|
329
|
-
|
|
330
|
-
// Highlight Work Teams tab (use button with role="tab")
|
|
331
|
-
cy.contains('button[role="tab"]', 'Work Teams').then($el => {
|
|
332
|
-
$el.css({
|
|
333
|
-
outline: '3px solid #3b82f6',
|
|
334
|
-
outlineOffset: '2px',
|
|
335
|
-
})
|
|
336
|
-
})
|
|
337
|
-
pause(800)
|
|
338
|
-
cy.contains('button[role="tab"]', 'Work Teams').then($el => {
|
|
339
|
-
$el.css({ outline: 'none' })
|
|
340
|
-
})
|
|
341
|
-
|
|
342
|
-
// Wait for table to load
|
|
343
|
-
cy.get('table').should('be.visible')
|
|
344
|
-
pause(500)
|
|
345
|
-
|
|
346
|
-
narrate(
|
|
347
|
-
'TambiΓ©n podemos ver los equipos personales de cada usuario.',
|
|
348
|
-
CONFIG.narration.medium
|
|
349
|
-
)
|
|
350
|
-
|
|
351
|
-
// Switch to Personal tab
|
|
352
|
-
cy.contains('button[role="tab"]', 'Personal').click()
|
|
353
|
-
pause(800)
|
|
354
|
-
|
|
355
|
-
// Wait for table to update
|
|
356
|
-
cy.get('table').should('be.visible')
|
|
357
|
-
pause(500)
|
|
358
|
-
|
|
359
|
-
narrate(
|
|
360
|
-
'El buscador permite filtrar equipos por nombre o email del propietario.',
|
|
361
|
-
CONFIG.narration.medium
|
|
362
|
-
)
|
|
363
|
-
|
|
364
|
-
// Highlight search input
|
|
365
|
-
highlight('[data-cy="teams-search-input"]', 1000)
|
|
366
|
-
|
|
367
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
368
|
-
// CHAPTER 5: ConclusiΓ³n
|
|
369
|
-
// βββββββββββββββββββββββββββββββββββββββββ
|
|
370
|
-
chapter('ConclusiΓ³n')
|
|
371
|
-
|
|
372
|
-
narrate(
|
|
373
|
-
'AsΓ funciona Sector 7: acceso exclusivo a la gestiΓ³n global del sistema.',
|
|
374
|
-
CONFIG.narration.medium
|
|
375
|
-
)
|
|
376
|
-
|
|
377
|
-
pause(500)
|
|
378
|
-
|
|
379
|
-
narrate(
|
|
380
|
-
'Gracias por ver este tutorial.',
|
|
381
|
-
CONFIG.narration.short
|
|
382
|
-
)
|
|
383
|
-
|
|
384
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
385
|
-
cy.log('π¬ **Β‘Gracias por ver este tutorial!**')
|
|
386
|
-
cy.log('π¬ βββββββββββββββββββββββββββββββββββββββ')
|
|
387
|
-
|
|
388
|
-
pause(800)
|
|
389
|
-
})
|
|
390
|
-
})
|