@coorpacademy/components 10.19.1 → 10.19.4

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 (110) hide show
  1. package/es/atom/button-link-icon-only/test/button-link-icon-only.js +18 -23
  2. package/es/atom/button-link-icon-only/test/button-link-icon-only.js.map +1 -1
  3. package/es/atom/checkbox/index.js +25 -41
  4. package/es/atom/checkbox/index.js.map +1 -1
  5. package/es/atom/checkbox/test/fixtures/default.js +2 -1
  6. package/es/atom/checkbox/test/fixtures/default.js.map +1 -1
  7. package/es/atom/checkbox/test/on-change.js +25 -22
  8. package/es/atom/checkbox/test/on-change.js.map +1 -1
  9. package/es/atom/clue/index.js +2 -1
  10. package/es/atom/clue/index.js.map +1 -1
  11. package/es/atom/clue/test/see-clue.js +83 -58
  12. package/es/atom/clue/test/see-clue.js.map +1 -1
  13. package/es/atom/lottie-wrapper/index.js +1 -1
  14. package/es/atom/lottie-wrapper/index.js.map +1 -1
  15. package/es/atom/review-background/style.css +1 -1
  16. package/es/atom/review-header-step-item/index.js +7 -3
  17. package/es/atom/review-header-step-item/index.js.map +1 -1
  18. package/es/atom/review-header-step-item/style.css +7 -10
  19. package/es/atom/review-presentation/index.js +10 -2
  20. package/es/atom/review-presentation/index.js.map +1 -1
  21. package/es/molecule/dashboard/cards-list/index.js +3 -7
  22. package/es/molecule/dashboard/cards-list/index.js.map +1 -1
  23. package/es/molecule/review-correction-popin/index.js +5 -2
  24. package/es/molecule/review-correction-popin/index.js.map +1 -1
  25. package/es/molecule/review-correction-popin/test/fixtures/wrong.js +1 -0
  26. package/es/molecule/review-correction-popin/test/fixtures/wrong.js.map +1 -1
  27. package/es/molecule/review-header-steps/index.js +3 -3
  28. package/es/molecule/review-header-steps/index.js.map +1 -1
  29. package/es/organism/review-congrats/index.js +1 -1
  30. package/es/organism/review-congrats/index.js.map +1 -1
  31. package/es/organism/review-congrats/style.css +0 -1
  32. package/es/organism/review-header/index.js +3 -3
  33. package/es/organism/review-header/index.js.map +1 -1
  34. package/es/organism/review-header/style.css +1 -1
  35. package/es/organism/review-header/test/fixtures/all-questions-ok.js +3 -1
  36. package/es/organism/review-header/test/fixtures/all-questions-ok.js.map +1 -1
  37. package/es/template/slides-review/index.js +421 -0
  38. package/es/template/slides-review/index.js.map +1 -0
  39. package/es/template/slides-review/style.css +373 -0
  40. package/es/template/slides-review/test/fixtures/failure.js +37 -0
  41. package/es/template/slides-review/test/fixtures/failure.js.map +1 -0
  42. package/es/template/slides-review/test/fixtures/only-once-on-last-slide.js +29 -0
  43. package/es/template/slides-review/test/fixtures/only-once-on-last-slide.js.map +1 -0
  44. package/es/template/slides-review/test/fixtures/random-responses.js +34 -0
  45. package/es/template/slides-review/test/fixtures/random-responses.js.map +1 -0
  46. package/es/template/slides-review/test/fixtures/success.js +54 -0
  47. package/es/template/slides-review/test/fixtures/success.js.map +1 -0
  48. package/es/template/slides-review/test/fixtures.js +19 -0
  49. package/es/template/slides-review/test/fixtures.js.map +1 -0
  50. package/es/template/slides-review/test/slides-review.js +147 -0
  51. package/es/template/slides-review/test/slides-review.js.map +1 -0
  52. package/es/util/render-with-context.js +35 -0
  53. package/es/util/render-with-context.js.map +1 -0
  54. package/es/util/test/render-with-context.js +91 -0
  55. package/es/util/test/render-with-context.js.map +1 -0
  56. package/lib/atom/button-link-icon-only/test/button-link-icon-only.js +20 -24
  57. package/lib/atom/button-link-icon-only/test/button-link-icon-only.js.map +1 -1
  58. package/lib/atom/checkbox/index.js +29 -41
  59. package/lib/atom/checkbox/index.js.map +1 -1
  60. package/lib/atom/checkbox/test/fixtures/default.js +2 -1
  61. package/lib/atom/checkbox/test/fixtures/default.js.map +1 -1
  62. package/lib/atom/checkbox/test/on-change.js +29 -23
  63. package/lib/atom/checkbox/test/on-change.js.map +1 -1
  64. package/lib/atom/clue/index.js +2 -1
  65. package/lib/atom/clue/index.js.map +1 -1
  66. package/lib/atom/clue/test/see-clue.js +88 -59
  67. package/lib/atom/clue/test/see-clue.js.map +1 -1
  68. package/lib/atom/lottie-wrapper/index.js +1 -1
  69. package/lib/atom/lottie-wrapper/index.js.map +1 -1
  70. package/lib/atom/review-background/style.css +1 -1
  71. package/lib/atom/review-header-step-item/index.js +10 -4
  72. package/lib/atom/review-header-step-item/index.js.map +1 -1
  73. package/lib/atom/review-header-step-item/style.css +7 -10
  74. package/lib/atom/review-presentation/index.js +10 -2
  75. package/lib/atom/review-presentation/index.js.map +1 -1
  76. package/lib/molecule/dashboard/cards-list/index.js +3 -7
  77. package/lib/molecule/dashboard/cards-list/index.js.map +1 -1
  78. package/lib/molecule/review-correction-popin/index.js +5 -2
  79. package/lib/molecule/review-correction-popin/index.js.map +1 -1
  80. package/lib/molecule/review-correction-popin/test/fixtures/wrong.js +1 -0
  81. package/lib/molecule/review-correction-popin/test/fixtures/wrong.js.map +1 -1
  82. package/lib/molecule/review-header-steps/index.js +3 -3
  83. package/lib/molecule/review-header-steps/index.js.map +1 -1
  84. package/lib/organism/review-congrats/index.js +1 -1
  85. package/lib/organism/review-congrats/index.js.map +1 -1
  86. package/lib/organism/review-congrats/style.css +0 -1
  87. package/lib/organism/review-header/index.js.map +1 -1
  88. package/lib/organism/review-header/style.css +1 -1
  89. package/lib/organism/review-header/test/fixtures/all-questions-ok.js +3 -1
  90. package/lib/organism/review-header/test/fixtures/all-questions-ok.js.map +1 -1
  91. package/lib/template/slides-review/index.js +447 -0
  92. package/lib/template/slides-review/index.js.map +1 -0
  93. package/lib/template/slides-review/style.css +373 -0
  94. package/lib/template/slides-review/test/fixtures/failure.js +50 -0
  95. package/lib/template/slides-review/test/fixtures/failure.js.map +1 -0
  96. package/lib/template/slides-review/test/fixtures/only-once-on-last-slide.js +39 -0
  97. package/lib/template/slides-review/test/fixtures/only-once-on-last-slide.js.map +1 -0
  98. package/lib/template/slides-review/test/fixtures/random-responses.js +45 -0
  99. package/lib/template/slides-review/test/fixtures/random-responses.js.map +1 -0
  100. package/lib/template/slides-review/test/fixtures/success.js +67 -0
  101. package/lib/template/slides-review/test/fixtures/success.js.map +1 -0
  102. package/lib/template/slides-review/test/fixtures.js +31 -0
  103. package/lib/template/slides-review/test/fixtures.js.map +1 -0
  104. package/lib/template/slides-review/test/slides-review.js +163 -0
  105. package/lib/template/slides-review/test/slides-review.js.map +1 -0
  106. package/lib/util/render-with-context.js +49 -0
  107. package/lib/util/render-with-context.js.map +1 -0
  108. package/lib/util/test/render-with-context.js +103 -0
  109. package/lib/util/test/render-with-context.js.map +1 -0
  110. package/package.json +2 -2
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+
3
+ var _browserEnv = _interopRequireDefault(require("browser-env"));
4
+
5
+ var _ava = _interopRequireDefault(require("ava"));
6
+
7
+ var _react = _interopRequireDefault(require("react"));
8
+
9
+ var _react2 = require("@testing-library/react");
10
+
11
+ var _ = _interopRequireDefault(require(".."));
12
+
13
+ var _qcmDrag = _interopRequireDefault(require("../../../molecule/answer/test/fixtures/qcm-drag"));
14
+
15
+ var _success = _interopRequireDefault(require("./fixtures/success"));
16
+
17
+ var _failure = _interopRequireDefault(require("./fixtures/failure"));
18
+
19
+ var _onlyOnceOnLastSlide = _interopRequireDefault(require("./fixtures/only-once-on-last-slide"));
20
+
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
+
23
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
24
+
25
+ (0, _browserEnv.default)({
26
+ pretendToBeVisual: true
27
+ });
28
+
29
+ const elementExists = foundElements => foundElements && foundElements[0];
30
+
31
+ const sleep = msToSleep => new Promise(resolve => setTimeout(resolve, msToSleep));
32
+
33
+ const waitForRevisionEndChanges = async () => {
34
+ await (0, _react2.act)(async () => {
35
+ await sleep(2500); // wait *just* a little longer than the timeout in the component
36
+ });
37
+ };
38
+
39
+ const qcmDrag = _qcmDrag.default.props;
40
+ const LIMIT = 5;
41
+
42
+ const clickAllSlides = async (t, container, accumulator = 0) => {
43
+ if (accumulator === LIMIT) return; // last one needs to wait for more calculations && components updates
44
+
45
+ if (accumulator === 4) await (0, _react2.act)(async () => {
46
+ await sleep(2000);
47
+ });
48
+ const validateButton = container.querySelectorAll(`[data-name="slide-validate-button-${accumulator}"]`);
49
+ t.truthy(elementExists(validateButton));
50
+ await (0, _react2.act)(async () => {
51
+ await _react2.fireEvent.click(validateButton[0]);
52
+ });
53
+ const nextButton = container.querySelectorAll(`[data-name="next-question-button-${accumulator}"]`);
54
+ t.truthy(elementExists(nextButton));
55
+ await (0, _react2.act)(async () => {
56
+ await _react2.fireEvent.click(nextButton[0]);
57
+ });
58
+ await clickAllSlides(t, container, accumulator + 1);
59
+ };
60
+
61
+ _ava.default.serial('should validate all the slides && unmount the stacked slides after', async t => {
62
+ const {
63
+ container
64
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_.default, _extends({}, _success.default.props, {
65
+ key: 0
66
+ })));
67
+ const wrapper = container.querySelectorAll('[data-name="slides-revision-container"]');
68
+ t.truthy(wrapper);
69
+ let stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
70
+ t.truthy(elementExists(stackedSlidesContainer));
71
+ await clickAllSlides(t, container);
72
+ await waitForRevisionEndChanges();
73
+ stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
74
+ t.falsy(elementExists(stackedSlidesContainer));
75
+ t.pass();
76
+ });
77
+
78
+ _ava.default.serial('should validate all the slides except the last one, retry and pass', async t => {
79
+ const {
80
+ container
81
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_.default, _extends({}, _onlyOnceOnLastSlide.default.props, {
82
+ key: 1
83
+ })));
84
+ const wrapper = container.querySelectorAll('[data-name="slides-revision-container"]');
85
+ t.truthy(wrapper);
86
+ const stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
87
+ t.truthy(elementExists(stackedSlidesContainer)); // loop once
88
+
89
+ await clickAllSlides(t, container); // fail the first slide again (the other slides are passed)
90
+
91
+ const validateButton = container.querySelectorAll('[data-name="slide-validate-button-0"]');
92
+ t.truthy(elementExists(validateButton));
93
+ await (0, _react2.act)(async () => {
94
+ await _react2.fireEvent.click(validateButton[0]);
95
+ });
96
+ t.pass();
97
+ });
98
+
99
+ _ava.default.serial('should fail all the slides && still find the stacked slides after', async t => {
100
+ const {
101
+ container
102
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_.default, _extends({}, _failure.default.props, {
103
+ key: 2
104
+ })));
105
+ const wrapper = container.querySelectorAll('[data-name="slides-revision-container"]');
106
+ t.truthy(wrapper);
107
+ let stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
108
+ t.truthy(elementExists(stackedSlidesContainer)); // loop once
109
+
110
+ await clickAllSlides(t, container); // fail the first slide again (all the other slides are also on fail state)
111
+
112
+ const validateButton = container.querySelectorAll('[data-name="slide-validate-button-0"]');
113
+ t.truthy(elementExists(validateButton));
114
+ await (0, _react2.act)(async () => {
115
+ await _react2.fireEvent.click(validateButton[0]);
116
+ });
117
+ stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
118
+ t.truthy(elementExists(stackedSlidesContainer));
119
+ t.pass();
120
+ });
121
+
122
+ _ava.default.serial('should end Revision on signal && unmount the stacked slides after', async t => {
123
+ t.plan(6);
124
+
125
+ const onValidateClick = () => {
126
+ t.pass();
127
+ return Promise.resolve({
128
+ validationResult: 'failure',
129
+ nextSlide: {
130
+ question: 'Other question?',
131
+ answer: qcmDrag
132
+ },
133
+ endReview: true
134
+ });
135
+ };
136
+
137
+ const props = _extends(_extends({}, _failure.default.props), {}, {
138
+ validate: {
139
+ label: _failure.default.props.validate.label,
140
+ onClick: onValidateClick
141
+ }
142
+ });
143
+
144
+ const {
145
+ container
146
+ } = (0, _react2.render)( /*#__PURE__*/_react.default.createElement(_.default, _extends({}, props, {
147
+ key: 3
148
+ })));
149
+ const wrapper = container.querySelectorAll('[data-name="slides-revision-container"]');
150
+ t.truthy(wrapper);
151
+ let stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
152
+ t.truthy(elementExists(stackedSlidesContainer));
153
+ const validateButton = container.querySelectorAll('[data-name="slide-validate-button-0"]');
154
+ t.truthy(elementExists(validateButton));
155
+ await (0, _react2.act)(async () => {
156
+ await _react2.fireEvent.click(validateButton[0]);
157
+ });
158
+ await waitForRevisionEndChanges();
159
+ stackedSlidesContainer = container.querySelectorAll('[data-name="stacked-slides-container"]');
160
+ t.falsy(elementExists(stackedSlidesContainer));
161
+ t.pass();
162
+ });
163
+ //# sourceMappingURL=slides-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/template/slides-review/test/slides-review.js"],"names":["pretendToBeVisual","elementExists","foundElements","sleep","msToSleep","Promise","resolve","setTimeout","waitForRevisionEndChanges","qcmDrag","AnswerQCMDrag","props","LIMIT","clickAllSlides","t","container","accumulator","validateButton","querySelectorAll","truthy","fireEvent","click","nextButton","test","serial","successFixture","wrapper","stackedSlidesContainer","falsy","pass","failOnceOnLastSlideFixture","failureFixture","plan","onValidateClick","validationResult","nextSlide","question","answer","endReview","validate","label","onClick"],"mappings":"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","sourcesContent":["import browserEnv from 'browser-env';\nimport test from 'ava';\nimport React from 'react';\nimport {render, fireEvent, act} from '@testing-library/react';\nimport SlidesReview from '..';\nimport AnswerQCMDrag from '../../../molecule/answer/test/fixtures/qcm-drag';\nimport successFixture from './fixtures/success';\nimport failureFixture from './fixtures/failure';\nimport failOnceOnLastSlideFixture from './fixtures/only-once-on-last-slide';\n\nbrowserEnv({pretendToBeVisual: true});\n\nconst elementExists = foundElements => foundElements && foundElements[0];\n\nconst sleep = msToSleep => new Promise(resolve => setTimeout(resolve, msToSleep));\n\nconst waitForRevisionEndChanges = async () => {\n await act(async () => {\n await sleep(2500); // wait *just* a little longer than the timeout in the component\n });\n};\n\nconst qcmDrag = AnswerQCMDrag.props;\n\nconst LIMIT = 5;\n\nconst clickAllSlides = async (t, container, accumulator = 0) => {\n if (accumulator === LIMIT) return;\n\n // last one needs to wait for more calculations && components updates\n if (accumulator === 4)\n await act(async () => {\n await sleep(2000);\n });\n\n const validateButton = container.querySelectorAll(\n `[data-name=\"slide-validate-button-${accumulator}\"]`\n );\n t.truthy(elementExists(validateButton));\n\n await act(async () => {\n await fireEvent.click(validateButton[0]);\n });\n\n const nextButton = container.querySelectorAll(\n `[data-name=\"next-question-button-${accumulator}\"]`\n );\n t.truthy(elementExists(nextButton));\n\n await act(async () => {\n await fireEvent.click(nextButton[0]);\n });\n\n await clickAllSlides(t, container, accumulator + 1);\n};\n\ntest.serial('should validate all the slides && unmount the stacked slides after', async t => {\n const {container} = render(<SlidesReview {...successFixture.props} key={0} />);\n\n const wrapper = container.querySelectorAll('[data-name=\"slides-revision-container\"]');\n t.truthy(wrapper);\n\n let stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.truthy(elementExists(stackedSlidesContainer));\n\n await clickAllSlides(t, container);\n\n await waitForRevisionEndChanges();\n\n stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.falsy(elementExists(stackedSlidesContainer));\n\n t.pass();\n});\n\ntest.serial('should validate all the slides except the last one, retry and pass', async t => {\n const {container} = render(<SlidesReview {...failOnceOnLastSlideFixture.props} key={1} />);\n\n const wrapper = container.querySelectorAll('[data-name=\"slides-revision-container\"]');\n t.truthy(wrapper);\n\n const stackedSlidesContainer = container.querySelectorAll(\n '[data-name=\"stacked-slides-container\"]'\n );\n t.truthy(elementExists(stackedSlidesContainer));\n\n // loop once\n await clickAllSlides(t, container);\n\n // fail the first slide again (the other slides are passed)\n const validateButton = container.querySelectorAll('[data-name=\"slide-validate-button-0\"]');\n t.truthy(elementExists(validateButton));\n\n await act(async () => {\n await fireEvent.click(validateButton[0]);\n });\n\n t.pass();\n});\n\ntest.serial('should fail all the slides && still find the stacked slides after', async t => {\n const {container} = render(<SlidesReview {...failureFixture.props} key={2} />);\n\n const wrapper = container.querySelectorAll('[data-name=\"slides-revision-container\"]');\n t.truthy(wrapper);\n\n let stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.truthy(elementExists(stackedSlidesContainer));\n\n // loop once\n await clickAllSlides(t, container);\n\n // fail the first slide again (all the other slides are also on fail state)\n const validateButton = container.querySelectorAll('[data-name=\"slide-validate-button-0\"]');\n t.truthy(elementExists(validateButton));\n\n await act(async () => {\n await fireEvent.click(validateButton[0]);\n });\n\n stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.truthy(elementExists(stackedSlidesContainer));\n\n t.pass();\n});\n\ntest.serial('should end Revision on signal && unmount the stacked slides after', async t => {\n t.plan(6);\n const onValidateClick = () => {\n t.pass();\n return Promise.resolve({\n validationResult: 'failure',\n nextSlide: {question: 'Other question?', answer: qcmDrag},\n endReview: true\n });\n };\n\n const props = {\n ...failureFixture.props,\n validate: {\n label: failureFixture.props.validate.label,\n onClick: onValidateClick\n }\n };\n\n const {container} = render(<SlidesReview {...props} key={3} />);\n\n const wrapper = container.querySelectorAll('[data-name=\"slides-revision-container\"]');\n t.truthy(wrapper);\n\n let stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.truthy(elementExists(stackedSlidesContainer));\n\n const validateButton = container.querySelectorAll('[data-name=\"slide-validate-button-0\"]');\n t.truthy(elementExists(validateButton));\n\n await act(async () => {\n await fireEvent.click(validateButton[0]);\n });\n\n await waitForRevisionEndChanges();\n\n stackedSlidesContainer = container.querySelectorAll('[data-name=\"stacked-slides-container\"]');\n t.falsy(elementExists(stackedSlidesContainer));\n\n t.pass();\n});\n"],"file":"slides-review.js"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.renderWithContext = void 0;
5
+
6
+ var _react = _interopRequireDefault(require("react"));
7
+
8
+ var _propTypes = _interopRequireDefault(require("prop-types"));
9
+
10
+ var _react2 = require("@testing-library/react");
11
+
12
+ var _translate = require("@coorpacademy/translate");
13
+
14
+ var _provider = _interopRequireDefault(require("../atom/provider"));
15
+
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
+
18
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
19
+
20
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
21
+
22
+ const renderWithContext = (component, _ref) => {
23
+ let {
24
+ context
25
+ } = _ref,
26
+ renderOptions = _objectWithoutPropertiesLoose(_ref, ["context"]);
27
+
28
+ // uses mockTranslate as a default translate function
29
+ const {
30
+ translate = _translate.mockTranslate
31
+ } = context,
32
+ rest = _objectWithoutPropertiesLoose(context, ["translate"]);
33
+
34
+ const wrapper = ({
35
+ children
36
+ }) => /*#__PURE__*/_react.default.createElement(_provider.default, _extends({}, rest, {
37
+ translate: translate
38
+ }), children);
39
+
40
+ wrapper.propTypes = process.env.NODE_ENV !== "production" ? {
41
+ children: _propTypes.default.node
42
+ } : {};
43
+ return (0, _react2.render)(component, _extends(_extends({}, renderOptions), {}, {
44
+ wrapper
45
+ }));
46
+ };
47
+
48
+ exports.renderWithContext = renderWithContext;
49
+ //# sourceMappingURL=render-with-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/util/render-with-context.js"],"names":["renderWithContext","component","context","renderOptions","translate","mockTranslate","rest","wrapper","children","propTypes","PropTypes","node"],"mappings":";;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEO,MAAMA,iBAAiB,GAAG,CAACC,SAAD,WAA4C;AAAA,MAAhC;AAACC,IAAAA;AAAD,GAAgC;AAAA,MAAnBC,aAAmB;;AAC3E;AACA,QAAM;AAACC,IAAAA,SAAS,GAAGC;AAAb,MAAuCH,OAA7C;AAAA,QAAqCI,IAArC,iCAA6CJ,OAA7C;;AAEA,QAAMK,OAAO,GAAG,CAAC;AAACC,IAAAA;AAAD,GAAD,kBACd,6BAAC,iBAAD,eAAcF,IAAd;AAAoB,IAAA,SAAS,EAAEF;AAA/B,MACGI,QADH,CADF;;AAMAD,EAAAA,OAAO,CAACE,SAAR,2CAAoB;AAClBD,IAAAA,QAAQ,EAAEE,mBAAUC;AADF,GAApB;AAIA,SAAO,oBAAOV,SAAP,wBACFE,aADE;AAELI,IAAAA;AAFK,KAAP;AAID,CAlBM","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {render} from '@testing-library/react';\nimport {mockTranslate} from '@coorpacademy/translate';\nimport Provider from '../atom/provider';\n\nexport const renderWithContext = (component, {context, ...renderOptions}) => {\n // uses mockTranslate as a default translate function\n const {translate = mockTranslate, ...rest} = context;\n\n const wrapper = ({children}) => (\n <Provider {...rest} translate={translate}>\n {children}\n </Provider>\n );\n\n wrapper.propTypes = {\n children: PropTypes.node\n };\n\n return render(component, {\n ...renderOptions,\n wrapper\n });\n};\n"],"file":"render-with-context.js"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ var _browserEnv = _interopRequireDefault(require("browser-env"));
4
+
5
+ var _react = _interopRequireDefault(require("react"));
6
+
7
+ var _ava = _interopRequireDefault(require("ava"));
8
+
9
+ var _translate = require("@coorpacademy/translate");
10
+
11
+ var _propTypes = _interopRequireDefault(require("prop-types"));
12
+
13
+ var _getOr = _interopRequireDefault(require("lodash/fp/getOr"));
14
+
15
+ var _renderWithContext = require("../render-with-context");
16
+
17
+ var _provider = _interopRequireDefault(require("../../atom/provider"));
18
+
19
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+
21
+ (0, _browserEnv.default)();
22
+
23
+ const TestComponent = (props, context) => {
24
+ const {
25
+ skin,
26
+ translate
27
+ } = context;
28
+ const {
29
+ label,
30
+ expectedPrimaryColor,
31
+ _test
32
+ } = props;
33
+ const primary = (0, _getOr.default)(null, 'common.primary', skin);
34
+
35
+ _test.is(primary, expectedPrimaryColor);
36
+
37
+ return /*#__PURE__*/_react.default.createElement("div", {
38
+ "data-name": "test-component"
39
+ }, translate(label));
40
+ };
41
+
42
+ TestComponent.propTypes = process.env.NODE_ENV !== "production" ? {
43
+ label: _propTypes.default.string,
44
+ expectedPrimaryColor: _propTypes.default.string,
45
+ // eslint-disable-next-line react/forbid-prop-types
46
+ _test: _propTypes.default.object
47
+ } : {};
48
+ TestComponent.contextTypes = {
49
+ translate: _provider.default.childContextTypes.translate,
50
+ skin: _provider.default.childContextTypes.skin
51
+ };
52
+ (0, _ava.default)('should use default context if the context is empty', t => {
53
+ t.plan(4);
54
+ const expectedPrimaryColor = '#00B0FF';
55
+ const props = {
56
+ label: 'test-label',
57
+ expectedPrimaryColor,
58
+ _test: t
59
+ };
60
+ const {
61
+ container
62
+ } = (0, _renderWithContext.renderWithContext)( /*#__PURE__*/_react.default.createElement(TestComponent, props), {
63
+ context: {}
64
+ });
65
+ const element = container.querySelector('[data-name="test-component"]');
66
+ t.truthy(element);
67
+ t.is(element.textContent, (0, _translate.mockTranslate)(props.label));
68
+ t.pass();
69
+ });
70
+ (0, _ava.default)('should use given context', t => {
71
+ t.plan(6);
72
+ const skin = {
73
+ common: {
74
+ primary: '#0091EA'
75
+ }
76
+ };
77
+
78
+ const translate = key => {
79
+ t.pass();
80
+ return key;
81
+ };
82
+
83
+ const expectedPrimaryColor = '#0091EA';
84
+ const props = {
85
+ label: 'test-label',
86
+ expectedPrimaryColor,
87
+ _test: t
88
+ };
89
+ const {
90
+ container
91
+ } = (0, _renderWithContext.renderWithContext)( /*#__PURE__*/_react.default.createElement(TestComponent, props), {
92
+ context: {
93
+ skin,
94
+ translate
95
+ }
96
+ });
97
+ const element = container.querySelector('[data-name="test-component"]');
98
+ t.truthy(element);
99
+ t.not(element.textContent, (0, _translate.mockTranslate)(props.label));
100
+ t.is(element.textContent, props.label);
101
+ t.pass();
102
+ });
103
+ //# sourceMappingURL=render-with-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/util/test/render-with-context.js"],"names":["TestComponent","props","context","skin","translate","label","expectedPrimaryColor","_test","primary","is","propTypes","PropTypes","string","object","contextTypes","Provider","childContextTypes","t","plan","container","element","querySelector","truthy","textContent","pass","common","key","not"],"mappings":"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","sourcesContent":["import browserEnv from 'browser-env';\nimport React from 'react';\nimport test from 'ava';\nimport {mockTranslate} from '@coorpacademy/translate';\nimport PropTypes from 'prop-types';\nimport getOr from 'lodash/fp/getOr';\nimport {renderWithContext} from '../render-with-context';\nimport Provider from '../../atom/provider';\n\nbrowserEnv();\n\nconst TestComponent = (props, context) => {\n const {skin, translate} = context;\n const {label, expectedPrimaryColor, _test} = props;\n\n const primary = getOr(null, 'common.primary', skin);\n _test.is(primary, expectedPrimaryColor);\n return <div data-name=\"test-component\">{translate(label)}</div>;\n};\n\nTestComponent.propTypes = {\n label: PropTypes.string,\n expectedPrimaryColor: PropTypes.string,\n // eslint-disable-next-line react/forbid-prop-types\n _test: PropTypes.object\n};\n\nTestComponent.contextTypes = {\n translate: Provider.childContextTypes.translate,\n skin: Provider.childContextTypes.skin\n};\n\ntest('should use default context if the context is empty', t => {\n t.plan(4);\n const expectedPrimaryColor = '#00B0FF';\n\n const props = {\n label: 'test-label',\n expectedPrimaryColor,\n _test: t\n };\n\n const {container} = renderWithContext(<TestComponent {...props} />, {\n context: {}\n });\n\n const element = container.querySelector('[data-name=\"test-component\"]');\n\n t.truthy(element);\n\n t.is(element.textContent, mockTranslate(props.label));\n\n t.pass();\n});\n\ntest('should use given context', t => {\n t.plan(6);\n const skin = {\n common: {\n primary: '#0091EA'\n }\n };\n\n const translate = key => {\n t.pass();\n return key;\n };\n\n const expectedPrimaryColor = '#0091EA';\n\n const props = {\n label: 'test-label',\n expectedPrimaryColor,\n _test: t\n };\n\n const {container} = renderWithContext(<TestComponent {...props} />, {\n context: {\n skin,\n translate\n }\n });\n\n const element = container.querySelector('[data-name=\"test-component\"]');\n\n t.truthy(element);\n\n t.not(element.textContent, mockTranslate(props.label));\n\n t.is(element.textContent, props.label);\n\n t.pass();\n});\n"],"file":"render-with-context.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coorpacademy/components",
3
- "version": "10.19.1",
3
+ "version": "10.19.4",
4
4
  "description": "",
5
5
  "main": "lib/index.js",
6
6
  "module": "es/index.js",
@@ -122,5 +122,5 @@
122
122
  "webpack-hot-middleware": "^2.25.0"
123
123
  },
124
124
  "author": "CoorpAcademy",
125
- "gitHead": "01ca5ad70c6e5fb3e580f7bef5e0fc05d5524ef8"
125
+ "gitHead": "81558b7380fa7d74e0f5a9f6ff1100b2a8121707"
126
126
  }