1
+ import { FrameLocator , Page , expect , test } from '@playwright/test' ;
2
+ import { awaitResponse , clickTab , getMitoFrame } from '../utils' ;
3
+
4
+ const createNewColumnWithName = async ( page : Page , mito : FrameLocator , name : string ) => {
5
+ await clickTab ( page , mito , 'Home' ) ;
6
+ await mito . locator ( '.mito-toolbar-button' , { hasText : 'Insert' } ) . click ( ) ;
7
+ await mito . locator ( '.endo-column-header-container' , { hasText : / n e w - c o l u m n / } ) . dblclick ( ) ;
8
+ await mito . locator ( '.endo-column-header-container input' ) . fill ( name ) ;
9
+ await mito . locator ( '.endo-column-header-container input' ) . press ( 'Enter' , { delay : 100 } ) ;
10
+ await expect ( mito . locator ( '.endo-column-header-container' , { hasText : name } ) ) . toBeVisible ( ) ;
11
+ } ;
12
+
13
+ test ( 'Vanguard Demo' , async ( { page } ) => {
14
+ const mito = await getMitoFrame ( page ) ;
15
+ await mito . getByText ( 'Import Files' ) . click ( ) ;
16
+ await mito . getByText ( 'vanguard-fund-performance' ) . dblclick ( ) ;
17
+ await mito . getByText ( 'fund_info.csv' ) . dblclick ( ) ;
18
+
19
+ // Add custom import
20
+ await clickTab ( page , mito , 'Data' ) ;
21
+ await mito . getByText ( 'Get Performance Data' ) . click ( ) ;
22
+ await mito . locator ( '.spacing-row' , { hasText : 'Username' } ) . locator ( 'input' ) . fill ( 'username' ) ;
23
+ await mito . locator ( '.spacing-row' , { hasText : 'Password' } ) . locator ( 'input' ) . fill ( 'password' ) ;
24
+ await mito . locator ( '.spacing-row' , { hasText : 'Year' } ) . locator ( 'input' ) . fill ( '2020' ) ;
25
+ await mito . locator ( '.text-button' , { hasText : 'Import Data' } ) . click ( ) ;
26
+
27
+ // Add vlookup of Portfolio Manager to performance data
28
+ await mito . getByText ( 'MoM Return' ) . click ( ) ;
29
+ await createNewColumnWithName ( page , mito , 'Portfolio Manager' ) ;
30
+ await mito . locator ( '.mito-grid-cell[mito-col-index="3"]' ) . first ( ) . dblclick ( ) ;
31
+ await mito . locator ( '#cell-editor-input' ) . fill ( '=VLOOKUP(' ) ;
32
+ await mito . locator ( '.mito-grid-cell[mito-col-index="1"]' ) . first ( ) . click ( ) ;
33
+ await mito . locator ( '#cell-editor-input' ) . pressSequentially ( ', ' ) ;
34
+ await mito . locator ( '.tab' , { hasText : 'fund_info' } ) . click ( ) ;
35
+ await mito . getByText ( 'Fund Name' ) . click ( ) ;
36
+ await mito . getByText ( 'Ongoing Charge' ) . click ( { modifiers : [ 'Shift' ] } ) ;
37
+ await mito . locator ( '#cell-editor-input' ) . pressSequentially ( ', 2)' ) ;
38
+ await mito . locator ( '#cell-editor-input' ) . press ( 'Enter' ) ;
39
+
40
+ // Use the Separate Row On Delimiter custom edit to split the portfolio managers into separate rows on the delimiter , .
41
+ await clickTab ( page , mito , 'Custom Edits' ) ;
42
+ await mito . getByText ( 'Separate Row On Delimiter' ) . click ( ) ;
43
+ await mito . locator ( '.spacing-row' , { hasText : 'Dataframe' } ) . locator ( '.select-text' ) . click ( ) ;
44
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'df1' } ) . click ( ) ;
45
+ await awaitResponse ( page ) ;
46
+ await mito . locator ( '.spacing-row' , { hasText : 'Attribute' } ) . locator ( '.select-text' ) . click ( ) ;
47
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'Portfolio Manager' } ) . click ( ) ;
48
+ await awaitResponse ( page ) ;
49
+ await mito . locator ( '.spacing-row' , { hasText : 'Delimiter' } ) . locator ( 'input' ) . fill ( ',' ) ;
50
+ await mito . locator ( '.text-button' , { hasText : 'Separate Row on Delimiter' } ) . click ( ) ;
51
+ await awaitResponse ( page ) ;
52
+
53
+ // Use the GET_EMAIL custom sheet function to get the email of each fund manager
54
+ await mito . locator ( '.endo-column-header-container' , { hasText : 'Portfolio Manager' } ) . click ( ) ;
55
+ await createNewColumnWithName ( page , mito , 'Email' ) ;
56
+ await mito . locator ( '.mito-grid-cell[mito-col-index="4"]' ) . first ( ) . dblclick ( ) ;
57
+ await mito . locator ( '#cell-editor-input' ) . fill ( '=GET_EMAIL(' ) ;
58
+ await mito . locator ( '.mito-grid-cell[mito-col-index="3"]' ) . first ( ) . click ( ) ;
59
+ await mito . locator ( '#cell-editor-input' ) . press ( 'Enter' ) ;
60
+
61
+ /**
62
+ * Create a pivot table with the configuration below:
63
+ * Rows: Fund Manager, email, Fund
64
+ * Columns: Date (Grouped by Month)
65
+ * Values: sum of MoM Return
66
+ */
67
+ await mito . locator ( '.mito-toolbar-button' , { hasText : 'Pivot' } ) . click ( ) ;
68
+ await mito . locator ( '.spacing-row' , { hasText : 'Rows' } ) . getByText ( 'Add' ) . click ( ) ;
69
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'Portfolio Manager' } ) . click ( ) ;
70
+ await mito . locator ( '.spacing-row' , { hasText : 'Rows' } ) . getByText ( 'Add' ) . click ( ) ;
71
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'Email' } ) . click ( ) ;
72
+ await awaitResponse ( page ) ;
73
+ await mito . locator ( '.spacing-row' , { hasText : 'Rows' } ) . getByText ( 'Add' ) . click ( ) ;
74
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'Fund' } ) . click ( ) ;
75
+
76
+ await mito . locator ( '.spacing-row' , { hasText : 'Columns' } ) . getByText ( 'Add' ) . click ( ) ;
77
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'Date' } ) . click ( ) ;
78
+ await awaitResponse ( page ) ;
79
+ await mito . locator ( '.spacing-row' , { hasText : 'group by' } ) . locator ( '.select-text' ) . click ( ) ;
80
+ await mito . locator ( '.mito-dropdown-item' ) . getByText ( 'month' , { exact : true } ) . click ( ) ;
81
+ await awaitResponse ( page ) ;
82
+
83
+ await mito . locator ( '.spacing-row' , { hasText : 'Values' } ) . getByText ( 'Add' ) . click ( ) ;
84
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'MoM Return' } ) . click ( ) ;
85
+ await awaitResponse ( page ) ;
86
+
87
+ await mito . locator ( '.select-text' , { hasText : 'count' } ) . click ( ) ;
88
+ await mito . locator ( '.mito-dropdown-item' , { hasText : 'sum' } ) . click ( ) ;
89
+
90
+ await page . locator ( '.element-container' , { hasText : 'Provider Name' } ) . locator ( 'input' ) . fill ( 'Vanguard' ) ;
91
+ await page . getByText ( 'Save Automation' ) . click ( ) ;
92
+
93
+ } ) ;
0 commit comments