1+ /**
2+ * WordPress dependencies
3+ */
4+ const { test, expect } = require ( '@wordpress/e2e-test-utils-playwright' ) ;
5+
6+ /**
7+ * Internal dependencies
8+ */
9+ const { deleteAllCharts, getAssetFilePath, CHART_JS_LABELS , selectChartAdmin } = require ( '../utils/common' ) ;
10+
11+ test . describe ( 'Upsell' , ( ) => {
12+ test . beforeEach ( async ( { admin, requestUtils, page } ) => {
13+ await deleteAllCharts ( requestUtils ) ;
14+ await admin . visitAdminPage ( 'admin.php?page=visualizer' ) ;
15+ page . setDefaultTimeout ( 5000 ) ;
16+ } ) ;
17+
18+ test ( 'chart selection on admin' , async ( { admin, page } ) => {
19+ await admin . visitAdminPage ( 'admin.php?page=visualizer&vaction=addnew' ) ;
20+ await page . waitForURL ( '**/admin.php?page=visualizer&vaction=addnew' ) ;
21+ await page . waitForSelector ( 'h1:text("Visualizer")' ) ;
22+
23+ expect ( await page . frameLocator ( 'iframe' ) . locator ( '.pro-upsell' ) . count ( ) ) . toBe ( 11 ) ;
24+
25+ const proUpsellElements = await page . frameLocator ( 'iframe' ) . locator ( 'a.pro-upsell' ) . all ( ) ;
26+
27+ for ( const element of proUpsellElements ) {
28+ const href = await element . getAttribute ( 'href' ) ;
29+ const searchParams = new URLSearchParams ( href ) ;
30+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'charttypes' ) ;
31+ }
32+ } ) ;
33+
34+ test ( 'chart settings on admin' , async ( { admin, page } ) => {
35+ await admin . visitAdminPage ( 'admin.php?page=visualizer&vaction=addnew' ) ;
36+ await page . waitForURL ( '**/admin.php?page=visualizer&vaction=addnew' ) ;
37+ await page . waitForSelector ( 'h1:text("Visualizer")' ) ;
38+ await selectChartAdmin ( page . frameLocator ( 'iframe' ) , CHART_JS_LABELS . pie ) ;
39+
40+ await expect ( page . frameLocator ( 'iframe' ) . locator ( '#viz-tabs' ) ) . toBeVisible ( ) ;
41+
42+ expect ( await page . frameLocator ( 'iframe' ) . locator ( '#vz-chart-source .viz-group-title .dashicons-lock' ) . count ( ) ) . toBe ( 4 ) ;
43+
44+ const otherChartUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-chart-source .viz-import-from-other .only-pro-inner a' ) ;
45+ let href = await otherChartUpsell . getAttribute ( 'href' ) ;
46+ let searchParams = new URLSearchParams ( href ) ;
47+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'import-chart' ) ;
48+
49+ const wpImportUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-chart-source .visualizer_source_query_wp .only-pro-inner a' ) ;
50+ href = await wpImportUpsell . getAttribute ( 'href' ) ;
51+ searchParams = new URLSearchParams ( href ) ;
52+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'import-wp' ) ;
53+
54+ const dbImportUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-chart-source .visualizer_source_query .only-pro-inner a' ) ;
55+ href = await dbImportUpsell . getAttribute ( 'href' ) ;
56+ searchParams = new URLSearchParams ( href ) ;
57+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'db-query' ) ;
58+
59+ const manualDataUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-chart-source .visualizer_source_manual .only-pro-inner a' ) ;
60+ href = await manualDataUpsell . getAttribute ( 'href' ) ;
61+ searchParams = new URLSearchParams ( href ) ;
62+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'manual-data' ) ;
63+
64+ await page . frameLocator ( 'iframe' ) . getByRole ( 'link' , { name : 'Settings' } ) . click ( ) ;
65+
66+ const dataFilterConfigurationUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-data-controls .only-pro-inner a' ) ;
67+ href = await dataFilterConfigurationUpsell . getAttribute ( 'href' ) ;
68+ searchParams = new URLSearchParams ( href ) ;
69+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'data-filter-configuration' ) ;
70+
71+ const frontendActionsUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-frontend-actions .only-pro-inner a' ) ;
72+ href = await frontendActionsUpsell . getAttribute ( 'href' ) ;
73+ searchParams = new URLSearchParams ( href ) ;
74+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'frontend-actions' ) ;
75+
76+ const chartPermissionsUpsell = page . frameLocator ( 'iframe' ) . locator ( '#vz-permissions .only-pro-inner a' ) ;
77+ href = await chartPermissionsUpsell . getAttribute ( 'href' ) ;
78+ searchParams = new URLSearchParams ( href ) ;
79+ expect ( searchParams . get ( 'utm_campaign' ) ) . toBe ( 'chart-permissions' ) ;
80+ } ) ;
81+ } ) ;
0 commit comments