@@ -17,82 +17,6 @@ type MarkdownEditorToolbarsLocators = Record<
1717 Locator
1818> ;
1919
20- class YfmTable {
21- readonly buttonPlusRowLocator ;
22- readonly buttonPlusColumnLocator ;
23- private readonly tableWrapperLocator ;
24-
25- private readonly rowButtonLocator ;
26- private readonly columnButtonLocator ;
27- private readonly cellMenus : Readonly < Record < YfmTableCellMenuType , Locator > > ;
28- private readonly cellMenuActions : Readonly < Record < YfmTableActionKind , Locator > > ;
29-
30- constructor ( page : Page ) {
31- this . tableWrapperLocator = page . getByTestId ( 'g-md-yfm-table-wrapper' ) ;
32- this . buttonPlusRowLocator = page . getByTestId ( 'g-md-yfm-table-plus-row' ) ;
33- this . buttonPlusColumnLocator = page . getByTestId ( 'g-md-yfm-table-plus-column' ) ;
34-
35- this . rowButtonLocator = page . getByTestId ( 'g-md-yfm-table-row-btn' ) ;
36- this . columnButtonLocator = page . getByTestId ( 'g-md-yfm-table-column-btn' ) ;
37- this . cellMenus = {
38- row : page . getByTestId ( 'g-md-yfm-table-row-menu' ) ,
39- column : page . getByTestId ( 'g-md-yfm-table-column-menu' ) ,
40- } ;
41- this . cellMenuActions = {
42- 'add-column-after' : page . getByTestId ( 'g-md-yfm-table-action-add-column-after' ) ,
43- 'add-column-before' : page . getByTestId ( 'g-md-yfm-table-action-add-column-before' ) ,
44- 'add-row-after' : page . getByTestId ( 'g-md-yfm-table-action-add-row-after' ) ,
45- 'add-row-before' : page . getByTestId ( 'g-md-yfm-table-action-add-row-before' ) ,
46- 'remove-column' : page . getByTestId ( 'g-md-yfm-table-action-remove-column' ) ,
47- 'remove-row' : page . getByTestId ( 'g-md-yfm-table-action-remove-row' ) ,
48- 'remove-table' : page . getByTestId ( 'g-md-yfm-table-action-remove-table' ) ,
49- } ;
50- }
51-
52- getMenuLocator ( type : YfmTableCellMenuType ) {
53- return this . cellMenus [ type ] ;
54- }
55-
56- async getTable ( locator ?: Locator ) {
57- return locator ?. locator ( this . tableWrapperLocator ) ?? this . tableWrapperLocator ;
58- }
59-
60- async getRows ( table ?: Locator ) {
61- return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( 'table > tbody > tr' ) ;
62- }
63-
64- async getCells ( table ?: Locator ) {
65- return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( 'table > tbody > tr > td' ) ;
66- }
67-
68- async getRowButtons ( table ?: Locator ) {
69- return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( this . rowButtonLocator ) ;
70- }
71-
72- async getColumnButtons ( table ?: Locator ) {
73- return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( this . columnButtonLocator ) ;
74- }
75-
76- async doCellAction ( menuType : YfmTableCellMenuType , kind : YfmTableActionKind ) {
77- const menu = this . cellMenus [ menuType ] ;
78- await menu . waitFor ( { state : 'visible' } ) ;
79- await menu . locator ( this . cellMenuActions [ kind ] ) . click ( ) ;
80- await menu . waitFor ( { state : 'hidden' } ) ;
81- }
82-
83- async clickPlusRow ( locator ?: Locator ) {
84- const btnLoc = this . buttonPlusRowLocator ;
85- const loc = locator ?. locator ( btnLoc ) ?? btnLoc ;
86- await loc . click ( ) ;
87- }
88-
89- async clickPlusColumn ( locator ?: Locator ) {
90- const btnLoc = this . buttonPlusColumnLocator ;
91- const loc = locator ?. locator ( btnLoc ) ?? btnLoc ;
92- await loc . click ( ) ;
93- }
94- }
95-
9620class Colorify {
9721 protected readonly page : Page ;
9822 protected readonly expect : Expect ;
@@ -166,6 +90,20 @@ class Image {
16690 }
16791}
16892
93+ class Link {
94+ protected readonly expect : Expect ;
95+ protected readonly form : Locator ;
96+
97+ constructor ( page : Page , expect : Expect ) {
98+ this . expect = expect ;
99+ this . form = page . getByTestId ( 'g-md-link-form' ) ;
100+ }
101+
102+ async assertFormToBeVisible ( ) {
103+ await this . expect ( this . form ) . toBeVisible ( ) ;
104+ }
105+ }
106+
169107class YfmNote {
170108 protected readonly yfmNoteToolbar : Locator ;
171109
@@ -179,6 +117,82 @@ class YfmNote {
179117 }
180118}
181119
120+ class YfmTable {
121+ readonly buttonPlusRowLocator ;
122+ readonly buttonPlusColumnLocator ;
123+ private readonly tableWrapperLocator ;
124+
125+ private readonly rowButtonLocator ;
126+ private readonly columnButtonLocator ;
127+ private readonly cellMenus : Readonly < Record < YfmTableCellMenuType , Locator > > ;
128+ private readonly cellMenuActions : Readonly < Record < YfmTableActionKind , Locator > > ;
129+
130+ constructor ( page : Page ) {
131+ this . tableWrapperLocator = page . getByTestId ( 'g-md-yfm-table-wrapper' ) ;
132+ this . buttonPlusRowLocator = page . getByTestId ( 'g-md-yfm-table-plus-row' ) ;
133+ this . buttonPlusColumnLocator = page . getByTestId ( 'g-md-yfm-table-plus-column' ) ;
134+
135+ this . rowButtonLocator = page . getByTestId ( 'g-md-yfm-table-row-btn' ) ;
136+ this . columnButtonLocator = page . getByTestId ( 'g-md-yfm-table-column-btn' ) ;
137+ this . cellMenus = {
138+ row : page . getByTestId ( 'g-md-yfm-table-row-menu' ) ,
139+ column : page . getByTestId ( 'g-md-yfm-table-column-menu' ) ,
140+ } ;
141+ this . cellMenuActions = {
142+ 'add-column-after' : page . getByTestId ( 'g-md-yfm-table-action-add-column-after' ) ,
143+ 'add-column-before' : page . getByTestId ( 'g-md-yfm-table-action-add-column-before' ) ,
144+ 'add-row-after' : page . getByTestId ( 'g-md-yfm-table-action-add-row-after' ) ,
145+ 'add-row-before' : page . getByTestId ( 'g-md-yfm-table-action-add-row-before' ) ,
146+ 'remove-column' : page . getByTestId ( 'g-md-yfm-table-action-remove-column' ) ,
147+ 'remove-row' : page . getByTestId ( 'g-md-yfm-table-action-remove-row' ) ,
148+ 'remove-table' : page . getByTestId ( 'g-md-yfm-table-action-remove-table' ) ,
149+ } ;
150+ }
151+
152+ getMenuLocator ( type : YfmTableCellMenuType ) {
153+ return this . cellMenus [ type ] ;
154+ }
155+
156+ async getTable ( locator ?: Locator ) {
157+ return locator ?. locator ( this . tableWrapperLocator ) ?? this . tableWrapperLocator ;
158+ }
159+
160+ async getRows ( table ?: Locator ) {
161+ return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( 'table > tbody > tr' ) ;
162+ }
163+
164+ async getCells ( table ?: Locator ) {
165+ return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( 'table > tbody > tr > td' ) ;
166+ }
167+
168+ async getRowButtons ( table ?: Locator ) {
169+ return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( this . rowButtonLocator ) ;
170+ }
171+
172+ async getColumnButtons ( table ?: Locator ) {
173+ return ( table || ( await this . getTable ( ) ) ) . first ( ) . locator ( this . columnButtonLocator ) ;
174+ }
175+
176+ async doCellAction ( menuType : YfmTableCellMenuType , kind : YfmTableActionKind ) {
177+ const menu = this . cellMenus [ menuType ] ;
178+ await menu . waitFor ( { state : 'visible' } ) ;
179+ await menu . locator ( this . cellMenuActions [ kind ] ) . click ( ) ;
180+ await menu . waitFor ( { state : 'hidden' } ) ;
181+ }
182+
183+ async clickPlusRow ( locator ?: Locator ) {
184+ const btnLoc = this . buttonPlusRowLocator ;
185+ const loc = locator ?. locator ( btnLoc ) ?? btnLoc ;
186+ await loc . click ( ) ;
187+ }
188+
189+ async clickPlusColumn ( locator ?: Locator ) {
190+ const btnLoc = this . buttonPlusColumnLocator ;
191+ const loc = locator ?. locator ( btnLoc ) ?? btnLoc ;
192+ await loc . click ( ) ;
193+ }
194+ }
195+
182196class MarkdownEditorLocators {
183197 readonly component ;
184198 readonly contenteditable ;
@@ -228,6 +242,7 @@ export class MarkdownEditorPage {
228242 readonly colorify ;
229243 readonly yfmNote ;
230244 readonly image ;
245+ readonly link ;
231246 protected readonly page : Page ;
232247 protected readonly expect : Expect ;
233248
@@ -240,6 +255,7 @@ export class MarkdownEditorPage {
240255 this . colorify = new Colorify ( page , expect , this . locators ) ;
241256 this . yfmNote = new YfmNote ( page ) ;
242257 this . image = new Image ( page ) ;
258+ this . link = new Link ( page , expect ) ;
243259 }
244260
245261 /**
0 commit comments