@forestadmin/agent-testing 0.1.0

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.
Files changed (111) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +52 -0
  3. package/dist/index.d.ts +4 -0
  4. package/dist/index.js +20 -0
  5. package/dist/integrations/benchmark.d.ts +13 -0
  6. package/dist/integrations/benchmark.js +36 -0
  7. package/dist/integrations/forest-admin-client-mock.d.ts +28 -0
  8. package/dist/integrations/forest-admin-client-mock.js +76 -0
  9. package/dist/integrations/forest-server-sandbox.d.ts +14 -0
  10. package/dist/integrations/forest-server-sandbox.js +153 -0
  11. package/dist/integrations/http-requester-mock.d.ts +8 -0
  12. package/dist/integrations/http-requester-mock.js +15 -0
  13. package/dist/integrations/index.d.ts +43 -0
  14. package/dist/integrations/index.js +119 -0
  15. package/dist/integrations/schema-converter.d.ts +6 -0
  16. package/dist/integrations/schema-converter.js +16 -0
  17. package/dist/integrations/schema-path-manager.d.ts +6 -0
  18. package/dist/integrations/schema-path-manager.js +25 -0
  19. package/dist/integrations/testable-agent-base.d.ts +7 -0
  20. package/dist/integrations/testable-agent-base.js +14 -0
  21. package/dist/integrations/testable-agent.d.ts +15 -0
  22. package/dist/integrations/testable-agent.js +33 -0
  23. package/dist/integrations/types.d.ts +5 -0
  24. package/dist/integrations/types.js +3 -0
  25. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.d.ts +8 -0
  26. package/dist/remote-agent-client/action-fields/action-field-checkbox-group.js +23 -0
  27. package/dist/remote-agent-client/action-fields/action-field-checkbox.d.ts +6 -0
  28. package/dist/remote-agent-client/action-fields/action-field-checkbox.js +16 -0
  29. package/dist/remote-agent-client/action-fields/action-field-color-picker.d.ts +7 -0
  30. package/dist/remote-agent-client/action-fields/action-field-color-picker.js +19 -0
  31. package/dist/remote-agent-client/action-fields/action-field-date.d.ts +5 -0
  32. package/dist/remote-agent-client/action-fields/action-field-date.js +13 -0
  33. package/dist/remote-agent-client/action-fields/action-field-dropdown.d.ts +7 -0
  34. package/dist/remote-agent-client/action-fields/action-field-dropdown.js +16 -0
  35. package/dist/remote-agent-client/action-fields/action-field-enum.d.ts +6 -0
  36. package/dist/remote-agent-client/action-fields/action-field-enum.js +19 -0
  37. package/dist/remote-agent-client/action-fields/action-field-json.d.ts +5 -0
  38. package/dist/remote-agent-client/action-fields/action-field-json.js +13 -0
  39. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.d.ts +7 -0
  40. package/dist/remote-agent-client/action-fields/action-field-multiple-choice.js +19 -0
  41. package/dist/remote-agent-client/action-fields/action-field-number-list.d.ts +6 -0
  42. package/dist/remote-agent-client/action-fields/action-field-number-list.js +20 -0
  43. package/dist/remote-agent-client/action-fields/action-field-number.d.ts +5 -0
  44. package/dist/remote-agent-client/action-fields/action-field-number.js +13 -0
  45. package/dist/remote-agent-client/action-fields/action-field-radio-group.d.ts +7 -0
  46. package/dist/remote-agent-client/action-fields/action-field-radio-group.js +16 -0
  47. package/dist/remote-agent-client/action-fields/action-field-string-list.d.ts +6 -0
  48. package/dist/remote-agent-client/action-fields/action-field-string-list.js +20 -0
  49. package/dist/remote-agent-client/action-fields/action-field-string.d.ts +5 -0
  50. package/dist/remote-agent-client/action-fields/action-field-string.js +13 -0
  51. package/dist/remote-agent-client/action-fields/action-field.d.ts +15 -0
  52. package/dist/remote-agent-client/action-fields/action-field.js +34 -0
  53. package/dist/remote-agent-client/action-fields/field-form-states.d.ts +25 -0
  54. package/dist/remote-agent-client/action-fields/field-form-states.js +94 -0
  55. package/dist/remote-agent-client/action-fields/field-getter.d.ts +10 -0
  56. package/dist/remote-agent-client/action-fields/field-getter.js +21 -0
  57. package/dist/remote-agent-client/action-fields/types.d.ts +28 -0
  58. package/dist/remote-agent-client/action-fields/types.js +3 -0
  59. package/dist/remote-agent-client/action-layout/action-layout-container.d.ts +9 -0
  60. package/dist/remote-agent-client/action-layout/action-layout-container.js +24 -0
  61. package/dist/remote-agent-client/action-layout/action-layout-element.d.ts +14 -0
  62. package/dist/remote-agent-client/action-layout/action-layout-element.js +47 -0
  63. package/dist/remote-agent-client/action-layout/action-layout-input.d.ts +7 -0
  64. package/dist/remote-agent-client/action-layout/action-layout-input.js +12 -0
  65. package/dist/remote-agent-client/action-layout/action-layout-page.d.ts +8 -0
  66. package/dist/remote-agent-client/action-layout/action-layout-page.js +18 -0
  67. package/dist/remote-agent-client/action-layout/action-layout-root.d.ts +6 -0
  68. package/dist/remote-agent-client/action-layout/action-layout-root.js +19 -0
  69. package/dist/remote-agent-client/action-layout/errors.d.ts +8 -0
  70. package/dist/remote-agent-client/action-layout/errors.js +16 -0
  71. package/dist/remote-agent-client/domains/action.d.ts +59 -0
  72. package/dist/remote-agent-client/domains/action.js +139 -0
  73. package/dist/remote-agent-client/domains/chart.d.ts +21 -0
  74. package/dist/remote-agent-client/domains/chart.js +39 -0
  75. package/dist/remote-agent-client/domains/collection-chart.d.ts +19 -0
  76. package/dist/remote-agent-client/domains/collection-chart.js +40 -0
  77. package/dist/remote-agent-client/domains/collection.d.ts +26 -0
  78. package/dist/remote-agent-client/domains/collection.js +109 -0
  79. package/dist/remote-agent-client/domains/relation.d.ts +11 -0
  80. package/dist/remote-agent-client/domains/relation.js +23 -0
  81. package/dist/remote-agent-client/domains/remote-agent-client.d.ts +41 -0
  82. package/dist/remote-agent-client/domains/remote-agent-client.js +43 -0
  83. package/dist/remote-agent-client/domains/segment.d.ts +14 -0
  84. package/dist/remote-agent-client/domains/segment.js +46 -0
  85. package/dist/remote-agent-client/http-requester.d.ts +30 -0
  86. package/dist/remote-agent-client/http-requester.js +67 -0
  87. package/dist/remote-agent-client/index.d.ts +10 -0
  88. package/dist/remote-agent-client/index.js +18 -0
  89. package/dist/remote-agent-client/query-serializer.d.ts +7 -0
  90. package/dist/remote-agent-client/query-serializer.js +34 -0
  91. package/dist/remote-agent-client/types.d.ts +25 -0
  92. package/dist/remote-agent-client/types.js +3 -0
  93. package/dist/units/add-action.d.ts +16 -0
  94. package/dist/units/add-action.js +70 -0
  95. package/dist/units/add-field.d.ts +3 -0
  96. package/dist/units/add-field.js +18 -0
  97. package/dist/units/add-hook.d.ts +3 -0
  98. package/dist/units/add-hook.js +18 -0
  99. package/dist/units/import-field.d.ts +3 -0
  100. package/dist/units/import-field.js +18 -0
  101. package/dist/units/index.d.ts +9 -0
  102. package/dist/units/index.js +25 -0
  103. package/dist/units/many-to-one-relation.d.ts +3 -0
  104. package/dist/units/many-to-one-relation.js +18 -0
  105. package/dist/units/replace-search.d.ts +3 -0
  106. package/dist/units/replace-search.js +18 -0
  107. package/dist/units/types.d.ts +34 -0
  108. package/dist/units/types.js +3 -0
  109. package/dist/units/use-plugin.d.ts +3 -0
  110. package/dist/units/use-plugin.js +18 -0
  111. package/package.json +55 -0
@@ -0,0 +1,25 @@
1
+ import { PlainFilter, PlainSortClause } from '@forestadmin/datasource-toolkit';
2
+ export type BaseOptions = {
3
+ filters?: PlainFilter;
4
+ sort?: PlainSortClause;
5
+ search?: string;
6
+ projection?: string[];
7
+ };
8
+ export type ExportOptions = BaseOptions;
9
+ export type LiveQueryOptions = {
10
+ connectionName: string;
11
+ query: string;
12
+ };
13
+ export type SegmentOptions = BaseOptions & {
14
+ liveQuerySegment?: {
15
+ connectionName: string;
16
+ query: string;
17
+ };
18
+ };
19
+ export type SelectOptions = BaseOptions & {
20
+ pagination?: {
21
+ size?: number;
22
+ number?: number;
23
+ };
24
+ };
25
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVtb3RlLWFnZW50LWNsaWVudC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
@@ -0,0 +1,16 @@
1
+ import type { ActionContext, CollectionCustomizerFunction, TestableAction } from './types';
2
+ /**
3
+ * Return a TestableAction allowing you to unit test action definition
4
+ */
5
+ export declare function getAddedAction(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableAction;
6
+ /**
7
+ * Static Form field accessor
8
+ */
9
+ export declare function getFormFieldAction<T>(action: TestableAction, id: string): T;
10
+ /**
11
+ * Dynamic Form field accessor
12
+ */
13
+ export declare function getDynamicFormFieldAction<T>(action: TestableAction, id: string, actionContext: ActionContext): Promise<T>;
14
+ export declare function getFormFieldValueAction<ReturnType>(action: TestableAction, id: string): (actionContext: ActionContext) => Promise<ReturnType>;
15
+ export declare function getDynamicFormFieldValueAction<ReturnType>(action: TestableAction, id: string, actionContext: ActionContext): Promise<(actionContext: ActionContext) => Promise<ReturnType>>;
16
+ //# sourceMappingURL=add-action.d.ts.map
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddedAction = getAddedAction;
4
+ exports.getFormFieldAction = getFormFieldAction;
5
+ exports.getDynamicFormFieldAction = getDynamicFormFieldAction;
6
+ exports.getFormFieldValueAction = getFormFieldValueAction;
7
+ exports.getDynamicFormFieldValueAction = getDynamicFormFieldValueAction;
8
+ function getFieldId(field) {
9
+ return 'id' in field && field.id ? field.id : field.label;
10
+ }
11
+ /**
12
+ * Return a TestableAction allowing you to unit test action definition
13
+ */
14
+ function getAddedAction(collectionCustomizerFunction, ...args) {
15
+ let action;
16
+ const collection = {
17
+ addAction(name, definition) {
18
+ if (action)
19
+ throw new Error('You have two addAction in your customization');
20
+ action = { definition, name };
21
+ return this;
22
+ },
23
+ };
24
+ collectionCustomizerFunction(collection, ...args);
25
+ return action;
26
+ }
27
+ function getInputFieldFromForm(form, id) {
28
+ return form.find(field => field.type !== 'Layout' &&
29
+ getFieldId(field) === id);
30
+ }
31
+ /**
32
+ * Static Form field accessor
33
+ */
34
+ function getFormFieldAction(action, id) {
35
+ if (!action.definition.form)
36
+ return null;
37
+ if (action.definition.form instanceof Function) {
38
+ throw new Error('Use getDynamicFormFieldAction function helper');
39
+ }
40
+ return getInputFieldFromForm(action.definition.form, id);
41
+ }
42
+ /**
43
+ * Dynamic Form field accessor
44
+ */
45
+ async function getDynamicFormFieldAction(action, id, actionContext) {
46
+ if (!action.definition.form)
47
+ return null;
48
+ if (!(action.definition.form instanceof Function)) {
49
+ throw new Error('Use getFormFieldAction function helper');
50
+ }
51
+ const form = await action.definition.form(actionContext);
52
+ return getInputFieldFromForm(form, id);
53
+ }
54
+ function getFormFieldValueAction(action, id) {
55
+ if (!action.definition.form)
56
+ return null;
57
+ if (action.definition.form instanceof Function) {
58
+ throw new Error('Use getDynamicFormFieldValueAction function helper');
59
+ }
60
+ return getFormFieldAction(action, id).value;
61
+ }
62
+ async function getDynamicFormFieldValueAction(action, id, actionContext) {
63
+ if (!action.definition.form)
64
+ return null;
65
+ if (!(action.definition.form instanceof Function)) {
66
+ throw new Error('Use getFormFieldValueAction function helper');
67
+ }
68
+ return (await getDynamicFormFieldAction(action, id, actionContext)).value;
69
+ }
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bml0cy9hZGQtYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLHdDQWtCQztBQWdCRCxnREFRQztBQUtELDhEQWNDO0FBRUQsMERBZUM7QUFFRCx3RUFnQkM7QUF2R0QsU0FBUyxVQUFVLENBQUMsS0FBeUQ7SUFDM0UsT0FBTyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDNUQsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1Qiw0QkFBMEQsRUFDMUQsR0FBRyxJQUFXO0lBRWQsSUFBSSxNQUFzQixDQUFDO0lBRTNCLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFNBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVTtZQUN4QixJQUFJLE1BQU07Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUU5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FDRixDQUFDO0lBRUYsNEJBQTRCLENBQUMsVUFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRXpELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUM1QixJQUF1RCxFQUN2RCxFQUFVO0lBRVYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUNkLEtBQUssQ0FBQyxFQUFFLENBQ04sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1FBQ3ZCLFVBQVUsQ0FBQyxLQUEyRCxDQUFDLEtBQUssRUFBRSxDQUNqRSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGtCQUFrQixDQUFJLE1BQXNCLEVBQUUsRUFBVTtJQUN0RSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFekMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksWUFBWSxRQUFRLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELE9BQU8scUJBQXFCLENBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUM3QyxNQUFzQixFQUN0QixFQUFVLEVBQ1YsYUFBNEI7SUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXpDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxZQUFZLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxNQUFNLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRXpELE9BQU8scUJBQXFCLENBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFFRCxTQUFnQix1QkFBdUIsQ0FDckMsTUFBc0IsRUFDdEIsRUFBVTtJQUVWLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUk7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV6QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxZQUFZLFFBQVEsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsT0FDRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUc5QixDQUFDLEtBQUssQ0FBQztBQUNWLENBQUM7QUFFTSxLQUFLLFVBQVUsOEJBQThCLENBQ2xELE1BQXNCLEVBQ3RCLEVBQVUsRUFDVixhQUE0QjtJQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFekMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFlBQVksUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNsRCxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELE9BQ0UsQ0FBQyxNQUFNLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsYUFBYSxDQUFDLENBRzVELENBQUMsS0FBSyxDQUFDO0FBQ1YsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableField } from './types';
2
+ export declare function getAddedField(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableField;
3
+ //# sourceMappingURL=add-field.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddedField = getAddedField;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getAddedField(collectionCustomizerFunction, ...args) {
6
+ let field;
7
+ const collection = {
8
+ addField(name, definition) {
9
+ if (field)
10
+ throw new Error('You have two addField in your customization');
11
+ field = { definition, name };
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return field;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VuaXRzL2FkZC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLHNDQWtCQztBQW5CRCx3REFBd0Q7QUFDeEQsU0FBZ0IsYUFBYSxDQUMzQiw0QkFBMEQsRUFDMUQsR0FBRyxJQUFXO0lBRWQsSUFBSSxLQUFvQixDQUFDO0lBRXpCLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVTtZQUN2QixJQUFJLEtBQUs7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1lBQzFFLEtBQUssR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUU3QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FDRixDQUFDO0lBRUYsNEJBQTRCLENBQUMsVUFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRXpELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableHook } from './types';
2
+ export declare function getAddedHook(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableHook;
3
+ //# sourceMappingURL=add-hook.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddedHook = getAddedHook;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getAddedHook(collectionCustomizerFunction, ...args) {
6
+ let hook;
7
+ const collection = {
8
+ addHook(position, type, handler) {
9
+ if (hook)
10
+ throw new Error('You have two addHook in your customization');
11
+ hook = { position, type, handler };
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return hook;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWhvb2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvYWRkLWhvb2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxvQ0FrQkM7QUFuQkQsd0RBQXdEO0FBQ3hELFNBQWdCLFlBQVksQ0FDMUIsNEJBQTBELEVBQzFELEdBQUcsSUFBVztJQUVkLElBQUksSUFBa0IsQ0FBQztJQUV2QixNQUFNLFVBQVUsR0FBRztRQUNqQixPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPO1lBQzdCLElBQUksSUFBSTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7WUFDeEUsSUFBSSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUVuQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7S0FDRixDQUFDO0lBRUYsNEJBQTRCLENBQUMsVUFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRXpELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableImportedField } from './types';
2
+ export declare function getImportedField(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableImportedField;
3
+ //# sourceMappingURL=import-field.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getImportedField = getImportedField;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getImportedField(collectionCustomizerFunction, ...args) {
6
+ let field;
7
+ const collection = {
8
+ importField(name, options) {
9
+ if (field)
10
+ throw new Error('You have two importField in your customization');
11
+ field = { options, name };
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return field;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LWZpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VuaXRzL2ltcG9ydC1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUdBLDRDQWtCQztBQW5CRCx3REFBd0Q7QUFDeEQsU0FBZ0IsZ0JBQWdCLENBQzlCLDRCQUEwRCxFQUMxRCxHQUFHLElBQVc7SUFFZCxJQUFJLEtBQTRCLENBQUM7SUFFakMsTUFBTSxVQUFVLEdBQUc7UUFDakIsV0FBVyxDQUFDLElBQUksRUFBRSxPQUFPO1lBQ3ZCLElBQUksS0FBSztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7WUFDN0UsS0FBSyxHQUFHLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1lBRTFCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGLENBQUM7SUFFRiw0QkFBNEIsQ0FBQyxVQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFekQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIn0=
@@ -0,0 +1,9 @@
1
+ export * from './add-action';
2
+ export * from './add-field';
3
+ export * from './add-hook';
4
+ export * from './import-field';
5
+ export * from './many-to-one-relation';
6
+ export * from './types';
7
+ export * from './replace-search';
8
+ export * from './use-plugin';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./add-action"), exports);
18
+ __exportStar(require("./add-field"), exports);
19
+ __exportStar(require("./add-hook"), exports);
20
+ __exportStar(require("./import-field"), exports);
21
+ __exportStar(require("./many-to-one-relation"), exports);
22
+ __exportStar(require("./types"), exports);
23
+ __exportStar(require("./replace-search"), exports);
24
+ __exportStar(require("./use-plugin"), exports);
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUE2QjtBQUM3Qiw4Q0FBNEI7QUFDNUIsNkNBQTJCO0FBQzNCLGlEQUErQjtBQUMvQix5REFBdUM7QUFDdkMsMENBQXdCO0FBQ3hCLG1EQUFpQztBQUNqQywrQ0FBNkIifQ==
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableAddedManyToOneRelation } from './types';
2
+ export declare function getAddedManyToOneRelation(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableAddedManyToOneRelation;
3
+ //# sourceMappingURL=many-to-one-relation.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAddedManyToOneRelation = getAddedManyToOneRelation;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getAddedManyToOneRelation(collectionCustomizerFunction, ...args) {
6
+ let relation;
7
+ const collection = {
8
+ addManyToOneRelation(name, foreignCollection, options) {
9
+ if (relation)
10
+ throw new Error('You have two addManyToOneRelation in your customization');
11
+ relation = { name, foreignCollection, options };
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return relation;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFueS10by1vbmUtcmVsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvbWFueS10by1vbmUtcmVsYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSw4REFrQkM7QUFuQkQsd0RBQXdEO0FBQ3hELFNBQWdCLHlCQUF5QixDQUN2Qyw0QkFBMEQsRUFDMUQsR0FBRyxJQUFXO0lBRWQsSUFBSSxRQUF3QyxDQUFDO0lBRTdDLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLG9CQUFvQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxPQUFPO1lBQ25ELElBQUksUUFBUTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7WUFDekYsUUFBUSxHQUFHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxDQUFDO1lBRWhELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGLENBQUM7SUFFRiw0QkFBNEIsQ0FBQyxVQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFekQsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableSearchReplacement } from './types';
2
+ export declare function getSearchReplacement(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableSearchReplacement;
3
+ //# sourceMappingURL=replace-search.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSearchReplacement = getSearchReplacement;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getSearchReplacement(collectionCustomizerFunction, ...args) {
6
+ let searchReplacement;
7
+ const collection = {
8
+ replaceSearch(definition) {
9
+ if (searchReplacement)
10
+ throw new Error('You have two replacements in your customization');
11
+ searchReplacement = definition;
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return searchReplacement;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGFjZS1zZWFyY2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvcmVwbGFjZS1zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxvREFrQkM7QUFuQkQsd0RBQXdEO0FBQ3hELFNBQWdCLG9CQUFvQixDQUNsQyw0QkFBMEQsRUFDMUQsR0FBRyxJQUFXO0lBRWQsSUFBSSxpQkFBNEMsQ0FBQztJQUVqRCxNQUFNLFVBQVUsR0FBRztRQUNqQixhQUFhLENBQUMsVUFBVTtZQUN0QixJQUFJLGlCQUFpQjtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDMUYsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1lBRS9CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGLENBQUM7SUFFRiw0QkFBNEIsQ0FBQyxVQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFekQsT0FBTyxpQkFBaUIsQ0FBQztBQUMzQixDQUFDIn0=
@@ -0,0 +1,34 @@
1
+ import type { CollectionCustomizer } from '@forestadmin/datasource-customizer';
2
+ import { ActionContextSingle, TSchema } from '@forestadmin/datasource-customizer';
3
+ export type CollectionCustomizerFunction = (collection: CollectionCustomizer<any, any>, ...args: any[]) => void;
4
+ export type TestableAction = {
5
+ name: Parameters<CollectionCustomizer['addAction']>['0'];
6
+ definition: Parameters<CollectionCustomizer['addAction']>['1'];
7
+ };
8
+ export type TestableHook = {
9
+ position: Parameters<CollectionCustomizer['addHook']>['0'];
10
+ type: Parameters<CollectionCustomizer['addHook']>['1'];
11
+ handler: Parameters<CollectionCustomizer['addHook']>['2'];
12
+ };
13
+ export type TestableField = {
14
+ name: Parameters<CollectionCustomizer['addField']>['0'];
15
+ definition: Parameters<CollectionCustomizer['addField']>['1'];
16
+ };
17
+ export type TestableImportedField = {
18
+ name: Parameters<CollectionCustomizer['importField']>['0'];
19
+ options: Parameters<CollectionCustomizer['importField']>['1'];
20
+ };
21
+ export type TestableUsedPlugin = {
22
+ options: Parameters<CollectionCustomizer['use']>['1'];
23
+ };
24
+ export type TestableSearchReplacement = Parameters<CollectionCustomizer['replaceSearch']>['0'];
25
+ export type TestableAddedManyToOneRelation = {
26
+ name: Parameters<CollectionCustomizer['addManyToOneRelation']>['0'];
27
+ foreignCollection: Parameters<CollectionCustomizer['addManyToOneRelation']>['1'];
28
+ options: Parameters<CollectionCustomizer['addManyToOneRelation']>['2'];
29
+ };
30
+ export type ActionContext = ActionContextSingle<TSchema, any> & {
31
+ formValues: any;
32
+ };
33
+ export type Context = Record<string, any>;
34
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdW5pdHMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,3 @@
1
+ import type { CollectionCustomizerFunction, TestableUsedPlugin } from './types';
2
+ export declare function getUsedPlugin(collectionCustomizerFunction: CollectionCustomizerFunction, ...args: any[]): TestableUsedPlugin;
3
+ //# sourceMappingURL=use-plugin.d.ts.map
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getUsedPlugin = getUsedPlugin;
4
+ // eslint-disable-next-line import/prefer-default-export
5
+ function getUsedPlugin(collectionCustomizerFunction, ...args) {
6
+ let used;
7
+ const collection = {
8
+ use(_, options) {
9
+ if (!options)
10
+ throw new Error('You have no options for this plugin');
11
+ used = { options };
12
+ return this;
13
+ },
14
+ };
15
+ collectionCustomizerFunction(collection, ...args);
16
+ return used;
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLXBsdWdpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91bml0cy91c2UtcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esc0NBa0JDO0FBbkJELHdEQUF3RDtBQUN4RCxTQUFnQixhQUFhLENBQzNCLDRCQUEwRCxFQUMxRCxHQUFHLElBQVc7SUFFZCxJQUFJLElBQXdCLENBQUM7SUFFN0IsTUFBTSxVQUFVLEdBQUc7UUFDakIsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPO1lBQ1osSUFBSSxDQUFDLE9BQU87Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ3JFLElBQUksR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBRW5CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztLQUNGLENBQUM7SUFFRiw0QkFBNEIsQ0FBQyxVQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFFekQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@forestadmin/agent-testing",
3
+ "version": "0.1.0",
4
+ "description": "Testing utilities for Forest Admin agent",
5
+ "author": "Vincent Molinié <vincent.m@forestadmin.com>",
6
+ "homepage": "https://github.com/ForestAdmin/agent-nodejs#readme",
7
+ "license": "GPL-3.0",
8
+ "main": "dist/index.js",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "files": [
13
+ "dist/**/*.js",
14
+ "dist/**/*.d.ts"
15
+ ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/ForestAdmin/agent-nodejs.git",
19
+ "directory": "packages/agent-testing"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "build:watch": "tsc --watch",
24
+ "clean": "rm -rf coverage dist",
25
+ "lint": "eslint src test",
26
+ "test": "jest"
27
+ },
28
+ "dependencies": {
29
+ "@forestadmin/agent-client": "1.4.0",
30
+ "@forestadmin/datasource-customizer": "1.67.2",
31
+ "@forestadmin/datasource-toolkit": "1.50.1",
32
+ "@forestadmin/forestadmin-client": "1.37.4",
33
+ "jsonapi-serializer": "^3.6.9",
34
+ "jsonwebtoken": "^9.0.0",
35
+ "superagent": "^10.2.3"
36
+ },
37
+ "peerDependencies": {
38
+ "@forestadmin/agent": ">=1.0.0"
39
+ },
40
+ "peerDependenciesMeta": {
41
+ "@forestadmin/agent": {
42
+ "optional": true
43
+ }
44
+ },
45
+ "devDependencies": {
46
+ "@forestadmin/agent": "1.70.10",
47
+ "@forestadmin/datasource-sql": "1.17.2",
48
+ "@types/jsonwebtoken": "^9.0.1",
49
+ "@types/superagent": "^8.1.9",
50
+ "sequelize": "^6.37.7"
51
+ },
52
+ "bugs": {
53
+ "url": "https://github.com/ForestAdmin/agent-nodejs/issues"
54
+ }
55
+ }