From 28c9afd900d145249d58bfa0b8819a65094ad0d3 Mon Sep 17 00:00:00 2001 From: Fellan-91 Date: Wed, 5 Feb 2025 11:32:17 +0300 Subject: [PATCH] e2e tests (#216) * added e2e tests with adding images for saved layouts * fixed checkbox check for e2e tests * added disabled click action e2e test for saved layout * added e2e tests for archive page pagination with "Load More" button, testing both post name and plain permalink structures * added e2e tests for archive page pagination with Infinity, testing both post name and plain permalink structures * Improved getWordpressImages e2e function: now we check image before add it to wordpress * disabled no-console error for e2e archive tests * added load more and infinity e2e archive tests and refactored all code. Now we used rest for adding and remove fixtures * added e2e test fixtures for archive infinity and load more tests * added additional timeout for fixed actions awaiting errors with rest * added setPermalinkSettings running before each test * added uploadMediaWithRetry function for getWordpressImages test method * added archive debug artifacts task for e2e tests * changed get terms rest method to POST * changed afterAll methods priority calling * added e2e additional checks for rest methods and error handlers * added e2e retry mechanism for REST API calls in case of an error. * changed e2e configuration timeout * tested changed for check e2e logs * returned e2e taxonomy rest method * fixed e2e deletePortfolioTaxonomyTerms function and added logsEnabled for archive tests * fixed php unit error * Update playwright.config.js * Update package.json * added webp and gif formats to test images compressed test images * fixed a bug with displaying category links on archive pages * improved archive tests: removed all delays and sped up the functions * updated e2e archive fixtures and added categories to items * limited e2e archive logging to an internal constant and added additional error handlers * fixed methods of adding images for e2e tests: now images are loaded into the system once * added await construction for checking image settings test * added some logs for e2e checking image settings test * added fixture existence validation to the e2e checking alternative image settings on saved layout test --------- Co-authored-by: Nikita --- .github/workflows/tests-e2e.yml | 43 + .github/workflows/tests.yml | 3 + classes/class-archive-mapping.php | 16 +- package.json | 5 +- tests/e2e/playwright.config.js | 2 +- tests/e2e/specs/added-images-to-block.spec.js | 267 ++-- .../added-images-to-saved-layout.spec.js | 690 +++++++++ tests/e2e/specs/archive.spec.js | 1353 ++++++++++++----- .../click-action-images-saved-layout.spec.js | 278 ++++ tests/e2e/utils/get-wordpress-images.js | 49 +- .../archive/expected-category-default.json | 287 +++- .../expected-category-infinity-default.json | 237 +++ .../expected-category-infinity-post-name.json | 237 +++ .../expected-category-load-more-default.json | 237 +++ ...expected-category-load-more-post-name.json | 237 +++ .../archive/expected-category-post-name.json | 147 +- tests/fixtures/archive/expected-default.json | 76 +- .../archive/expected-infinity-default.json | 126 ++ .../archive/expected-load-more-default.json | 366 +++++ ...pected-post-name-permalinks-load-more.json | 366 +++++ .../expected-post-name-permalinks.json | 448 +++--- ...xpected-post-name-premalinks-infinity.json | 126 ++ .../url-saved-layout-expected-preset.json | 52 + tests/fixtures/image-1600x1200.jpeg | Bin 21607 -> 18109 bytes tests/fixtures/image-1920x1080.jpeg | Bin 24584 -> 20405 bytes tests/fixtures/image-1920x600.gif | Bin 0 -> 27062 bytes tests/fixtures/image-1920x600.jpeg | Bin 19146 -> 0 bytes tests/fixtures/image-2000x2000.jpeg | Bin 37332 -> 32034 bytes tests/fixtures/image-300x200.jpeg | Bin 2294 -> 1810 bytes tests/fixtures/image-3840x2160.jpeg | Bin 73981 -> 63438 bytes tests/fixtures/image-3840x2560.jpeg | Bin 83967 -> 72930 bytes tests/fixtures/image-600x1920.jpeg | Bin 10910 -> 9569 bytes tests/fixtures/image-800x1200.jpeg | Bin 11294 -> 0 bytes tests/fixtures/image-800x1200.webp | Bin 0 -> 3586 bytes tests/fixtures/image-800x600.png | Bin 88326 -> 14316 bytes tests/fixtures/images.json | 4 +- 36 files changed, 4832 insertions(+), 820 deletions(-) create mode 100644 tests/e2e/specs/added-images-to-saved-layout.spec.js create mode 100644 tests/e2e/specs/click-action-images-saved-layout.spec.js create mode 100644 tests/fixtures/archive/expected-category-infinity-default.json create mode 100644 tests/fixtures/archive/expected-category-infinity-post-name.json create mode 100644 tests/fixtures/archive/expected-category-load-more-default.json create mode 100644 tests/fixtures/archive/expected-category-load-more-post-name.json create mode 100644 tests/fixtures/archive/expected-infinity-default.json create mode 100644 tests/fixtures/archive/expected-load-more-default.json create mode 100644 tests/fixtures/archive/expected-post-name-permalinks-load-more.json create mode 100644 tests/fixtures/archive/expected-post-name-premalinks-infinity.json create mode 100644 tests/fixtures/click-actions/url-saved-layout-expected-preset.json create mode 100644 tests/fixtures/image-1920x600.gif delete mode 100644 tests/fixtures/image-1920x600.jpeg delete mode 100644 tests/fixtures/image-800x1200.jpeg create mode 100644 tests/fixtures/image-800x1200.webp diff --git a/.github/workflows/tests-e2e.yml b/.github/workflows/tests-e2e.yml index e02a8fdd..588a32f7 100644 --- a/.github/workflows/tests-e2e.yml +++ b/.github/workflows/tests-e2e.yml @@ -43,3 +43,46 @@ jobs: - name: Run the tests run: | xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- npm run test:e2e + + - name: Archive debug artifacts (screenshots, traces) + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + if: ${{ !cancelled() }} + with: + name: failures-artifacts--${{ matrix.part }} + path: artifacts/test-results + if-no-files-found: ignore + + - name: Archive flaky tests report + uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4.3.3 + if: ${{ !cancelled() }} + with: + name: flaky-tests-report--${{ matrix.part }} + path: flaky-tests + if-no-files-found: ignore + + merge-artifacts: + name: Merge Artifacts + if: ${{ !cancelled() }} + needs: [playwright] + runs-on: ubuntu-latest + outputs: + has-flaky-test-report: ${{ !!steps.merge-flaky-tests-reports.outputs.artifact-id }} + steps: + - name: Merge failures artifacts + uses: actions/upload-artifact/merge@v4 + # Don't fail the job if there aren't any artifacts to merge. + continue-on-error: true + with: + name: failures-artifacts + # Retain the merged artifacts in case of a rerun. + pattern: failures-artifacts* + delete-merged: true + + - name: Merge flaky tests reports + id: merge-flaky-tests-reports + uses: actions/upload-artifact/merge@v4 + continue-on-error: true + with: + name: flaky-tests-report + pattern: flaky-tests-report* + delete-merged: true diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 356d475a..0b425be0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -98,6 +98,9 @@ jobs: with: custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") + - name: Install SVN + run: sudo apt-get update && sudo apt-get install -y subversion + - name: Npm build run: npm run build diff --git a/classes/class-archive-mapping.php b/classes/class-archive-mapping.php index 999f1b9a..199621be 100644 --- a/classes/class-archive-mapping.php +++ b/classes/class-archive-mapping.php @@ -1317,10 +1317,20 @@ private function convert_category_to_friendly_url( $category_url ) { } $category_url = trailingslashit( $category_url ); - if ( '' === $base_page ) { - $category_url = $category_url . $this->permalinks['category_base'] . '/' . $category_slug . '/'; + // Replace the existing category part with the new category slug. + if ( strpos( $category_url, 'portfolio-category/' ) !== false ) { + $category_url = preg_replace( + '#(portfolio-category/)[^/]+/#', + '${1}' . $category_slug . '/', + $category_url + ); } else { - $category_url = str_replace( $base_page, $this->permalinks['category_base'] . '/' . $category_slug . '/', $category_url ); + // If the category base is not found, append it manually. + if ( '' === $base_page ) { + $category_url = $category_url . $this->permalinks['category_base'] . '/' . $category_slug . '/'; + } else { + $category_url = str_replace( $base_page, $this->permalinks['category_base'] . '/' . $category_slug . '/', $category_url ); + } } /** diff --git a/package.json b/package.json index caea41b9..85c35018 100644 --- a/package.json +++ b/package.json @@ -15,9 +15,10 @@ "bump:prerelease": "gulp bump --type prerelease", "zip": "gulp zip", "wp-env": "wp-env", - "env:start": "wp-env start ", + "env:start": "wp-env start", "env:stop": "wp-env stop", - "test": "npm-run-all lint test:unit", + "env:destroy": "wp-env destroy", + "test": "npm-run-all lint test:unit:php test:e2e", "test:e2e": "playwright test --config tests/e2e/playwright.config.js", "test:e2e:ui": "playwright test --config tests/e2e/playwright.config.js --ui", "pretest:unit:php": "wp-env start", diff --git a/tests/e2e/playwright.config.js b/tests/e2e/playwright.config.js index a2e34794..74c539f5 100644 --- a/tests/e2e/playwright.config.js +++ b/tests/e2e/playwright.config.js @@ -14,7 +14,7 @@ const config = defineConfig({ forbidOnly: !!process.env.CI, workers: 1, retries: process.env.CI ? 2 : 0, - timeout: parseInt(process.env.TIMEOUT || '', 10) || 100_000, // Defaults to 100 seconds. + timeout: parseInt(process.env.TIMEOUT || '', 10) || 200_000, // Defaults to 200 seconds. // Don't report slow test "files", as we will be running our tests in serial. reportSlowTests: null, testDir: fileURLToPath(new URL('./specs', `file:${__filename}`).href), diff --git a/tests/e2e/specs/added-images-to-block.spec.js b/tests/e2e/specs/added-images-to-block.spec.js index 1882e5fa..0faecb6e 100644 --- a/tests/e2e/specs/added-images-to-block.spec.js +++ b/tests/e2e/specs/added-images-to-block.spec.js @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ /** * WordPress dependencies */ @@ -16,12 +17,21 @@ test.describe('added images to block', () => { ? 'visual-portfolio-pro' : 'visual-portfolio-posts-amp-image-gallery'; await requestUtils.activatePlugin(pluginName); - await requestUtils.deleteAllMedia(); - await requestUtils.deleteAllPages(); }); + test.afterEach(async ({ requestUtils }) => { - await requestUtils.deleteAllMedia(); - await requestUtils.deleteAllPages(); + await Promise.all([ + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); + }); + + test.afterAll(async ({ requestUtils }) => { + await Promise.all([ + requestUtils.deleteAllMedia(), + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); }); /** @@ -241,36 +251,39 @@ test.describe('added images to block', () => { ); for (const image of await imageList.elementHandles()) { - if ( - typeof images.find( - async (x) => x.id === (await image.getAttribute('data-id')) - ).imgUrl !== 'undefined' - ) { - await image.click(); - - const imageID = await image.getAttribute('data-id'); - - const foundImage = await findAsyncSequential( - images, - async (x) => x.id === Number(imageID) - ); + const dataId = await image.getAttribute('data-id'); + const foundImage = await findAsyncSequential( + images, + async (x) => x.id === Number(dataId) + ); + if (foundImage) { const foundFixture = await findAsyncSequential( imageFixtures, async (x) => x.description === foundImage.description ); - await page - .locator('#attachment-details-alt-text') - .fill(foundFixture.alt); + if (foundFixture) { + await image.click(); + + await page + .locator('#attachment-details-alt-text') + .fill(foundFixture.alt); - await page - .locator('#attachment-details-caption') - .fill(foundFixture.caption); + await page + .locator('#attachment-details-caption') + .fill(foundFixture.caption); - await page - .locator('#attachment-details-description') - .fill(foundFixture.description); + await page + .locator('#attachment-details-description') + .fill(foundFixture.description); + } else { + console.warn( + `No matching fixture found for image with ID: ${dataId}` + ); + } + } else { + console.warn(`No matching image found for data-id: ${dataId}`); } } @@ -440,36 +453,39 @@ test.describe('added images to block', () => { ); for (const image of await imageList.elementHandles()) { - if ( - typeof images.find( - async (x) => x.id === (await image.getAttribute('data-id')) - ).imgUrl !== 'undefined' - ) { - await image.click(); - - const imageID = await image.getAttribute('data-id'); - - const foundImage = await findAsyncSequential( - images, - async (x) => x.id === Number(imageID) - ); + const dataId = await image.getAttribute('data-id'); + const foundImage = await findAsyncSequential( + images, + async (x) => x.id === Number(dataId) + ); + if (foundImage) { const foundFixture = await findAsyncSequential( imageFixtures, async (x) => x.description === foundImage.description ); - await page - .locator('#attachment-details-alt-text') - .fill(foundFixture.alt); + if (foundFixture) { + await image.click(); - await page - .locator('#attachment-details-caption') - .fill(foundFixture.caption); + await page + .locator('#attachment-details-alt-text') + .fill(foundFixture.alt); + + await page + .locator('#attachment-details-caption') + .fill(foundFixture.caption); - await page - .locator('#attachment-details-description') - .fill(foundFixture.description); + await page + .locator('#attachment-details-description') + .fill(foundFixture.description); + } else { + console.warn( + `No matching fixture found for image with ID: ${dataId}` + ); + } + } else { + console.warn(`No matching image found for data-id: ${dataId}`); } } @@ -537,83 +553,108 @@ test.describe('added images to block', () => { async (x) => x.description === itemDescription ); - const foundFixture = await findAsyncSequential( - imageFixtures, - async (x) => x.description === itemDescription - ); - - const foundFixtureIndex = imageFixtures.indexOf(foundFixture); - - imageFixtures[foundFixtureIndex].id = foundImage.id; - - if (typeof foundFixture.imageSettings !== 'undefined') { - await page - .locator( - '.vpf-component-gallery-control-item-modal .components-base-control__field', - { - hasText: 'Title', - } - ) - .locator('input.components-text-control__input') - .fill(foundFixture.imageSettings.title); - - await page - .locator( - '.vpf-component-gallery-control-item-modal .components-base-control__field', - { - hasText: 'Description', - } - ) - .locator('textarea.components-textarea-control__input') - .fill(foundFixture.imageSettings.description); - - if (typeof foundFixture.imageSettings.format !== 'undefined') { - await page - .locator( - '.vpf-component-gallery-control-item-modal .components-base-control__field', - { - hasText: 'Format', - } - ) - .locator('.vpf-component-select') - .click(); - - await page - .locator('.vpf-component-select-option-label', { - hasText: foundFixture.imageSettings.format, - }) - .click(); + if (foundImage) { + const foundFixture = await findAsyncSequential( + imageFixtures, + async (x) => x.description === itemDescription + ); - if ( - foundFixture.imageSettings.format === 'standard' && - typeof foundFixture.imageSettings.url !== 'undefined' - ) { - foundFixture.imageSettings.url = - foundFixture.imageSettings.url === 'postLink' - ? postLink - : foundFixture.imageSettings.url; + if (foundFixture) { + const foundFixtureIndex = + imageFixtures.indexOf(foundFixture); + imageFixtures[foundFixtureIndex].id = foundImage.id; + if (typeof foundFixture.imageSettings !== 'undefined') { await page - .getByRole('textbox', { name: 'URL', exact: true }) - .fill(foundFixture.imageSettings.url); - } + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Title', + } + ) + .locator('input.components-text-control__input') + .fill(foundFixture.imageSettings.title); - if ( - foundFixture.imageSettings.format === 'video' && - typeof foundFixture.imageSettings.videoUrl !== - 'undefined' - ) { await page .locator( '.vpf-component-gallery-control-item-modal .components-base-control__field', { - hasText: 'Video URL', + hasText: 'Description', } ) - .locator('input.components-text-control__input') - .fill(foundFixture.imageSettings.videoUrl); + .locator( + 'textarea.components-textarea-control__input' + ) + .fill(foundFixture.imageSettings.description); + + if ( + typeof foundFixture.imageSettings.format !== + 'undefined' + ) { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Format', + } + ) + .locator('.vpf-component-select') + .click(); + + await page + .locator('.vpf-component-select-option-label', { + hasText: foundFixture.imageSettings.format, + }) + .click(); + + if ( + foundFixture.imageSettings.format === + 'standard' && + typeof foundFixture.imageSettings.url !== + 'undefined' + ) { + foundFixture.imageSettings.url = + foundFixture.imageSettings.url === + 'postLink' + ? postLink + : foundFixture.imageSettings.url; + + await page + .getByRole('textbox', { + name: 'URL', + exact: true, + }) + .fill(foundFixture.imageSettings.url); + } + + if ( + foundFixture.imageSettings.format === 'video' && + typeof foundFixture.imageSettings.videoUrl !== + 'undefined' + ) { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Video URL', + } + ) + .locator( + 'input.components-text-control__input' + ) + .fill(foundFixture.imageSettings.videoUrl); + } + } } + } else { + console.warn( + `No matching fixture found for item with description: ${itemDescription}` + ); } + } else { + console.warn( + `No matching image found for item with description: ${itemDescription}` + ); } await page.getByLabel('Close', { exact: true }).click(); diff --git a/tests/e2e/specs/added-images-to-saved-layout.spec.js b/tests/e2e/specs/added-images-to-saved-layout.spec.js new file mode 100644 index 00000000..9afd6839 --- /dev/null +++ b/tests/e2e/specs/added-images-to-saved-layout.spec.js @@ -0,0 +1,690 @@ +/** + * WordPress dependencies + */ +import { expect, test } from '@wordpress/e2e-test-utils-playwright'; + +/** + * Test Images + */ +import imageFixtures from '../../fixtures/images.json'; +import { findAsyncSequential } from '../utils/find-async-sequential'; +import { getWordpressImages } from '../utils/get-wordpress-images'; + +/** + * TODO: The test needs to be redone in the future. + * Currently, saved layouts cannot be modified using Gutenberg methods + * Because the block on the layout page is hardcoded, + * Preventing the addition of other blocks. + */ +test.describe('added images to saved layout', () => { + test.beforeEach(async ({ requestUtils }) => { + const pluginName = process.env.CORE + ? 'visual-portfolio-pro' + : 'visual-portfolio-posts-amp-image-gallery'; + await requestUtils.activatePlugin(pluginName); + }); + + test.afterEach(async ({ requestUtils }) => { + await Promise.all([ + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); + }); + + test.afterAll(async ({ requestUtils }) => { + await Promise.all([ + requestUtils.deleteAllMedia(), + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); + }); + /** + * We create a gallery block and add pictures to it manually or automatically. + * + * @param {RequestUtils} requestUtils Playwright utilities for interacting with the WordPress REST API. + * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. + * @param {Editor} editor End to end test utilities for the WordPress Block Editor. + * @param {boolean} alternativeSetting Flag for setting alternative meta settings for test images. + * @param checkImageSettings + * @return {{images: {format: string, video_url: string, url: string}[]}} + */ + async function generateGalleryBeforeEachTest( + requestUtils, + page, + admin, + editor, + alternativeSetting = false, + checkImageSettings = false + ) { + await admin.visitAdminPage('edit.php'); + + const images = await getWordpressImages({ + requestUtils, + page, + admin, + editor, + alternativeSetting, + }); + + await admin.createNewPost({ + title: 'Test Adding Images to Saved Layout', + postType: 'vp_lists', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await page + .locator( + 'button.components-button.vpf-component-icon-selector-item', + { + hasText: 'Images', + } + ) + .click(); + + await page + .locator('button#menu-item-browse', { + hasText: 'Media Library', + }) + .click(); + + await page.waitForTimeout(500); + + const imageList = await page.locator( + 'ul.attachments.ui-sortable.ui-sortable-disabled li.attachment[role="checkbox"]' + ); + + for (const image of await imageList.elementHandles()) { + if ( + typeof images.find( + async (x) => x.id === (await image.getAttribute('data-id')) + ).imgUrl !== 'undefined' + ) { + await image.click(); + + const imageID = await image.getAttribute('data-id'); + + const foundImage = await findAsyncSequential( + images, + async (x) => x.id === Number(imageID) + ); + + const foundFixture = await findAsyncSequential( + imageFixtures, + async (x) => + x.description === (await foundImage.description) + ); + + if (typeof (await foundFixture) !== 'undefined') { + await page + .locator('#attachment-details-alt-text') + .fill(foundFixture.alt); + + await page + .locator('#attachment-details-caption') + .fill(foundFixture.caption); + + await page + .locator('#attachment-details-description') + .fill(foundFixture.description); + } + } + } + + await page + .locator('button.button.media-button.media-button-select', { + hasText: 'Select', + }) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator( + 'button.components-button.vpf-component-icon-selector-item', + { + hasText: 'Classic', + } + ) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator('.components-base-control__field', { + hasText: 'Items Per Page', + }) + .locator('input.components-text-control__input') + .fill('10'); + + if (checkImageSettings) { + await page + .locator( + 'button.components-button.components-panel__body-toggle', + { + hasText: 'Skin', + } + ) + .click(); + + await page + .locator( + 'button.components-button.components-navigator-button', + { + hasText: 'Caption', + } + ) + .click(); + + await page + .locator( + 'button.components-button.vpf-component-collapse-control-toggle', + { + hasText: 'Elements', + } + ) + .click(); + + await page + .getByRole('checkbox', { name: 'Display Excerpt' }) + .check(); + } + + await page.waitForTimeout(500); + + // Check images on backend editor. + for (const image of await images) { + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.wp-image-' + image.id) + ).toBeVisible(); + } + + // Publish Post. + await editor.publishPost(); + + let postID = await page.locator('input[name="post_ID"]').inputValue(); + postID = typeof postID === 'string' ? parseInt(postID, 10) : null; + + return { postID, images }; + } + + test('added images to a saved layout manually', async ({ + page, + admin, + editor, + requestUtils, + }) => { + const { images, postID } = await generateGalleryBeforeEachTest( + requestUtils, + page, + admin, + editor + ); + + await admin.createNewPost({ + title: 'Test Saved Layout', + postType: 'page', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await editor.insertBlock({ + name: 'visual-portfolio/saved', + attributes: { id: String(postID) }, + }); + + await page.waitForTimeout(500); + + // Check images on backend editor. + for (const image of images) { + await expect( + page.frame('vpf-preview-1').locator('.wp-image-' + image.id) + ).toBeVisible(); + } + + // Publish Post. + await editor.publishPost(); + + // Go to published post. + await page + .locator('.components-button', { + hasText: 'View Page', + }) + .first() + .click(); + + // Check images on frontend. + for (const image of await images) { + await expect(page.locator('.wp-image-' + image.id)).toBeVisible(); + } + }); + + test('checking image settings on saved layout', async ({ + page, + admin, + editor, + requestUtils, + }) => { + const { images, postID } = await generateGalleryBeforeEachTest( + requestUtils, + page, + admin, + editor, + false, + true + ); + + await admin.createNewPost({ + title: 'Test Saved Layout (image settings)', + postType: 'page', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await editor.insertBlock({ + name: 'visual-portfolio/saved', + attributes: { id: String(postID) }, + }); + + await page.waitForTimeout(500); + + // Check images on backend editor. + for (const image of images) { + const imageContainer = page + .frame('vpf-preview-1') + .locator('.wp-image-' + image.id); + await expect(imageContainer).toBeVisible(); + + await expect( + page + .frame('vpf-preview-1') + .locator('.vp-portfolio__item-meta-excerpt', { + hasText: image.description, + }) + ).toBeVisible(); + + const foundFixture = await findAsyncSequential( + imageFixtures, + async (x) => x.description === image.description + ); + + await expect( + page.frame('vpf-preview-1').getByAltText(foundFixture.alt) + ).toBeVisible(); + } + + // Publish Post. + await editor.publishPost(); + + // Go to published post. + await page + .locator('.components-button', { + hasText: 'View Page', + }) + .first() + .click(); + + // Check images on frontend. + for (const image of images) { + await expect(page.locator('.wp-image-' + image.id)).toBeVisible(); + + const itemContainer = page + .locator('.vp-portfolio__item') + .filter({ has: page.locator('.wp-image-' + image.id) }); + + await expect(itemContainer).toBeVisible(); + + const descriptionText = itemContainer.locator( + '.vp-portfolio__item-meta-excerpt div' + ); + + await expect(descriptionText).toHaveText(image.description); + + const foundFixture = await findAsyncSequential( + imageFixtures, + async (x) => x.description === image.description + ); + + await expect(page.getByAltText(foundFixture.alt)).toBeVisible(); + } + }); + + test('checking alternative image settings on saved layout', async ({ + page, + admin, + editor, + requestUtils, + }) => { + const currentPage = page.url(); + + await admin.createNewPost({ + title: 'Sample Test Page', + postType: 'page', + content: 'Test content', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + // Publish Post. + await editor.publishPost(); + + // Go to published post. + await page + .locator('.components-button', { + hasText: 'View Page', + }) + .first() + .click(); + + const postLink = page.url(); + + await page.goto(currentPage); + + const { images, postID } = await generateGalleryBeforeEachTest( + requestUtils, + page, + admin, + editor, + false, + true + ); + + const galleryControlItems = page.locator( + '.vpf-component-gallery-control-items .vpf-component-gallery-control-item' + ); + + for (const item of await galleryControlItems.elementHandles()) { + await item.click(); + + const itemDescription = await page + .locator('.components-base-control__field', { + hasText: 'Description', + }) + .locator('textarea.components-textarea-control__input') + .innerHTML(); + + const foundImage = await findAsyncSequential( + images, + async (x) => x.description === itemDescription + ); + + const foundFixture = await findAsyncSequential( + imageFixtures, + async (x) => x.description === itemDescription + ); + + const foundFixtureIndex = imageFixtures.indexOf(foundFixture); + + imageFixtures[foundFixtureIndex].id = foundImage.id; + + if (typeof foundFixture.imageSettings !== 'undefined') { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Title', + } + ) + .locator('input.components-text-control__input') + .fill(foundFixture.imageSettings.title); + + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Description', + } + ) + .locator('textarea.components-textarea-control__input') + .fill(foundFixture.imageSettings.description); + + if (typeof foundFixture.imageSettings.format !== 'undefined') { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Format', + } + ) + .locator('.vpf-component-select') + .click(); + + await page + .locator('.vpf-component-select-option-label', { + hasText: foundFixture.imageSettings.format, + }) + .click(); + + if ( + foundFixture.imageSettings.format === 'standard' && + typeof foundFixture.imageSettings.url !== 'undefined' + ) { + foundFixture.imageSettings.url = + foundFixture.imageSettings.url === 'postLink' + ? postLink + : foundFixture.imageSettings.url; + + await page + .getByRole('textbox', { name: 'URL', exact: true }) + .fill(foundFixture.imageSettings.url); + } + + if ( + foundFixture.imageSettings.format === 'video' && + typeof foundFixture.imageSettings.videoUrl !== + 'undefined' + ) { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Video URL', + } + ) + .locator('input.components-text-control__input') + .fill(foundFixture.imageSettings.videoUrl); + } + } + } + + await page.getByLabel('Close', { exact: true }).click(); + } + + // Check image attributes on backend editor. + for (const image of imageFixtures) { + const imageContainer = page + .frameLocator('[title="vp-preview"]') + .locator('.wp-image-' + image.id); + await expect(imageContainer).toBeVisible(); + + if (typeof image.imageSettings !== 'undefined') { + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.vp-portfolio__item-meta-excerpt', { + hasText: image.imageSettings.description, + }) + ).toBeVisible(); + + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toBeVisible(); + + if (typeof image.imageSettings.format !== 'undefined') { + const format = image.imageSettings.format; + if ( + format === 'standard' && + typeof image.imageSettings.url !== 'undefined' + ) { + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toHaveAttribute('href', image.imageSettings.url); + + await expect( + page + .frameLocator('[title="vp-preview"]') + .getByRole('link', { name: image.alt }) + ).toHaveAttribute('href', image.imageSettings.url); + } + + if ( + format === 'video' && + typeof image.imageSettings.videoUrl !== 'undefined' + ) { + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toHaveAttribute('href', image.imageSettings.videoUrl); + + await expect( + page + .frameLocator('[title="vp-preview"]') + .getByRole('link', { name: image.alt }) + ).toHaveAttribute('href', image.imageSettings.videoUrl); + } + } + } else { + await expect( + page + .frameLocator('[title="vp-preview"]') + .locator('.vp-portfolio__item-meta-excerpt', { + hasText: image.description, + }) + ).toBeVisible(); + } + + await expect( + page + .frameLocator('[title="vp-preview"]') + .getByAltText(image.alt) + ).toBeVisible(); + } + + // Save Layout. + await page + .locator('button.components-button.editor-post-publish-button', { + hasText: 'Save', + }) + .first() + .click(); + + await admin.createNewPost({ + title: 'Test Saved Layout (alternative image settings)', + postType: 'page', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await editor.insertBlock({ + name: 'visual-portfolio/saved', + attributes: { id: String(postID) }, + }); + + await page.waitForTimeout(500); + + // Publish Post. + await editor.publishPost(); + + // Go to published post. + await page + .locator('.components-button', { + hasText: 'View Page', + }) + .first() + .click(); + + // Check image attributes on frontend. + for (const image of imageFixtures) { + await expect(page.locator('.wp-image-' + image.id)).toBeVisible(); + + const itemContainer = page + .locator('.vp-portfolio__item') + .filter({ has: page.locator('.wp-image-' + image.id) }); + + await expect(itemContainer).toBeVisible(); + + if (typeof image.imageSettings !== 'undefined') { + await expect( + page.locator('.vp-portfolio__item-meta-excerpt', { + hasText: image.imageSettings.description, + }) + ).toBeVisible(); + + await expect( + page.locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toBeVisible(); + + if (typeof image.imageSettings.format !== 'undefined') { + const format = image.imageSettings.format; + if ( + format === 'standard' && + typeof image.imageSettings.url !== 'undefined' + ) { + await expect( + page.locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toHaveAttribute('href', image.imageSettings.url); + + await expect( + page.getByRole('link', { name: image.alt }) + ).toHaveAttribute('href', image.imageSettings.url); + } + + if ( + format === 'video' && + typeof image.imageSettings.videoUrl !== 'undefined' + ) { + await expect( + page.locator('.vp-portfolio__item-meta-title > a', { + hasText: image.imageSettings.title, + }) + ).toHaveAttribute('href', image.imageSettings.videoUrl); + + await expect( + page.getByRole('link', { name: image.alt }) + ).toHaveAttribute('href', image.imageSettings.videoUrl); + } + } + } else { + await expect( + page.locator('.vp-portfolio__item-meta-excerpt', { + hasText: image.description, + }) + ).toBeVisible(); + } + + await expect(page.getByAltText(image.alt)).toBeVisible(); + } + }); +}); diff --git a/tests/e2e/specs/archive.spec.js b/tests/e2e/specs/archive.spec.js index 8aa5bdc6..91abde41 100644 --- a/tests/e2e/specs/archive.spec.js +++ b/tests/e2e/specs/archive.spec.js @@ -1,74 +1,112 @@ +/* eslint-disable no-console */ /** * WordPress dependencies */ import { expect, test } from '@wordpress/e2e-test-utils-playwright'; import expectedArchiveCategoryDefault from '../../fixtures/archive/expected-category-default.json'; +import expectedArchiveCategoryInfinityDefault from '../../fixtures/archive/expected-category-infinity-default.json'; +import expectedArchiveCategoryInfinityPostName from '../../fixtures/archive/expected-category-infinity-post-name.json'; +import expectedArchiveCategoryLoadMoreDefault from '../../fixtures/archive/expected-category-load-more-default.json'; +import expectedArchiveCategoryLoadMorePostName from '../../fixtures/archive/expected-category-load-more-post-name.json'; import expectedArchiveCategoryPostName from '../../fixtures/archive/expected-category-post-name.json'; import expectedArchiveDefault from '../../fixtures/archive/expected-default.json'; +import expectedArchiveInfinityDefault from '../../fixtures/archive/expected-infinity-default.json'; +import expectedArchiveLoadMoreDefault from '../../fixtures/archive/expected-load-more-default.json'; import expectedArchivePostName from '../../fixtures/archive/expected-post-name-permalinks.json'; +import expectedArchivePostNameLoadMore from '../../fixtures/archive/expected-post-name-permalinks-load-more.json'; +import expectedArchivePostNameInfinity from '../../fixtures/archive/expected-post-name-premalinks-infinity.json'; import portfolioPosts from '../../fixtures/archive/portfolio-posts.json'; import imageFixtures from '../../fixtures/images.json'; import { deleteAllPortfolio } from '../utils/delete-all-portfolio'; import { findAsyncSequential } from '../utils/find-async-sequential'; import { getWordpressImages } from '../utils/get-wordpress-images'; +const logsEnabled = process.env.LOGS || false; + test.describe('archive pages', () => { - test.beforeEach(async ({ requestUtils }) => { + test.beforeEach(async ({ admin, page, requestUtils }) => { + await setPermalinkSettings(admin, page, 'Post name'); const pluginName = process.env.CORE ? 'visual-portfolio-pro' : 'visual-portfolio-posts-amp-image-gallery'; await requestUtils.activatePlugin(pluginName); - await requestUtils.deleteAllMedia(); - await requestUtils.deleteAllPages(); - await requestUtils.deleteAllPosts(); - await deleteAllPortfolio({ requestUtils }); }); + test.afterEach(async ({ requestUtils }) => { - await requestUtils.deleteAllMedia(); - await requestUtils.deleteAllPages(); - await requestUtils.deleteAllPosts(); - await deleteAllPortfolio({ requestUtils }); + await Promise.all([ + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); + }); + + test.afterAll(async ({ requestUtils }) => { + await Promise.all([ + deleteAllPortfolioTaxonomies(requestUtils), + deleteAllPortfolio({ requestUtils }), + requestUtils.deleteAllMedia(), + requestUtils.deleteAllPages(), + requestUtils.deleteAllPosts(), + ]); }); /** - * Deleting all categories of portfolio posts. + * Asynchronously deletes all terms associated with a specified taxonomy in a WordPress site. + * Utilizes the requestUtils.rest method to interact with the WordPress REST API. * - * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Object} requestUtils - An object that provides utility methods for making REST API requests. + * @param {string} taxonomy - A string representing the taxonomy from which terms should be deleted (e.g., 'portfolio_category', 'portfolio_tag'). */ - async function deletePortfolioCategories(admin, page) { - await admin.visitAdminPage( - 'edit-tags.php?taxonomy=portfolio_category&post_type=portfolio' - ); + async function deletePortfolioTaxonomyTerms(requestUtils, taxonomy) { + try { + // Get all terms for the specified taxonomy + const terms = await requestUtils.rest({ + path: `/wp/v2/${taxonomy}`, + method: 'GET', + params: { + // Adjust as necessary for your needs + per_page: 100, + context: 'view', + hide_empty: false, + }, + }); + + // Check if the response is an error + if (!Array.isArray(terms)) { + throw new Error( + `Failed to retrieve terms for taxonomy "${taxonomy}". Response: ${JSON.stringify(terms)}` + ); + } - if ((await page.locator('#the-list > tr').count()) > 1) { - await page.locator('#cb-select-all-1').check(); - await page - .locator('#bulk-action-selector-top') - .selectOption('delete'); - await page.locator('#doaction').click(); + // Iterate over each term and delete it + for (const term of await terms) { + try { + await requestUtils.rest({ + path: `/wp/v2/${taxonomy}/${term.id}`, + method: 'DELETE', + params: { force: true }, // Force delete to bypass trash + }); + } catch (deleteError) { + console.log( + `Error deleting term with ID ${term.id}:`, + deleteError + ); + } + } + } catch (error) { + console.log(`Error deleting ${taxonomy} terms:`, error); } } /** - * Deleting all tags of portfolio posts. + * Asynchronously deletes all terms from 'portfolio_category' and 'portfolio_tag' taxonomies. + * Serves as a usage example for deletePortfolioTaxonomyTerms. * - * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Object} requestUtils - An object that provides utility methods for making REST API requests. */ - async function deletePortfolioTags(admin, page) { - await admin.visitAdminPage( - 'edit-tags.php?taxonomy=portfolio_tag&post_type=portfolio' - ); - - if ((await page.locator('#the-list > tr').count()) > 1) { - await page.locator('#cb-select-all-1').check(); - await page - .locator('#bulk-action-selector-top') - .selectOption('delete'); - await page.locator('#doaction').click(); - } + async function deleteAllPortfolioTaxonomies(requestUtils) { + await deletePortfolioTaxonomyTerms(requestUtils, 'portfolio_category'); + await deletePortfolioTaxonomyTerms(requestUtils, 'portfolio_tag'); } /** @@ -79,194 +117,127 @@ test.describe('archive pages', () => { async function getArchiveItems(page) { const archiveItems = []; const items = await page.locator( - '.vp-portfolio__items article.vp-portfolio__item-wrap' + '.vp-portfolio__ready .vp-portfolio__items article.vp-portfolio__item-wrap' ); - for (const item of await items.all()) { - await page.waitForTimeout(700); - const url = await item - .locator('.vp-portfolio__item-img > a') - .getAttribute('href'); - const categoriesWrapper = await item.locator( - '.vp-portfolio__item-meta .vp-portfolio__item-meta-categories > .vp-portfolio__item-meta-category' - ); + // Log the count of items found + const itemCount = await items.count(); - if (await categoriesWrapper.count()) { - const categories = []; - for (const categoryWrap of await categoriesWrapper.all()) { - const category = await categoryWrap - .locator('a') - .innerText(); - const categoryUrl = await categoryWrap - .locator('a') - .getAttribute('href'); - categories.push({ - category, - categoryUrl, - }); - } - } - - const title = await item - .locator('.vp-portfolio__item-meta-title > a') - .innerText(); - - const description = await item - .locator('.vp-portfolio__item-meta-excerpt > div') - .innerText(); - - archiveItems.push({ - url, - categories: - typeof categories !== 'undefined' - ? // eslint-disable-next-line no-undef - categories - : false, - title, - description, - }); + if (logsEnabled) { + console.log(`Found ${itemCount} items on the page`); } - return archiveItems; - } - - /** - * We create portfolio posts for the archives page. - * We fill these posts with pictures, titles, descriptions and other necessary meta data. - * We also set tags and categories. - * - * @param {RequestUtils} requestUtils Playwright utilities for interacting with the WordPress REST API. - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. - * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. - * @param {Editor} editor End to end test utilities for the WordPress Block Editor. - */ - async function createPortfolioPosts(requestUtils, page, admin, editor) { - const images = await getWordpressImages({ - requestUtils, - page, - admin, - editor, - }); - - let key = 0; - for (const post of portfolioPosts) { - await admin.createNewPost(post); - - const foundFixtureImage = await findAsyncSequential( - imageFixtures, - async (x) => x.postTitle === post.title - ); - - const foundImage = await findAsyncSequential( - images, - async (x) => x.description === foundFixtureImage.description - ); - - const featuredExpandedPanel = page.getByRole('button', { - name: 'Featured image', - exact: true, - expanded: false, - }); - - const isFeaturedPanelExpanded = await featuredExpandedPanel.count(); - - if (isFeaturedPanelExpanded) { - await featuredExpandedPanel.click(); - } - - await page - .getByRole('button', { name: 'Set featured image' }) - .click(); - - await page.getByRole('tab', { name: 'Media Library' }).click(); - - const imageContainer = await page.locator( - 'ul.attachments.ui-sortable.ui-sortable-disabled li.attachment[data-id="' + - foundImage.id + - '"]' - ); - - await imageContainer.click(); - - await page - .getByRole('button', { name: 'Set featured image' }) - .click(); + for (let i = 0; i < itemCount; i++) { + try { + const item = await items.nth(i); + + // Check if the element exists before waiting for visibility + const imgExists = await item + .locator('.vp-portfolio__item-img') + .count(); + if (imgExists === 0) { + if (logsEnabled) { + console.log(`Image not found for item ${i + 1}`); + } + continue; + } - const categoriesExpandedPanel = page.getByRole('button', { - name: 'Categories', - exact: true, - expanded: false, - }); + // Wait for the image to be visible with increased timeout + try { + await item.locator('.vp-portfolio__item-img').waitFor({ + state: 'visible', + timeout: 1000, // Increased timeout + }); + } catch (error) { + console.log( + `Image not visible for item ${i + 1}, skipping.` + ); + continue; + } - const isCategoriesPanelExpanded = - await categoriesExpandedPanel.count(); + const url = await item + .locator('.vp-portfolio__item-img > a[href]') + .getAttribute('href'); - if (isCategoriesPanelExpanded) { - await categoriesExpandedPanel.click(); - } + const categoriesWrapper = item.locator( + '.vp-portfolio__item-meta .vp-portfolio__item-meta-categories > .vp-portfolio__item-meta-category' + ); - if (typeof post.categories !== 'undefined') { - for (const category of post.categories) { - const isVisibleCategoryField = - page.getByLabel('New Category Name'); - - if (!(await isVisibleCategoryField.isVisible())) { - await page - .getByRole('button', { name: 'Add New Category' }) - .first() - .click(); + const categories = []; + if (await categoriesWrapper.count()) { + for (const categoryWrap of await categoriesWrapper.all()) { + const category = await categoryWrap + .locator('a') + .innerText(); + const categoryUrl = await categoryWrap + .locator('a') + .getAttribute('href'); + categories.push({ + category, + categoryUrl, + }); } + } - if (await isVisibleCategoryField.isVisible()) { - await isVisibleCategoryField.fill(category); - await page - .getByLabel('Project') - .locator('form') - .getByRole('button', { name: 'Add New Category' }) - .click(); + // Check if the title element exists before trying to get text + const titleLocator = item.locator( + '.vp-portfolio__item-meta-title > a' + ); + const titleExists = await titleLocator.count(); + let title = ''; + if (titleExists > 0) { + try { + title = await titleLocator.innerText({ + timeout: 20000, + }); // Increased timeout + } catch (error) { + console.log( + `Title not visible for item ${i + 1}, skipping.` + ); + continue; } - - await page.waitForTimeout(500); + } else { + console.log(`Title not found for item ${i + 1}`); + continue; } - } - const tagsExpandedPanel = page.getByRole('button', { - name: 'Tags', - exact: true, - expanded: false, - }); + // Check if the description element exists and is visible + const descriptionLocator = item.locator( + '.vp-portfolio__item-meta-excerpt > div' + ); + const descriptionExists = await descriptionLocator.count(); + let description = ''; + if (descriptionExists > 0) { + try { + // Attempt to get the description text + description = await descriptionLocator.innerText({ + timeout: 1000, + }); + } catch (error) { + console.log( + `Description not visible for item ${i + 1}, skipping description extraction.` + ); + } + } else if (logsEnabled) { + console.log(`Description not found for item ${i + 1}`); + } - const isTagsExpandedPanel = await tagsExpandedPanel.count(); + archiveItems.push({ + url, + categories: categories.length > 0 ? categories : false, + title, + description, + }); - if (isTagsExpandedPanel) { - await tagsExpandedPanel.click(); - } - - if (typeof post.tags !== 'undefined') { - for (const tag of post.tags) { - await page.getByLabel('Add New Tag').fill(tag); - await page.getByLabel('Add New Tag').press('Enter'); + if (logsEnabled) { + console.log(`Extracted item: ${title}, URL: ${url}`); } + } catch (error) { + console.error('Error extracting item:', error); } - - //await page.waitForTimeout(500); - - // Publish Post. - await editor.publishPost(); - - // Go to published post. - await page - .locator('.components-button', { - hasText: 'View Project', - }) - .first() - .click(); - - const postLink = page.url(); - - portfolioPosts[key].postLink = postLink; - key = key + 1; } + + return archiveItems; } /** @@ -274,12 +245,18 @@ test.describe('archive pages', () => { * We select the number of elements displayed on the page, skin and pagination display. * Setting the display of the category filter. * - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. - * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. - * @param {Editor} editor End to end test utilities for the WordPress Block Editor. + * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. + * @param {Editor} editor End to end test utilities for the WordPress Block Editor. + * @param {string} typePagination Type of Pagination. * @return {{archiveID: number, archiveUrl: string}} Return object with archive page ID and archive URL. */ - async function createArchivePage(page, admin, editor) { + async function createArchivePage( + page, + admin, + editor, + typePagination = 'paged' + ) { await admin.createNewPost({ title: 'Portfolio', postType: 'page', @@ -303,7 +280,19 @@ test.describe('archive pages', () => { await page.getByRole('button', { name: 'Current Query' }).click(); await page.getByRole('button', { name: 'Layout' }).click(); await page.getByRole('button', { name: 'Pagination' }).click(); - await page.getByRole('button', { name: 'Paged' }).click(); + + switch (typePagination) { + case 'paged': + await page.getByRole('button', { name: 'Paged' }).click(); + break; + case 'loadMore': + await page.getByRole('button', { name: 'Load More' }).click(); + break; + case 'inf': + await page.getByRole('button', { name: 'Infinite' }).click(); + break; + } + await page.getByLabel('Close', { exact: true }).click(); await page.getByRole('button', { name: 'Skin' }).click(); await page.getByRole('button', { name: 'Caption' }).click(); @@ -360,13 +349,57 @@ test.describe('archive pages', () => { await page.getByRole('button', { name: 'Save Changes' }).click(); } + // This function ensures that the page is fully loaded before any data collection begins. + async function awaitPageLoading(page) { + // Ensure the page is fully loaded before collecting data + await page.waitForSelector('.vp-portfolio__ready', { + state: 'attached', + timeout: 15000, + }); + await page.waitForLoadState('networkidle'); + await page.waitForLoadState('domcontentloaded'); + } + + // This function handles pagination by clicking the appropriate button to content. + async function clickToPagination( + page, + pagination, + typePagination = 'paged' + ) { + const button = + typePagination === 'paged' + ? '.vp-pagination__item.vp-pagination__item-next > a' + : 'a.vp-pagination__load-more'; + await Promise.all([ + page + .waitForSelector('.vp-portfolio__ready', { + state: 'detached', + timeout: 500, + }) + .catch(() => { + /* ignore if it doesn’t detach */ + }), + page.waitForSelector('.vp-portfolio__ready', { + state: 'attached', + timeout: 15000, + }), + pagination + .locator(button) + .click() + .catch(() => { + /* ignore if it doesn’t detach */ + }), + ]); + } + /** * We receive an array of objects with archive elements in the process of querying the layout on the front-end side. * This array will be used as a comparison array against the expected result. * During the survey process, we also collect information about the current state of pagination, * Understanding what page we are on and what elements surround us. * - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {string} typePagination Type of Pagination. * @return { * { * items: @@ -395,19 +428,23 @@ test.describe('archive pages', () => { * } * []} */ - async function getReceivedArchive(page) { + async function getReceivedArchive(page, typePagination = 'paged') { const pageCounts = 5; const receivedArchive = []; let currentCount = 0; while (currentCount < pageCounts) { const archivePagination = []; - - await page.waitForTimeout(2000); + // Ensure the page is fully loaded before collecting data + await awaitPageLoading(page); const archiveItems = await getArchiveItems(page); - await page.waitForTimeout(1000); + if (logsEnabled) { + console.log( + `Page ${currentCount + 1}: Retrieved ${archiveItems.length} items` + ); + } const pagination = await page.locator( '.vp-portfolio__layout-elements .vp-pagination' @@ -420,70 +457,172 @@ test.describe('archive pages', () => { for (const paginationItem of await paginationItems.all()) { const classes = await paginationItem.getAttribute('class'); - if ( - classes === 'vp-pagination__item vp-pagination__item-active' - ) { - const activeElement = await paginationItem.innerText(); - archivePagination.push({ - text: activeElement, - active: true, - }); + switch (typePagination) { + case 'paged': + if ( + classes === + 'vp-pagination__item vp-pagination__item-active' + ) { + const activeElement = + await paginationItem.innerText(); + archivePagination.push({ + text: activeElement, + active: true, + }); + } + + if (classes === 'vp-pagination__item') { + const paginationLink = await paginationItem + .locator('a') + .getAttribute('href'); + const paginationText = await paginationItem + .locator('a') + .innerText(); + archivePagination.push({ + url: paginationLink, + text: paginationText, + standard: true, + }); + } + + if ( + classes === + 'vp-pagination__item vp-pagination__item-dots' + ) { + const dotsText = await paginationItem.innerText(); + archivePagination.push({ + text: dotsText, + dots: true, + }); + } + + if ( + classes === + 'vp-pagination__item vp-pagination__item-next' + ) { + const nextPaginationLink = await paginationItem + .locator('a') + .getAttribute('href'); + archivePagination.push({ + url: nextPaginationLink, + nextPage: true, + }); + } + break; + case 'loadMore': + if ( + classes === 'vp-pagination__item' && + (await pagination + .locator('.vp-pagination__no-more') + .count()) === 0 + ) { + const paginationLink = await paginationItem + .locator('a') + .getAttribute('href'); + const paginationText = await paginationItem + .locator('a') + .innerText(); + archivePagination.push({ + url: paginationLink, + text: paginationText, + }); + } + break; } + } - if (classes === 'vp-pagination__item') { - const paginationLink = await paginationItem - .locator('a') - .getAttribute('href'); - const paginationText = await paginationItem - .locator('a') - .innerText(); - archivePagination.push({ - url: paginationLink, - text: paginationText, - standard: true, - }); + if (archiveItems.length > 0 && typePagination !== 'inf') { + // Check for duplicates before adding + for (const item of archiveItems) { + if ( + !receivedArchive.some((existingItem) => + existingItem.items.some( + (existing) => existing.url === item.url + ) + ) + ) { + receivedArchive.push({ + items: archiveItems, + pagination: archivePagination, + }); + } else if (logsEnabled) { + console.log( + `Duplicate item detected: ${item.title}, URL: ${item.url}` + ); + } } + } - if ( - classes === 'vp-pagination__item vp-pagination__item-dots' - ) { - const dotsText = await paginationItem.innerText(); - archivePagination.push({ - text: dotsText, - dots: true, - }); - } + currentCount++; - if ( - classes === 'vp-pagination__item vp-pagination__item-next' - ) { - const nextPaginationLink = await paginationItem - .locator('a') - .getAttribute('href'); - archivePagination.push({ - url: nextPaginationLink, - nextPage: true, - }); + const nextPageExists = await pagination + .locator('.vp-pagination__item.vp-pagination__item-next > a') + .isVisible(); + if (nextPageExists && typePagination === 'paged') { + if (logsEnabled) { + console.log('Navigating to the next page...'); } - } - receivedArchive.push({ - items: archiveItems, - pagination: archivePagination, - }); + try { + // Click the next page button and immediately wait for the class to be detached and attached again + await clickToPagination(page, pagination); - currentCount++; + if (logsEnabled) { + console.log(`Navigated to page ${currentCount + 1}`); + } + } catch (error) { + console.error('Error navigating to the next page:', error); + } + } else if ( + !nextPageExists && + typePagination !== 'paged' && + logsEnabled + ) { + console.log('No more pages to navigate.'); + } if ( - await pagination - .locator('.vp-pagination__item.vp-pagination__item-next') - .count() + (await pagination + .locator('a.vp-pagination__load-more') + .count()) && + (typePagination === 'loadMore' || typePagination === 'inf') ) { - await pagination - .locator( - '.vp-pagination__item.vp-pagination__item-next > a' - ) - .click(); + await page.waitForSelector('a.vp-pagination__load-more', { + state: 'visible', + }); + + await page + .locator('a.vp-pagination__load-more') + .scrollIntoViewIfNeeded(); + + const nextPageAttribute = await pagination + .locator('a.vp-pagination__load-more') + .getAttribute('href'); + if (nextPageAttribute !== '') { + try { + if (logsEnabled) { + console.log('Loading more items...'); + } + + await clickToPagination( + page, + pagination, + typePagination + ); + } catch (error) { + console.error('Error clicking "Load More":', error); + } + } + + if ( + typePagination === 'inf' && + nextPageAttribute === '' && + currentCount === 5 + ) { + receivedArchive.push({ + items: archiveItems, + }); + } } } @@ -496,10 +635,11 @@ test.describe('archive pages', () => { * During the survey process, we also collect information about the current state of pagination, * Understanding what page we are on and what elements surround us. * - * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {string} typePagination Type of Pagination. * @return {{title: any, url: any, items: never[]}[]} */ - async function getReceivedCategories(page) { + async function getReceivedCategories(page, typePagination = 'paged') { const filterItems = await page .locator('.vp-filter .vp-filter__item') .filter({ hasNotText: 'All' }); @@ -518,29 +658,76 @@ test.describe('archive pages', () => { let categoryKey = 0; for (const category of receivedCategories) { - await page - .locator('.vp-filter .vp-filter__item') - .filter({ hasText: category.title }) - .click(); - - await page.waitForTimeout(700); - - let archiveItems = await getArchiveItems(page); + await Promise.all([ + awaitPageLoading(page), + page + .waitForSelector('.vp-portfolio__ready', { + state: 'detached', + timeout: 500, + }) + .catch(() => { + /* ignore if it doesn’t detach */ + }), + page.waitForSelector('.vp-portfolio__ready', { + state: 'attached', + timeout: 15000, + }), + page + .locator('.vp-filter .vp-filter__item') + .filter({ hasText: category.title }) + .click(), + ]); const pagination = page.locator( '.vp-portfolio__layout-elements .vp-pagination' ); - if (archiveItems.length === 2 && (await pagination.count())) { - await pagination - .locator( - '.vp-pagination__item.vp-pagination__item-next > a' - ) - .click(); + let archiveItems = []; + + switch (typePagination) { + case 'paged': + archiveItems = await getArchiveItems(page); - await page.waitForTimeout(500); + if ( + archiveItems.length === 2 && + (await pagination.count()) + ) { + await clickToPagination(page, pagination); - archiveItems = archiveItems.concat(await getArchiveItems(page)); + await awaitPageLoading(page); + + archiveItems = archiveItems.concat( + await getArchiveItems(page) + ); + } + break; + case 'loadMore': + case 'inf': + if ( + await pagination + .locator('a.vp-pagination__load-more') + .count() + ) { + const nextPageAttribute = await pagination + .locator('a.vp-pagination__load-more') + .getAttribute('href'); + if (nextPageAttribute !== '') { + await clickToPagination( + page, + pagination, + typePagination + ); + + await awaitPageLoading(page); + } + } + + // Wait for archiveItems to be filled + while (archiveItems.length === 0) { + await page.waitForTimeout(100); // Wait for 100ms before checking again + archiveItems = (await getArchiveItems(page)) || []; + } + break; } receivedCategories[categoryKey].items = archiveItems; @@ -551,101 +738,340 @@ test.describe('archive pages', () => { return receivedCategories; } - test('check archive page with default pagination and category filter (plain permalinks)', async ({ + /** + * We create portfolio posts for the archives page. + * We fill these posts with pictures, titles, descriptions and other necessary meta data. + * We also set tags and categories. + * + * @param {Page} page Provides methods to interact with a single tab in a Browser, or an extension background page in Chromium. + * @param {Admin} admin End to end test utilities for WordPress admin’s user interface. + * @param {Editor} editor End to end test utilities for the WordPress Block Editor. + * @param {RequestUtils} requestUtils Playwright utilities for interacting with the WordPress REST API. + */ + async function maybeCreatePortfolioPosts( page, admin, editor, - requestUtils, - }) => { - await deletePortfolioCategories(admin, page); - await deletePortfolioTags(admin, page); + requestUtils + ) { + // Retry mechanism for REST API calls in case of an error. + async function retryRequest(fn, retries = 3, delay = 1000) { + for (let attempt = 1; attempt <= retries; attempt++) { + try { + return await fn(); + } catch (error) { + if (attempt === retries) { + throw error; // If it's the last attempt, rethrow the error + } + console.warn( + `Attempt ${attempt} failed. Retrying in ${delay}ms...`, + error + ); + await new Promise((resolve) => setTimeout(resolve, delay)); // Wait before retrying + } + } + } - await createPortfolioPosts(requestUtils, page, admin, editor); + // Retrieve existing posts, categories, and tags + const existingPosts = await retryRequest(() => + requestUtils.rest({ + path: '/wp/v2/portfolio', + params: { + per_page: 100, + status: 'publish,future,draft,pending,private,trash', + }, + }) + ); - // Set Permalink Settings. - await admin.visitAdminPage('options-permalink.php'); - await page.getByLabel('Plain').check(); - await page.getByRole('button', { name: 'Save Changes' }).click(); + // eslint-disable-next-line no-shadow + async function getOrCreateTerm(name, type) { + const endpoint = + type === 'portfolio_category' + ? '/wp/v2/portfolio_category' + : '/wp/v2/portfolio_tag'; + + try { + const existingTerms = await retryRequest(() => + requestUtils.rest({ + path: endpoint, + method: 'GET', + params: { + per_page: 100, + context: 'view', + hide_empty: false, + }, + }) + ); + + // Ensure existingTerms is an array before proceeding + if (!Array.isArray(existingTerms)) { + throw new Error( + `Failed to retrieve terms for taxonomy "${type}". Response: ${JSON.stringify(existingTerms)}` + ); + } - const { archiveID, archiveUrl } = await createArchivePage( + // Check if the term already exists + let term = existingTerms.find( + (t) => t.name.toLowerCase() === name.toLowerCase() + ); + if (term) { + if (logsEnabled) { + console.log( + `Term "${name}" already exists with ID: ${term.id}` + ); + } + return term.id; // Return the existing term ID + } + + // If the term doesn't exist, create it + try { + // Fetch existing terms with retry + term = await retryRequest(() => + requestUtils.rest({ + path: endpoint, + method: 'POST', + data: { name }, + }) + ); + + // Check if the term creation was successful + if (term && term.id) { + if (logsEnabled) { + console.log( + `Term "${name}" created successfully with ID: ${term.id}` + ); + } + return term.id; + } + + throw new Error( + `Unexpected response while creating term "${name}": ${JSON.stringify(term)}` + ); + } catch (error) { + console.error(`Failed to create ${type} "${name}":`, error); + return null; + } + } catch (error) { + console.error( + `Error retrieving or creating term "${name}":`, + error + ); + return null; + } + } + + // Function to check if a post exists + const postExists = (title) => { + return existingPosts.some((post) => post.title.rendered === title); + }; + + const images = await getWordpressImages({ + requestUtils, page, admin, - editor - ); + editor, + }); - await setArchiveSettings(admin, page); + // Get the current date and time + const currentDate = new Date(); + currentDate.setMinutes(currentDate.getMinutes() - 10); + + // Iterate over each post in the fixture + for (const post of await portfolioPosts) { + if (!postExists(post.title)) { + // Get or create portfolio category and tag IDs + const categoryIds = post.categories + ? await Promise.all( + post.categories.map( + async (name) => + await getOrCreateTerm( + name, + 'portfolio_category' + ) + ) + ) + : []; + const tagIds = post.tags + ? await Promise.all( + post.tags.map( + async (name) => + await getOrCreateTerm(name, 'portfolio_tag') + ) + ) + : []; + + const foundFixtureImage = await findAsyncSequential( + imageFixtures, + async (x) => x.postTitle === post.title + ); + + const foundImage = await findAsyncSequential( + images, + async (x) => x.description === foundFixtureImage.description + ); + + // Prepare data for new post + const newPostData = { + title: post.title, + content: post.content, + status: 'publish', // or 'draft' based on your needs + portfolio_category: categoryIds.filter((id) => id), // Filter out nulls + portfolio_tag: tagIds.filter((id) => id), // Filter out nulls + featured_media: foundImage.id, + date: currentDate.toISOString(), + }; + + // Create the post in WordPress + try { + await retryRequest(() => + requestUtils.rest({ + path: '/wp/v2/portfolio', + method: 'POST', + data: newPostData, + }) + ); - // prepare Fixtures. - const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; - let fixtureKey = 0; - for (const expectedArchiveItem of expectedArchiveDefault) { - let paginationKey = 0; - for (const expectedPaginationItem of expectedArchiveItem.pagination) { - if (typeof expectedPaginationItem.url !== 'undefined') { - const fixtureUrl = testBaseUrl + expectedPaginationItem.url; - - expectedArchiveDefault[fixtureKey].pagination[ - paginationKey - ].url = fixtureUrl.replace( - '/?page_id=0000', - '/?page_id=' + archiveID + console.log(`Post "${post.title}" created successfully.`); + } catch (error) { + console.error( + `Failed to create post "${post.title}":`, + error ); } - paginationKey++; + + // Increment the date for the next post + currentDate.setMinutes(currentDate.getMinutes() + 1); + } else if (logsEnabled) { + console.log(`Post "${post.title}" already exists.`); } + } + } + /** + * Configures permalink settings in a WordPress admin interface. + * Navigates to the permalink settings page, selects a specific permalink structure, and saves the changes. + * + * @param {Object} admin - The admin interface object for navigation. + * @param {Object} page - The page interaction object, typically from a browser automation tool. + * @param {string} type - The type of permalink structure to select. + */ + async function setPermalinkSettings(admin, page, type) { + await admin.visitAdminPage('options-permalink.php'); + await page.getByLabel(type).check(); + await page.getByRole('button', { name: 'Save Changes' }).click(); + } + + /** + * Prepares fixture data by updating URLs to include a specific archive ID. + * Modifies pagination, item, and category URLs for testing purposes. + * + * @param {Array} fixtureData - The fixture data to be prepared, containing pagination and item URLs. + * @param {string} archiveID - The unique identifier for the archive to replace placeholder IDs. + * @param {string} testBaseUrl - The base URL for the test environment. + */ + async function prepareFixtures(fixtureData, archiveID, testBaseUrl) { + let fixtureKey = 0; + for (const expectedArchiveItem of fixtureData) { + // Update pagination URLs if they exist + if (Array.isArray(expectedArchiveItem.pagination)) { + let paginationKey = 0; + for (const expectedPaginationItem of expectedArchiveItem.pagination) { + if ( + typeof expectedPaginationItem.url !== 'undefined' && + expectedPaginationItem.url !== '' + ) { + const fixtureUrl = + testBaseUrl + expectedPaginationItem.url; + fixtureData[fixtureKey].pagination[paginationKey].url = + fixtureUrl.replace( + '/?page_id=0000', + '/?page_id=' + archiveID + ); + } + paginationKey++; + } + } + + // Update item URLs let itemKey = 0; for (const expectedItem of expectedArchiveItem.items) { - expectedArchiveDefault[fixtureKey].items[itemKey].url = - testBaseUrl + expectedItem.url; + const fixtureUrl = testBaseUrl + expectedItem.url; + fixtureData[fixtureKey].items[itemKey].url = fixtureUrl.replace( + '/?page_id=000', + '/?page_id=' + archiveID + ); + + // Update category URLs if they exist + if (Array.isArray(expectedItem.categories)) { + let categoryKey = 0; + for (const category of expectedItem.categories) { + if ( + typeof category.categoryUrl !== 'undefined' && + category.categoryUrl !== '' + ) { + const categoryUrl = + testBaseUrl + category.categoryUrl; + fixtureData[fixtureKey].items[itemKey].categories[ + categoryKey + ].categoryUrl = categoryUrl.replace( + '/?page_id=0000', + '/?page_id=' + archiveID + ); + } + categoryKey++; + } + } itemKey++; } - fixtureKey++; - } - - fixtureKey = 0; - for (const expectedArchiveCategoryItem of expectedArchiveCategoryDefault) { - let itemKey = 0; - for (const expectedItem of expectedArchiveCategoryItem.items) { - expectedArchiveCategoryDefault[fixtureKey].items[itemKey].url = - testBaseUrl + expectedItem.url; - itemKey++; + // Update category URLs if they exist + if (expectedArchiveItem.url) { + const fixtureUrl = testBaseUrl + expectedArchiveItem.url; + fixtureData[fixtureKey].url = fixtureUrl.replace( + '/?page_id=000', + '/?page_id=' + archiveID + ); } - const fixtureUrl = testBaseUrl + expectedArchiveCategoryItem.url; - expectedArchiveCategoryDefault[fixtureKey].url = fixtureUrl.replace( - '/?page_id=000', - '/?page_id=' + archiveID - ); fixtureKey++; } + } - await page.goto(archiveUrl); + test('check archive page with default pagination and category filter (plain permalinks)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); + await setPermalinkSettings(admin, page, 'Plain'); + + const { archiveID, archiveUrl } = await createArchivePage( + page, + admin, + editor + ); + await setArchiveSettings(admin, page); + + const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + await prepareFixtures(expectedArchiveDefault, archiveID, testBaseUrl); + await prepareFixtures( + expectedArchiveCategoryDefault, + archiveID, + testBaseUrl + ); + await page.goto(archiveUrl); const receivedArchive = await getReceivedArchive(page); - // check Archive page expect(receivedArchive).toEqual(expectedArchiveDefault); const receivedCategories = await getReceivedCategories(page); - await page.waitForTimeout(500); - - // check Archive Category filter expect(receivedCategories).toEqual(expectedArchiveCategoryDefault); - /** - * Set Post Name Permalink Settings. - * Without this stupid change, hooks for deleting posts and images stop working. - * This happens due to the fact that the removal methods use a link to access the API. - * For example this type: wp-json/wp/v2/media - * This link will not be available. It stops working if the permalink settings are set to Plain. - * In this case, when calling the method, the request contains a 404 error. - */ - await admin.visitAdminPage('options-permalink.php'); - await page.getByLabel('Post name').check(); - await page.getByRole('button', { name: 'Save Changes' }).click(); + await setPermalinkSettings(admin, page, 'Post name'); }); test('check archive page with default pagination and category filter (post name permalinks)', async ({ @@ -654,72 +1080,203 @@ test.describe('archive pages', () => { editor, requestUtils, }) => { - await deletePortfolioCategories(admin, page); - await deletePortfolioTags(admin, page); + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); - await createPortfolioPosts(requestUtils, page, admin, editor); + const { archiveUrl } = await createArchivePage(page, admin, editor); + await setArchiveSettings(admin, page); - // Set Permalink Settings. - await admin.visitAdminPage('options-permalink.php'); - await page.getByLabel('Post name').check(); - await page.getByRole('button', { name: 'Save Changes' }).click(); + const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + await prepareFixtures(expectedArchivePostName, null, testBaseUrl); + await prepareFixtures( + expectedArchiveCategoryPostName, + null, + testBaseUrl + ); - const { archiveUrl } = await createArchivePage(page, admin, editor); + await page.goto(archiveUrl); + const receivedArchive = await getReceivedArchive(page); + expect(receivedArchive).toEqual(expectedArchivePostName); + + const receivedCategories = await getReceivedCategories(page); + + expect(receivedCategories).toEqual(expectedArchiveCategoryPostName); + }); + + test('check archive page with load more pagination and category filter (plain permalinks)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); + await setPermalinkSettings(admin, page, 'Plain'); + + const { archiveID, archiveUrl } = await createArchivePage( + page, + admin, + editor, + 'loadMore' + ); await setArchiveSettings(admin, page); - // prepare Fixtures. const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; - let fixtureKey = 0; - for (const expectedArchiveItem of expectedArchivePostName) { - let paginationKey = 0; - for (const expectedPaginationItem of expectedArchiveItem.pagination) { - if (typeof expectedPaginationItem.url !== 'undefined') { - const fixtureUrl = testBaseUrl + expectedPaginationItem.url; - - expectedArchivePostName[fixtureKey].pagination[ - paginationKey - ].url = fixtureUrl; - } - paginationKey++; - } + await prepareFixtures( + expectedArchiveLoadMoreDefault, + archiveID, + testBaseUrl + ); + await prepareFixtures( + expectedArchiveCategoryLoadMoreDefault, + archiveID, + testBaseUrl + ); - let itemKey = 0; - for (const expectedItem of expectedArchiveItem.items) { - expectedArchivePostName[fixtureKey].items[itemKey].url = - testBaseUrl + expectedItem.url; - itemKey++; - } + await page.goto(archiveUrl); + const receivedArchive = await getReceivedArchive(page, 'loadMore'); - fixtureKey++; - } + expect(receivedArchive).toEqual(expectedArchiveLoadMoreDefault); - fixtureKey = 0; - for (const expectedArchiveCategoryItem of expectedArchiveCategoryPostName) { - let itemKey = 0; - for (const expectedItem of expectedArchiveCategoryItem.items) { - expectedArchiveCategoryPostName[fixtureKey].items[itemKey].url = - testBaseUrl + expectedItem.url; - itemKey++; - } - expectedArchiveCategoryPostName[fixtureKey].url = - testBaseUrl + expectedArchiveCategoryItem.url; + const receivedCategories = await getReceivedCategories( + page, + 'loadMore' + ); - fixtureKey++; - } + expect(receivedCategories).toEqual( + expectedArchiveCategoryLoadMoreDefault + ); + + await setPermalinkSettings(admin, page, 'Post name'); + }); + + test('check archive page with load more pagination and category filter (post name permalinks)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); + + const { archiveUrl } = await createArchivePage( + page, + admin, + editor, + 'loadMore' + ); + await setArchiveSettings(admin, page); + + const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + await prepareFixtures( + expectedArchivePostNameLoadMore, + null, + testBaseUrl + ); + await prepareFixtures( + expectedArchiveCategoryLoadMorePostName, + null, + testBaseUrl + ); await page.goto(archiveUrl); + const receivedArchive = await getReceivedArchive(page, 'loadMore'); - const receivedArchive = await getReceivedArchive(page); + expect(receivedArchive).toEqual(expectedArchivePostNameLoadMore); - // check Archive page - expect(receivedArchive).toEqual(expectedArchivePostName); + const receivedCategories = await getReceivedCategories( + page, + 'loadMore' + ); - const receivedCategories = await getReceivedCategories(page); + expect(receivedCategories).toEqual( + expectedArchiveCategoryLoadMorePostName + ); + }); + + test('check archive page with infinity pagination and category filter (plain permalinks)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); + await setPermalinkSettings(admin, page, 'Plain'); - await page.waitForTimeout(500); + const { archiveID, archiveUrl } = await createArchivePage( + page, + admin, + editor, + 'inf' + ); + await setArchiveSettings(admin, page); - // check Archive Category filter - expect(receivedCategories).toEqual(expectedArchiveCategoryPostName); + const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + await prepareFixtures( + expectedArchiveInfinityDefault, + archiveID, + testBaseUrl + ); + await prepareFixtures( + expectedArchiveCategoryInfinityDefault, + archiveID, + testBaseUrl + ); + + await page.goto(archiveUrl); + const receivedArchive = await getReceivedArchive(page, 'inf'); + + expect(receivedArchive).toEqual(expectedArchiveInfinityDefault); + + const receivedCategories = await getReceivedCategories(page, 'inf'); + + expect(receivedCategories).toEqual( + expectedArchiveCategoryInfinityDefault + ); + + await setPermalinkSettings(admin, page, 'Post name'); + }); + + test('check archive page with infinity pagination and category filter (post name permalinks)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + await setPermalinkSettings(admin, page, 'Post name'); + await maybeCreatePortfolioPosts(page, admin, editor, requestUtils); + + const { archiveUrl } = await createArchivePage( + page, + admin, + editor, + 'inf' + ); + await setArchiveSettings(admin, page); + + const testBaseUrl = process.env.PLAYWRIGHT_TEST_BASE_URL; + await prepareFixtures( + expectedArchivePostNameInfinity, + null, + testBaseUrl + ); + await prepareFixtures( + expectedArchiveCategoryInfinityPostName, + null, + testBaseUrl + ); + + await page.goto(archiveUrl); + const receivedArchive = await getReceivedArchive(page, 'inf'); + + expect(receivedArchive).toEqual(expectedArchivePostNameInfinity); + + const receivedCategories = await getReceivedCategories(page, 'inf'); + + expect(receivedCategories).toEqual( + expectedArchiveCategoryInfinityPostName + ); }); }); diff --git a/tests/e2e/specs/click-action-images-saved-layout.spec.js b/tests/e2e/specs/click-action-images-saved-layout.spec.js new file mode 100644 index 00000000..1e96cd03 --- /dev/null +++ b/tests/e2e/specs/click-action-images-saved-layout.spec.js @@ -0,0 +1,278 @@ +/** + * WordPress dependencies + */ +import { expect, test } from '@wordpress/e2e-test-utils-playwright'; + +import { findAsyncSequential } from '../utils/find-async-sequential'; +import { getWordpressImages } from '../utils/get-wordpress-images'; + +/** + * TODO: The test needs to be redone in the future. + * Currently, saved layouts cannot be modified using Gutenberg methods + * Because the block on the layout page is hardcoded, + * Preventing the addition of other blocks. + */ +test.describe('click action gallery images (saved layout)', () => { + test.beforeAll(async ({ requestUtils }) => { + const pluginName = process.env.CORE + ? 'visual-portfolio-pro' + : 'visual-portfolio-posts-amp-image-gallery'; + await requestUtils.activatePlugin(pluginName); + await requestUtils.deleteAllMedia(); + await requestUtils.deleteAllPages(); + }); + test.afterAll(async ({ requestUtils }) => { + await requestUtils.deleteAllMedia(); + await requestUtils.deleteAllPages(); + }); + + async function createSavedLayoutWithImages( + page, + admin, + editor, + requestUtils, + alternativeSetting = false + ) { + await admin.visitAdminPage('edit.php'); + + const images = await getWordpressImages({ + requestUtils, + page, + admin, + editor, + alternativeSetting, + }); + + await admin.createNewPost({ + title: 'Test Saved Layout', + postType: 'vp_lists', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await page + .locator( + 'button.components-button.vpf-component-icon-selector-item', + { + hasText: 'Images', + } + ) + .click(); + + await page + .locator('button#menu-item-browse', { + hasText: 'Media Library', + }) + .click(); + + await page.waitForTimeout(500); + + const imageList = await page.locator( + 'ul.attachments.ui-sortable.ui-sortable-disabled li.attachment[role="checkbox"]' + ); + + for (const image of await imageList.elementHandles()) { + if ( + typeof images.find( + async (x) => x.id === (await image.getAttribute('data-id')) + ).imgUrl !== 'undefined' + ) { + await image.click(); + } + } + + await page + .locator('button.button.media-button.media-button-select', { + hasText: 'Select', + }) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator( + 'button.components-button.vpf-component-icon-selector-item', + { + hasText: 'Classic', + } + ) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator('button.components-button.is-primary', { + hasText: 'Continue', + }) + .click(); + + await page + .locator('.components-base-control__field', { + hasText: 'Items Per Page', + }) + .locator('input.components-text-control__input') + .fill('10'); + + const galleryControlItems = page.locator( + '.vpf-component-gallery-control-items .vpf-component-gallery-control-item' + ); + + for (const item of await galleryControlItems.elementHandles()) { + await item.click(); + + const itemDescription = await page + .locator('.components-base-control__field', { + hasText: 'Description', + }) + .locator('textarea.components-textarea-control__input') + .innerHTML(); + + const foundImage = await findAsyncSequential( + images, + async (x) => x.description === itemDescription + ); + + if (typeof foundImage !== 'undefined') { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Title', + } + ) + .locator('input.components-text-control__input') + .fill(foundImage.title); + + if (typeof foundImage.format !== 'undefined') { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Format', + } + ) + .locator('.vpf-component-select') + .click(); + + await page + .locator('.vpf-component-select-option-label', { + hasText: foundImage.format, + }) + .click(); + + if ( + foundImage.format === 'standard' && + typeof foundImage.url !== 'undefined' + ) { + await page + .getByRole('textbox', { name: 'URL', exact: true }) + .fill(foundImage.url); + } + + if ( + foundImage.format === 'video' && + typeof foundImage.video_url !== 'undefined' + ) { + await page + .locator( + '.vpf-component-gallery-control-item-modal .components-base-control__field', + { + hasText: 'Video URL', + } + ) + .locator('input.components-text-control__input') + .fill(foundImage.video_url); + } + } + } + + await page.getByLabel('Close', { exact: true }).click(); + } + + // Publish Post. + await editor.publishPost(); + + let postID = await page.locator('input[name="post_ID"]').inputValue(); + postID = typeof postID === 'string' ? parseInt(postID, 10) : null; + + const postLink = page.url(); + + return { postID, postLink, images }; + } + + test('check disabled click action (saved layout)', async ({ + page, + admin, + editor, + requestUtils, + }) => { + const { postID, postLink } = await createSavedLayoutWithImages( + page, + admin, + editor, + requestUtils + ); + + await page.goto(postLink); + + await page + .locator('.components-panel__body', { + hasText: 'Click Action', + }) + .click(); + + await page + .locator( + 'button.components-button.vpf-component-icon-selector-item', + { + hasText: 'Disabled', + } + ) + .click(); + + // Save Layout. + await page + .locator('button.components-button.editor-post-publish-button', { + hasText: 'Save', + }) + .first() + .click(); + + await admin.createNewPost({ + title: 'Click Action (with saved layout)', + postType: 'page', + showWelcomeGuide: false, + legacyCanvas: true, + }); + + await editor.insertBlock({ + name: 'visual-portfolio/saved', + attributes: { id: String(postID) }, + }); + + await page.waitForTimeout(500); + + // Publish Post. + await editor.publishPost(); + + // Go to published post. + await page + .locator('.components-button', { + hasText: 'View Page', + }) + .first() + .click(); + + const link = page.locator('a.vp-portfolio__item-meta'); + + await expect(link).toBeHidden(); + }); +}); diff --git a/tests/e2e/utils/get-wordpress-images.js b/tests/e2e/utils/get-wordpress-images.js index 3000323f..a082ba6c 100644 --- a/tests/e2e/utils/get-wordpress-images.js +++ b/tests/e2e/utils/get-wordpress-images.js @@ -16,7 +16,7 @@ import imagePaths from '../../fixtures/images.json'; * @param {Editor} editor End to end test utilities for the WordPress Block Editor. * @param {boolean} alternativeSetting Set alternative meta settings for test images. * @param {boolean} usingInPro Set if using in pro plugin. - * @return {{images: {format: string, video_url: string, url: string}[]}} + * @return {{images: {id: number, imgUrl: string, imgThumbnailUrl: string, title: string, description: string, format: string, video_url: string, url: string}[]}} */ export async function getWordpressImages({ requestUtils, @@ -63,11 +63,54 @@ export async function getWordpressImages({ ? 'core-plugin/tests/fixtures/' : 'tests/fixtures/'; + async function uploadMediaWithRetry(filepath, retries = 5) { + for (let attempt = 1; attempt <= retries; attempt++) { + try { + return await requestUtils.uploadMedia(filepath); + } catch (error) { + if (attempt === retries) { + throw error; // Re-throw the error if all attempts fail + } + // Wait before retrying + await new Promise((resolve) => + setTimeout(resolve, 1000 * attempt) + ); + } + } + } + + async function fetchMediaList() { + return await requestUtils.rest({ + path: '/wp/v2/media', + params: { + per_page: 100, + }, + }); + } + + function removeFileExtension(filename) { + return filename.replace(/\.[^/.]+$/, ''); + } + + // Function to check if an image already exists and return its details + async function getExistingMediaDetails(filename) { + const existingMedia = await fetchMediaList(); + return existingMedia.find( + (media) => media.slug === removeFileExtension(filename) + ); + } + images = await Promise.all( imagePaths.map(async (object) => { const filepath = path.join(imagePath, object.filename); - // Upload image to WordPress gallery. - const media = await requestUtils.uploadMedia(filepath); + + // Check if the image already exists and retrieve its details + let media = await getExistingMediaDetails(object.filename); + + // If the image doesn't exist, upload it + if (!media) { + media = await uploadMediaWithRetry(filepath); + } const periodIndex = object.filename.indexOf('.'); diff --git a/tests/fixtures/archive/expected-category-default.json b/tests/fixtures/archive/expected-category-default.json index 5cfa8daf..a0a73290 100644 --- a/tests/fixtures/archive/expected-category-default.json +++ b/tests/fixtures/archive/expected-category-default.json @@ -1,116 +1,237 @@ [ { - "title": "bicycle", - "url": "/?page_id=000&vp_filter=portfolio_category%3Abicycle", - "items": [ - { - "url": "/?portfolio=portfolio-2-test-post", - "categories": false, - "title": "Portfolio 2 test post", - "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + "title": "bicycle", + "url": "/?page_id=000&vp_filter=portfolio_category%3Abicycle", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" } - ] + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] }, { - "title": "car", - "url": "/?page_id=000&vp_filter=portfolio_category%3Acar", - "items": [ - { - "url": "/?portfolio=portfolio-4-test-post", - "categories": false, - "title": "Portfolio 4 test post", - "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + "title": "car", + "url": "/?page_id=000&vp_filter=portfolio_category%3Acar", + "items": [ + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" }, { - "url": "/?portfolio=portfolio-3-test-post", - "categories": false, - "title": "Portfolio 3 test post", - "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" }, { - "url": "/?portfolio=portfolio-2-test-post", - "categories": false, - "title": "Portfolio 2 test post", - "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" } - ] + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] }, { - "title": "ocean", - "url": "/?page_id=000&vp_filter=portfolio_category%3Aocean", - "items": [ - { - "url": "/?portfolio=portfolio-7-test-post", - "categories": false, - "title": "Portfolio 7 test post", - "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + "title": "ocean", + "url": "/?page_id=000&vp_filter=portfolio_category%3Aocean", + "items": [ + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" }, { - "url": "/?portfolio=portfolio-5-test-post", - "categories": false, - "title": "Portfolio 5 test post", - "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" }, { - "url": "/?portfolio=portfolio-3-test-post", - "categories": false, - "title": "Portfolio 3 test post", - "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" }, { - "url": "/?portfolio=portfolio-1-test-post", - "categories": false, - "title": "Portfolio 1 test post", - "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" } - ] + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] }, { - "title": "pesto", - "url": "/?page_id=000&vp_filter=portfolio_category%3Apesto", - "items": [ - { - "url": "/?portfolio=portfolio-10-test-post", - "categories": false, - "title": "Portfolio 10 test post", - "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + "title": "pesto", + "url": "/?page_id=000&vp_filter=portfolio_category%3Apesto", + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" } - ] + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + } + ] }, { - "title": "sea", - "url": "/?page_id=000&vp_filter=portfolio_category%3Asea", - "items": [ - { - "url": "/?portfolio=portfolio-8-test-post", - "categories": false, - "title": "Portfolio 8 test post", - "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + "title": "sea", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asea", + "items": [ + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" }, { - "url": "/?portfolio=portfolio-1-test-post", - "categories": false, - "title": "Portfolio 1 test post", - "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" } - ] + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] }, { - "title": "something", - "url": "/?page_id=000&vp_filter=portfolio_category%3Asomething", - "items": [ - { - "url": "/?portfolio=portfolio-2-test-post", - "categories": false, - "title": "Portfolio 2 test post", - "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + "title": "something", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asomething", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" }, { - "url": "/?portfolio=portfolio-1-test-post", - "categories": false, - "title": "Portfolio 1 test post", - "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" } - ] + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] } -] + ] diff --git a/tests/fixtures/archive/expected-category-infinity-default.json b/tests/fixtures/archive/expected-category-infinity-default.json new file mode 100644 index 00000000..fd3c7de4 --- /dev/null +++ b/tests/fixtures/archive/expected-category-infinity-default.json @@ -0,0 +1,237 @@ +[ + { + "title": "bicycle", + "url": "/?page_id=000&vp_filter=portfolio_category%3Abicycle", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "car", + "url": "/?page_id=000&vp_filter=portfolio_category%3Acar", + "items": [ + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "ocean", + "url": "/?page_id=000&vp_filter=portfolio_category%3Aocean", + "items": [ + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "pesto", + "url": "/?page_id=000&vp_filter=portfolio_category%3Apesto", + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + } + ] + }, + { + "title": "sea", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asea", + "items": [ + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "something", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asomething", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } +] diff --git a/tests/fixtures/archive/expected-category-infinity-post-name.json b/tests/fixtures/archive/expected-category-infinity-post-name.json new file mode 100644 index 00000000..799dc507 --- /dev/null +++ b/tests/fixtures/archive/expected-category-infinity-post-name.json @@ -0,0 +1,237 @@ +[ + { + "title": "bicycle", + "url": "/portfolio-category/bicycle/", + "items": [ + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "car", + "url": "/portfolio-category/car/", + "items": [ + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "ocean", + "url": "/portfolio-category/ocean/", + "items": [ + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "pesto", + "url": "/portfolio-category/pesto/", + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + } + ] + }, + { + "title": "sea", + "url": "/portfolio-category/sea/", + "items": [ + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "something", + "url": "/portfolio-category/something/", + "items": [ + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } +] diff --git a/tests/fixtures/archive/expected-category-load-more-default.json b/tests/fixtures/archive/expected-category-load-more-default.json new file mode 100644 index 00000000..a0a73290 --- /dev/null +++ b/tests/fixtures/archive/expected-category-load-more-default.json @@ -0,0 +1,237 @@ +[ + { + "title": "bicycle", + "url": "/?page_id=000&vp_filter=portfolio_category%3Abicycle", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "car", + "url": "/?page_id=000&vp_filter=portfolio_category%3Acar", + "items": [ + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "ocean", + "url": "/?page_id=000&vp_filter=portfolio_category%3Aocean", + "items": [ + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "pesto", + "url": "/?page_id=000&vp_filter=portfolio_category%3Apesto", + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + } + ] + }, + { + "title": "sea", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asea", + "items": [ + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "something", + "url": "/?page_id=000&vp_filter=portfolio_category%3Asomething", + "items": [ + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } + ] diff --git a/tests/fixtures/archive/expected-category-load-more-post-name.json b/tests/fixtures/archive/expected-category-load-more-post-name.json new file mode 100644 index 00000000..799dc507 --- /dev/null +++ b/tests/fixtures/archive/expected-category-load-more-post-name.json @@ -0,0 +1,237 @@ +[ + { + "title": "bicycle", + "url": "/portfolio-category/bicycle/", + "items": [ + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "car", + "url": "/portfolio-category/car/", + "items": [ + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + } + ] + }, + { + "title": "ocean", + "url": "/portfolio-category/ocean/", + "items": [ + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "pesto", + "url": "/portfolio-category/pesto/", + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + } + ] + }, + { + "title": "sea", + "url": "/portfolio-category/sea/", + "items": [ + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + }, + { + "title": "something", + "url": "/portfolio-category/something/", + "items": [ + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } +] diff --git a/tests/fixtures/archive/expected-category-post-name.json b/tests/fixtures/archive/expected-category-post-name.json index 2a179b05..785d0101 100644 --- a/tests/fixtures/archive/expected-category-post-name.json +++ b/tests/fixtures/archive/expected-category-post-name.json @@ -5,7 +5,20 @@ "items": [ { "url": "/portfolio/portfolio-2-test-post/", - "categories": false, + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 2 test post", "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." } @@ -17,19 +30,46 @@ "items": [ { "url": "/portfolio/portfolio-4-test-post/", - "categories": false, + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], "title": "Portfolio 4 test post", "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." }, { "url": "/portfolio/portfolio-3-test-post/", - "categories": false, + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], "title": "Portfolio 3 test post", "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." }, { "url": "/portfolio/portfolio-2-test-post/", - "categories": false, + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 2 test post", "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." } @@ -41,25 +81,57 @@ "items": [ { "url": "/portfolio/portfolio-7-test-post/", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], "title": "Portfolio 7 test post", "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." }, { "url": "/portfolio/portfolio-5-test-post/", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], "title": "Portfolio 5 test post", "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." }, { "url": "/portfolio/portfolio-3-test-post/", - "categories": false, + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], "title": "Portfolio 3 test post", "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." }, { "url": "/portfolio/portfolio-1-test-post/", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 1 test post", "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." } @@ -71,7 +143,12 @@ "items": [ { "url": "/portfolio/portfolio-10-test-post/", - "categories": false, + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], "title": "Portfolio 10 test post", "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." } @@ -83,13 +160,31 @@ "items": [ { "url": "/portfolio/portfolio-8-test-post/", - "categories": false, + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], "title": "Portfolio 8 test post", "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." }, { "url": "/portfolio/portfolio-1-test-post/", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 1 test post", "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." } @@ -101,13 +196,39 @@ "items": [ { "url": "/portfolio/portfolio-2-test-post/", - "categories": false, + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 2 test post", "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." }, { "url": "/portfolio/portfolio-1-test-post/", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], "title": "Portfolio 1 test post", "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." } diff --git a/tests/fixtures/archive/expected-default.json b/tests/fixtures/archive/expected-default.json index 6f7e2910..1849ef81 100644 --- a/tests/fixtures/archive/expected-default.json +++ b/tests/fixtures/archive/expected-default.json @@ -3,7 +3,12 @@ "items": [ { "url": "/?portfolio=portfolio-10-test-post", - "categories": false, + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], "title": "Portfolio 10 test post", "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." }, @@ -48,13 +53,23 @@ "items": [ { "url": "/?portfolio=portfolio-8-test-post", - "categories": false, + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], "title": "Portfolio 8 test post", "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." }, { "url": "/?portfolio=portfolio-7-test-post", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], "title": "Portfolio 7 test post", "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." } @@ -100,7 +115,12 @@ }, { "url": "/?portfolio=portfolio-5-test-post", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], "title": "Portfolio 5 test post", "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." } @@ -140,13 +160,27 @@ "items": [ { "url": "/?portfolio=portfolio-4-test-post", - "categories": false, + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], "title": "Portfolio 4 test post", "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." }, { "url": "/?portfolio=portfolio-3-test-post", - "categories": false, + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], "title": "Portfolio 3 test post", "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." } @@ -186,13 +220,39 @@ "items": [ { "url": "/?portfolio=portfolio-2-test-post", - "categories": false, + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], "title": "Portfolio 2 test post", "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." }, { "url": "/?portfolio=portfolio-1-test-post", - "categories": false, + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], "title": "Portfolio 1 test post", "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." } diff --git a/tests/fixtures/archive/expected-infinity-default.json b/tests/fixtures/archive/expected-infinity-default.json new file mode 100644 index 00000000..0afdc34b --- /dev/null +++ b/tests/fixtures/archive/expected-infinity-default.json @@ -0,0 +1,126 @@ +[ + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-6-test-post", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } +] diff --git a/tests/fixtures/archive/expected-load-more-default.json b/tests/fixtures/archive/expected-load-more-default.json new file mode 100644 index 00000000..75552345 --- /dev/null +++ b/tests/fixtures/archive/expected-load-more-default.json @@ -0,0 +1,366 @@ +[ + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + } + ], + "pagination": [ + { + "url": "/?page_id=0000&vp_page=2", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + } + ], + "pagination": [ + { + "url": "/?page_id=0000&vp_page=3", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-6-test-post", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + } + ], + "pagination": [ + { + "url": "/?page_id=0000&vp_page=4", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-6-test-post", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + } + ], + "pagination": [ + { + "url": "/?page_id=0000&vp_page=5", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/?portfolio=portfolio-10-test-post", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Apesto" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/?portfolio=portfolio-9-test-post", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/?portfolio=portfolio-8-test-post", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/?portfolio=portfolio-7-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/?portfolio=portfolio-6-test-post", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/?portfolio=portfolio-5-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/?portfolio=portfolio-4-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/?portfolio=portfolio-3-test-post", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/?portfolio=portfolio-2-test-post", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Abicycle" + }, + { + "category": "CAR", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Acar" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/?portfolio=portfolio-1-test-post", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Aocean" + }, + { + "category": "SEA", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asea" + }, + { + "category": "SOMETHING", + "categoryUrl": "/?page_id=0000&vp_filter=portfolio_category%3Asomething" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ], + "pagination": [ + { + "url": "", + "text": "YOU’VE REACHED THE END OF THE LIST" + } + ] + } +] diff --git a/tests/fixtures/archive/expected-post-name-permalinks-load-more.json b/tests/fixtures/archive/expected-post-name-permalinks-load-more.json new file mode 100644 index 00000000..d1774fd6 --- /dev/null +++ b/tests/fixtures/archive/expected-post-name-permalinks-load-more.json @@ -0,0 +1,366 @@ +[ + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + } + ], + "pagination": [ + { + "url": "/portfolio/page/2/", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + } + ], + "pagination": [ + { + "url": "/portfolio/page/3/", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-6-test-post/", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + } + ], + "pagination": [ + { + "url": "/portfolio/page/4/", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-6-test-post/", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + } + ], + "pagination": [ + { + "url": "/portfolio/page/5/", + "text": "LOAD MORE" + } + ] + }, + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-6-test-post/", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ], + "pagination": [ + { + "url": "", + "text": "YOU’VE REACHED THE END OF THE LIST" + } + ] + } +] diff --git a/tests/fixtures/archive/expected-post-name-permalinks.json b/tests/fixtures/archive/expected-post-name-permalinks.json index e5ab87a3..acc6ab9a 100644 --- a/tests/fixtures/archive/expected-post-name-permalinks.json +++ b/tests/fixtures/archive/expected-post-name-permalinks.json @@ -1,226 +1,286 @@ [ { - "items": [ + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ { - "url": "/portfolio/portfolio-10-test-post/", - "categories": false, - "title": "Portfolio 10 test post", - "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." - }, - { - "url": "/portfolio/portfolio-9-test-post/", - "categories": false, - "title": "Portfolio 9 test post", - "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" } - ], - "pagination": [ - { - "text": "1", - "active": true - }, - { - "url": "/portfolio/page/2/", - "text": "2", - "standard": true - }, - { - "url": "/portfolio/page/3/", - "text": "3", - "standard": true - }, - { - "text": "…", - "dots": true - }, - { - "url": "/portfolio/page/5/", - "text": "5", - "standard": true - }, - { - "url": "/portfolio/page/2/", - "nextPage": true - } - ] + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + } + ], + "pagination": [ + { + "text": "1", + "active": true + }, + { + "url": "/portfolio/page/2/", + "text": "2", + "standard": true + }, + { + "url": "/portfolio/page/3/", + "text": "3", + "standard": true + }, + { + "text": "…", + "dots": true + }, + { + "url": "/portfolio/page/5/", + "text": "5", + "standard": true + }, + { + "url": "/portfolio/page/2/", + "nextPage": true + } + ] }, { - "items": [ + "items": [ + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ { - "url": "/portfolio/portfolio-8-test-post/", - "categories": false, - "title": "Portfolio 8 test post", - "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." - }, - { - "url": "/portfolio/portfolio-7-test-post/", - "categories": false, - "title": "Portfolio 7 test post", - "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" } - ], - "pagination": [ - { - "url": "/portfolio/page/1/", - "text": "1", - "standard": true - }, - { - "text": "2", - "active": true - }, - { - "url": "/portfolio/page/3/", - "text": "3", - "standard": true - }, - { - "url": "/portfolio/page/4/", - "text": "4", - "standard": true - }, - { - "url": "/portfolio/page/5/", - "text": "5", - "standard": true - }, - { - "url": "/portfolio/page/3/", - "nextPage": true + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" } - ] + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + } + ], + "pagination": [ + { + "url": "/portfolio/page/1/", + "text": "1", + "standard": true + }, + { + "text": "2", + "active": true + }, + { + "url": "/portfolio/page/3/", + "text": "3", + "standard": true + }, + { + "url": "/portfolio/page/4/", + "text": "4", + "standard": true + }, + { + "url": "/portfolio/page/5/", + "text": "5", + "standard": true + }, + { + "url": "/portfolio/page/3/", + "nextPage": true + } + ] }, { - "items": [ - { - "url": "/portfolio/portfolio-6-test-post/", - "categories": false, - "title": "Portfolio 6 test post", - "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." - }, - { - "url": "/portfolio/portfolio-5-test-post/", - "categories": false, - "title": "Portfolio 5 test post", - "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + "items": [ + { + "url": "/portfolio/portfolio-6-test-post/", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" } - ], - "pagination": [ - { - "url": "/portfolio/page/1/", - "text": "1", - "standard": true - }, - { - "url": "/portfolio/page/2/", - "text": "2", - "standard": true - }, - { - "text": "3", - "active": true - }, - { - "url": "/portfolio/page/4/", - "text": "4", - "standard": true - }, - { - "url": "/portfolio/page/5/", - "text": "5", - "standard": true - }, - { - "url": "/portfolio/page/4/", - "nextPage": true - } - ] + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + } + ], + "pagination": [ + { + "url": "/portfolio/page/1/", + "text": "1", + "standard": true + }, + { + "url": "/portfolio/page/2/", + "text": "2", + "standard": true + }, + { + "text": "3", + "active": true + }, + { + "url": "/portfolio/page/4/", + "text": "4", + "standard": true + }, + { + "url": "/portfolio/page/5/", + "text": "5", + "standard": true + }, + { + "url": "/portfolio/page/4/", + "nextPage": true + } + ] }, { - "items": [ - { - "url": "/portfolio/portfolio-4-test-post/", - "categories": false, - "title": "Portfolio 4 test post", - "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." - }, + "items": [ + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ { - "url": "/portfolio/portfolio-3-test-post/", - "categories": false, - "title": "Portfolio 3 test post", - "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" } - ], - "pagination": [ - { - "url": "/portfolio/page/1/", - "text": "1", - "standard": true - }, - { - "url": "/portfolio/page/2/", - "text": "2", - "standard": true - }, - { - "url": "/portfolio/page/3/", - "text": "3", - "standard": true - }, - { - "text": "4", - "active": true + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" }, { - "url": "/portfolio/page/5/", - "text": "5", - "standard": true - }, - { - "url": "/portfolio/page/5/", - "nextPage": true + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" } - ] + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + } + ], + "pagination": [ + { + "url": "/portfolio/page/1/", + "text": "1", + "standard": true + }, + { + "url": "/portfolio/page/2/", + "text": "2", + "standard": true + }, + { + "url": "/portfolio/page/3/", + "text": "3", + "standard": true + }, + { + "text": "4", + "active": true + }, + { + "url": "/portfolio/page/5/", + "text": "5", + "standard": true + }, + { + "url": "/portfolio/page/5/", + "nextPage": true + } + ] }, { - "items": [ + "items": [ + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ { - "url": "/portfolio/portfolio-2-test-post/", - "categories": false, - "title": "Portfolio 2 test post", - "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" }, { - "url": "/portfolio/portfolio-1-test-post/", - "categories": false, - "title": "Portfolio 1 test post", - "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." - } - ], - "pagination": [ - { - "url": "/portfolio/page/1/", - "text": "1", - "standard": true + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" }, { - "text": "…", - "dots": true - }, - { - "url": "/portfolio/page/3/", - "text": "3", - "standard": true + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" }, { - "url": "/portfolio/page/4/", - "text": "4", - "standard": true + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" }, { - "text": "5", - "active": true + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" } - ] + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ], + "pagination": [ + { + "url": "/portfolio/page/1/", + "text": "1", + "standard": true + }, + { + "text": "…", + "dots": true + }, + { + "url": "/portfolio/page/3/", + "text": "3", + "standard": true + }, + { + "url": "/portfolio/page/4/", + "text": "4", + "standard": true + }, + { + "text": "5", + "active": true + } + ] } -] + ] diff --git a/tests/fixtures/archive/expected-post-name-premalinks-infinity.json b/tests/fixtures/archive/expected-post-name-premalinks-infinity.json new file mode 100644 index 00000000..5e8e3ccc --- /dev/null +++ b/tests/fixtures/archive/expected-post-name-premalinks-infinity.json @@ -0,0 +1,126 @@ +[ + { + "items": [ + { + "url": "/portfolio/portfolio-10-test-post/", + "categories": [ + { + "category": "PESTO", + "categoryUrl": "/portfolio-category/pesto/" + } + ], + "title": "Portfolio 10 test post", + "description": "Curabitur mollis convallis congue. Pellentesque vel lobortis diam. Morbi et sagittis mi, mollis vehicula dui. Maecenas arcu justo, facilisis non." + }, + { + "url": "/portfolio/portfolio-9-test-post/", + "categories": false, + "title": "Portfolio 9 test post", + "description": "Quisque tristique, velit et auctor ultrices, ante diam faucibus tellus, quis sodales leo nulla eu ante. Sed condimentum dolor gravida." + }, + { + "url": "/portfolio/portfolio-8-test-post/", + "categories": [ + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + } + ], + "title": "Portfolio 8 test post", + "description": "Morbi id justo tortor. Morbi semper faucibus ligula, ut porttitor velit facilisis eget. Aliquam eleifend dignissim neque nec placerat. Nulla." + }, + { + "url": "/portfolio/portfolio-7-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 7 test post", + "description": "Nulla tincidunt arcu in dictum elementum. Quisque fringilla venenatis nulla ut sollicitudin. Praesent facilisis a libero laoreet viverra. Nunc placerat." + }, + { + "url": "/portfolio/portfolio-6-test-post/", + "categories": false, + "title": "Portfolio 6 test post", + "description": "Aenean consectetur massa sed aliquet mollis. Etiam elementum lacus sed urna faucibus pulvinar. Duis dictum nisl eget urna vestibulum semper." + }, + { + "url": "/portfolio/portfolio-5-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 5 test post", + "description": "Morbi tincidunt aliquet velit vitae imperdiet. Curabitur ex mauris, pharetra sit amet varius in, iaculis at libero. Interdum et malesuada." + }, + { + "url": "/portfolio/portfolio-4-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + } + ], + "title": "Portfolio 4 test post", + "description": "Aenean vel arcu enim. Aliquam sed rutrum erat, porta mattis lorem. Nulla scelerisque eu ligula eget dictum. Phasellus orci nisi." + }, + { + "url": "/portfolio/portfolio-3-test-post/", + "categories": [ + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + } + ], + "title": "Portfolio 3 test post", + "description": "Aliquam sed pretium purus. Cras viverra viverra felis. Ut vitae massa felis. Curabitur tempus vitae eros eu feugiat. Ut molestie." + }, + { + "url": "/portfolio/portfolio-2-test-post/", + "categories": [ + { + "category": "BICYCLE", + "categoryUrl": "/portfolio-category/bicycle/" + }, + { + "category": "CAR", + "categoryUrl": "/portfolio-category/car/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 2 test post", + "description": "Nam at nibh feugiat, semper nisl vel, porttitor nibh. Aliquam massa diam, tincidunt nec lobortis a, fermentum vitae elit. Fusce." + }, + { + "url": "/portfolio/portfolio-1-test-post/", + "categories": [ + { + "category": "OCEAN", + "categoryUrl": "/portfolio-category/ocean/" + }, + { + "category": "SEA", + "categoryUrl": "/portfolio-category/sea/" + }, + { + "category": "SOMETHING", + "categoryUrl": "/portfolio-category/something/" + } + ], + "title": "Portfolio 1 test post", + "description": "TMauris id tincidunt urna, ut mattis mauris. Curabitur in massa vel felis pretium aliquet vitae ut elit. Aenean at volutpat." + } + ] + } +] diff --git a/tests/fixtures/click-actions/url-saved-layout-expected-preset.json b/tests/fixtures/click-actions/url-saved-layout-expected-preset.json new file mode 100644 index 00000000..00b180c7 --- /dev/null +++ b/tests/fixtures/click-actions/url-saved-layout-expected-preset.json @@ -0,0 +1,52 @@ +[ + { + "title": "Alternative title of 1920 on 600", + "isPopup": false, + "titleUrl": "https://www.youtube.com/watch?v=354pybu91aQ&ab_channel=VisualPortfolio" + }, + { + "title": "Image Title of 3840 on 2160", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-3840x2160-1-1920x1080.jpeg" + }, + { + "title": "Image Title of 3840 on 2560", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-3840x2560-1-1920x1280.jpeg" + }, + { + "title": "Alternative title of 800 on 600", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-800x600-1.png" + }, + { + "title": "Alternative title of 300 on 200", + "isPopup": false, + "titleUrl": "https://www.youtube.com/watch?v=354pybu91aQ&ab_channel=VisualPortfolio" + }, + { + "title": "Alternative title of 1600 on 1200", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-1600x1200-1.jpeg" + }, + { + "title": "Alternative title of 800 on 1200", + "isPopup": false, + "titleUrl": "/?page_id" + }, + { + "title": "Image Title of 1920 on 1080", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-1920x1080-1.jpeg" + }, + { + "title": "Alternative title of 600 on 1920", + "isPopup": false, + "titleUrl": "https://visualportfolio.co/" + }, + { + "title": "Image Title of 2000 on 2000", + "isPopup": false, + "titleUrl": "/wp-content/uploads/0000/00/image-2000x2000-1-1920x1920.jpeg" + } + ] diff --git a/tests/fixtures/image-1600x1200.jpeg b/tests/fixtures/image-1600x1200.jpeg index 05bf60435217729ecd3a4d771f95e9d5708884a2..0e69aaa64cb3bb94ec77be80a1cc00b48696babc 100644 GIT binary patch literal 18109 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 literal 21607 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 diff --git a/tests/fixtures/image-1920x1080.jpeg b/tests/fixtures/image-1920x1080.jpeg index 51da15e54c2b62da38f700854054e3a704576bca..e10b105712432687eeb7ce4adf12ae6da4f3df8f 100644 GIT binary patch literal 20405 zcmeHvc{o*F`~NzQnKF;Ze9SbMhmd*5JePzr9}yyR4oZe&9x`XlJcbY@Nrd7UG9^P~ zN`#2wyQ$~2?>Wm1pb$B@$lg=90I72`p>t2l^=`&QaB9Yki*HL8$S;Z$8?OqF#^X3 z93yayz%c^H2pl7DjKDDh#|RuFaE!n)0>=m(BXEqsF#^X3{5KJR>8ap#u>pW9Jbq!_Sl0G^Z017M_Y znb2Uf{&ee~8(?RcP2pjb2VlmYuoV!^qxS$#c7Y6lV+Wte0v2j6D*$iIA- z)Q#Z9`JBP9EIEa2LA0<5J4s);sgrQa}X^*P@ zUYviG@J3|oh;m9>iP^;*jiIg{p(|siG3)mQ1J;kyM_>MZZuvh3C&O!r% zP!F{EeKuf7{W2&=7Bc15?gs?@*>c1{M-&ZAQ~Nx`3bWyH2{QO)tFFT6B`0~%Ljfz` zet@t39X}%(;G0K~Ua{I4dVM!GU6K!t=!uhVyumSIdDht|Hh^K@%h<6Y! zs)*O`3J63vy-(<~0U$@ZNJz)ki6^8*6pGn{Y6-lqSx7XY1{sb3{B+-PhzVUg&O(~2$mojqNN4klJa;t{!q`wos5+2 z5Fcb*r%AGH-mvv0vjNiZ9!6nrNSh(jig;b_hSaSo4sVZigLhT_(9%d3Ee`Dgmca&j z$D!ORi)=Icu|am0!ByF~2?j?46&yhS2Lb_ruXUtK;sH4_&EUR0B(;tFiK`g*3NjuP&dai2Fh{;HdpSMCvD`vuyxyIg{YQ7J|F%M&5v+AlyFy zCp#bag%$wiB2%lV*8fN#IJetjbRr0K4TkD#icSGQ06%*Z@4Fo=TIMKjbyEcSn?Ysp zsW-7`Zbp%nqjvw0-v-IbN}^w>=@-!lle;6}MJOZK+KoYIKSt8qhrSXYRfDkCGf!fb8QiYJ!^_ ztUT^jCAb@^5C(B+$l#u50M6@*f2SG%8y&0ugjPsTT88k2?~wT%apFLBF{=*nJu2}U zZvg-~y}NnRT_DYvP(<)N1sVLYQGgg|h_M0U+%U>s$s?YBJp3UJ5YXB=YzY8&5oOnl zX;AbLQD(bB2MH>yh91g|ayYhl3$N`*R4If=2Qs8~6y9)4M zID0`1S45aB&%zhrF&L0gDgL7*M->=;`8)tBB0Qapx+5QJstoR;xd>y;w58M77 zg1!r@wH^-VA>U!}k~R(QdkSze3UKrE4Έp0^Wo5RdUEQf6WC;fIV0DmE_NN`gR z@?j~4TuB}}o>st2B>(R@4o~00A*SjuLfTwHAGQlw$zi}IR?KGBX6Ga)UH^IlW&j5_;JVy|&>`NAMR*fJ(;bSyRrXTHXN0_~t za!ZOl1~xLte3$`Fej24;W7byqkFp5Rr;&%udyh)$}iLq`Nv-$`y)3;woowuVZ{V2x`!kpB}_ zB3TLg*|KyYoCs|l>A#;#h(s>@!E*fn7=dF1juALU;242p1db6nM&KBMV+4*7I7Z+Y zfnx-Y5jaNR7=dF1juH4TArJ_Cm!m)qa9}W8Tw+2zTsZXk4zx#!1IGn;

b|LJIhl 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 E7r0U(;Kc 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 diff --git a/tests/fixtures/image-2000x2000.jpeg b/tests/fixtures/image-2000x2000.jpeg index da1649431b8b9a76fbbd4c65a082f47731b731ed..f80f742550e00aac8659a937b2f36585c12435aa 100644 GIT binary patch literal 32034 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 literal 37332 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 M0{^cG2yFHJH`%?hqW}N^ diff --git a/tests/fixtures/image-300x200.jpeg b/tests/fixtures/image-300x200.jpeg index 2762dcad1eb6ad77e35090839c46978151217330..6aba4cf4a507da2e60f0c49033621c5f90416644 100644 GIT binary patch literal 1810 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 E7jnCqyZ`_I literal 73981 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 H><|18u8naB diff --git a/tests/fixtures/image-800x1200.jpeg b/tests/fixtures/image-800x1200.jpeg deleted file mode 100644 index 2c3145e84a43384098733a85999246de0a55619c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11294 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 diff --git a/tests/fixtures/image-800x1200.webp b/tests/fixtures/image-800x1200.webp new file mode 100644 index 0000000000000000000000000000000000000000..f4923db87e931d31a8c5fd645923efa98fb0a6a6 GIT binary patch literal 3586 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

^SW1Kj0`s zXrj2f?&ZrZQystnOMpdt7F}bFk-1`}c5ShNg>1#zTx@g*umk(Bumjn6DCcT)u(9?r z88)*9AgI{Rs!)Rg7b7+!JwO8VS|Q@!<&9E=^TICZTvE}c?ZoLA-^Z3a;OnfO|F2C{ z=t+T7G@@>V0ac#vpxg1Vj7P57j(8mlk-e9G<_kztP_j~nz(H-I&a0nzZ2w-q=){~c z@ch6YV9`-Pv#QuV@Ps@U;er4J@1li+cUv{C4?0}=t@>n&K3$grwZETmm?mSz$<)RM z<*uCtH5OPOy-tfQG+KXJe$g@5gBlnEN0fsmo_Pz+PWzlbHU-Do?~s4MHw4k(VXgCE zKP_fSloNy_3|NFCaL<|3Tt?<({hP0kpE`ft_c4D(W_P(vk{2y@6e}Z&_6JR^245hc zf+~$6p~pV&s|BK#8Y-{_uwxA1{KdQim^yP@MuE_MghO0fIx>0c-(i+^huvIq8p+qN z#Sl3Ob~2G{z6iuOEQk2lVO3 zpaJN748t?$S9z5#I_3u=Ad5`Wr?2-J433~)Fh49AU>{xg-CGWu4h<-Lv}+5sGnPg@ zFQT)-LWdyi05v_#&klsGgmTW~1`7WcWa?)jZRdlaBKQoGCl*|c*bET6`K{YE=!AOE zl5t+O525KNy3{KVoF4r&6F&K+UZnefZK6U?$~HF@bt5dOa+)>l9z)ZYCl)MeSjg*7 z>v{tbNeUwLX`u^e!XUQ%Dba-54%h=MItrv&RV*Vh{Q$Rv-iCM`gM6;jZLu5PFE3YH<1 zAT_+3|4HKYatt`+J)V?7`8p7qXCH;lzmjoIc0`bzkcNjHvB7yr3jF2`-jJo6>2_G7 zF@ApiK*1ocuLgDsK+{hU!!rYRoaPmnhStiMr#WxvL9r|jRC2taVwdef&xkRm))qqH z|E!&{H0lQsoed^B1lWNvEbKrU4$8S4D*RiJsZX|xECuP&(O|_|XAHO)u^AwC0ll7K z7Lc-BxU&Y`N)%lt^2oI%^AF#A6L?c&`~TWFJ%%`izANfR7*J)KyZ=&D0Sa10EaWwt zg8UDVq#y)k)4!8wLiL4FM*$70;r4s)LK(u=DMRqaAfLz|sDR(0c(VrZ7XGF6xe}kzFWW5ggpFZ@!5uHLJ&8~S1&9kkirW9-Ml!Ch=ta2q9 zJZ|fW(iB^=Ai@zkEW#1EXG+OW;UBl@;Y9x7z^|mqFIW1a|5rv7PR|eiOg}(C1uBif zA^-$(mKrLs1u$beaDGQdWh~t|xRDRgafCxGANH05;n%;wEPuvI{*0CU4%_~WmHZhi z`7>7Xw@3ULD_Lk%@6T8XHaP!htb_&uVfAOM