@jetshop/template-trend 5.8.2 → 5.10.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/.linaria-cache/packages/template-trend/src/components/SearchPage/CategoryList.linaria.css +7 -0
- package/.linaria-cache/packages/ui/ChannelSelector/Region.linaria.css +3 -0
- package/cypress/integration/essentials.spec.js +50 -0
- package/package.json +5 -5
- package/schema.graphql +30 -18
- package/src/components/Auth/ForgotPassword.loadable.js +7 -0
- package/src/components/Auth/LogInPage.loadable.js +7 -0
- package/src/components/Auth/ResetPassword.loadable.js +7 -0
- package/src/components/Auth/Signup/SignUpPage.loadable.js +7 -0
- package/src/components/Cart/CartFragment.gql +8 -0
- package/src/components/CategoryPage/CategoryPage.loadable.js +7 -0
- package/src/components/CategoryPage/Filters/ListFilters.js +1 -2
- package/src/components/CategoryPage/ProductGridFragment.gql +8 -0
- package/src/components/CategoryPage/WindowedCategoryPage.js +6 -5
- package/src/components/ContentPage/ContentPage.loadable.js +7 -0
- package/src/components/Forms/Input.js +3 -6
- package/src/components/Layout/Header/RecommendedChannel/RecommendedChannelSelector.js +1 -1
- package/src/components/Layout/Header/TopNav.js +13 -11
- package/src/components/MyPages/MyPages.loadable.js +7 -0
- package/src/components/MyPages/MyPagesSidebar.js +0 -1
- package/src/components/NavigationTree/NavTreePage.loadable.js +7 -0
- package/src/components/NotFoundPage.loadable.js +7 -0
- package/src/components/ProductPage/AddToCart/ProductToast.js +1 -1
- package/src/components/ProductPage/ProductPage.loadable.js +7 -0
- package/src/components/SearchPage/SearchPage.loadable.js +7 -0
- package/src/components/Shop.js +26 -75
- package/src/components/StartPage/Content/Row.js +0 -37
- package/src/components/StartPage/StartPage.loadable.js +7 -0
- package/src/components/StartPage/StartPageProductGridFragment.gql +8 -0
- package/src/components/Store/Store.loadable.js +7 -0
- package/src/components/StoreLocator/StoreLocator.loadable.js +7 -0
- package/src/shop.config.js +8 -4
- package/.vscode/launch.json +0 -11
- package/cypress/constants.js +0 -5
- package/cypress/integration/addToCart/addToCart.spec.js +0 -27
- package/cypress/integration/addToCart/disabledVariations.spec.js +0 -17
- package/cypress/integration/addToCart/newslettersubscriber.spec.js +0 -24
- package/cypress/integration/addToCart/notifyWhenBackInStock.spec.js +0 -20
- package/cypress/integration/addToCart/productConfigurations.spec.js +0 -35
- package/cypress/integration/addToCart/productVariations.spec.js +0 -42
- package/cypress/integration/addToCart/sizePriceChange.spec.js +0 -20
- package/cypress/integration/analytics/gtag.spec.js +0 -90
- package/cypress/integration/analytics/releware.spec.js +0 -95
- package/cypress/integration/auth/login.spec.js +0 -18
- package/cypress/integration/auth/signup.spec.js +0 -98
- package/cypress/integration/category_page_spec.js +0 -73
- package/cypress/integration/filters.spec.js +0 -103
- package/cypress/integration/getbyarticlenumber.spec.js +0 -28
- package/cypress/integration/packages.spec.js +0 -85
- package/cypress/integration/prefetch_headers_spec.js +0 -26
- package/cypress/integration/product_browsing_spec.js +0 -17
- package/cypress/integration/search/autocomplete.spec.js +0 -28
- package/cypress/integration/search/search_page.spec.js +0 -39
- package/cypress/integration/ssr/categorySSR.js +0 -9
- package/cypress/integration/ssr/productSSR.js +0 -9
- package/cypress/integration/ssr/startPageSSR.js +0 -5
- package/cypress/integration/start_page_spec.js +0 -5
- package/cypress/integration/stores_page.spec.js +0 -5
package/src/shop.config.js
CHANGED
|
@@ -2,13 +2,14 @@ import * as translations from '../translations';
|
|
|
2
2
|
import channelsQuery from './ChannelsQuery.gql';
|
|
3
3
|
import homeCategoriesQuery from './components/Layout/Header/HomeCategoriesQuery.gql';
|
|
4
4
|
import routeQuery from './components/RouteQuery.gql';
|
|
5
|
-
import { LoadableProductPage, LoadableContentPage } from './components/Shop';
|
|
6
5
|
import {
|
|
7
6
|
LoadableStandardCategoryPage,
|
|
8
7
|
LoadableWindowedCategoryPage
|
|
9
8
|
} from './components/CategoryPage/CategoryPage';
|
|
10
9
|
import { theme } from './components/Theme';
|
|
11
10
|
import createFacebookTracker from '@jetshop/core/server/tracking/facebook';
|
|
11
|
+
import ProductPage from './components/ProductPage/ProductPage.loadable';
|
|
12
|
+
import ContentPage from './components/ContentPage/ContentPage.loadable';
|
|
12
13
|
|
|
13
14
|
const config = {
|
|
14
15
|
theme,
|
|
@@ -45,7 +46,10 @@ const config = {
|
|
|
45
46
|
},
|
|
46
47
|
channelOverrides: {},
|
|
47
48
|
disableGeoRedirect: true,
|
|
48
|
-
singleDomainMode:
|
|
49
|
+
singleDomainMode:
|
|
50
|
+
typeof process.env.REACT_APP_SINGLE_DOMAIN_MODE === 'undefined'
|
|
51
|
+
? true
|
|
52
|
+
: process.env.REACT_APP_SINGLE_DOMAIN_MODE, // default to true if this env var is not set
|
|
49
53
|
schemaExtensions: [],
|
|
50
54
|
preserveRedirect: true,
|
|
51
55
|
structuredData: {
|
|
@@ -67,9 +71,9 @@ const config = {
|
|
|
67
71
|
preload: {
|
|
68
72
|
routeQuery,
|
|
69
73
|
preloadComponents: {
|
|
70
|
-
Product: [
|
|
74
|
+
Product: [ProductPage],
|
|
71
75
|
Category: [LoadableStandardCategoryPage, LoadableWindowedCategoryPage],
|
|
72
|
-
Page: [
|
|
76
|
+
Page: [ContentPage]
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
};
|
package/.vscode/launch.json
DELETED
package/cypress/constants.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export const PRODUCT_URL = 'se/accessories/watches/watch-classic-504';
|
|
2
|
-
export const OUT_OF_STOCK_PRODUCT_URL = 'se/preview?articlenumber=224733';
|
|
3
|
-
export const CATEGORY_URL = 'se/accessories/watches';
|
|
4
|
-
export const ARTICLENUMBER_URL = 'se/articlenumber/6952315';
|
|
5
|
-
export const US_ARTICLENUMBER_URL = 'int/articlenumber/6952315';
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { PRODUCT_URL, OUT_OF_STOCK_PRODUCT_URL } from '../../constants';
|
|
2
|
-
|
|
3
|
-
describe('Add to cart tests', () => {
|
|
4
|
-
it('Will add add a basic product to the cart', () => {
|
|
5
|
-
cy.visit(PRODUCT_URL);
|
|
6
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
7
|
-
cy.get('[data-testid="product-toast"]').should('exist');
|
|
8
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
9
|
-
cy.get('[data-testid="item-name"]').should('not.be.empty');
|
|
10
|
-
cy.get('[data-testid="increment-quantity"]').click();
|
|
11
|
-
cy.get('[data-testid="item-quantity"]').should('contain', 2);
|
|
12
|
-
cy.get('[data-testid="remove-from-cart"]').click();
|
|
13
|
-
cy.get('[data-testid="item-name"]').should('not.exist');
|
|
14
|
-
});
|
|
15
|
-
it('Add to cart button is disabled if product is out of stock', () => {
|
|
16
|
-
cy.visit(OUT_OF_STOCK_PRODUCT_URL);
|
|
17
|
-
cy.get('button[data-testid="add-to-cart"]').should('be.disabled');
|
|
18
|
-
});
|
|
19
|
-
it('Checkout button is linked to the checkout', () => {
|
|
20
|
-
cy.visit(PRODUCT_URL);
|
|
21
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
22
|
-
cy.get('button[data-testid="cart-button"]').click();
|
|
23
|
-
cy.get('[data-testid="checkout-button"]')
|
|
24
|
-
.should('have.attr', 'href')
|
|
25
|
-
.and('include', 'externalcheckout');
|
|
26
|
-
});
|
|
27
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
const PRODUCT_WITH_INVALID_VARIATIONS_URL = '/furniture/toldbod-pendant';
|
|
2
|
-
describe('Disabled variations', () => {
|
|
3
|
-
it('Will add a product with attributes if they have been selected', () => {
|
|
4
|
-
cy.visit(PRODUCT_WITH_INVALID_VARIATIONS_URL);
|
|
5
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
6
|
-
cy.get('[data-testid="product-toast"]').should('not.exist');
|
|
7
|
-
cy.findByText('Ø 250').click();
|
|
8
|
-
cy.get('#option-Color').click();
|
|
9
|
-
cy.findByText('White', { selector: 'li[role=menuitem]' }).click();
|
|
10
|
-
cy.get('button[data-testid="add-to-cart"]').should('be.disabled');
|
|
11
|
-
cy.get('#option-Color').click();
|
|
12
|
-
cy.findByText('Black', { selector: 'li[role=menuitem]' }).click();
|
|
13
|
-
cy.findByText('Ø 250').click();
|
|
14
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
15
|
-
cy.get('[data-testid="product-toast"]').should('exist');
|
|
16
|
-
});
|
|
17
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
describe('Notify when back test', () => {
|
|
2
|
-
it('Subscribes to newsletter with a random email', () => {
|
|
3
|
-
cy.visit('/');
|
|
4
|
-
cy.get(
|
|
5
|
-
'[data-testid="newsletter-subscription-input"]'
|
|
6
|
-
).type('edgardavids@glasses.com', { force: true });
|
|
7
|
-
cy.get('button[data-testid="newsletter-subscription-submit"]').click();
|
|
8
|
-
cy.get('p[data-testid="newsletter-subscription-success"]').should(
|
|
9
|
-
'contain',
|
|
10
|
-
'You are now subscribed'
|
|
11
|
-
);
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('Cannot subscribe with an invalid email', () => {
|
|
15
|
-
cy.visit('/');
|
|
16
|
-
cy.get(
|
|
17
|
-
'[data-testid="newsletter-subscription-input"]'
|
|
18
|
-
).type('edgardavids.com', { force: true });
|
|
19
|
-
cy.get('button[data-testid="newsletter-subscription-submit"]').click();
|
|
20
|
-
cy.get('p[data-testid="newsletter-subscription-success"]').should(
|
|
21
|
-
'not.exist'
|
|
22
|
-
);
|
|
23
|
-
});
|
|
24
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const PRODUCT_URL = 'accessories/glasses-black';
|
|
2
|
-
|
|
3
|
-
describe('Notify when back test', () => {
|
|
4
|
-
it('Will fill out notify when back with a test email', () => {
|
|
5
|
-
cy.visit(PRODUCT_URL);
|
|
6
|
-
cy.get('button[data-testid="add-to-cart"]').should('not.exist');
|
|
7
|
-
cy.get('button[data-testid="notify-when-back-button"]').click();
|
|
8
|
-
cy.get('input[data-testid="notify-when-back-input"]').type(
|
|
9
|
-
'test@example.com',
|
|
10
|
-
{
|
|
11
|
-
force: true
|
|
12
|
-
}
|
|
13
|
-
);
|
|
14
|
-
cy.get('button[data-testid="notify-when-back-ok"]').click({ force: true });
|
|
15
|
-
cy.get('p[data-testid="notify-when-back-success"]').should(
|
|
16
|
-
'contain',
|
|
17
|
-
'You are now subscribed'
|
|
18
|
-
);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
const PRODUCT_URL = 'furniture/black-leather-sofa';
|
|
2
|
-
|
|
3
|
-
describe('Add to cart product configuration tests', () => {
|
|
4
|
-
it('Will add add a product with configurations', () => {
|
|
5
|
-
cy.visit(PRODUCT_URL);
|
|
6
|
-
|
|
7
|
-
cy.get('.price').should('contain', '420');
|
|
8
|
-
|
|
9
|
-
cy.get('#option-Head').click();
|
|
10
|
-
cy.findAllByRole('menuitem', { name: 'putter' }).click();
|
|
11
|
-
cy.get('#option-Head').should('contain', 'putter');
|
|
12
|
-
|
|
13
|
-
cy.get('.price').should('contain', '370');
|
|
14
|
-
|
|
15
|
-
cy.get('#option-stick').click();
|
|
16
|
-
cy.findAllByRole('menuitem', { name: 'shiny' }).click();
|
|
17
|
-
cy.get('#option-stick').should('contain', 'shiny');
|
|
18
|
-
|
|
19
|
-
cy.get('.price').should('contain', '470');
|
|
20
|
-
|
|
21
|
-
cy.get('#option-grip').click();
|
|
22
|
-
cy.findAllByRole('menuitem', { name: 'plastic' }).click();
|
|
23
|
-
cy.get('#option-grip').should('contain', 'plastic');
|
|
24
|
-
|
|
25
|
-
cy.get('.price').should('contain', '455');
|
|
26
|
-
|
|
27
|
-
cy.findByRole('button', { name: /add to cart/i }).click();
|
|
28
|
-
|
|
29
|
-
cy.get('[data-testid="product-toast"]').should('exist');
|
|
30
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
31
|
-
cy.get('[data-testid="item-name"]').should('not.be.empty');
|
|
32
|
-
cy.get('[data-testid="item-price"]').should('contain', '455');
|
|
33
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
34
|
-
});
|
|
35
|
-
});
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
const PRODUCT_WITH_VARIATIONS_URL = 'furniture/armchair-lord';
|
|
2
|
-
|
|
3
|
-
describe('Product variants', () => {
|
|
4
|
-
it('can be successfully selected and added to cart', () => {
|
|
5
|
-
cy.visit(PRODUCT_WITH_VARIATIONS_URL);
|
|
6
|
-
|
|
7
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
8
|
-
cy.get('[data-testid="product-toast"]').should('not.exist');
|
|
9
|
-
cy.findByText('Small').click();
|
|
10
|
-
cy.findByText('JA').click();
|
|
11
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
12
|
-
cy.get('[data-testid="product-toast"]').should('not.exist');
|
|
13
|
-
cy.get('input[data-testid="Skriv in ditt önskade tryck här-input"]').type(
|
|
14
|
-
'Hello, World'
|
|
15
|
-
);
|
|
16
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
17
|
-
cy.get('[data-testid="product-toast"]').should('exist');
|
|
18
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
19
|
-
cy.get('[data-testid="item-name"]').should('not.be.empty');
|
|
20
|
-
cy.get('[data-testid="increment-quantity"]').click();
|
|
21
|
-
cy.get('[data-testid="item-quantity"]').should('contain', 2);
|
|
22
|
-
cy.get('[data-testid="remove-from-cart"]').click();
|
|
23
|
-
cy.get('[data-testid="item-name"]').should('not.exist');
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe('Preselection', () => {
|
|
27
|
-
it('preselects variant when included in the url', () => {
|
|
28
|
-
cy.visit('accessories/belts/belt-light?att=Mzg=');
|
|
29
|
-
cy.get('[aria-pressed="true"]').should('contain', '38');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('preselects the cheapest variant by default', () => {
|
|
33
|
-
cy.visit('accessories/belts/belt-light');
|
|
34
|
-
cy.get('[aria-pressed="true"]').should('contain', '37');
|
|
35
|
-
|
|
36
|
-
cy.visit('/furniture/aj-floor-lamp');
|
|
37
|
-
cy.get('[aria-pressed="true"]')
|
|
38
|
-
.should('contain', 'Black')
|
|
39
|
-
.should('contain', '140');
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
});
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const PRODUCT_URL = 'accessories/belt-light';
|
|
2
|
-
|
|
3
|
-
describe('Produce price', () => {
|
|
4
|
-
it('changes when variant is changed', () => {
|
|
5
|
-
cy.visit(PRODUCT_URL);
|
|
6
|
-
cy.get('.new-price').should('contain', '499');
|
|
7
|
-
cy.findByText('36').click();
|
|
8
|
-
cy.get('.new-price').should('contain', '563');
|
|
9
|
-
cy.findByText('38').click();
|
|
10
|
-
cy.get('.new-price').should('contain', '500');
|
|
11
|
-
cy.get('button[data-testid="add-to-cart"]').click();
|
|
12
|
-
cy.get('[data-testid="product-toast"]').should('exist');
|
|
13
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
14
|
-
cy.get('[data-testid="item-name"]').should('not.be.empty');
|
|
15
|
-
cy.get('.price')
|
|
16
|
-
.first()
|
|
17
|
-
.should('contain', '500');
|
|
18
|
-
cy.get('[data-testid="cart-button"]').click();
|
|
19
|
-
});
|
|
20
|
-
});
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import { callsTo } from '../../support/dataLayer';
|
|
2
|
-
import { PRODUCT_URL, CATEGORY_URL } from '../../constants';
|
|
3
|
-
const eventMatcher = eventName => [
|
|
4
|
-
function eventMatcher(calls) {
|
|
5
|
-
return calls.find(call => call[0] === 'event' && call[1] === eventName);
|
|
6
|
-
},
|
|
7
|
-
`Event ${eventName} is pushed to dataLayer`
|
|
8
|
-
];
|
|
9
|
-
|
|
10
|
-
const pageviewMatcher = path => [
|
|
11
|
-
function pageviewMatcher(calls) {
|
|
12
|
-
const pageViewCall = calls.find(
|
|
13
|
-
call => call[0] === 'event' && call[1] === 'page_view'
|
|
14
|
-
);
|
|
15
|
-
return pageViewCall.length > 0;
|
|
16
|
-
},
|
|
17
|
-
`Page View for "${path}" is pushed to dataLayer`
|
|
18
|
-
];
|
|
19
|
-
|
|
20
|
-
describe('Analytics: GTAG – Google Analytics', () => {
|
|
21
|
-
it('Start Page: Should trigger view events', () => {
|
|
22
|
-
cy.visit('/');
|
|
23
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
24
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('view_item_list'));
|
|
25
|
-
expect(callsTo(push)).to.satisfy(...pageviewMatcher('/'));
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
it('Category Page: Should trigger view events', () => {
|
|
30
|
-
cy.visit(CATEGORY_URL);
|
|
31
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
32
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('view_item_list'));
|
|
33
|
-
expect(callsTo(push)).to.satisfy(...pageviewMatcher(CATEGORY_URL));
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
it('Category Page: Should trigger click events', () => {
|
|
38
|
-
cy.visit(CATEGORY_URL);
|
|
39
|
-
|
|
40
|
-
cy.findAllByTestId('product')
|
|
41
|
-
.first()
|
|
42
|
-
.click();
|
|
43
|
-
|
|
44
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
45
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('select_content'));
|
|
46
|
-
});
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('Product Page: Should trigger view events', () => {
|
|
50
|
-
cy.visit(PRODUCT_URL);
|
|
51
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
52
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('view_item'));
|
|
53
|
-
expect(callsTo(push)).to.satisfy(...pageviewMatcher(PRODUCT_URL));
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
it('Product Page: Should trigger cart events', () => {
|
|
58
|
-
cy.visit(PRODUCT_URL);
|
|
59
|
-
|
|
60
|
-
// Add to cart
|
|
61
|
-
cy.findByTestId('add-to-cart').click({ force: true });
|
|
62
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
63
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('add_to_cart'));
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// Remove from to cart
|
|
67
|
-
cy.findByTestId('cart-button').click({ force: true });
|
|
68
|
-
cy.findByTestId('remove-from-cart')
|
|
69
|
-
.first()
|
|
70
|
-
.click();
|
|
71
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
72
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('remove_from_cart'));
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
it('Product Page: Attribute click events to the appropriate list and apppropriate currency', () => {
|
|
77
|
-
cy.visit(CATEGORY_URL);
|
|
78
|
-
|
|
79
|
-
cy.findAllByTestId('product')
|
|
80
|
-
.first()
|
|
81
|
-
.click();
|
|
82
|
-
|
|
83
|
-
cy.findByTestId('add-to-cart').click({ force: true });
|
|
84
|
-
cy.get('@gtm_dataLayer_push').should(push => {
|
|
85
|
-
expect(callsTo(push).pop()[2].currency).to.equal('SEK');
|
|
86
|
-
expect(callsTo(push).pop()[2].items[0].list_name).to.equal('Watches');
|
|
87
|
-
expect(callsTo(push)).to.satisfy(...eventMatcher('add_to_cart'));
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
});
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { PRODUCT_URL } from '../../constants';
|
|
2
|
-
|
|
3
|
-
// const BASE_EVENT = {
|
|
4
|
-
// itemId: '155',
|
|
5
|
-
// accountId: 'jetshop',
|
|
6
|
-
// siteId: 'localhost'
|
|
7
|
-
// };
|
|
8
|
-
|
|
9
|
-
function getRelewareCalls(spy) {
|
|
10
|
-
return spy
|
|
11
|
-
.getCalls()
|
|
12
|
-
.filter(call => call.args[0].indexOf('log.releware.net') > -1)
|
|
13
|
-
.map(call => {
|
|
14
|
-
const query = new URL(call.args[0]).searchParams;
|
|
15
|
-
return {
|
|
16
|
-
itemId: query.get('_item_id'),
|
|
17
|
-
accountId: query.get('aid'),
|
|
18
|
-
event: query.get('o'),
|
|
19
|
-
siteId: query.get('sid')
|
|
20
|
-
};
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
describe('Analytics: Releware', () => {
|
|
25
|
-
beforeEach(function() {
|
|
26
|
-
// Stub window.fetch before any app code runs
|
|
27
|
-
cy.on('window:before:load', win => {
|
|
28
|
-
const doFetch = win.fetch;
|
|
29
|
-
cy.stub(win, 'fetch', (path, options) => {
|
|
30
|
-
if (path.indexOf('log.releware.net') > -1) {
|
|
31
|
-
return Promise.resolve();
|
|
32
|
-
}
|
|
33
|
-
return doFetch(path, options);
|
|
34
|
-
}).as('fetch');
|
|
35
|
-
});
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
// FIXME: The heed_recommendation event is not implemented in this template
|
|
39
|
-
// yet. This test (modified to target the correct list) should pass
|
|
40
|
-
// once it is.
|
|
41
|
-
//
|
|
42
|
-
// it('Category Page: Should trigger click events for recommendations', () => {
|
|
43
|
-
// cy.visit(CATEGORY_URL);
|
|
44
|
-
|
|
45
|
-
// cy.getByTestId('product')
|
|
46
|
-
// .first()
|
|
47
|
-
// .click();
|
|
48
|
-
|
|
49
|
-
// cy.get('@fetch').should(spy => {
|
|
50
|
-
// const calls = getRelewareCalls(spy);
|
|
51
|
-
|
|
52
|
-
// expect(calls).to.have.lengthOf(1);
|
|
53
|
-
// expect(calls).to.deep.equal([
|
|
54
|
-
// { ...BASE_EVENT, event: 'heed_recommendation' }
|
|
55
|
-
// ]);
|
|
56
|
-
// });
|
|
57
|
-
// });
|
|
58
|
-
|
|
59
|
-
it('Product Page: Should trigger view events', () => {
|
|
60
|
-
cy.visit(PRODUCT_URL);
|
|
61
|
-
cy.get('@fetch').should(spy => {
|
|
62
|
-
const calls = getRelewareCalls(spy);
|
|
63
|
-
|
|
64
|
-
expect(calls).to.have.lengthOf(1);
|
|
65
|
-
expect(calls[0].event).to.equal('view_item');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
it('Product Page: Should trigger cart events', () => {
|
|
70
|
-
cy.visit(PRODUCT_URL);
|
|
71
|
-
cy.findByTestId('add-to-cart').click();
|
|
72
|
-
|
|
73
|
-
cy.get('@fetch').should(spy => {
|
|
74
|
-
const calls = getRelewareCalls(spy);
|
|
75
|
-
expect(calls).to.have.lengthOf(2);
|
|
76
|
-
expect(calls[1].event).to.equal('pick_item');
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
// FIXME: How to implement this is not mentioned in any of the releware
|
|
80
|
-
// docs, it might be so that they only track add events.
|
|
81
|
-
//
|
|
82
|
-
// cy.getByTestId('header-cart')
|
|
83
|
-
// .click({ force: true })
|
|
84
|
-
// .getByTestId('remove-from-cart')
|
|
85
|
-
// .first()
|
|
86
|
-
// .click();
|
|
87
|
-
// cy.get('@fetch').should(spy => {
|
|
88
|
-
// const calls = getRelewareCalls(spy);
|
|
89
|
-
// expect(calls).to.have.lengthOf(3);
|
|
90
|
-
// expect(calls.slice(2)).to.deep.equal([
|
|
91
|
-
// { ...BASE_EVENT, event: '???' }
|
|
92
|
-
// ]);
|
|
93
|
-
// });
|
|
94
|
-
});
|
|
95
|
-
});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
describe('Log In', () => {
|
|
2
|
-
it('Will show an error when the user enters bad credentials', () => {
|
|
3
|
-
cy.visit('/se/login');
|
|
4
|
-
cy.get('#email').type('test@test.com');
|
|
5
|
-
cy.get('#password').type('iamanonsensepassword');
|
|
6
|
-
cy.get('button[type="submit"]').contains('Log in').click();
|
|
7
|
-
cy.findByText('Login failed. Please try again').should('exist');
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
it('Will log a user in with correct credentials', () => {
|
|
11
|
-
cy.visit('/se/login');
|
|
12
|
-
cy.get('#email').type('wolverine@jetshop.se');
|
|
13
|
-
cy.get('#password').type('jetshop');
|
|
14
|
-
cy.get('button[type="submit"]').contains('Log in').click();
|
|
15
|
-
cy.findByText('Login failed. Please try again').should('not.exist');
|
|
16
|
-
cy.url().should('contain', 'my-pages');
|
|
17
|
-
});
|
|
18
|
-
});
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
function randomString() {
|
|
2
|
-
return Math.random().toString(25);
|
|
3
|
-
}
|
|
4
|
-
|
|
5
|
-
describe('User can sign up', () => {
|
|
6
|
-
it('as a private customer', () => {
|
|
7
|
-
cy.visit('/se/signup');
|
|
8
|
-
|
|
9
|
-
cy.get("input[name='pid']").type('test');
|
|
10
|
-
cy.get("input[name='firstName']").type('Private');
|
|
11
|
-
cy.get("input[name='lastName']").type('Customer');
|
|
12
|
-
cy.get("input[name='streetName']").type('test');
|
|
13
|
-
cy.get("input[name='postalCode']").type('51234');
|
|
14
|
-
cy.get("input[name='city']").type('test');
|
|
15
|
-
cy.get("input[name='emailAddress']").type(`${randomString()}@test.com`);
|
|
16
|
-
cy.get("input[name='password']").type('cypresstest');
|
|
17
|
-
cy.get('[data-testid="sign-up-button"]').click();
|
|
18
|
-
|
|
19
|
-
cy.get('h2[data-testid="customer-name"]').should(
|
|
20
|
-
'contain',
|
|
21
|
-
'Private Customer'
|
|
22
|
-
);
|
|
23
|
-
|
|
24
|
-
cy.get('a[href="/se/my-pages/profile"]').click();
|
|
25
|
-
|
|
26
|
-
cy.get('input[type="checkbox"][name="confirm"]').click({ force: true });
|
|
27
|
-
|
|
28
|
-
cy.get('button[type="submit"]').contains('Delete account').click();
|
|
29
|
-
});
|
|
30
|
-
it('as a business customer', () => {
|
|
31
|
-
cy.visit('/se/signup');
|
|
32
|
-
|
|
33
|
-
cy.get('input[type="radio"][value="company"]').click({ force: true });
|
|
34
|
-
cy.get("input[name='organizationNumber']").type('test');
|
|
35
|
-
cy.get("input[name='company']").type('test');
|
|
36
|
-
cy.get("input[name='companyAtt']").type('test');
|
|
37
|
-
cy.get("input[name='department']").type('test');
|
|
38
|
-
cy.get("input[name='firstName']").type('test');
|
|
39
|
-
cy.get("input[name='lastName']").type('test');
|
|
40
|
-
cy.get("input[name='streetName']").type('test');
|
|
41
|
-
cy.get("input[name='postalCode']").type('51234');
|
|
42
|
-
cy.get("input[name='city']").type('test');
|
|
43
|
-
cy.get("input[name='emailAddress']").type(
|
|
44
|
-
`${randomString()}@business-test.com`
|
|
45
|
-
);
|
|
46
|
-
cy.get("input[name='password']").type('cypresstest');
|
|
47
|
-
cy.get('[data-testid="sign-up-button"]').click();
|
|
48
|
-
|
|
49
|
-
cy.get('a[href="/se/my-pages/profile"]').click();
|
|
50
|
-
|
|
51
|
-
cy.get('input[type="checkbox"][name="confirm"]').click({ force: true });
|
|
52
|
-
|
|
53
|
-
cy.get('button[type="submit"]').contains('Delete account').click();
|
|
54
|
-
|
|
55
|
-
cy.get('span').contains('Log in').should('be.visible');
|
|
56
|
-
});
|
|
57
|
-
it('with encrypted values', () => {
|
|
58
|
-
cy.visit('/se/signup');
|
|
59
|
-
|
|
60
|
-
cy.get("input[name='pid']").type('test');
|
|
61
|
-
cy.get("input[name='firstName']").type('eTZ7FGaVn/RAThBesp3unQ==');
|
|
62
|
-
cy.get("input[name='lastName']").type('Pehrers');
|
|
63
|
-
cy.get("input[name='streetName']").type('test');
|
|
64
|
-
cy.get("input[name='postalCode']").type('51234');
|
|
65
|
-
cy.get("input[name='city']").type('test');
|
|
66
|
-
cy.get("input[name='emailAddress']").type(`${randomString()}@test.com`);
|
|
67
|
-
cy.get("input[name='password']").type('cypresstest');
|
|
68
|
-
cy.get('[data-testid="sign-up-button"]').click();
|
|
69
|
-
|
|
70
|
-
cy.get('a[href="/se/my-pages/profile"]').click();
|
|
71
|
-
cy.get('h2[data-testid="customer-name"]').should('contain', 'Erik Pehrers');
|
|
72
|
-
|
|
73
|
-
cy.get('input[type="checkbox"][name="confirm"]').click({ force: true });
|
|
74
|
-
|
|
75
|
-
cy.get('button[type="submit"]').contains('Delete account').click();
|
|
76
|
-
|
|
77
|
-
cy.get('span').contains('Log in').should('be.visible');
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
it('Displays email validation error', () => {
|
|
81
|
-
cy.visit('/se/signup');
|
|
82
|
-
|
|
83
|
-
cy.get("input[name='pid']").type('test');
|
|
84
|
-
cy.get("input[name='firstName']").type('integrationtest');
|
|
85
|
-
cy.get("input[name='lastName']").type('E god');
|
|
86
|
-
cy.get("input[name='streetName']").type('test');
|
|
87
|
-
cy.get("input[name='postalCode']").type('51234');
|
|
88
|
-
cy.get("input[name='city']").type('test');
|
|
89
|
-
cy.get("input[name='emailAddress']").type('kantarellen@egod.com');
|
|
90
|
-
cy.get("input[name='password']").type('cypresstest');
|
|
91
|
-
cy.get('[data-testid="sign-up-button"]').click();
|
|
92
|
-
|
|
93
|
-
cy.get('div[data-testid="validation-error"]').should(
|
|
94
|
-
'contain',
|
|
95
|
-
'The specified e-mail address is already registered.'
|
|
96
|
-
);
|
|
97
|
-
});
|
|
98
|
-
});
|