@apia/testing 0.3.6 → 1.0.1

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/cleanDist.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "cleanDist": 0.2318938201855587
2
+ "cleanDist": 0.6962667171941399
3
3
  }
package/dist/index.d.ts CHANGED
@@ -1,17 +1,7 @@
1
1
  import * as react from 'react';
2
- import { FC } from 'react';
2
+ import { FC, CSSProperties } from 'react';
3
3
  import { EventEmitter } from '@apia/util';
4
4
 
5
- declare function initiator(): void;
6
- /**
7
- * La librería de testing debería permitir testear cosas en serie y en paralelo.
8
- *
9
- * Debería permitir montar un componente
10
- */
11
- type TTask = {
12
- name: string;
13
- cb: () => Promise<boolean> | boolean;
14
- };
15
5
  declare class TestComponent<T extends Record<string, unknown>> extends EventEmitter<{
16
6
  update: {
17
7
  id: string;
@@ -20,26 +10,90 @@ declare class TestComponent<T extends Record<string, unknown>> extends EventEmit
20
10
  updated: string;
21
11
  }> {
22
12
  #private;
13
+ private name;
14
+ private test;
23
15
  id: string;
24
16
  Component: react.ForwardRefExoticComponent<react.RefAttributes<object>>;
25
- constructor(components: TestComponents, component: FC<T>, initialProps: T);
17
+ constructor(name: string, test: Test, component: FC<T>, initialProps: T);
18
+ unmount: () => void;
26
19
  updateProps(newProps: Partial<T>): Promise<void>;
27
- }
28
- declare class TestComponents {
29
- components: TestComponent<any>[];
30
- add: (component: TestComponent<any>) => void;
31
- }
20
+ }
21
+
22
+ type TLogType = 'error' | 'info' | 'success' | 'title' | 'warn';
23
+ declare abstract class TestsLogger {
24
+ abstract error(message: string): void;
25
+ abstract info(message: string): void;
26
+ abstract report(): void;
27
+ abstract success(message: string): void;
28
+ abstract title(message: string): void;
29
+ abstract warn(message: string): void;
30
+ /**
31
+ * Establece qué niveles se muestran y qué niveles no.
32
+ */
33
+ abstract setDebugLevels(levels: Partial<Record<TLogType, boolean>>): void;
34
+ }
35
+
36
+ type TRunOptions = Partial<{
37
+ /**
38
+ * Delay al inicio
39
+ */
40
+ delay: number;
41
+ /**
42
+ * Cantidad de veces a ejecutar
43
+ */
44
+ n: number;
45
+ /**
46
+ * Demora entre reintentos
47
+ */
48
+ ms: number;
49
+ /**
50
+ * Omitir mensajes
51
+ */
52
+ silence: boolean;
53
+ }>;
32
54
  declare class Test extends EventEmitter<{
33
- cud: boolean;
34
- saw: string;
55
+ componentsListUpdated: boolean;
56
+ componentMounted: string;
35
57
  }> {
36
58
  #private;
37
- tasks: TTask[];
38
- Component: () => react.JSX.Element;
59
+ logger: TestsLogger;
60
+ Component: ({ style }: {
61
+ style: CSSProperties;
62
+ }) => react.JSX.Element;
63
+ /**
64
+ * Devuelve el elemento html sobre el cual se están montando los tests
65
+ */
39
66
  get root(): HTMLElement | null;
40
- mount: <T extends Record<string, unknown>>(component: FC<T>, initialProps: T) => Promise<TestComponent<T>>;
41
- should: (name: string, cb: () => Promise<boolean> | boolean) => void;
42
- run: () => Promise<void>;
67
+ /**
68
+ * Hace foco sobre un elemento del DOM y resuelve cuando puede hacer foco o
69
+ * rompe cuando no puede hacer después de 5 intentos.
70
+ */
71
+ focus: (selector: string, check?: ((element: HTMLElement) => boolean) | undefined, options?: TRunOptions) => Promise<HTMLElement | null>;
72
+ /**
73
+ * Anuncia un nuevo grupo de tests
74
+ */
75
+ it: (text: string) => void;
76
+ /**
77
+ * Monta un componente para usarlo en el testing
78
+ */
79
+ mount: <T extends Record<string, unknown>>(name: string, component: FC<T>, initialProps: T) => Promise<TestComponent<T>>;
80
+ report: () => void;
81
+ /**
82
+ * Corre una tarea que va a intentar hasta n veces cada ms milisegundos antes
83
+ * de resolver como fallo.
84
+ *
85
+ * @parameter options
86
+ */
87
+ should: (name: string, cb: () => boolean | Promise<boolean>, options?: Omit<TRunOptions, 'silence'>) => Promise<void>;
88
+ unmount: (component: TestComponent<any>) => void;
89
+ /**
90
+ * Espera por una condición a suceder, intentando n veces cada ms
91
+ * milisegundos. La diferencia principal con should es que este método no se
92
+ * ocupa de si un test pasa o falla, sino simplemente que trata de cumplir una
93
+ * condición. Es especialmente útil para intentar hacer foco o esperar algún
94
+ * evento en un futuro cercano.
95
+ */
96
+ wait: (name: string, cb: () => boolean | Promise<boolean>, options?: TRunOptions) => Promise<unknown>;
43
97
  }
44
98
 
45
- export { Test, TestComponent, initiator as default };
99
+ export { Test, TestComponent, TestsLogger };
package/dist/index.js CHANGED
@@ -1,6 +1,234 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { EventEmitter, useMount } from '@apia/util';
3
- import { forwardRef, useState } from 'react';
3
+ import { forwardRef, useState, useEffect } from 'react';
4
+
5
+ var __defProp$2 = Object.defineProperty;
6
+ var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues$2 = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp$2.call(b, prop))
13
+ __defNormalProp$2(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols$2)
15
+ for (var prop of __getOwnPropSymbols$2(b)) {
16
+ if (__propIsEnum$2.call(b, prop))
17
+ __defNormalProp$2(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __accessCheck$2 = (obj, member, msg) => {
22
+ if (!member.has(obj))
23
+ throw TypeError("Cannot " + msg);
24
+ };
25
+ var __privateGet$2 = (obj, member, getter) => {
26
+ __accessCheck$2(obj, member, "read from private field");
27
+ return getter ? getter.call(obj) : member.get(obj);
28
+ };
29
+ var __privateAdd$2 = (obj, member, value) => {
30
+ if (member.has(obj))
31
+ throw TypeError("Cannot add the same private member more than once");
32
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
33
+ };
34
+ var __privateSet$2 = (obj, member, value, setter) => {
35
+ __accessCheck$2(obj, member, "write to private field");
36
+ setter ? setter.call(obj, value) : member.set(obj, value);
37
+ return value;
38
+ };
39
+ var _component, _props;
40
+ let maxId = 0;
41
+ let maxUpdateId = 0;
42
+ class TestComponent extends EventEmitter {
43
+ constructor(name, test, component, initialProps) {
44
+ super();
45
+ this.name = name;
46
+ this.test = test;
47
+ __privateAdd$2(this, _component, void 0);
48
+ __privateAdd$2(this, _props, void 0);
49
+ this.id = `component__${maxId++}`;
50
+ this.Component = forwardRef((_, ref) => {
51
+ const [props, setProps] = useState(__privateGet$2(this, _props));
52
+ const [lastUpdateId, setLastUpdateId] = useState("");
53
+ const Render = __privateGet$2(this, _component);
54
+ useMount(() => {
55
+ const suscription = this.on("update", (ev) => {
56
+ setProps((current) => __spreadValues$2(__spreadValues$2({}, current), ev.props));
57
+ setLastUpdateId(ev.id);
58
+ });
59
+ ref({});
60
+ return suscription;
61
+ });
62
+ useEffect(() => {
63
+ setTimeout(() => {
64
+ this.emit("updated", lastUpdateId);
65
+ }, 0);
66
+ }, [lastUpdateId]);
67
+ return /* @__PURE__ */ jsx("div", { id: this.name, children: /* @__PURE__ */ jsx(Render, __spreadValues$2({}, props)) });
68
+ });
69
+ this.unmount = () => {
70
+ this.test.unmount(this);
71
+ };
72
+ __privateSet$2(this, _component, component);
73
+ __privateSet$2(this, _props, initialProps);
74
+ }
75
+ updateProps(newProps) {
76
+ return new Promise((resolve) => {
77
+ const updateId = `update${maxUpdateId++}`;
78
+ const unsuscribe = this.on("updated", (ev) => {
79
+ if (ev === updateId) {
80
+ unsuscribe();
81
+ resolve();
82
+ }
83
+ });
84
+ setTimeout(() => {
85
+ this.emit("update", { id: updateId, props: newProps });
86
+ }, 0);
87
+ });
88
+ }
89
+ }
90
+ _component = new WeakMap();
91
+ _props = new WeakMap();
92
+
93
+ var __defProp$1 = Object.defineProperty;
94
+ var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
95
+ var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
96
+ var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
97
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
98
+ var __spreadValues$1 = (a, b) => {
99
+ for (var prop in b || (b = {}))
100
+ if (__hasOwnProp$1.call(b, prop))
101
+ __defNormalProp$1(a, prop, b[prop]);
102
+ if (__getOwnPropSymbols$1)
103
+ for (var prop of __getOwnPropSymbols$1(b)) {
104
+ if (__propIsEnum$1.call(b, prop))
105
+ __defNormalProp$1(a, prop, b[prop]);
106
+ }
107
+ return a;
108
+ };
109
+ var __accessCheck$1 = (obj, member, msg) => {
110
+ if (!member.has(obj))
111
+ throw TypeError("Cannot " + msg);
112
+ };
113
+ var __privateGet$1 = (obj, member, getter) => {
114
+ __accessCheck$1(obj, member, "read from private field");
115
+ return getter ? getter.call(obj) : member.get(obj);
116
+ };
117
+ var __privateAdd$1 = (obj, member, value) => {
118
+ if (member.has(obj))
119
+ throw TypeError("Cannot add the same private member more than once");
120
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
121
+ };
122
+ var __privateSet$1 = (obj, member, value, setter) => {
123
+ __accessCheck$1(obj, member, "write to private field");
124
+ setter ? setter.call(obj, value) : member.set(obj, value);
125
+ return value;
126
+ };
127
+ var _reports, _levels, _log;
128
+ class TestsLogger {
129
+ }
130
+ class ConsoleTestsLogger extends TestsLogger {
131
+ constructor() {
132
+ super();
133
+ this.colors = {
134
+ error: "#f77",
135
+ info: "lightblue",
136
+ success: "lightgreen",
137
+ title: "white",
138
+ warn: "yellow"
139
+ };
140
+ __privateAdd$1(this, _reports, []);
141
+ __privateAdd$1(this, _levels, {
142
+ error: true,
143
+ info: true,
144
+ success: true,
145
+ title: true,
146
+ warn: true
147
+ });
148
+ __privateAdd$1(this, _log, (type, message) => {
149
+ var _a;
150
+ const color = this.colors[type];
151
+ const messages = __privateGet$1(this, _reports)[__privateGet$1(this, _reports).length - 1].messages;
152
+ if (!messages[type])
153
+ messages[type] = [];
154
+ (_a = messages[type]) == null ? void 0 : _a.push(message);
155
+ console.info(
156
+ `%c[${type}]%c: ${message}`,
157
+ `color: ${color}`,
158
+ "color: white"
159
+ );
160
+ });
161
+ this.reset = () => {
162
+ __privateSet$1(this, _reports, [
163
+ {
164
+ title: "Test without title, use method it to set test title.",
165
+ messages: {}
166
+ }
167
+ ]);
168
+ };
169
+ this.reset();
170
+ }
171
+ error(message) {
172
+ if (__privateGet$1(this, _levels).error) {
173
+ console.error(message);
174
+ __privateGet$1(this, _log).call(this, "error", message);
175
+ }
176
+ }
177
+ info(message) {
178
+ if (__privateGet$1(this, _levels).info)
179
+ __privateGet$1(this, _log).call(this, "info", message);
180
+ }
181
+ success(message) {
182
+ if (__privateGet$1(this, _levels).success)
183
+ __privateGet$1(this, _log).call(this, "success", message);
184
+ }
185
+ report() {
186
+ var _a, _b, _c, _d, _e, _f;
187
+ for (const report of __privateGet$1(this, _reports)) {
188
+ const errors = (_b = (_a = report.messages.error) == null ? void 0 : _a.length) != null ? _b : 0;
189
+ const warns = (_d = (_c = report.messages.warn) == null ? void 0 : _c.length) != null ? _d : 0;
190
+ const successes = (_f = (_e = report.messages.success) == null ? void 0 : _e.length) != null ? _f : 0;
191
+ if (successes === warns && warns === errors && errors === 0) {
192
+ if (report.title !== "Test without title, use method it to set test title.")
193
+ console.log(
194
+ `%cFor ${report.title}, no cases made.`,
195
+ "font-weight: bold; padding: 10px"
196
+ );
197
+ continue;
198
+ }
199
+ console.log(`%cFor ${report.title}`, "font-weight: bold; padding: 10px");
200
+ console.log(
201
+ `%c${successes} tests succeed.`,
202
+ `color: ${this.colors.success}`
203
+ );
204
+ console.log(`%c${warns} warnings sent.`, `color: ${this.colors.warn}`);
205
+ console.log(`%c${errors} errors found.`, `color: ${this.colors.error}`);
206
+ }
207
+ this.reset();
208
+ }
209
+ title(title) {
210
+ __privateGet$1(this, _reports).push({ title, messages: {} });
211
+ if (__privateGet$1(this, _levels).title) {
212
+ const color = this.colors.title;
213
+ console.info(
214
+ `%c${title}`,
215
+ `color: ${color}; font-weight: bold; padding: 10px`
216
+ );
217
+ }
218
+ }
219
+ warn(message) {
220
+ if (__privateGet$1(this, _levels).warn) {
221
+ console.warn(message);
222
+ __privateGet$1(this, _log).call(this, "warn", message);
223
+ }
224
+ }
225
+ setDebugLevels(levels) {
226
+ __privateSet$1(this, _levels, __spreadValues$1(__spreadValues$1({}, __privateGet$1(this, _levels)), levels));
227
+ }
228
+ }
229
+ _reports = new WeakMap();
230
+ _levels = new WeakMap();
231
+ _log = new WeakMap();
4
232
 
5
233
  var __defProp = Object.defineProperty;
6
234
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -56,93 +284,80 @@ var __async = (__this, __arguments, generator) => {
56
284
  step((generator = generator.apply(__this, __arguments)).next());
57
285
  });
58
286
  };
59
- var _component, _props, _components, _ref;
60
- function initiator() {
61
- console.log("Hola mundo");
62
- }
63
- let maxId = 0;
64
- let maxUpdateId = 0;
65
- class TestComponent extends EventEmitter {
66
- constructor(components, component, initialProps) {
67
- super();
68
- __privateAdd(this, _component, void 0);
69
- __privateAdd(this, _props, void 0);
70
- this.id = `component__${maxId++}`;
71
- this.Component = forwardRef((_, ref) => {
72
- const [props, setProps] = useState(__privateGet(this, _props));
73
- const [lastUpdateId, setLastUpdateId] = useState("");
74
- const Render = __privateGet(this, _component);
75
- this.emit("updated", lastUpdateId);
76
- useMount(() => {
77
- const suscription = this.on("update", (ev) => {
78
- setProps((current) => __spreadValues(__spreadValues({}, current), ev.props));
79
- setLastUpdateId(ev.id);
80
- });
81
- ref({});
82
- return suscription;
83
- });
84
- return /* @__PURE__ */ jsx("div", { style: { display: "none" }, children: /* @__PURE__ */ jsx(Render, __spreadValues({}, props)) });
85
- });
86
- __privateSet(this, _component, component);
87
- __privateSet(this, _props, initialProps);
88
- components.add(this);
89
- }
90
- updateProps(newProps) {
91
- return new Promise((resolve) => {
92
- const updateId = `update${maxUpdateId++}`;
93
- const unsuscribe = this.on("updated", (ev) => {
94
- if (ev === updateId) {
95
- unsuscribe();
96
- resolve();
97
- }
98
- });
99
- this.emit("update", { id: updateId, props: newProps });
100
- });
101
- }
102
- }
103
- _component = new WeakMap();
104
- _props = new WeakMap();
105
- class TestComponents {
106
- constructor() {
107
- this.components = [];
108
- this.add = (component) => {
109
- this.components.push(component);
110
- };
111
- }
112
- }
287
+ var _components, _ref, _running, _run;
113
288
  class Test extends EventEmitter {
114
289
  constructor() {
115
290
  super(...arguments);
116
- __privateAdd(this, _components, new TestComponents());
291
+ __privateAdd(this, _components, []);
117
292
  __privateAdd(this, _ref, null);
118
- this.tasks = [];
119
- this.Component = () => {
120
- const [components, setComponents] = useState(__privateGet(this, _components).components);
293
+ this.logger = new ConsoleTestsLogger();
294
+ this.Component = ({ style }) => {
295
+ const [components, setComponents] = useState(__privateGet(this, _components));
121
296
  useMount(() => {
122
- return this.on("cud", () => {
123
- setComponents([...__privateGet(this, _components).components]);
297
+ return this.on("componentsListUpdated", () => {
298
+ setComponents([...__privateGet(this, _components)]);
124
299
  });
125
300
  });
126
- return /* @__PURE__ */ jsx("div", { ref: (el) => __privateSet(this, _ref, el), children: components.map((current) => /* @__PURE__ */ jsx(
301
+ return /* @__PURE__ */ jsx("div", { ref: (el) => __privateSet(this, _ref, el), style: __spreadValues({ display: "none" }, style), children: components.map((current) => /* @__PURE__ */ jsx(
127
302
  current.Component,
128
303
  {
129
304
  ref: (el) => {
130
305
  if (el)
131
- this.emit("saw", current.id);
306
+ this.emit("componentMounted", current.id);
132
307
  }
133
308
  },
134
309
  current.id
135
310
  )) });
136
311
  };
137
- this.mount = (component, initialProps) => {
312
+ /**
313
+ * Hace foco sobre un elemento del DOM y resuelve cuando puede hacer foco o
314
+ * rompe cuando no puede hacer después de 5 intentos.
315
+ */
316
+ this.focus = (selector, check, options) => {
317
+ const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);
318
+ return new Promise((resolve) => {
319
+ setTimeout(() => {
320
+ let tries = actualOptions.n;
321
+ const interval = setInterval(() => {
322
+ var _a;
323
+ this.logger.info(`Trying to focus with selector ${selector}`);
324
+ tries--;
325
+ const element = (_a = this.root) == null ? void 0 : _a.querySelector(selector);
326
+ if (element) {
327
+ element.focus();
328
+ if (check ? check(element) : element === document.activeElement) {
329
+ clearInterval(interval);
330
+ resolve(element);
331
+ }
332
+ }
333
+ if (tries === 0) {
334
+ clearInterval(interval);
335
+ resolve(null);
336
+ }
337
+ }, actualOptions.ms);
338
+ }, actualOptions.delay);
339
+ });
340
+ };
341
+ /**
342
+ * Anuncia un nuevo grupo de tests
343
+ */
344
+ this.it = (text) => {
345
+ this.logger.title(text);
346
+ };
347
+ /**
348
+ * Monta un componente para usarlo en el testing
349
+ */
350
+ this.mount = (name, component, initialProps) => {
138
351
  return new Promise((resolve) => {
139
352
  const newComponent = new TestComponent(
140
- __privateGet(this, _components),
353
+ name,
354
+ this,
141
355
  component,
142
356
  initialProps
143
357
  );
144
- this.emit("cud", true);
145
- const unsuscribe = this.on("saw", (ev) => {
358
+ __privateGet(this, _components).push(newComponent);
359
+ this.emit("componentsListUpdated", true);
360
+ const unsuscribe = this.on("componentMounted", (ev) => {
146
361
  if (ev === newComponent.id) {
147
362
  unsuscribe();
148
363
  resolve(newComponent);
@@ -150,32 +365,124 @@ class Test extends EventEmitter {
150
365
  });
151
366
  });
152
367
  };
153
- this.should = (name, cb) => {
154
- this.tasks.push({ name, cb });
155
- void this.run();
368
+ this.report = () => {
369
+ this.logger.report();
156
370
  };
157
- this.run = () => __async(this, null, function* () {
158
- if (!this.tasks.length)
159
- return;
160
- const task = this.tasks.shift();
371
+ __privateAdd(this, _running, false);
372
+ /**
373
+ * Corre una tarea que va a intentar hasta n veces cada ms milisegundos antes
374
+ * de resolver como fallo.
375
+ *
376
+ * @parameter options
377
+ */
378
+ this.should = (name, cb, options) => __async(this, null, function* () {
379
+ yield this.wait("", () => !__privateGet(this, _running), { silence: true, n: 300 });
380
+ __privateSet(this, _running, true);
381
+ const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);
382
+ return new Promise((resolve) => {
383
+ setTimeout(() => {
384
+ let tries = actualOptions.n;
385
+ const tryAgain = () => {
386
+ window.requestAnimationFrame(() => {
387
+ __privateGet(this, _run).call(this, { name, cb }).then((result) => {
388
+ if (!result && tries-- > 0) {
389
+ setTimeout(() => {
390
+ tryAgain();
391
+ }, actualOptions.ms);
392
+ this.logger.warn(`[RETRY ${5 - tries}] ${name}`);
393
+ } else if (result) {
394
+ this.logger.success(`${name}`);
395
+ resolve();
396
+ __privateSet(this, _running, false);
397
+ } else {
398
+ this.logger.error(name);
399
+ resolve();
400
+ __privateSet(this, _running, false);
401
+ }
402
+ }).catch(() => {
403
+ if (tries-- > 0) {
404
+ setTimeout(() => {
405
+ tryAgain();
406
+ }, actualOptions.ms);
407
+ this.logger.warn(`[RETRY ${5 - tries}] ${name}`);
408
+ } else {
409
+ this.logger.error(`[CATCH] ${name}`);
410
+ resolve();
411
+ __privateSet(this, _running, false);
412
+ }
413
+ });
414
+ });
415
+ };
416
+ tryAgain();
417
+ }, actualOptions.delay);
418
+ });
419
+ });
420
+ this.unmount = (component) => {
421
+ __privateSet(this, _components, __privateGet(this, _components).filter(
422
+ (current) => current !== component
423
+ ));
424
+ this.emit("componentsListUpdated", true);
425
+ };
426
+ /**
427
+ * Espera por una condición a suceder, intentando n veces cada ms
428
+ * milisegundos. La diferencia principal con should es que este método no se
429
+ * ocupa de si un test pasa o falla, sino simplemente que trata de cumplir una
430
+ * condición. Es especialmente útil para intentar hacer foco o esperar algún
431
+ * evento en un futuro cercano.
432
+ */
433
+ this.wait = (name, cb, options) => __async(this, null, function* () {
434
+ const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);
435
+ return new Promise((resolve) => {
436
+ setTimeout(() => {
437
+ let tries = actualOptions.n;
438
+ if (!actualOptions.silence)
439
+ this.logger.info(`[WAITING] ${name}`);
440
+ const tryAgain = () => {
441
+ window.requestAnimationFrame(() => {
442
+ if (tries-- > 0) {
443
+ void (() => __async(this, null, function* () {
444
+ const result = yield cb();
445
+ if (!result) {
446
+ setTimeout(() => {
447
+ tryAgain();
448
+ }, actualOptions.ms);
449
+ } else {
450
+ resolve(true);
451
+ }
452
+ }))();
453
+ } else {
454
+ resolve(false);
455
+ }
456
+ });
457
+ };
458
+ tryAgain();
459
+ }, actualOptions.delay);
460
+ });
461
+ });
462
+ __privateAdd(this, _run, (task) => __async(this, null, function* () {
161
463
  try {
162
464
  const taskResult = yield task.cb();
163
465
  if (taskResult) {
164
- console.log(`[SUCCESS] ${task.name}`);
466
+ return true;
165
467
  } else {
166
- console.error(`[FAILED] ${task.name}`);
468
+ return false;
167
469
  }
168
470
  } catch (e) {
169
- console.error(`[ERROR:CATCH] ${task.name}`);
471
+ this.logger.error(String(e));
472
+ return false;
170
473
  }
171
- void this.run();
172
- });
474
+ }));
173
475
  }
476
+ /**
477
+ * Devuelve el elemento html sobre el cual se están montando los tests
478
+ */
174
479
  get root() {
175
480
  return __privateGet(this, _ref);
176
481
  }
177
482
  }
178
483
  _components = new WeakMap();
179
484
  _ref = new WeakMap();
485
+ _running = new WeakMap();
486
+ _run = new WeakMap();
180
487
 
181
- export { Test, TestComponent, initiator as default };
488
+ export { Test, TestComponent, TestsLogger };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventEmitter, useMount } from '@apia/util';\nimport { FC, RefCallback, forwardRef, useState } from 'react';\n\nexport default function initiator() {\n console.log('Hola mundo');\n}\n\n/**\n * La librería de testing debería permitir testear cosas en serie y en paralelo.\n *\n * Debería permitir montar un componente\n */\n\ntype TTask = {\n name: string;\n cb: () => Promise<boolean> | boolean;\n};\n\nlet maxId = 0;\nlet maxUpdateId = 0;\n\nexport class TestComponent<\n T extends Record<string, unknown>,\n> extends EventEmitter<{\n update: { id: string; props: Partial<T> };\n updated: string;\n}> {\n #component: FC<T>;\n #props: T;\n\n id = `component__${maxId++}`;\n\n Component = forwardRef<object>((_, ref) => {\n const [props, setProps] = useState(this.#props);\n const [lastUpdateId, setLastUpdateId] = useState('');\n\n const Render = this.#component;\n\n this.emit('updated', lastUpdateId);\n\n useMount(() => {\n const suscription = this.on('update', (ev) => {\n setProps((current) => ({ ...current, ...ev.props }));\n setLastUpdateId(ev.id);\n });\n\n (ref as RefCallback<object>)({});\n\n return suscription;\n });\n\n return (\n <div style={{ display: 'none' }}>\n <Render {...props} />\n </div>\n );\n });\n\n constructor(components: TestComponents, component: FC<T>, initialProps: T) {\n super();\n\n this.#component = component;\n this.#props = initialProps;\n components.add(this);\n }\n\n updateProps(newProps: Partial<T>) {\n return new Promise<void>((resolve) => {\n const updateId = `update${maxUpdateId++}`;\n const unsuscribe = this.on('updated', (ev) => {\n if (ev === updateId) {\n unsuscribe();\n resolve();\n }\n });\n this.emit('update', { id: updateId, props: newProps });\n });\n }\n}\n\nclass TestComponents {\n components: TestComponent<any>[] = [];\n\n add = (component: TestComponent<any>) => {\n this.components.push(component);\n };\n}\n\nexport class Test extends EventEmitter<{ cud: boolean; saw: string }> {\n #components = new TestComponents();\n #ref: HTMLElement | null = null;\n\n tasks: TTask[] = [];\n\n Component = () => {\n const [components, setComponents] = useState(this.#components.components);\n\n useMount(() => {\n return this.on('cud', () => {\n setComponents([...this.#components.components]);\n });\n });\n\n return (\n <div ref={(el) => (this.#ref = el)}>\n {components.map((current) => (\n <current.Component\n ref={(el) => {\n if (el) this.emit('saw', current.id);\n }}\n key={current.id}\n />\n ))}\n </div>\n );\n };\n\n get root() {\n return this.#ref;\n }\n\n mount = <T extends Record<string, unknown>>(\n component: FC<T>,\n initialProps: T,\n ) => {\n return new Promise<TestComponent<T>>((resolve) => {\n const newComponent = new TestComponent(\n this.#components,\n component,\n initialProps,\n );\n this.emit('cud', true);\n const unsuscribe = this.on('saw', (ev) => {\n if (ev === newComponent.id) {\n unsuscribe();\n resolve(newComponent);\n }\n });\n });\n };\n\n should = (name: string, cb: () => Promise<boolean> | boolean) => {\n this.tasks.push({ name, cb });\n void this.run();\n };\n\n run = async () => {\n if (!this.tasks.length) return;\n\n const task = this.tasks.shift() as TTask;\n try {\n const taskResult = await task.cb();\n\n if (taskResult) {\n console.log(`[SUCCESS] ${task.name}`);\n } else {\n console.error(`[FAILED] ${task.name}`);\n }\n } catch (e) {\n console.error(`[ERROR:CATCH] ${task.name}`);\n }\n\n void this.run();\n };\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/TestComponent.tsx","../src/TestsLogger.ts","../src/index.tsx"],"sourcesContent":["import { FC, RefCallback, forwardRef, useEffect, useState } from 'react';\nimport { EventEmitter, useMount } from '@apia/util';\nimport { Test } from '.';\n\nlet maxId = 0;\nlet maxUpdateId = 0;\n\nexport class TestComponent<\n T extends Record<string, unknown>,\n> extends EventEmitter<{\n update: { id: string; props: Partial<T> };\n updated: string;\n}> {\n #component: FC<T>;\n #props: T;\n\n id = `component__${maxId++}`;\n\n Component = forwardRef<object>((_, ref) => {\n const [props, setProps] = useState(this.#props);\n const [lastUpdateId, setLastUpdateId] = useState('');\n\n const Render = this.#component;\n\n useMount(() => {\n const suscription = this.on('update', (ev) => {\n setProps((current) => ({ ...current, ...ev.props }));\n setLastUpdateId(ev.id);\n });\n\n (ref as RefCallback<object>)({});\n\n return suscription;\n });\n\n useEffect(() => {\n setTimeout(() => {\n this.emit('updated', lastUpdateId);\n }, 0);\n }, [lastUpdateId]);\n\n return (\n <div id={this.name}>\n <Render {...props} />\n </div>\n );\n });\n\n constructor(\n private name: string,\n private test: Test,\n component: FC<T>,\n initialProps: T,\n ) {\n super();\n\n this.#component = component;\n this.#props = initialProps;\n }\n\n unmount = () => {\n this.test.unmount(this);\n };\n\n updateProps(newProps: Partial<T>) {\n return new Promise<void>((resolve) => {\n const updateId = `update${maxUpdateId++}`;\n const unsuscribe = this.on('updated', (ev) => {\n if (ev === updateId) {\n unsuscribe();\n resolve();\n }\n });\n setTimeout(() => {\n this.emit('update', { id: updateId, props: newProps });\n }, 0);\n });\n }\n}\n","export type TLogType = 'error' | 'info' | 'success' | 'title' | 'warn';\n\nexport abstract class TestsLogger {\n abstract error(message: string): void;\n abstract info(message: string): void;\n abstract report(): void;\n abstract success(message: string): void;\n abstract title(message: string): void;\n abstract warn(message: string): void;\n\n /**\n * Establece qué niveles se muestran y qué niveles no.\n */\n abstract setDebugLevels(levels: Partial<Record<TLogType, boolean>>): void;\n}\n\nexport class ConsoleTestsLogger extends TestsLogger {\n colors = {\n error: '#f77',\n info: 'lightblue',\n success: 'lightgreen',\n title: 'white',\n warn: 'yellow',\n };\n\n #reports: {\n title: string;\n messages: Partial<Record<keyof TestsLogger, string[]>>;\n }[] = [];\n\n #levels = {\n error: true,\n info: true,\n success: true,\n title: true,\n warn: true,\n };\n\n #log = (type: TLogType, message: string) => {\n const color = this.colors[type];\n\n const messages = this.#reports[this.#reports.length - 1].messages;\n if (!messages[type]) messages[type] = [];\n messages[type]?.push(message);\n\n console.info(\n `%c[${type}]%c: ${message}`,\n `color: ${color}`,\n 'color: white',\n );\n };\n\n constructor() {\n super();\n\n this.reset();\n }\n\n error(message: string): void {\n if (this.#levels.error) {\n console.error(message);\n this.#log('error', message);\n }\n }\n\n info(message: string): void {\n if (this.#levels.info) this.#log('info', message);\n }\n\n success(message: string): void {\n if (this.#levels.success) this.#log('success', message);\n }\n\n report() {\n for (const report of this.#reports) {\n const errors = report.messages.error?.length ?? 0;\n const warns = report.messages.warn?.length ?? 0;\n const successes = report.messages.success?.length ?? 0;\n\n if (successes === warns && warns === errors && errors === 0) {\n if (\n report.title !==\n 'Test without title, use method it to set test title.'\n )\n console.log(\n `%cFor ${report.title}, no cases made.`,\n 'font-weight: bold; padding: 10px',\n );\n continue;\n }\n\n console.log(`%cFor ${report.title}`, 'font-weight: bold; padding: 10px');\n console.log(\n `%c${successes} tests succeed.`,\n `color: ${this.colors.success}`,\n );\n console.log(`%c${warns} warnings sent.`, `color: ${this.colors.warn}`);\n console.log(`%c${errors} errors found.`, `color: ${this.colors.error}`);\n }\n\n this.reset();\n }\n\n reset = () => {\n this.#reports = [\n {\n title: 'Test without title, use method it to set test title.',\n messages: {},\n },\n ];\n };\n\n title(title: string): void {\n this.#reports.push({ title, messages: {} });\n\n if (this.#levels.title) {\n const color = this.colors.title;\n\n console.info(\n `%c${title}`,\n `color: ${color}; font-weight: bold; padding: 10px`,\n );\n }\n }\n\n warn(message: string): void {\n if (this.#levels.warn) {\n console.warn(message);\n this.#log('warn', message);\n }\n }\n\n setDebugLevels(levels: Partial<Record<TLogType, boolean>>): void {\n this.#levels = { ...this.#levels, ...levels };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventEmitter, useMount } from '@apia/util';\nimport { CSSProperties, FC, useState } from 'react';\nimport { TestComponent } from './TestComponent';\nimport { ConsoleTestsLogger, TestsLogger } from './TestsLogger';\n\ntype TTask = {\n name: string;\n cb: () => Promise<boolean> | boolean;\n};\n\ntype TRunOptions = Partial<{\n /**\n * Delay al inicio\n */\n delay: number;\n /**\n * Cantidad de veces a ejecutar\n */\n n: number;\n /**\n * Demora entre reintentos\n */\n ms: number;\n /**\n * Omitir mensajes\n */\n silence: boolean;\n}>;\n\nexport class Test extends EventEmitter<{\n componentsListUpdated: boolean;\n componentMounted: string;\n}> {\n #components: TestComponent<any>[] = [];\n #ref: HTMLElement | null = null;\n\n logger: TestsLogger = new ConsoleTestsLogger();\n\n Component = ({ style }: { style: CSSProperties }) => {\n const [components, setComponents] = useState(this.#components);\n\n useMount(() => {\n return this.on('componentsListUpdated', () => {\n setComponents([...this.#components]);\n });\n });\n\n return (\n <div ref={(el) => (this.#ref = el)} style={{ display: 'none', ...style }}>\n {components.map((current) => (\n <current.Component\n ref={(el) => {\n if (el) this.emit('componentMounted', current.id);\n }}\n key={current.id}\n />\n ))}\n </div>\n );\n };\n\n /**\n * Devuelve el elemento html sobre el cual se están montando los tests\n */\n get root() {\n return this.#ref;\n }\n\n /**\n * Hace foco sobre un elemento del DOM y resuelve cuando puede hacer foco o\n * rompe cuando no puede hacer después de 5 intentos.\n */\n focus = (\n selector: string,\n check?: (element: HTMLElement) => boolean,\n options?: TRunOptions,\n ) => {\n const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);\n\n return new Promise<HTMLElement | null>((resolve) => {\n setTimeout(() => {\n let tries = actualOptions.n;\n const interval = setInterval(() => {\n this.logger.info(`Trying to focus with selector ${selector}`);\n tries--;\n const element = this.root?.querySelector<HTMLElement>(selector);\n\n if (element) {\n element.focus();\n\n if (check ? check(element) : element === document.activeElement) {\n clearInterval(interval);\n resolve(element);\n }\n }\n\n if (tries === 0) {\n clearInterval(interval);\n resolve(null);\n }\n }, actualOptions.ms);\n }, actualOptions.delay);\n });\n };\n\n /**\n * Anuncia un nuevo grupo de tests\n */\n it = (text: string) => {\n this.logger.title(text);\n };\n\n /**\n * Monta un componente para usarlo en el testing\n */\n mount = <T extends Record<string, unknown>>(\n name: string,\n component: FC<T>,\n initialProps: T,\n ) => {\n return new Promise<TestComponent<T>>((resolve) => {\n const newComponent = new TestComponent(\n name,\n this,\n component,\n initialProps,\n );\n this.#components.push(newComponent);\n this.emit('componentsListUpdated', true);\n const unsuscribe = this.on('componentMounted', (ev) => {\n if (ev === newComponent.id) {\n unsuscribe();\n resolve(newComponent);\n }\n });\n });\n };\n\n report = () => {\n this.logger.report();\n };\n\n #running = false;\n\n /**\n * Corre una tarea que va a intentar hasta n veces cada ms milisegundos antes\n * de resolver como fallo.\n *\n * @parameter options\n */\n should = async (\n name: string,\n cb: () => boolean | Promise<boolean>,\n options?: Omit<TRunOptions, 'silence'>,\n ) => {\n await this.wait('', () => !this.#running, { silence: true, n: 300 });\n\n this.#running = true;\n const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);\n\n return new Promise<void>((resolve) => {\n setTimeout(() => {\n let tries = actualOptions.n;\n\n const tryAgain = () => {\n window.requestAnimationFrame(() => {\n this.#run({ name, cb })\n .then((result) => {\n if (!result && tries-- > 0) {\n setTimeout(() => {\n tryAgain();\n }, actualOptions.ms);\n this.logger.warn(`[RETRY ${5 - tries}] ${name}`);\n } else if (result) {\n this.logger.success(`${name}`);\n resolve();\n this.#running = false;\n } else {\n this.logger.error(name);\n resolve();\n this.#running = false;\n }\n })\n .catch(() => {\n if (tries-- > 0) {\n setTimeout(() => {\n tryAgain();\n }, actualOptions.ms);\n this.logger.warn(`[RETRY ${5 - tries}] ${name}`);\n } else {\n this.logger.error(`[CATCH] ${name}`);\n resolve();\n this.#running = false;\n }\n });\n });\n };\n\n tryAgain();\n }, actualOptions.delay);\n });\n };\n\n unmount = (component: TestComponent<any>) => {\n this.#components = this.#components.filter(\n (current) => current !== component,\n );\n this.emit('componentsListUpdated', true);\n };\n\n /**\n * Espera por una condición a suceder, intentando n veces cada ms\n * milisegundos. La diferencia principal con should es que este método no se\n * ocupa de si un test pasa o falla, sino simplemente que trata de cumplir una\n * condición. Es especialmente útil para intentar hacer foco o esperar algún\n * evento en un futuro cercano.\n */\n wait = async (\n name: string,\n cb: () => boolean | Promise<boolean>,\n options?: TRunOptions,\n ) => {\n const actualOptions = Object.assign({ delay: 0, ms: 250, n: 5 }, options);\n\n return new Promise((resolve) => {\n setTimeout(() => {\n let tries = actualOptions.n;\n\n if (!actualOptions.silence) this.logger.info(`[WAITING] ${name}`);\n\n const tryAgain = () => {\n window.requestAnimationFrame(() => {\n if (tries-- > 0) {\n void (async () => {\n const result = await cb();\n if (!result) {\n setTimeout(() => {\n tryAgain();\n }, actualOptions.ms);\n } else {\n resolve(true);\n }\n })();\n } else {\n resolve(false);\n }\n });\n };\n\n tryAgain();\n }, actualOptions.delay);\n });\n };\n\n #run = async (task: TTask) => {\n try {\n const taskResult = await task.cb();\n\n if (taskResult) {\n return true;\n } else {\n return false;\n }\n } catch (e) {\n this.logger.error(String(e));\n return false;\n }\n };\n}\n\nexport { TestComponent, TestsLogger };\n"],"names":["__privateAdd","__privateGet","__spreadValues","__privateSet"],"mappings":"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"}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
8
8
  "types": "./dist/index.d.ts",
9
- "version": "0.3.6",
9
+ "version": "1.0.1",
10
10
  "scripts": {
11
11
  "build": "rollup -c rollup.config.esb.mjs",
12
12
  "buildDev": "rollup -c rollup.config.esb.mjs --dev",
@@ -39,7 +39,7 @@
39
39
  "directory": "packages/initiator"
40
40
  },
41
41
  "dependencies": {
42
- "@apia/util": "^0.3.6"
42
+ "@apia/util": "^1.0.1"
43
43
  },
44
- "gitHead": "c79e6173bbcd97539bec49c958374a0dc7e9da6f"
44
+ "gitHead": "a2430a210dacdfec4869e14b8fd438253b9c16a9"
45
45
  }