@@ -116,4 +116,77 @@ test.describe('Multiple Post Templates', () => {
116116 console . log ( 'Unique posts:' , uniqueTitles . length ) ;
117117 expect ( uniqueTitles . length ) . toBe ( 6 ) ;
118118 } ) ;
119+
120+ test ( 'should automatically limit third post template to remaining posts' , async ( { page, admin, editor, selectBlock } ) => {
121+ // Create a new page
122+ await admin . createNewPost ( { postType : 'page' } ) ;
123+ await page . waitForTimeout ( 1500 ) ;
124+ await page . getByRole ( 'button' , { name : 'Close' } ) . click ( ) ;
125+ await editor . openDocumentSettingsSidebar ( ) ;
126+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'textbox' , { name : 'Add title' } ) . click ( ) ;
127+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'textbox' , { name : 'Add title' } ) . fill ( 'test automatic limit' ) ;
128+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'button' , { name : 'Add default block' } ) . click ( ) ;
129+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'document' , { name : 'Empty block; start writing or' } ) . fill ( '/query' ) ;
130+ await page . getByRole ( 'option' , { name : 'Query Loop' } ) . click ( ) ;
131+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'button' , { name : 'Start blank' } ) . click ( ) ;
132+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . getByRole ( 'button' , { name : 'Image, Date, & Title' } ) . click ( ) ;
133+
134+ // Configure first post template: 1 post
135+ await page . locator ( 'iframe[name="editor-canvas"]' ) . contentFrame ( ) . locator ( '.components-placeholder__illustration' ) . first ( ) . click ( ) ;
136+ await page . getByRole ( 'button' , { name : 'Select parent block: Post' } ) . click ( ) ;
137+ await page . getByRole ( 'button' , { name : 'Post Template Settings' } ) . click ( ) ;
138+ await page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) . click ( ) ;
139+ await page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) . fill ( '1' ) ;
140+
141+ // Duplicate to create second post template
142+ await page . getByRole ( 'toolbar' , { name : 'Block tools' } ) . getByLabel ( 'Options' ) . click ( ) ;
143+ await page . getByRole ( 'menuitem' , { name : / ^ D u p l i c a t e / } ) . click ( ) ;
144+
145+ // Configure second post template: 2 posts
146+ await page . getByRole ( 'button' , { name : 'Grid view' } ) . click ( ) ;
147+ await page . getByRole ( 'button' , { name : 'Post Template Settings' } ) . click ( ) ;
148+ await page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) . click ( ) ;
149+ await page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) . press ( 'Shift+ArrowLeft' ) ;
150+ await page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) . fill ( '2' ) ;
151+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . click ( ) ;
152+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . press ( 'Shift+ArrowLeft' ) ;
153+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . fill ( '2' ) ;
154+
155+ // Duplicate to create third post template
156+ await page . getByRole ( 'toolbar' , { name : 'Block tools' } ) . getByLabel ( 'Options' ) . click ( ) ;
157+ await page . getByRole ( 'menuitem' , { name : / ^ D u p l i c a t e / } ) . click ( ) ;
158+
159+ // Configure third post template: leave Posts per template EMPTY (should auto-calculate to 7)
160+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . click ( ) ;
161+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . press ( 'Shift+ArrowLeft' ) ;
162+ await page . getByRole ( 'spinbutton' , { name : 'Columns' } ) . fill ( '3' ) ;
163+ await page . getByRole ( 'button' , { name : 'Post Template Settings' } ) . click ( ) ;
164+
165+ // Clear the Posts per template field if it has a value
166+ const postsPerTemplateInput = page . getByRole ( 'spinbutton' , { name : 'Posts per template' } ) ;
167+ const currentValue = await postsPerTemplateInput . inputValue ( ) ;
168+ if ( currentValue ) {
169+ await postsPerTemplateInput . click ( ) ;
170+ await postsPerTemplateInput . press ( 'Shift+ArrowLeft' ) ;
171+ await postsPerTemplateInput . press ( 'Backspace' ) ;
172+ }
173+
174+ // Publish and view the page
175+ await page . getByRole ( 'button' , { name : 'Publish' , exact : true } ) . click ( ) ;
176+ await page . getByLabel ( 'Editor publish' ) . getByRole ( 'button' , { name : 'Publish' , exact : true } ) . click ( ) ;
177+ await page . getByLabel ( 'Editor publish' ) . getByRole ( 'link' , { name : 'View Page' } ) . click ( ) ;
178+
179+ // Get all the post titles on the page
180+ const postTitles = await page . locator ( '.wp-block-post-template .wp-block-post-title' ) . allTextContents ( ) ;
181+ console . log ( 'Post titles found:' , postTitles ) ;
182+ console . log ( 'Total posts:' , postTitles . length ) ;
183+
184+ // Should have exactly 10 posts total (1 + 2 + 7 auto-calculated from default 10 posts per page)
185+ expect ( postTitles . length ) . toBe ( 10 ) ;
186+
187+ // Verify no duplicate posts
188+ const uniqueTitles = [ ...new Set ( postTitles ) ] ;
189+ console . log ( 'Unique posts:' , uniqueTitles . length ) ;
190+ expect ( uniqueTitles . length ) . toBe ( 10 ) ;
191+ } ) ;
119192} ) ;
0 commit comments