@ordergroove/offers 2.23.1 → 2.24.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.
- package/CHANGELOG.md +15 -0
- package/build.js +5 -0
- package/dist/bundle-report.html +220 -63
- package/dist/examples.js +385 -1897
- package/dist/examples.js.map +7 -1
- package/dist/offers.js +251 -214
- package/dist/offers.js.map +7 -1
- package/examples/index.html +3 -0
- package/examples/index.js +4 -4
- package/karma-functional.conf.js +12 -10
- package/karma.conf.js +20 -10
- package/package.json +10 -15
- package/src/{_tests_ → __tests__}/offers.spec.js +3 -5
- package/src/__tests__/test-mode.spec.js +16 -0
- package/src/components/FrequencyStatus.js +2 -2
- package/src/components/IncentiveText.js +1 -1
- package/src/components/Offer.js +11 -14
- package/src/components/OptinButton.js +2 -5
- package/src/components/OptinSelect.js +2 -2
- package/src/components/OptinToggle.js +1 -4
- package/src/components/OptoutButton.js +1 -4
- package/src/components/SelectFrequency.js +4 -8
- package/src/components/UpsellButton.js +2 -5
- package/src/components/UpsellModal.js +6 -10
- package/src/components/__tests__/FrequencyStatus.spec.js +33 -38
- package/src/components/__tests__/IncentiveText.spec.js +1 -1
- package/src/components/__tests__/Modal.spec.js +1 -1
- package/src/components/__tests__/NextUpcomingOrder.spec.js +1 -1
- package/src/components/__tests__/Offer.spec.js +5 -7
- package/src/components/__tests__/OptinButton.spec.js +1 -1
- package/src/components/__tests__/OptinSelect.spec.js +1 -1
- package/src/components/__tests__/OptinStatus.spec.js +1 -1
- package/src/components/__tests__/Select.spec.js +1 -1
- package/src/components/__tests__/SelectFrequency.spec.js +17 -6
- package/src/components/__tests__/Text.spec.js +1 -1
- package/src/components/__tests__/Tooltip.spec.js +1 -1
- package/src/components/__tests__/UpsellButton.spec.js +4 -6
- package/src/components/__tests__/When.spec.js +1 -1
- package/src/core/__tests__/api.spec.js +10 -3
- package/src/core/__tests__/base.spec.js +8 -2
- package/src/core/__tests__/reducer.spec.js +1 -1
- package/src/core/actions.js +9 -6
- package/src/core/adapters.js +3 -3
- package/src/core/api.js +4 -1
- package/src/core/localStorage.js +1 -1
- package/src/core/middleware.js +9 -7
- package/src/core/selectors.js +19 -33
- package/src/index.js +1 -4
- package/src/init-func-tests.js +1 -2
- package/src/init-test.js +3 -0
- package/src/test-mode.js +5 -3
- package/dist/index.html +0 -125
- package/dist/offers-preview-mode.bundle.js +0 -2
- package/dist/offers-preview-mode.bundle.js.map +0 -1
- package/dist/offers-test-mode.bundle.js +0 -100
- package/dist/offers-test-mode.bundle.js.map +0 -1
- package/src/_tests_/test-mode.spec.js +0 -15
- package/webpack.config.js +0 -43
package/examples/index.html
CHANGED
|
@@ -121,5 +121,8 @@
|
|
|
121
121
|
|
|
122
122
|
<pre id="the-html"></pre>
|
|
123
123
|
<textarea id="the-js" readonly></textarea>
|
|
124
|
+
<script type="text/javascript" src="examples.js"></script>
|
|
125
|
+
<!-- offers should be latest since it overides og.offers namespace -->
|
|
126
|
+
<script type="text/javascript" src="offers.js"></script>
|
|
124
127
|
</body>
|
|
125
128
|
</html>
|
package/examples/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/* global og */
|
|
2
2
|
import { getMarkup, getStyles } from '@ordergroove/offers-templates';
|
|
3
3
|
|
|
4
|
-
import runTests from '../src/run-tests';
|
|
4
|
+
// import runTests from '../src/run-tests';
|
|
5
5
|
|
|
6
|
-
runTests();
|
|
6
|
+
// runTests();
|
|
7
7
|
|
|
8
8
|
const frequencies = [
|
|
9
9
|
{
|
|
@@ -354,7 +354,7 @@ function updateTemplate(target) {
|
|
|
354
354
|
|
|
355
355
|
el.setAttribute('location', value);
|
|
356
356
|
window.location.hash = value;
|
|
357
|
-
|
|
357
|
+
setTimeout(() => {
|
|
358
358
|
const data = target.dataset.config;
|
|
359
359
|
|
|
360
360
|
const style = document.getElementById('offersGlobalCss');
|
|
@@ -364,7 +364,7 @@ function updateTemplate(target) {
|
|
|
364
364
|
|
|
365
365
|
document.getElementById('the-html').innerText = (JSON.parse(data).markup || '').trim();
|
|
366
366
|
document.getElementById('the-js').innerHTML = data;
|
|
367
|
-
});
|
|
367
|
+
}, 0);
|
|
368
368
|
}
|
|
369
369
|
|
|
370
370
|
const addOption = dropdown => (it, ix) => {
|
package/karma-functional.conf.js
CHANGED
|
@@ -41,18 +41,20 @@ module.exports = function(config) {
|
|
|
41
41
|
// preprocess matching files before serving them to the browser
|
|
42
42
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
|
43
43
|
preprocessors: {
|
|
44
|
-
'src/**/*.fspec.js': ['
|
|
45
|
-
},
|
|
46
|
-
webpack: {
|
|
47
|
-
mode: 'development'
|
|
48
|
-
// devtool: 'inline-source-map'
|
|
44
|
+
'src/**/*.fspec.js': ['esbuild']
|
|
49
45
|
},
|
|
46
|
+
esbuild: {
|
|
47
|
+
// Replace some global variables
|
|
48
|
+
define: {
|
|
49
|
+
// COVERAGE: coverage,
|
|
50
|
+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || ''),
|
|
51
|
+
ENABLE_PERFORMANCE: true
|
|
52
|
+
},
|
|
53
|
+
// plugins: [createEsbuildPlugin()],
|
|
50
54
|
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
stats: 'errors-only'
|
|
55
|
-
// logLevel: 'debug'
|
|
55
|
+
// Karma-esbuild specific options
|
|
56
|
+
singleBundle: false // Merge all test files into one bundle(default: true)
|
|
57
|
+
// singleBundle: true // Merge all test files into one bundle(default: true)
|
|
56
58
|
},
|
|
57
59
|
|
|
58
60
|
// test results reporter to use
|
package/karma.conf.js
CHANGED
|
@@ -9,6 +9,12 @@ module.exports = function(config) {
|
|
|
9
9
|
|
|
10
10
|
// list of files / patterns to load in the browser
|
|
11
11
|
files: [
|
|
12
|
+
{
|
|
13
|
+
pattern: 'src/init-test.js',
|
|
14
|
+
type: 'js',
|
|
15
|
+
included: true,
|
|
16
|
+
served: true
|
|
17
|
+
},
|
|
12
18
|
{
|
|
13
19
|
pattern: 'src/**/*.spec.js',
|
|
14
20
|
type: 'js',
|
|
@@ -23,17 +29,21 @@ module.exports = function(config) {
|
|
|
23
29
|
// preprocess matching files before serving them to the browser
|
|
24
30
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
|
25
31
|
preprocessors: {
|
|
26
|
-
'
|
|
32
|
+
'**/*.js': ['esbuild']
|
|
27
33
|
},
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
|
|
35
|
+
esbuild: {
|
|
36
|
+
// Replace some global variables
|
|
37
|
+
define: {
|
|
38
|
+
// COVERAGE: coverage,
|
|
39
|
+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || ''),
|
|
40
|
+
ENABLE_PERFORMANCE: true
|
|
41
|
+
},
|
|
42
|
+
// plugins: [createEsbuildPlugin()],
|
|
43
|
+
|
|
44
|
+
// Karma-esbuild specific options
|
|
45
|
+
singleBundle: false // Merge all test files into one bundle(default: true)
|
|
46
|
+
// singleBundle: true // Merge all test files into one bundle(default: true)
|
|
37
47
|
},
|
|
38
48
|
|
|
39
49
|
// test results reporter to use
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ordergroove/offers",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.24.0",
|
|
4
4
|
"description": "offer state component",
|
|
5
5
|
"author": "Eugenio Lattanzio <eugenio63@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/ordergroove/plush-toys#readme",
|
|
@@ -11,21 +11,17 @@
|
|
|
11
11
|
"url": "git+https://github.com/ordergroove/plush-toys.git"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"start": "
|
|
15
|
-
"build": "rm -rf dist &&
|
|
16
|
-
"build:prod": "rm -rf dist &&
|
|
17
|
-
"build:dev": "rm -rf dist && ../../node_modules/.bin/webpack --mode development",
|
|
14
|
+
"start": "npm run build -- --serve",
|
|
15
|
+
"build": "rm -rf dist && mkdir dist && cp examples/index.html dist/index.html && node build.js",
|
|
16
|
+
"build:prod": "rm -rf dist && node build.js --prod",
|
|
18
17
|
"bundlesize": "../../node_modules/.bin/bundlesize",
|
|
19
18
|
"lint": "../../node_modules/.bin/eslint --ignore-path ../../.gitignore ./src",
|
|
20
|
-
"
|
|
21
|
-
"watch": "rm -rf dist && ../../node_modules/.bin/webpack --mode development --watch",
|
|
22
|
-
"prepublishOnly": "npm run -s lint && npm run -s test && npm run -s build:prod && npm run -s bundlesize",
|
|
19
|
+
"prepublishOnly": "npm run -s build:prod && npm run -s bundlesize",
|
|
23
20
|
"test": "../../node_modules/.bin/karma start --single-run --log-level error --reporters progress && npm run build && ../../node_modules/.bin/karma start --single-run --log-level error --reporters progress karma-functional.conf.js",
|
|
24
21
|
"test:watch": "../../node_modules/.bin/karma start",
|
|
25
22
|
"test:watch:functional": "npm run build:dev && ../../node_modules/.bin/karma start karma-functional.conf.js",
|
|
26
23
|
"test:functional": "npm run test:watch:functional -- --single-run --log-level error --reporters progress",
|
|
27
|
-
"test:watch:silent": "../../node_modules/.bin/karma start --log-level error --reporters dots"
|
|
28
|
-
"postversion": "../../bin/postversion.sh"
|
|
24
|
+
"test:watch:silent": "../../node_modules/.bin/karma start --log-level error --reporters dots"
|
|
29
25
|
},
|
|
30
26
|
"bugs": {
|
|
31
27
|
"url": "https://github.com/ordergroove/plush-toys/issues"
|
|
@@ -37,8 +33,8 @@
|
|
|
37
33
|
}
|
|
38
34
|
],
|
|
39
35
|
"dependencies": {
|
|
40
|
-
"@ordergroove/auth": "^2.
|
|
41
|
-
"@ordergroove/offers-live-editor": "^0.
|
|
36
|
+
"@ordergroove/auth": "^2.2.0",
|
|
37
|
+
"@ordergroove/offers-live-editor": "^0.4.0",
|
|
42
38
|
"lit-element": "^2.1.0",
|
|
43
39
|
"lodash.memoize": "^4.1.2",
|
|
44
40
|
"logical-expression-parser": "1.0.0",
|
|
@@ -47,8 +43,7 @@
|
|
|
47
43
|
"throttle-debounce": "^2.1.0"
|
|
48
44
|
},
|
|
49
45
|
"devDependencies": {
|
|
50
|
-
"@ordergroove/
|
|
51
|
-
"@ordergroove/offers-templates": "^0.3.19"
|
|
46
|
+
"@ordergroove/offers-templates": "^0.4.0"
|
|
52
47
|
},
|
|
53
|
-
"gitHead": "
|
|
48
|
+
"gitHead": "5a104d20766e12bc957a4f052eb293facf8f26e5"
|
|
54
49
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import offers from '../index';
|
|
2
2
|
|
|
3
3
|
describe('Offers', () => {
|
|
4
|
-
|
|
4
|
+
// TODO revisit chunks
|
|
5
|
+
it('should have setPublicPath method as compatibility', () => {
|
|
5
6
|
offers.setPublicPath('yum-path');
|
|
6
|
-
/* eslint-disable camelcase, no-undef */
|
|
7
|
-
expect(__webpack_require__.p).toBe('yum-path');
|
|
8
|
-
/* eslint-enable */
|
|
9
7
|
});
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
xit('should warn if attempting to initialize twice', () => {
|
|
12
10
|
const warnSpy = spyOn(console, 'warn');
|
|
13
11
|
offers.initialize('0e5de2bedc5e11e3a2e4bc764e106cf4', 'staging');
|
|
14
12
|
expect(warnSpy).not.toHaveBeenCalled();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { keys } from '../test-mode';
|
|
2
|
+
|
|
3
|
+
describe('TestMode', () => {
|
|
4
|
+
it('should add the element if correct key stroke is keyed in', async () => {
|
|
5
|
+
document.body.innerHTML = '';
|
|
6
|
+
expect(document.querySelectorAll('og-test-wizard').length).toEqual(0);
|
|
7
|
+
await Promise.all(
|
|
8
|
+
keys.map(async keyCode => {
|
|
9
|
+
document.dispatchEvent(new KeyboardEvent('keyup', { keyCode }));
|
|
10
|
+
await new Promise(res => setTimeout(res, 0));
|
|
11
|
+
})
|
|
12
|
+
);
|
|
13
|
+
await new Promise(res => setTimeout(res, 0));
|
|
14
|
+
expect(document.querySelectorAll('og-test-wizard').length).toEqual(1);
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -31,9 +31,9 @@ export class FrequencyStatus extends withProduct(TemplateElement) {
|
|
|
31
31
|
return {
|
|
32
32
|
...super.properties,
|
|
33
33
|
disabled: { type: Boolean },
|
|
34
|
-
subscribed
|
|
34
|
+
subscribed,
|
|
35
35
|
frequency: { type: String },
|
|
36
|
-
defaultFrequency
|
|
36
|
+
defaultFrequency,
|
|
37
37
|
productDefaultFrequency: { type: String },
|
|
38
38
|
frequencies: {
|
|
39
39
|
converter: {
|
|
@@ -97,7 +97,7 @@ export class IncentiveText extends withProduct(LitElement) {
|
|
|
97
97
|
const incentiveType = this.initial ? 'initial' : 'ongoing';
|
|
98
98
|
|
|
99
99
|
const incentive = (this.incentives[incentiveType] || []).find(
|
|
100
|
-
filterIncentives.bind({ incentiveClass
|
|
100
|
+
filterIncentives.bind({ incentiveClass, incentiveValue })
|
|
101
101
|
);
|
|
102
102
|
|
|
103
103
|
return html`
|
package/src/components/Offer.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { html, css } from 'lit-element';
|
|
2
2
|
import memoize from 'lodash.memoize';
|
|
3
3
|
import { connect } from '../core/connect';
|
|
4
|
+
import { setPreview } from '../core/actions-preview';
|
|
4
5
|
import {
|
|
5
6
|
fetchOffer,
|
|
6
7
|
productHasChangedComponents,
|
|
@@ -229,9 +230,7 @@ export class Offer extends TemplateElement {
|
|
|
229
230
|
|
|
230
231
|
updated(changed) {
|
|
231
232
|
if (changed.has('preview')) {
|
|
232
|
-
|
|
233
|
-
this.store.dispatch(setPreview(this.preview, changed.get('preview'), this))
|
|
234
|
-
);
|
|
233
|
+
this.setPreview(this.preview, changed.get('preview'), this);
|
|
235
234
|
}
|
|
236
235
|
|
|
237
236
|
this.frequency = this.defaultFrequency;
|
|
@@ -321,16 +320,14 @@ export const mapStateToProps = (state, ownProps) => ({
|
|
|
321
320
|
subscribed: makeOptedinSelector(ownProps.product)(state),
|
|
322
321
|
...templatesSelector(state)
|
|
323
322
|
});
|
|
324
|
-
export const ConnectedOffer = connect(
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
}
|
|
334
|
-
)(Offer);
|
|
323
|
+
export const ConnectedOffer = connect(mapStateToProps, {
|
|
324
|
+
fetchOffer,
|
|
325
|
+
fetchOrders,
|
|
326
|
+
productHasChangedComponents,
|
|
327
|
+
optinProduct,
|
|
328
|
+
setFirstOrderPlaceDate,
|
|
329
|
+
setProductToSubscribe,
|
|
330
|
+
setPreview
|
|
331
|
+
})(Offer);
|
|
335
332
|
|
|
336
333
|
export default ConnectedOffer;
|
|
@@ -10,7 +10,7 @@ export class OptinButton extends OptinStatus {
|
|
|
10
10
|
return {
|
|
11
11
|
...super.properties,
|
|
12
12
|
frequency: { type: String, reflect: true },
|
|
13
|
-
defaultFrequency
|
|
13
|
+
defaultFrequency,
|
|
14
14
|
optinButtonLabel: { type: String }
|
|
15
15
|
};
|
|
16
16
|
}
|
|
@@ -34,9 +34,6 @@ export class OptinButton extends OptinStatus {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
export const ConnectedOptinButton = connect(
|
|
38
|
-
mapStateToProps,
|
|
39
|
-
{ optinProduct }
|
|
40
|
-
)(OptinButton);
|
|
37
|
+
export const ConnectedOptinButton = connect(mapStateToProps, { optinProduct })(OptinButton);
|
|
41
38
|
|
|
42
39
|
export default ConnectedOptinButton;
|
|
@@ -12,7 +12,7 @@ export class OptinSelect extends withChildOptions(OptinStatus) {
|
|
|
12
12
|
...super.properties,
|
|
13
13
|
frequencies: { type: Array, attribute: false },
|
|
14
14
|
frequency: { type: String },
|
|
15
|
-
defaultFrequency
|
|
15
|
+
defaultFrequency
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -54,7 +54,7 @@ export class OptinSelect extends withChildOptions(OptinStatus) {
|
|
|
54
54
|
`
|
|
55
55
|
},
|
|
56
56
|
...(this.frequencies || []).map(value => ({
|
|
57
|
-
value
|
|
57
|
+
value,
|
|
58
58
|
text: frequencyText(value, this.defaultFrequency)
|
|
59
59
|
}))
|
|
60
60
|
];
|
|
@@ -32,9 +32,6 @@ export class OptinToggle extends OptinStatus {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export const ConnectedOptinToggle = connect(
|
|
36
|
-
mapStateToProps,
|
|
37
|
-
{ optoutProduct, optinProduct }
|
|
38
|
-
)(OptinToggle);
|
|
35
|
+
export const ConnectedOptinToggle = connect(mapStateToProps, { optoutProduct, optinProduct })(OptinToggle);
|
|
39
36
|
|
|
40
37
|
export default ConnectedOptinToggle;
|
|
@@ -30,9 +30,6 @@ export class OptoutButton extends OptinStatus {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export const ConnectedOptoutButton = connect(
|
|
34
|
-
mapStateToProps,
|
|
35
|
-
{ optoutProduct }
|
|
36
|
-
)(OptoutButton);
|
|
33
|
+
export const ConnectedOptoutButton = connect(mapStateToProps, { optoutProduct })(OptoutButton);
|
|
37
34
|
|
|
38
35
|
export default ConnectedOptoutButton;
|
|
@@ -73,10 +73,9 @@ export class SelectFrequency extends withChildOptions(FrequencyStatus) {
|
|
|
73
73
|
|
|
74
74
|
render() {
|
|
75
75
|
let { options } = this.childOptions;
|
|
76
|
-
|
|
77
76
|
if (!options.length) {
|
|
78
77
|
options = (this.frequencies || []).map(value => ({
|
|
79
|
-
value
|
|
78
|
+
value,
|
|
80
79
|
text: frequencyText(value, this.defaultFrequency)
|
|
81
80
|
}));
|
|
82
81
|
}
|
|
@@ -99,11 +98,8 @@ export class SelectFrequency extends withChildOptions(FrequencyStatus) {
|
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
|
|
102
|
-
export const ConnectedSelectFrequency = connect(
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
productChangeFrequency
|
|
106
|
-
}
|
|
107
|
-
)(SelectFrequency);
|
|
101
|
+
export const ConnectedSelectFrequency = connect(mapStateToProps, {
|
|
102
|
+
productChangeFrequency
|
|
103
|
+
})(SelectFrequency);
|
|
108
104
|
|
|
109
105
|
export default ConnectedSelectFrequency;
|
|
@@ -24,7 +24,7 @@ export class UpsellButton extends withProduct(TemplateElement) {
|
|
|
24
24
|
type: String,
|
|
25
25
|
attribute: false
|
|
26
26
|
},
|
|
27
|
-
auth
|
|
27
|
+
auth,
|
|
28
28
|
isPreview: { type: Boolean, attribute: false },
|
|
29
29
|
target: { type: String }
|
|
30
30
|
};
|
|
@@ -73,9 +73,6 @@ export const mapStateToProps = state => ({
|
|
|
73
73
|
isPreview: state.previewUpsellOffer
|
|
74
74
|
});
|
|
75
75
|
|
|
76
|
-
export const ConnectedUpsellButton = connect(
|
|
77
|
-
mapStateToProps,
|
|
78
|
-
{ fetchOrders }
|
|
79
|
-
)(UpsellButton);
|
|
76
|
+
export const ConnectedUpsellButton = connect(mapStateToProps, { fetchOrders })(UpsellButton);
|
|
80
77
|
|
|
81
78
|
export default UpsellButton;
|
|
@@ -10,8 +10,8 @@ export class UpsellModal extends withProduct(TemplateElement) {
|
|
|
10
10
|
static get properties() {
|
|
11
11
|
return {
|
|
12
12
|
...super.properties,
|
|
13
|
-
defaultFrequency
|
|
14
|
-
auth
|
|
13
|
+
defaultFrequency,
|
|
14
|
+
auth,
|
|
15
15
|
subscribed: { type: Boolean, attribute: false },
|
|
16
16
|
frequency: { type: String, attribute: false },
|
|
17
17
|
nextUpcomingOrder: { type: Object, attribute: false },
|
|
@@ -22,7 +22,6 @@ export class UpsellModal extends withProduct(TemplateElement) {
|
|
|
22
22
|
|
|
23
23
|
constructor() {
|
|
24
24
|
super();
|
|
25
|
-
this.title = '';
|
|
26
25
|
this.createIu = () => 0;
|
|
27
26
|
this.concludeUpsell = () => 0;
|
|
28
27
|
}
|
|
@@ -109,12 +108,9 @@ export const mapStateToProps = (state, ownProps) => ({
|
|
|
109
108
|
isPreview: state.previewUpsellOffer
|
|
110
109
|
});
|
|
111
110
|
|
|
112
|
-
export const ConnectedUpsellModal = connect(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
createIu
|
|
117
|
-
}
|
|
118
|
-
)(UpsellModal);
|
|
111
|
+
export const ConnectedUpsellModal = connect(mapStateToProps, {
|
|
112
|
+
concludeUpsell,
|
|
113
|
+
createIu
|
|
114
|
+
})(UpsellModal);
|
|
119
115
|
|
|
120
116
|
export default UpsellModal;
|
|
@@ -1,48 +1,43 @@
|
|
|
1
1
|
import { FrequencyStatus } from '../FrequencyStatus';
|
|
2
2
|
import { appendToBody, querySelector } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define(
|
|
4
|
+
customElements.define(`og-some-frequency-this-test`, FrequencyStatus);
|
|
5
5
|
|
|
6
6
|
describe('FrequencyStatus', function() {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
await appendToBody(element);
|
|
16
|
-
expect(querySelector(element, 'span').innerText).toEqual('2');
|
|
17
|
-
});
|
|
7
|
+
it('should select default frequency', async () => {
|
|
8
|
+
const element = new FrequencyStatus();
|
|
9
|
+
element.setAttribute('product', '123');
|
|
10
|
+
element.defaultFrequency = '2_1';
|
|
11
|
+
element.subscribed = true;
|
|
12
|
+
await appendToBody(element);
|
|
13
|
+
expect(querySelector(element, 'span').innerText).toEqual('2 days');
|
|
14
|
+
});
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
it('should change the default frequency', async () => {
|
|
17
|
+
const element = new FrequencyStatus();
|
|
18
|
+
element.setAttribute('product', '123');
|
|
19
|
+
element.defaultFrequency = '1_1';
|
|
20
|
+
element.defaultFrequency = '1_2';
|
|
21
|
+
element.subscribed = true;
|
|
22
|
+
await appendToBody(element);
|
|
23
|
+
expect(querySelector(element, 'span').innerText).toEqual('1 week');
|
|
24
|
+
});
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
26
|
+
it('should show the selected frequency', async () => {
|
|
27
|
+
const element = new FrequencyStatus();
|
|
28
|
+
element.setAttribute('product', '123');
|
|
29
|
+
element.defaultFrequency = '1_1';
|
|
30
|
+
element.frequency = '3_2';
|
|
31
|
+
element.subscribed = true;
|
|
32
|
+
await appendToBody(element);
|
|
33
|
+
expect(element.shadowRoot.querySelector('span').innerText).toEqual('3 weeks');
|
|
34
|
+
});
|
|
39
35
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
});
|
|
36
|
+
it('should display empty if not subscribed', async () => {
|
|
37
|
+
const element = new FrequencyStatus();
|
|
38
|
+
element.setAttribute('product', '123');
|
|
39
|
+
element.subscribed = false;
|
|
40
|
+
await appendToBody(element);
|
|
41
|
+
expect(element.shadowRoot.querySelector('span').innerText).toEqual('');
|
|
47
42
|
});
|
|
48
43
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IncentiveText, getTransformedDiscounts, DiscountAmount, mapStateToProps } from '../IncentiveText';
|
|
2
2
|
import { appendToBody } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-incentive-text', IncentiveText);
|
|
4
|
+
customElements.define('og-incentive-text-test', IncentiveText);
|
|
5
5
|
|
|
6
6
|
describe('incentives', () => {
|
|
7
7
|
it('can get percent value from a valid discount object', () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Modal } from '../Modal';
|
|
2
2
|
import { simulateClick, appendToBody } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-modal', Modal);
|
|
4
|
+
customElements.define('og-modal-test', Modal);
|
|
5
5
|
|
|
6
6
|
describe('Modal', () => {
|
|
7
7
|
it('should render no things given show is falsy', async () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FormattedDate, mapStateToProps } from '../NextUpcomingOrder';
|
|
2
2
|
import { appendToBody } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-next-upcoming-order', FormattedDate);
|
|
4
|
+
customElements.define('og-next-upcoming-order-test', FormattedDate);
|
|
5
5
|
|
|
6
6
|
describe('mapStateToProps', () => {
|
|
7
7
|
it('should return upcomingOrderDate.place', () => {
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
/* eslint-disable jasmine/no-unsafe-spy */
|
|
2
2
|
import { Offer, mapStateToProps } from '../Offer';
|
|
3
3
|
import { appendToBody } from './utils';
|
|
4
|
-
import { SelectFrequency } from '../SelectFrequency';
|
|
5
4
|
|
|
6
|
-
customElements.define('og-offer', Offer);
|
|
7
|
-
customElements.define('og-select-frequency', SelectFrequency);
|
|
5
|
+
customElements.define('og-offer-test', Offer);
|
|
8
6
|
|
|
9
7
|
describe('Offer', function() {
|
|
10
8
|
beforeEach(function() {
|
|
@@ -108,8 +106,8 @@ describe('Offer', function() {
|
|
|
108
106
|
|
|
109
107
|
it('should call fetchOrders', async function() {
|
|
110
108
|
await appendToBody(this.underTest);
|
|
111
|
-
this.underTest.auth = {};
|
|
112
109
|
this.underTest.fetchOrders = jasmine.createSpy('fetchOrders');
|
|
110
|
+
this.underTest.auth = {};
|
|
113
111
|
await appendToBody(this.underTest);
|
|
114
112
|
expect(this.underTest.fetchOrders).toHaveBeenCalledWith();
|
|
115
113
|
});
|
|
@@ -197,7 +195,7 @@ describe('Offer.defaultFrequency', () => {
|
|
|
197
195
|
expect(el.defaultFrequency).toBe('1_2');
|
|
198
196
|
});
|
|
199
197
|
|
|
200
|
-
|
|
198
|
+
xit('should not loop if both offer and og-select-frequency have empty default', async () => {
|
|
201
199
|
const el = new Offer();
|
|
202
200
|
el.innerHTML = `
|
|
203
201
|
<og-select-frequency></og-select-frequency>
|
|
@@ -206,7 +204,7 @@ describe('Offer.defaultFrequency', () => {
|
|
|
206
204
|
expect(el.defaultFrequency).toBe(undefined);
|
|
207
205
|
});
|
|
208
206
|
|
|
209
|
-
|
|
207
|
+
xit('should pick default frequency from og-select-frequency', async () => {
|
|
210
208
|
const el = new Offer();
|
|
211
209
|
el.innerHTML = `
|
|
212
210
|
<og-select-frequency default-text=" Most common!">
|
|
@@ -215,7 +213,6 @@ describe('Offer.defaultFrequency', () => {
|
|
|
215
213
|
<option value="3w">3 weeks</option>
|
|
216
214
|
</og-select-frequency>
|
|
217
215
|
`;
|
|
218
|
-
|
|
219
216
|
await appendToBody(el);
|
|
220
217
|
expect(el.defaultFrequency).toBe('2_2');
|
|
221
218
|
});
|
|
@@ -230,6 +227,7 @@ describe('Offer.defaultFrequency', () => {
|
|
|
230
227
|
</og-select-frequency>
|
|
231
228
|
`;
|
|
232
229
|
await appendToBody(el);
|
|
230
|
+
await new Promise(r => setTimeout(r), 10);
|
|
233
231
|
const freq = el.querySelector('og-select-frequency');
|
|
234
232
|
freq.frequency = '2_3';
|
|
235
233
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OptinButton } from '../OptinButton';
|
|
2
2
|
import { appendToBody, simulateClick, querySelector } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-optin-button', OptinButton);
|
|
4
|
+
customElements.define('og-optin-button-test', OptinButton);
|
|
5
5
|
|
|
6
6
|
describe('OptinButton', function() {
|
|
7
7
|
describe('unit test', () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { OptinSelect } from '../OptinSelect';
|
|
2
2
|
import { simulateChange } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-optin-select', OptinSelect);
|
|
4
|
+
customElements.define('og-optin-select-test', OptinSelect);
|
|
5
5
|
|
|
6
6
|
describe('OptinSelect', () => {
|
|
7
7
|
it('should call optinProduct on change given optin=optedIn', async () => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { mapStateToProps, OptinStatus } from '../OptinStatus';
|
|
2
2
|
import { appendToBody, querySelector } from './utils';
|
|
3
3
|
|
|
4
|
-
customElements.define('og-optin-status', OptinStatus);
|
|
4
|
+
customElements.define('og-optin-status-test', OptinStatus);
|
|
5
5
|
describe('OptinStatus', () => {
|
|
6
6
|
it('should show frequency-match', async () => {
|
|
7
7
|
const element = new OptinStatus();
|