From 8afdb9858d238392ecb5dbfe556068ec1af137bc Mon Sep 17 00:00:00 2001 From: magento packaging service Date: Fri, 1 Oct 2021 18:21:22 +0000 Subject: [PATCH] Magento Release 2.4.3-p1 --- app/code/Magento/AdminAnalytics/composer.json | 24 +- .../Magento/AdminAnalytics/i18n/en_US.csv | 3 + .../layout/adminhtml_dashboard_index.xml | 2 +- .../ui_component/admin_usage_notification.xml | 8 +- .../Magento/AdminNotification/composer.json | 24 +- .../AdvancedPricingImportExport/composer.json | 30 +- app/code/Magento/AdvancedSearch/composer.json | 28 +- app/code/Magento/Amqp/composer.json | 18 +- app/code/Magento/AmqpStore/composer.json | 22 +- app/code/Magento/Analytics/composer.json | 18 +- .../AsynchronousOperations/composer.json | 26 +- app/code/Magento/Authorization/composer.json | 16 +- .../Test/Mftf/Helper/S3FileAssertions.php | 14 +- ...StorageAwsS3EnabledMediaGalleryUiSuite.xml | 45 ++ ...AdminAwsS3MediaGalleryDeleteFolderTest.xml | 151 +++++ .../AdminAwsS3MediaGalleryDeleteImageTest.xml | 149 +++++ .../Test/AdminAwsS3SyncMediaFilesTest.xml | 32 +- ...tChildImageShouldBeShownOnWishListTest.xml | 2 +- .../AwsS3StorefrontPrintOrderGuestTest.xml | 3 + app/code/Magento/AwsS3/composer.json | 14 +- app/code/Magento/Backend/composer.json | 50 +- app/code/Magento/Backup/composer.json | 20 +- app/code/Magento/Bundle/composer.json | 50 +- app/code/Magento/BundleGraphQl/composer.json | 26 +- .../Magento/BundleImportExport/composer.json | 26 +- .../Magento/CacheInvalidate/composer.json | 16 +- .../Test/Mftf/Data/CaptchaConfigData.xml | 12 + .../Mftf/Test/AdminLoginWithCaptchaTest.xml | 4 + ...StorefrontCaptchaEditCustomerEmailTest.xml | 2 + .../Test/StorefrontCaptchaOnContactUsTest.xml | 2 + .../StorefrontCaptchaOnCustomerLoginTest.xml | 4 + ...ontCaptchaOnOnepageCheckoutPyamentTest.xml | 4 +- ...orefrontCaptchaRegisterNewCustomerTest.xml | 2 + app/code/Magento/Captcha/composer.json | 26 +- .../Magento/CardinalCommerce/composer.json | 20 +- .../AddCategoryImageActionGroup.xml | 4 +- ...ateToCreatedProductEditPageActionGroup.xml | 4 +- ...setProductGridToDefaultViewActionGroup.xml | 4 +- .../Test/Mftf/Helper/LocalFileAssertions.php | 14 +- .../AdminAddImageToWYSIWYGCatalogTest.xml | 18 +- .../AdminAddImageToWYSIWYGProductTest.xml | 44 +- app/code/Magento/Catalog/composer.json | 70 +-- app/code/Magento/Catalog/etc/config.xml | 3 + .../Magento/CatalogAnalytics/composer.json | 14 +- .../Magento/CatalogCmsGraphQl/composer.json | 22 +- .../CatalogCustomerGraphQl/composer.json | 16 +- app/code/Magento/CatalogGraphQl/composer.json | 34 +- .../Magento/CatalogImportExport/composer.json | 34 +- .../Magento/CatalogInventory/composer.json | 28 +- .../CatalogInventoryGraphQl/composer.json | 16 +- app/code/Magento/CatalogRule/composer.json | 32 +- .../CatalogRuleConfigurable/composer.json | 22 +- .../Magento/CatalogRuleGraphQl/composer.json | 14 +- app/code/Magento/CatalogSearch/composer.json | 38 +- .../Magento/CatalogUrlRewrite/composer.json | 32 +- .../CatalogUrlRewriteGraphQl/composer.json | 26 +- app/code/Magento/CatalogWidget/composer.json | 32 +- ...ckoutSuccessPageAsRegisterCustomerTest.xml | 3 + app/code/Magento/Checkout/composer.json | 56 +- .../Magento/CheckoutAgreements/composer.json | 22 +- .../CheckoutAgreementsGraphQl/composer.json | 18 +- .../Adminhtml/Wysiwyg/Images/DeleteFiles.php | 5 +- .../Adminhtml/Wysiwyg/Images/DeleteFolder.php | 11 +- .../Cms/Model/Wysiwyg/Images/Storage.php | 191 ++++++- ...minExpandMediaGalleryFolderActionGroup.xml | 22 + .../ActionGroup/DeleteFolderActionGroup.xml | 4 +- .../TinyMCESection/MediaGallerySection.xml | 2 + .../Test/AdminAddImageToWYSIWYGBlockTest.xml | 12 +- .../Test/AdminAddImageToWYSIWYGCMSTest.xml | 14 +- ...lleryPopupUploadImagesWithoutErrorTest.xml | 47 +- .../Unit/Model/Wysiwyg/Images/StorageTest.php | 191 +++---- app/code/Magento/Cms/composer.json | 34 +- app/code/Magento/Cms/etc/config.xml | 4 +- app/code/Magento/Cms/i18n/en_US.csv | 5 +- app/code/Magento/CmsGraphQl/composer.json | 24 +- app/code/Magento/CmsUrlRewrite/composer.json | 20 +- .../CmsUrlRewriteGraphQl/composer.json | 24 +- .../Magento/CompareListGraphQl/composer.json | 14 +- app/code/Magento/Config/composer.json | 28 +- .../ConfigurableImportExport/composer.json | 26 +- .../Magento/ConfigurableProduct/composer.json | 50 +- .../ConfigurableProductGraphQl/composer.json | 24 +- .../ConfigurableProductSales/composer.json | 22 +- app/code/Magento/Contact/composer.json | 22 +- app/code/Magento/Cookie/composer.json | 18 +- app/code/Magento/Cron/composer.json | 18 +- app/code/Magento/Csp/composer.json | 16 +- app/code/Magento/Csp/etc/config.xml | 2 +- app/code/Magento/CurrencySymbol/composer.json | 24 +- .../Customer/Api/SessionCleanerInterface.php | 2 +- .../Customer/Controller/Account/EditPost.php | 13 +- .../Customer/Model/ResourceModel/Customer.php | 44 +- .../Customer/Model/ResourceModel/Visitor.php | 43 +- app/code/Magento/Customer/Model/Session.php | 18 +- .../Customer/Model/Session/SessionCleaner.php | 57 +- .../Session/Validators/CutoffValidator.php | 83 +++ app/code/Magento/Customer/Model/Visitor.php | 21 +- .../Patch/Data/SessionIDColumnCleanUp.php | 102 ++++ ...FilterInCustomerAddressGridActionGroup.xml | 6 +- ...inResetFilterInCustomerGridActionGroup.xml | 4 +- .../Customer/Test/Unit/Model/VisitorTest.php | 2 + app/code/Magento/Customer/composer.json | 56 +- app/code/Magento/Customer/etc/db_schema.xml | 7 +- .../Customer/etc/db_schema_whitelist.json | 4 +- app/code/Magento/Customer/etc/di.xml | 11 + .../Magento/CustomerAnalytics/composer.json | 14 +- .../CustomerDownloadableGraphQl/composer.json | 18 +- .../Magento/CustomerGraphQl/composer.json | 26 +- .../CustomerImportExport/composer.json | 26 +- app/code/Magento/Deploy/composer.json | 22 +- app/code/Magento/Developer/composer.json | 18 +- app/code/Magento/Dhl/composer.json | 34 +- app/code/Magento/Directory/composer.json | 20 +- .../Magento/DirectoryGraphQl/composer.json | 16 +- app/code/Magento/Downloadable/composer.json | 48 +- .../Magento/DownloadableGraphQl/composer.json | 28 +- .../DownloadableImportExport/composer.json | 26 +- app/code/Magento/Eav/composer.json | 24 +- app/code/Magento/EavGraphQl/composer.json | 16 +- app/code/Magento/Elasticsearch/composer.json | 32 +- app/code/Magento/Elasticsearch6/composer.json | 24 +- app/code/Magento/Elasticsearch7/composer.json | 24 +- app/code/Magento/Email/composer.json | 34 +- app/code/Magento/EncryptionKey/composer.json | 18 +- app/code/Magento/Fedex/composer.json | 30 +- app/code/Magento/GiftMessage/composer.json | 34 +- .../Magento/GiftMessageGraphQl/composer.json | 16 +- app/code/Magento/GoogleAdwords/composer.json | 18 +- .../Magento/GoogleAnalytics/composer.json | 22 +- .../Magento/GoogleOptimizer/composer.json | 26 +- app/code/Magento/GraphQl/composer.json | 18 +- app/code/Magento/GraphQlCache/composer.json | 14 +- .../GroupedCatalogInventory/composer.json | 20 +- .../Magento/GroupedImportExport/composer.json | 24 +- app/code/Magento/GroupedProduct/composer.json | 42 +- .../GroupedProductGraphQl/composer.json | 16 +- app/code/Magento/ImportExport/composer.json | 26 +- app/code/Magento/Indexer/composer.json | 16 +- .../Magento/InstantPurchase/composer.json | 18 +- app/code/Magento/Integration/composer.json | 28 +- .../Magento/JwtFrameworkAdapter/composer.json | 14 +- .../Magento/LayeredNavigation/composer.json | 18 +- .../Magento/LoginAsCustomer/composer.json | 26 +- .../LoginAsCustomerAdminUi/composer.json | 33 +- .../Magento/LoginAsCustomerApi/composer.json | 14 +- .../LoginAsCustomerAssistance/composer.json | 33 +- .../LoginAsCustomerFrontendUi/composer.json | 21 +- .../LoginAsCustomerGraphQl/composer.json | 26 +- .../Magento/LoginAsCustomerLog/composer.json | 31 +- .../LoginAsCustomerPageCache/composer.json | 25 +- .../LoginAsCustomerQuote/composer.json | 23 +- .../LoginAsCustomerSales/composer.json | 23 +- app/code/Magento/Marketplace/composer.json | 16 +- app/code/Magento/MediaContent/composer.json | 14 +- .../Magento/MediaContentApi/composer.json | 12 +- .../Magento/MediaContentCatalog/composer.json | 18 +- .../Magento/MediaContentCms/composer.json | 14 +- .../MediaContentSynchronization/composer.json | 24 +- .../composer.json | 12 +- .../composer.json | 16 +- .../composer.json | 16 +- .../Model/Directory/Config/Converter.php | 1 + .../Model/Directory/Config/SchemaLocator.php | 1 + .../Directory/ExcludedPatternsConfig.php | 1 + .../Model/Directory/IsExcluded.php | 58 +- app/code/Magento/MediaGallery/composer.json | 14 +- .../Magento/MediaGalleryApi/composer.json | 10 +- .../Magento/MediaGalleryCatalog/composer.json | 14 +- ...SameImageDeleteFromTemporaryFolderTest.xml | 4 + .../composer.json | 24 +- ...lleryCatalogUiUsedInCategoryFilterTest.xml | 30 +- ...leryCatalogUiUsedInProductFilterOnTest.xml | 42 +- ...alogUiVerifyUsedInLinkCategoryGridTest.xml | 15 +- ...talogUiVerifyUsedInLinkProductGridTest.xml | 2 + ...ogUiVerifyUsedInLinkedCategoryGridTest.xml | 24 +- .../MediaGalleryCatalogUi/composer.json | 20 +- ...eryAssertImageUsedInLinkBlocksGridTest.xml | 22 +- ...aGalleryAssertUsedInLinkBlocksGridTest.xml | 11 +- ...iaGalleryAssertUsedInLinkPagesGridTest.xml | 20 +- ...GalleryAssertUsedInLinkedPagesGridTest.xml | 24 +- ...ediaGalleryCmsUiUsedInBlocksFilterTest.xml | 18 + ...MediaGalleryCmsUiUsedInPagesFilterTest.xml | 62 ++- .../Magento/MediaGalleryCmsUi/composer.json | 14 +- .../MediaGalleryIntegration/composer.json | 32 +- .../MediaGalleryMetadata/composer.json | 12 +- .../MediaGalleryMetadataApi/composer.json | 10 +- .../Model/GenerateRenditionsTest.php | 55 +- ...diaGalleryInsertImageLargeFileSizeTest.xml | 19 +- ...diaGalleryInsertLargeImageFileSizeTest.xml | 2 + .../MediaGalleryRenditions/composer.json | 24 +- .../MediaGalleryRenditionsApi/composer.json | 10 +- .../MediaGallerySynchronization/composer.json | 16 +- .../composer.json | 12 +- .../composer.json | 16 +- .../Model/Directories/GetDirectoryTree.php | 14 +- ...leryButtonNotDisabledOnPageActionGroup.xml | 4 +- ...inCloseEnhancedMediaGalleryActionGroup.xml | 20 + ...dMediaGalleryDeleteGridViewActionGroup.xml | 2 +- ...ncedMediaGalleryImageDeleteActionGroup.xml | 9 +- ...dMediaGallerySaveCustomViewActionGroup.xml | 7 +- ...rySelectCustomBookmarksViewActionGroup.xml | 2 +- ...ncedMediaGalleryUploadImageActionGroup.xml | 7 +- ...GalleryAssertAttentionModalActionGroup.xml | 23 + ...aGalleryCloseAttentionModalActionGroup.xml | 22 + ...MediaGalleryCreateNewFolderActionGroup.xml | 1 + ...minMediaGalleryFolderSelectActionGroup.xml | 2 +- ...dminMediaGalleryImageDeleteActionGroup.xml | 4 +- .../Mftf/Data/AdminMediaGalleryFolderData.xml | 3 + ...dminEnhancedMediaGalleryActionsSection.xml | 2 +- ...nhancedMediaGalleryImageActionsSection.xml | 1 + ...AdminMediaGalleryAttentionModalSection.xml | 16 + .../AdminMediaGalleryFolderSection.xml | 2 +- .../Test/Mftf/Suite/MediaGalleryUiSuite.xml | 8 + ...ncedMediaGalleryDeleteImagesInBulkTest.xml | 17 + ...hancedMediaGalleryDuplicatedImagesTest.xml | 38 +- ...ediaGalleryUploadImageWithMetadataTest.xml | 58 +- ...cedMediaGalleryVerifyFilterByAssetTest.xml | 24 +- ...iaGalleryVerifyNotUsedOptionFilterTest.xml | 32 +- ...ancedMediaGalleryVerifyUpdatedTagsTest.xml | 20 +- ...ncedMediaGalleryVerifyUsedInFilterTest.xml | 31 +- ...yAddCategoryImageFromTwoComponentsTest.xml | 11 +- .../AdminMediaGalleryAddCategoryImageTest.xml | 7 +- ...minMediaGalleryAddFromImageDetailsTest.xml | 21 +- ...dminMediaGalleryCreateDeleteFolderTest.xml | 24 +- .../AdminMediaGalleryCreateFolderAclTest.xml | 1 + ...iaGalleryDefaultViewWithoutFiltersTest.xml | 6 +- .../AdminMediaGalleryDeleteAssetsAclTest.xml | 68 ++- .../AdminMediaGalleryDeleteFolderAclTest.xml | 100 +++- ...MediaGalleryDeleteImageContextMenuTest.xml | 22 + .../AdminMediaGalleryDeleteImageFileTest.xml | 20 + ...GalleryDeleteImageWithWarningPopupTest.xml | 14 +- ...nMediaGalleryDisabledContentFilterTest.xml | 38 +- ...diaGalleryEditImageDetailsFromGridTest.xml | 17 +- ...inMediaGalleryEnabledContentFilterTest.xml | 22 +- ...inMediaGalleryFilterImagesBySourceTest.xml | 21 +- .../AdminMediaGallerySaveFiltersStateTest.xml | 7 +- ...diaGallerySortByDirectoryAscendingTest.xml | 18 +- ...iaGallerySortByDirectoryDescendingTest.xml | 18 +- .../AdminMediaGallerySortByNameAToZTest.xml | 18 +- .../AdminMediaGallerySortByNameZToATest.xml | 18 +- ...AdminMediaGallerySortByNewestFirstTest.xml | 18 +- ...AdminMediaGallerySortByOldestFirstTest.xml | 18 +- ...ediaGalleryStoreViewCategoryFilterTest.xml | 20 +- ...MediaGalleryStoreViewContentFilterTest.xml | 35 +- ...nMediaGallerySwitchingBetweenViewsTest.xml | 24 +- .../AdminMediaGalleryUploadAssetsAclTest.xml | 76 ++- ...minMediaGalleryUploadCategoryImageTest.xml | 3 +- ...iaGalleryVerifyImageGridAttributesTest.xml | 9 + ...MediaGalleryViewDetailsDeleteImageTest.xml | 22 + .../AdminMediaGalleryViewDetailsEditTest.xml | 22 +- .../Test/AdminMediaGalleryViewDetailsTest.xml | 19 +- ...loneMediaGalleryCreateDeleteFolderTest.xml | 25 +- ...aGalleryEditImageDetailsFromDialogTest.xml | 17 +- ...daloneMediaGalleryEditImageDetailsTest.xml | 1 + ...ndaloneMediaGalleryViewDetailsEditTest.xml | 22 +- ...nStandaloneMediaGalleryViewDetailsTest.xml | 19 +- app/code/Magento/MediaGalleryUi/composer.json | 32 +- .../Magento/MediaGalleryUiApi/composer.json | 16 +- .../MediaStorage/Model/File/Storage.php | 7 +- app/code/Magento/MediaStorage/composer.json | 30 +- app/code/Magento/MessageQueue/composer.json | 16 +- app/code/Magento/Msrp/composer.json | 28 +- .../MsrpConfigurableProduct/composer.json | 20 +- .../Magento/MsrpGroupedProduct/composer.json | 20 +- app/code/Magento/Multishipping/composer.json | 34 +- app/code/Magento/MysqlMq/composer.json | 18 +- .../Magento/NewRelicReporting/composer.json | 26 +- .../AdminAddImageToWYSIWYGNewsletterTest.xml | 16 +- app/code/Magento/Newsletter/composer.json | 32 +- .../Magento/NewsletterGraphQl/composer.json | 22 +- .../Magento/OfflinePayments/composer.json | 22 +- .../Magento/OfflineShipping/composer.json | 36 +- app/code/Magento/PageCache/composer.json | 20 +- app/code/Magento/Payment/composer.json | 28 +- .../Setup/Patch/Data/UpdateBmltoPayLater.php | 3 + app/code/Magento/Paypal/composer.json | 50 +- app/code/Magento/PaypalCaptcha/composer.json | 22 +- app/code/Magento/PaypalGraphQl/composer.json | 34 +- app/code/Magento/Persistent/composer.json | 26 +- app/code/Magento/ProductAlert/composer.json | 26 +- app/code/Magento/ProductVideo/composer.json | 28 +- app/code/Magento/Quote/composer.json | 44 +- app/code/Magento/QuoteAnalytics/composer.json | 14 +- .../Magento/QuoteBundleOptions/composer.json | 12 +- .../QuoteConfigurableOptions/composer.json | 12 +- .../QuoteDownloadableLinks/composer.json | 12 +- app/code/Magento/QuoteGraphQl/composer.json | 36 +- .../RelatedProductGraphQl/composer.json | 18 +- .../Magento/ReleaseNotification/composer.json | 22 +- app/code/Magento/RemoteStorage/Filesystem.php | 4 +- .../Model/Filesystem/Directory/Write.php | 66 +++ .../Filesystem/Directory/WriteFactory.php | 87 +++ app/code/Magento/RemoteStorage/composer.json | 32 +- app/code/Magento/RemoteStorage/etc/di.xml | 6 +- app/code/Magento/Reports/composer.json | 48 +- app/code/Magento/RequireJs/composer.json | 14 +- app/code/Magento/Review/composer.json | 34 +- .../Magento/ReviewAnalytics/composer.json | 14 +- app/code/Magento/ReviewGraphQl/composer.json | 22 +- app/code/Magento/Robots/composer.json | 18 +- app/code/Magento/Rss/composer.json | 20 +- app/code/Magento/Rule/composer.json | 22 +- .../Test/StorefrontPrintOrderGuestTest.xml | 3 + .../StorefrontRedirectToOrderHistoryTest.xml | 3 + app/code/Magento/Sales/composer.json | 64 +-- app/code/Magento/SalesAnalytics/composer.json | 14 +- app/code/Magento/SalesGraphQl/composer.json | 24 +- app/code/Magento/SalesInventory/composer.json | 22 +- app/code/Magento/SalesRule/composer.json | 58 +- app/code/Magento/SalesSequence/composer.json | 14 +- app/code/Magento/SampleData/composer.json | 16 +- app/code/Magento/Search/composer.json | 24 +- .../Security/Model/AdminSessionInfo.php | 3 +- .../Security/Model/AdminSessionsManager.php | 21 +- .../Model/ResourceModel/AdminSessionInfo.php | 3 +- .../AdminSessionInfo/Collection.php | 4 +- .../Patch/Data/SessionIDColumnCleanUp.php | 102 ++++ .../Unit/Model/AdminSessionsManagerTest.php | 89 +-- .../AdminSessionInfo/CollectionTest.php | 2 +- .../ResourceModel/AdminSessionInfoTest.php | 2 +- app/code/Magento/Security/composer.json | 24 +- app/code/Magento/Security/etc/db_schema.xml | 3 +- app/code/Magento/SendFriend/composer.json | 26 +- .../Magento/SendFriendGraphQl/composer.json | 16 +- app/code/Magento/Shipping/composer.json | 46 +- app/code/Magento/Sitemap/composer.json | 34 +- app/code/Magento/Store/composer.json | 32 +- app/code/Magento/StoreGraphQl/composer.json | 14 +- app/code/Magento/Swagger/composer.json | 14 +- app/code/Magento/SwaggerWebapi/composer.json | 16 +- .../Magento/SwaggerWebapiAsync/composer.json | 18 +- app/code/Magento/Swatches/composer.json | 38 +- .../Magento/SwatchesGraphQl/composer.json | 20 +- .../SwatchesLayeredNavigation/composer.json | 14 +- app/code/Magento/Tax/composer.json | 44 +- app/code/Magento/TaxGraphQl/composer.json | 16 +- .../Magento/TaxImportExport/composer.json | 24 +- ...esignConfigMediaGalleryImageUploadTest.xml | 26 +- app/code/Magento/Theme/composer.json | 40 +- app/code/Magento/ThemeGraphQl/composer.json | 14 +- app/code/Magento/Translation/composer.json | 24 +- ...nResetDataGridToDefaultViewActionGroup.xml | 25 + ...tAdminDataGridToDefaultViewActionGroup.xml | 5 +- .../Ui/Test/Mftf/Data/GridViewData.xml | 17 + .../Section/AdminDataGridHeaderSection.xml | 2 + app/code/Magento/Ui/composer.json | 26 +- app/code/Magento/Ups/composer.json | 30 +- app/code/Magento/UrlRewrite/composer.json | 28 +- .../Magento/UrlRewriteGraphQl/composer.json | 16 +- app/code/Magento/User/composer.json | 28 +- app/code/Magento/Usps/composer.json | 30 +- app/code/Magento/Variable/Model/Variable.php | 36 +- .../Variable/Test/Unit/Model/VariableTest.php | 58 ++ app/code/Magento/Variable/composer.json | 22 +- app/code/Magento/Vault/composer.json | 29 +- app/code/Magento/VaultGraphQl/composer.json | 14 +- app/code/Magento/Version/composer.json | 14 +- app/code/Magento/Webapi/composer.json | 26 +- app/code/Magento/WebapiAsync/composer.json | 24 +- app/code/Magento/WebapiSecurity/composer.json | 16 +- app/code/Magento/Weee/composer.json | 40 +- app/code/Magento/WeeeGraphQl/composer.json | 20 +- app/code/Magento/Widget/composer.json | 32 +- .../Wishlist/Controller/Shared/Allcart.php | 3 +- app/code/Magento/Wishlist/composer.json | 48 +- .../Magento/WishlistAnalytics/composer.json | 14 +- .../Magento/WishlistGraphQl/composer.json | 22 +- .../web/css/source/_module.less | 6 + .../adminhtml/Magento/backend/composer.json | 14 +- .../frontend/Magento/blank/composer.json | 14 +- .../frontend/Magento/luma/composer.json | 16 +- app/i18n/Magento/de_DE/composer.json | 6 +- app/i18n/Magento/en_US/composer.json | 6 +- app/i18n/Magento/es_ES/composer.json | 6 +- app/i18n/Magento/fr_FR/composer.json | 6 +- app/i18n/Magento/nl_NL/composer.json | 6 +- app/i18n/Magento/pt_BR/composer.json | 6 +- app/i18n/Magento/zh_Hans_CN/composer.json | 6 +- composer.json | 526 +++++++++--------- composer.lock | 6 +- .../Backend/Model/Auth/SessionTest.php | 1 + .../Wysiwyg/Images/DeleteFilesTest.php | 61 +- .../Wysiwyg/Images/DeleteFolderTest.php | 72 ++- .../Wysiwyg/Images/NewFolderTest.php | 47 +- .../Adminhtml/Wysiwyg/Images/UploadTest.php | 47 +- .../Cms/Model/Wysiwyg/Images/StorageTest.php | 115 ++-- .../Customer/Model/AccountManagementTest.php | 107 ++-- .../Magento/Customer/Model/SessionTest.php | 8 +- .../Magento/Customer/Model/VisitorTest.php | 25 +- .../Session/SaveHandler/DbTableTest.php | 13 +- .../Directory/Command/CreateByPathsTest.php | 57 +- .../Directory/Command/DeleteByPathsTest.php | 40 +- .../Model/Directory/IsExcludedTest.php | 4 + .../Model/AdminSessionsManagerTest.php | 22 +- .../Security/Model/Plugin/AuthSessionTest.php | 16 +- .../ResourceModel/AdminSessionInfoTest.php | 1 - .../Model/UserExpirationManagerTest.php | 8 +- .../Wishlist/Controller/SharedTest.php | 8 +- .../Magento/Framework/Amqp/composer.json | 18 +- .../Magento/Framework/Bulk/composer.json | 18 +- .../Directory/DenyListPathValidator.php | 2 +- .../Framework/Filesystem/Directory/Write.php | 2 +- .../Filesystem/Directory/WriteFactory.php | 3 +- .../Test/Unit/Directory/WriteTest.php | 2 +- .../Framework/MessageQueue/composer.json | 18 +- .../Framework/Session/CompositeValidator.php | 38 ++ .../Framework/Session/SaveHandler/DbTable.php | 32 +- .../Framework/Session/SessionManager.php | 2 + .../Test/Unit/SaveHandler/DbTableTest.php | 6 +- lib/internal/Magento/Framework/composer.json | 10 +- lib/web/mage/adminhtml/browser.js | 39 +- .../Setup/Console/Command/UpgradeCommand.php | 7 + .../Console/Command/UpgradeCommandTest.php | 12 +- 413 files changed, 6663 insertions(+), 3541 deletions(-) create mode 100644 app/code/Magento/AdminAnalytics/i18n/en_US.csv create mode 100644 app/code/Magento/AwsS3/Test/Mftf/Suite/RemoteStorageAwsS3EnabledMediaGalleryUiSuite.xml create mode 100644 app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteFolderTest.xml create mode 100644 app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteImageTest.xml create mode 100644 app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminExpandMediaGalleryFolderActionGroup.xml create mode 100644 app/code/Magento/Customer/Model/Session/Validators/CutoffValidator.php create mode 100644 app/code/Magento/Customer/Setup/Patch/Data/SessionIDColumnCleanUp.php create mode 100644 app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminCloseEnhancedMediaGalleryActionGroup.xml create mode 100644 app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryAssertAttentionModalActionGroup.xml create mode 100644 app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCloseAttentionModalActionGroup.xml create mode 100644 app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryAttentionModalSection.xml create mode 100644 app/code/Magento/RemoteStorage/Model/Filesystem/Directory/Write.php create mode 100644 app/code/Magento/RemoteStorage/Model/Filesystem/Directory/WriteFactory.php create mode 100644 app/code/Magento/Security/Setup/Patch/Data/SessionIDColumnCleanUp.php create mode 100644 app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminResetDataGridToDefaultViewActionGroup.xml create mode 100644 app/code/Magento/Ui/Test/Mftf/Data/GridViewData.xml create mode 100644 lib/internal/Magento/Framework/Session/CompositeValidator.php diff --git a/app/code/Magento/AdminAnalytics/composer.json b/app/code/Magento/AdminAnalytics/composer.json index f97d33c26f35f..6e5b050faa4f6 100644 --- a/app/code/Magento/AdminAnalytics/composer.json +++ b/app/code/Magento/AdminAnalytics/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-admin-analytics", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-release-notification": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-release-notification": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/AdminAnalytics/i18n/en_US.csv b/app/code/Magento/AdminAnalytics/i18n/en_US.csv new file mode 100644 index 0000000000000..fa17e425e13dd --- /dev/null +++ b/app/code/Magento/AdminAnalytics/i18n/en_US.csv @@ -0,0 +1,3 @@ +"Allow Adobe to collect usage data to improve user experience and offer in-product guidance", "Allow Adobe to collect usage data to improve user experience and offer in-product guidance" +"

By clicking on Allow, you agree that we may collect anonymous usage data from you to:

  1. Help us improve the Magento Admin user experience
  2. Provide interactive in-product guidance, such as technical support and tips to improve utilization of the product from within the Admin UI. This may include notifications of new features, product support/guidance, onboarding information, tooltips, and more.

All usage data that we collect for this purpose cannot be used to individually identify you and is used only to improve the Magento Admin UI and related products and services.

You can learn more and opt-out at any time by following the instructions in merchant documentation.

", "

By clicking on Allow, you agree that we may collect anonymous usage data from you to:

  1. Help us improve the Magento Admin user experience
  2. Provide interactive in-product guidance, such as technical support and tips to improve utilization of the product from within the Admin UI. This may include notifications of new features, product support/guidance, onboarding information, tooltips, and more.

All usage data that we collect for this purpose cannot be used to individually identify you and is used only to improve the Magento Admin UI and related products and services.

You can learn more and opt-out at any time by following the instructions in merchant documentation.

" + diff --git a/app/code/Magento/AdminAnalytics/view/adminhtml/layout/adminhtml_dashboard_index.xml b/app/code/Magento/AdminAnalytics/view/adminhtml/layout/adminhtml_dashboard_index.xml index 3069db1ecc2bb..ca14b20acae5e 100644 --- a/app/code/Magento/AdminAnalytics/view/adminhtml/layout/adminhtml_dashboard_index.xml +++ b/app/code/Magento/AdminAnalytics/view/adminhtml/layout/adminhtml_dashboard_index.xml @@ -19,4 +19,4 @@ - \ No newline at end of file + diff --git a/app/code/Magento/AdminAnalytics/view/adminhtml/ui_component/admin_usage_notification.xml b/app/code/Magento/AdminAnalytics/view/adminhtml/ui_component/admin_usage_notification.xml index be832ea35392b..b8196c8ae090e 100644 --- a/app/code/Magento/AdminAnalytics/view/adminhtml/ui_component/admin_usage_notification.xml +++ b/app/code/Magento/AdminAnalytics/view/adminhtml/ui_component/admin_usage_notification.xml @@ -49,7 +49,7 @@ true - + @@ -82,11 +82,7 @@ release-notification-text - Help us improve Magento Admin by allowing us to collect usage data.

-

All usage data that we collect for this purpose cannot be used to individually identify you and is used only to improve the Magento Admin and related products and services.

-

You can learn more and opt out at any time by following the instructions in merchant documentation.

-]]>
+ By clicking on Allow, you agree that we may collect anonymous usage data from you to:

All usage data that we collect for this purpose cannot be used to individually identify you and is used only to improve the Magento Admin UI and related products and services.

You can learn more and opt-out at any time by following the instructions in merchant documentation.

]]>
diff --git a/app/code/Magento/AdminNotification/composer.json b/app/code/Magento/AdminNotification/composer.json index d421fc869621b..63766457e100b 100644 --- a/app/code/Magento/AdminNotification/composer.json +++ b/app/code/Magento/AdminNotification/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-admin-notification", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-config": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/AdvancedPricingImportExport/composer.json b/app/code/Magento/AdvancedPricingImportExport/composer.json index 0f9106ec435d4..fc962cae64e06 100644 --- a/app/code/Magento/AdvancedPricingImportExport/composer.json +++ b/app/code/Magento/AdvancedPricingImportExport/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-advanced-pricing-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-catalog-inventory": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*", - "magento/module-directory": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-store": "101.1.*", + "magento/module-directory": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/AdvancedSearch/composer.json b/app/code/Magento/AdvancedSearch/composer.json index 720309b619e43..3368514ddbf34 100644 --- a/app/code/Magento/AdvancedSearch/composer.json +++ b/app/code/Magento/AdvancedSearch/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-advanced-search", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-search": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-search": "*", - "magento/module-store": "*", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-search": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-search": "101.1.*", + "magento/module-store": "101.1.*", "php": "~7.3.0||~7.4.0" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Amqp/composer.json b/app/code/Magento/Amqp/composer.json index 9e7a035112b04..fe55806215989 100644 --- a/app/code/Magento/Amqp/composer.json +++ b/app/code/Magento/Amqp/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-amqp", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { - "magento/framework": "*", - "magento/framework-amqp": "*", - "magento/framework-message-queue": "*", + "magento/framework": "103.0.*", + "magento/framework-amqp": "100.4.*", + "magento/framework-message-queue": "100.4.*", "php": "~7.3.0||~7.4.0" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/AmqpStore/composer.json b/app/code/Magento/AmqpStore/composer.json index 70a10810ece21..4bce1a798e990 100644 --- a/app/code/Magento/AmqpStore/composer.json +++ b/app/code/Magento/AmqpStore/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-amqp-store", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { - "magento/framework": "*", - "magento/framework-amqp": "*", - "magento/module-store": "*", + "magento/framework": "103.0.*", + "magento/framework-amqp": "100.4.*", + "magento/module-store": "101.1.*", "php": "~7.3.0||~7.4.0" }, "suggest": { - "magento/module-asynchronous-operations": "*", - "magento/framework-message-queue": "*" + "magento/module-asynchronous-operations": "100.4.*", + "magento/framework-message-queue": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/Analytics/composer.json b/app/code/Magento/Analytics/composer.json index 84f8af066bf11..332b12ad4b325 100644 --- a/app/code/Magento/Analytics/composer.json +++ b/app/code/Magento/Analytics/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-integration": "*", - "magento/module-store": "*", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-integration": "100.4.*", + "magento/module-store": "101.1.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/AsynchronousOperations/composer.json b/app/code/Magento/AsynchronousOperations/composer.json index b5de631418e72..31c9f9e2201c1 100644 --- a/app/code/Magento/AsynchronousOperations/composer.json +++ b/app/code/Magento/AsynchronousOperations/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-asynchronous-operations", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { - "magento/framework": "*", - "magento/framework-message-queue": "*", - "magento/framework-bulk": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-ui": "*", + "magento/framework": "103.0.*", + "magento/framework-message-queue": "100.4.*", + "magento/framework-bulk": "101.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-ui": "101.2.*", "php": "~7.3.0||~7.4.0" }, "suggest": { - "magento/module-admin-notification": "*", + "magento/module-admin-notification": "100.4.*", "magento/module-logging": "*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/Authorization/composer.json b/app/code/Magento/Authorization/composer.json index 401444404ca3e..4e98216b9e004 100644 --- a/app/code/Magento/Authorization/composer.json +++ b/app/code/Magento/Authorization/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-authorization", "description": "Authorization module provides access to Magento ACL functionality.", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/AwsS3/Test/Mftf/Helper/S3FileAssertions.php b/app/code/Magento/AwsS3/Test/Mftf/Helper/S3FileAssertions.php index 3f78b1051e2dc..aad6767b28c67 100644 --- a/app/code/Magento/AwsS3/Test/Mftf/Helper/S3FileAssertions.php +++ b/app/code/Magento/AwsS3/Test/Mftf/Helper/S3FileAssertions.php @@ -134,7 +134,7 @@ public function createDirectory($path, $permissions = 0777): void */ public function deleteDirectory($path): void { - if ($this->driver->isExists($path)) { + if ($this->driver->isDirectory($path)) { $this->driver->deleteDirectory($path); } } @@ -169,7 +169,7 @@ public function assertGlobbedFileExists($path, $pattern, $message = ''): void } /** - * Asserts that a file or directory exists on the remote storage system + * Asserts that a directory exists on the remote storage system * * @param string $path * @param string $message @@ -177,13 +177,13 @@ public function assertGlobbedFileExists($path, $pattern, $message = ''): void * * @throws \Magento\Framework\Exception\FileSystemException */ - public function assertPathExists($path, $message = ''): void + public function assertDirectoryExists($path, $message = ''): void { - $this->assertTrue($this->driver->isExists($path), "Failed asserting $path exists. " . $message); + $this->assertTrue($this->driver->isDirectory($path), "Failed asserting $path exists. " . $message); } /** - * Asserts that a file or directory does not exist on the remote storage system + * Asserts that a directory does not exist on the remote storage system * * @param string $path * @param string $message @@ -191,9 +191,9 @@ public function assertPathExists($path, $message = ''): void * * @throws \Magento\Framework\Exception\FileSystemException */ - public function assertPathDoesNotExist($path, $message = ''): void + public function assertDirectoryDoesNotExist($path, $message = ''): void { - $this->assertFalse($this->driver->isExists($path), "Failed asserting $path does not exist. " . $message); + $this->assertFalse($this->driver->isDirectory($path), "Failed asserting $path does not exist. " . $message); } /** diff --git a/app/code/Magento/AwsS3/Test/Mftf/Suite/RemoteStorageAwsS3EnabledMediaGalleryUiSuite.xml b/app/code/Magento/AwsS3/Test/Mftf/Suite/RemoteStorageAwsS3EnabledMediaGalleryUiSuite.xml new file mode 100644 index 0000000000000..9a965f553f4c5 --- /dev/null +++ b/app/code/Magento/AwsS3/Test/Mftf/Suite/RemoteStorageAwsS3EnabledMediaGalleryUiSuite.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteFolderTest.xml b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteFolderTest.xml new file mode 100644 index 0000000000000..97ffc8664011b --- /dev/null +++ b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteFolderTest.xml @@ -0,0 +1,151 @@ + + + + + + + + + + <description value="Verify that when a user deletes a folder in Media Gallery that the directory gets + deleted in S3 and in the local file system."/> + <severity value="CRITICAL"/> + <group value="remote_storage_aws_s3_media_gallery_ui"/> + </annotations> + + <before> + <createData entity="_emptyCmsPage" stepKey="createCMSPage"/> + + <!-- Create Media Gallery Directories --> + <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminBefore"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm2"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder2"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + </before> + + <after> + <deleteData createDataKey="createCMSPage" stepKey="deleteCMSPage"/> + + <!-- Delete Created Directories --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="select1stCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="delete1stCreatedFolder"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> + </after> + + + <!-- Verify Images & Directories in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3BaseImageExists"> + <argument name="filePath">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3ThumbnailImageExists"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalBaseImageDirectoryDoesNotExist"> + <argument name="path">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalThumbnailImageExists"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + + <!-- Create CMS Page w/ Uploaded Image & Trigger Local Sync --> + <actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage"> + <argument name="CMSPage" value="$$createCMSPage$$"/> + </actionGroup> + <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expand1stCreatedFolder"> + <argument name="FolderName" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="select2ndCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryClickImageInGridActionGroup" stepKey="selectUploadedImage"> + <argument name="imageName" value="{{ImageUpload.file}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelected"/> + <actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="savePage"/> + <actionGroup ref="NavigateToStorefrontForCreatedPageActionGroup" stepKey="navigateToPageOnStorefront"> + <argument name="page" value="$$createCMSPage.identifier$$"/> + </actionGroup> + + <!-- Verify Images in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3BaseImageExists2"> + <argument name="filePath">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3ThumbnailImageExists2"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalBaseImageExists2"> + <argument name="filePath">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalThumbnailImageExists2"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + + <!-- Delete 2nd Created Folder --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid2"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder2"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expand1stCreatedFolder2"> + <argument name="FolderName" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="select2ndCreatedFolder2"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> + <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + + <!-- Verify Images & Directories in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertDirectoryExists" stepKey="assertS31stCreatedBaseFolderExists"> + <argument name="path">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertS32ndCreatedBaseFolderDoesNotExist"> + <argument name="path">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3ThumbnailImageExists3"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryExists" stepKey="assertLocal1stCreatedBaseFolderExists"> + <argument name="path">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocal2ndCreatedBaseFolderDoesNotExist"> + <argument name="path">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalThumbnailImageExists3"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{AdminMediaGalleryFolder2Data.name}}/{{ImageUpload.file}}</argument> + </helper> + </test> +</tests> diff --git a/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteImageTest.xml b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteImageTest.xml new file mode 100644 index 0000000000000..30b583ac4e33c --- /dev/null +++ b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3MediaGalleryDeleteImageTest.xml @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd"> + <test name="AdminAwsS3MediaGalleryDeleteImageTest"> + <annotations> + <features value="AwsS3"/> + <stories value="Media Gallery"/> + <title value="Verify Deleting Image Deletes S3 and Local File Storage Image"/> + <description value="Verify that when a user deletes an image in Media Gallery that the image gets deleted + in S3 and in the local file system."/> + <severity value="CRITICAL"/> + <group value="remote_storage_aws_s3_media_gallery_ui"/> + </annotations> + + <before> + <createData entity="_emptyCmsPage" stepKey="createCMSPage"/> + + <!-- Create Media Gallery Image --> + <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminBefore"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + </before> + + <after> + <deleteData createDataKey="createCMSPage" stepKey="deleteCMSPage"/> + + <!-- Delete Created Directory --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> + </after> + + + <!-- Verify Images & Directories in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3BaseImageExists"> + <argument name="filePath">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3ThumbnailImageExists"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalBaseImageDirectoryDoesNotExist"> + <argument name="path">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalThumbnailImageExists"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + + <!-- Create CMS Page w/ Uploaded Image & Trigger Local Sync --> + <actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage"> + <argument name="CMSPage" value="$$createCMSPage$$"/> + </actionGroup> + <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryClickImageInGridActionGroup" stepKey="selectUploadedImage"> + <argument name="imageName" value="{{ImageUpload.file}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelected"/> + <actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="savePage"/> + <actionGroup ref="NavigateToStorefrontForCreatedPageActionGroup" stepKey="navigateToPageOnStorefront"> + <argument name="page" value="$$createCMSPage.identifier$$"/> + </actionGroup> + + <!-- Verify Images in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3BaseImageExists2"> + <argument name="filePath">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileExists" stepKey="assertS3ThumbnailImageExists2"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalBaseImageExists2"> + <argument name="filePath">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileExists" stepKey="assertLocalThumbnailImageExists2"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + + <!-- Delete Uploaded Image --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid2"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder2"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder2"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"> + <argument name="imageName" value="{{ImageUpload.file}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertImageNotExistsInTheGridActionGroup" stepKey="assertImageDeleted"> + <argument name="title" value="ImageUpload.file"/> + </actionGroup> + + <!-- Verify Images & Directories in S3 & Local File System --> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertDirectoryExists" stepKey="assertS3CreatedBaseFolderExists"> + <argument name="path">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileDoesNotExist" stepKey="assertS3BaseImageDoesNotExist"> + <argument name="filePath">media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertDirectoryExists" stepKey="assertS3ThumbnailDirectoryExists"> + <argument name="path">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertFileDoesNotExist" stepKey="assertS3ThumbnailImageDoesNotExist"> + <argument name="filePath">media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryExists" stepKey="assertLocalCreatedBaseFolderExists"> + <argument name="path">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalBaseImageDoesNotExist"> + <argument name="filePath">pub/media/wysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryExists" stepKey="assertLocalThumbnailDirectoryExists"> + <argument name="path">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}</argument> + </helper> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalThumbnailImageDoesNotExist"> + <argument name="filePath">pub/media/.thumbswysiwyg/{{AdminMediaGalleryFolderData.name}}/{{ImageUpload.file}}</argument> + </helper> + </test> +</tests> diff --git a/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3SyncMediaFilesTest.xml b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3SyncMediaFilesTest.xml index 2dbba8f81180c..b6a9798e81b5f 100644 --- a/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3SyncMediaFilesTest.xml +++ b/app/code/Magento/AwsS3/Test/Mftf/Test/AdminAwsS3SyncMediaFilesTest.xml @@ -125,19 +125,19 @@ <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="deleteFileIfExists" stepKey="deleteLocalImage1"> <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage1IsDeleted"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage1IsDeleted"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> </helper> <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="deleteFileIfExists" stepKey="deleteLocalImage2"> <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage2IsDeleted"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage2IsDeleted"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> </helper> <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="deleteDirectory" stepKey="deleteLocalCacheDirectory"> <argument name="path">pub/media/catalog/product/cache/</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalCacheDirectoryDeleted"> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalCacheDirectoryDeleted"> <argument name="path">pub/media/catalog/product/cache/</argument> </helper> @@ -152,13 +152,13 @@ </actionGroup> <!-- Assert Local File System Images & Cached Images Are Still Non-Existent --> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage1IsDeleted2"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage1IsDeleted2"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage2IsDeleted2"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage2IsDeleted2"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalCacheDirectoryDeleted2"> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalCacheDirectoryDeleted2"> <argument name="path">pub/media/catalog/product/cache/</argument> </helper> @@ -175,13 +175,13 @@ <helper class="Magento\AwsS3\Test\Mftf\Helper\S3FileAssertions" method="assertDirectoryNotEmpty" stepKey="assertS3CacheDirectoryNotEmpty2"> <argument name="path">media/catalog/product/cache/</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage1IsDeleted3"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage1IsDeleted3"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage1FileName}/{$secondCharacterImage1FileName}/$createProductImage1.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalImage2IsDeleted3"> - <argument name="path">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertFileDoesNotExist" stepKey="assertLocalImage2IsDeleted3"> + <argument name="filePath">pub/media/catalog/product/{$firstCharacterImage2FileName}/{$secondCharacterImage2FileName}/$createProductImage2.entry[content][name]$</argument> </helper> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalCacheDirectoryGone"> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalCacheDirectoryGone"> <argument name="path">pub/media/catalog/product/cache/</argument> </helper> @@ -206,7 +206,7 @@ <magentoCLI command="setup:config:set {{RemoteStorageAwsS3ConfigData.disable_options}}" stepKey="disableRemoteStorage"/> <actionGroup ref="AdminGoToCacheManagementPageActionGroup" stepKey="goToCacheManagementPage3"/> <actionGroup ref="AdminClickFlushCatalogImagesCacheActionGroup" stepKey="clearCatalogImageCache3"/> - <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertPathDoesNotExist" stepKey="assertLocalCacheDirectoryEmpty2"> + <helper class="Magento\Catalog\Test\Mftf\Helper\LocalFileAssertions" method="assertDirectoryDoesNotExist" stepKey="assertLocalCacheDirectoryEmpty2"> <argument name="path">pub/media/catalog/product/cache/</argument> </helper> <actionGroup ref="CliCacheFlushActionGroup" stepKey="flushPageCache3"> diff --git a/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3ConfigurableProductChildImageShouldBeShownOnWishListTest.xml b/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3ConfigurableProductChildImageShouldBeShownOnWishListTest.xml index 049caa2180d69..fedc4e5b4b3d2 100644 --- a/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3ConfigurableProductChildImageShouldBeShownOnWishListTest.xml +++ b/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3ConfigurableProductChildImageShouldBeShownOnWishListTest.xml @@ -12,12 +12,12 @@ <annotations> <features value="Wishlist"/> <stories value="Configurable product child image should be Shown on wishlist"/> - <group value="wishlist"/> <title value="AWS S3 when user add Configurable child product to WIshlist then child product image should be shown in Wishlist"/> <description value="When user add Configurable child product to WIshlist then child product image should be shown in Wishlist"/> <severity value="MAJOR"/> <testCaseId value="MC-38708"/> <group value="remote_storage_aws_s3"/> + <group value="wishlist"/> </annotations> <before> <magentoCLI command="setup:config:set {{RemoteStorageAwsS3ConfigData.enable_options}}" stepKey="enableRemoteStorage"/> diff --git a/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3StorefrontPrintOrderGuestTest.xml b/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3StorefrontPrintOrderGuestTest.xml index 71a66036012fd..861c2bd35e1ee 100644 --- a/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3StorefrontPrintOrderGuestTest.xml +++ b/app/code/Magento/AwsS3/Test/Mftf/Test/AwsS3StorefrontPrintOrderGuestTest.xml @@ -15,6 +15,9 @@ <description value="Print Order from Guest on Frontend"/> <severity value="BLOCKER"/> <testCaseId value="MC-38689"/> + <skip> + <issueId value="MQE-2834" /> + </skip> <group value="remote_storage_aws_s3"/> </annotations> <before> diff --git a/app/code/Magento/AwsS3/composer.json b/app/code/Magento/AwsS3/composer.json index 2bf91663f5881..8a4c83004f1d0 100644 --- a/app/code/Magento/AwsS3/composer.json +++ b/app/code/Magento/AwsS3/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-aws-s3", "description": "N/A", + "type": "magento2-module", + "license": [ + "proprietary" + ], "config": { "sort-packages": true }, + "version": "100.4.1-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-remote-storage": "*", + "magento/framework": "103.0.*", + "magento/module-remote-storage": "100.4.*", "league/flysystem": "^2.0", "league/flysystem-aws-s3-v3": "^2.0" }, - "type": "magento2-module", - "license": [ - "proprietary" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Backend/composer.json b/app/code/Magento/Backend/composer.json index 29a78d9ae0ab0..b2a42d0903f1d 100644 --- a/app/code/Magento/Backend/composer.json +++ b/app/code/Magento/Backend/composer.json @@ -1,38 +1,39 @@ { "name": "magento/module-backend", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "102.0.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backup": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-cms": "*", - "magento/module-customer": "*", - "magento/module-developer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-require-js": "*", - "magento/module-sales": "*", - "magento/module-security": "*", - "magento/module-store": "*", - "magento/module-translation": "*", - "magento/module-ui": "*", - "magento/module-user": "*" + "magento/framework": "103.0.*", + "magento/module-backup": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-cms": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-developer": "100.4.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-quote": "101.2.*", + "magento/module-reports": "100.4.*", + "magento/module-require-js": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-security": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-translation": "100.4.*", + "magento/module-ui": "101.2.*", + "magento/module-user": "101.2.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php", @@ -43,3 +44,4 @@ } } } + diff --git a/app/code/Magento/Backup/composer.json b/app/code/Magento/Backup/composer.json index 9a5904beda550..4374aed7e90bd 100644 --- a/app/code/Magento/Backup/composer.json +++ b/app/code/Magento/Backup/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-backup", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cron": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-cron": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json index 1b5ca24ee098c..66367148952dc 100644 --- a/app/code/Magento/Bundle/composer.json +++ b/app/code/Magento/Bundle/composer.json @@ -1,38 +1,39 @@ { "name": "magento/module-bundle", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.0.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-rule": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-catalog-rule": "101.2.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-gift-message": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-webapi": "*", - "magento/module-bundle-sample-data": "*", - "magento/module-sales-rule": "*" + "magento/module-webapi": "100.4.*", + "magento/module-bundle-sample-data": "Sample Data version: 100.4.*", + "magento/module-sales-rule": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -42,3 +43,4 @@ } } } + diff --git a/app/code/Magento/BundleGraphQl/composer.json b/app/code/Magento/BundleGraphQl/composer.json index e3c54719f4d0e..ab3fb01e23590 100644 --- a/app/code/Magento/BundleGraphQl/composer.json +++ b/app/code/Magento/BundleGraphQl/composer.json @@ -2,22 +2,23 @@ "name": "magento/module-bundle-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-catalog": "*", - "magento/module-bundle": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-store": "*", - "magento/module-sales": "*", - "magento/module-sales-graph-ql": "*", - "magento/framework": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-catalog": "104.0.*", + "magento/module-bundle": "101.0.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-quote-graph-ql": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-graph-ql": "100.4.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/BundleImportExport/composer.json b/app/code/Magento/BundleImportExport/composer.json index faca3eac9a721..6e0a04352fbee 100644 --- a/app/code/Magento/BundleImportExport/composer.json +++ b/app/code/Magento/BundleImportExport/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-bundle-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-bundle": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*" + "magento/framework": "103.0.*", + "magento/module-bundle": "101.0.*", + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/CacheInvalidate/composer.json b/app/code/Magento/CacheInvalidate/composer.json index 7801554c890e1..9c506007c2cb0 100644 --- a/app/code/Magento/CacheInvalidate/composer.json +++ b/app/code/Magento/CacheInvalidate/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-cache-invalidate", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-page-cache": "*" + "magento/framework": "103.0.*", + "magento/module-page-cache": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/Captcha/Test/Mftf/Data/CaptchaConfigData.xml b/app/code/Magento/Captcha/Test/Mftf/Data/CaptchaConfigData.xml index 995334f2880c0..8a33cbe4ae5d6 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Data/CaptchaConfigData.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Data/CaptchaConfigData.xml @@ -115,6 +115,18 @@ <data key="label">No</data> <data key="value">0</data> </entity> + <entity name="AdminCaptchaAdminLoginConfigData"> + <data key="path">admin/captcha/forms</data> + <data key="scope_id">0</data> + <data key="label">Admin Login</data> + <data key="value">backend_login</data> + </entity> + <entity name="AdminCaptchaAdminForgotPasswordConfigData"> + <data key="path">admin/captcha/forms</data> + <data key="scope_id">0</data> + <data key="label">Admin Forgot Password</data> + <data key="value">backend_forgotpassword</data> + </entity> <entity name="AdminCaptchaLength3ConfigData"> <data key="path">admin/captcha/length</data> <data key="scope">admin</data> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/AdminLoginWithCaptchaTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/AdminLoginWithCaptchaTest.xml index 58cfd7aacd631..1b0031c9dc2eb 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/AdminLoginWithCaptchaTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/AdminLoginWithCaptchaTest.xml @@ -21,6 +21,8 @@ </annotations> <before> + <magentoCLI command="config:set {{AdminCaptchaEnableConfigData.path}} {{AdminCaptchaEnableConfigData.value}} " stepKey="enableAdminCaptcha"/> + <magentoCLI command="config:set {{AdminCaptchaAdminLoginConfigData.path}} {{AdminCaptchaAdminLoginConfigData.value}}" stepKey="enableCaptchaOnAdminLogin"/> <magentoCLI command="config:set {{AdminCaptchaLength3ConfigData.path}} {{AdminCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> <magentoCLI command="config:set {{AdminCaptchaSymbols1ConfigData.path}} {{AdminCaptchaSymbols1ConfigData.value}}" stepKey="setCaptchaSymbols" /> <actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches"> @@ -28,6 +30,8 @@ </actionGroup> </before> <after> + <magentoCLI command="config:set {{AdminCaptchaEnableConfigData.path}} {{AdminCaptchaEnableConfigData.value}} " stepKey="enableAdminCaptcha"/> + <magentoCLI command="config:set {{AdminCaptchaAdminLoginConfigData.path}} {{AdminCaptchaAdminLoginConfigData.value}},{{AdminCaptchaAdminForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms"/> <magentoCLI command="config:set {{AdminCaptchaDefaultLengthConfigData.path}} {{AdminCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> <magentoCLI command="config:set {{AdminCaptchaDefaultSymbolsConfigData.path}} {{AdminCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" /> <actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches"> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaEditCustomerEmailTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaEditCustomerEmailTest.xml index 2736888154483..ca77851e9b950 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaEditCustomerEmailTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaEditCustomerEmailTest.xml @@ -21,6 +21,7 @@ </annotations> <before> <!-- Setup CAPTCHA for testing --> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerChangePasswordConfigData.path}} {{StorefrontCaptchaOnCustomerChangePasswordConfigData.value}}" stepKey="enableUserEditCaptcha"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaSymbols1ConfigData.path}} {{StorefrontCustomerCaptchaSymbols1ConfigData.value}}" stepKey="setCaptchaSymbols" /> @@ -36,6 +37,7 @@ </before> <after> <!-- Revert Captcha forms configurations --> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.path}} {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" /> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnContactUsTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnContactUsTest.xml index 22f1ed1af3e28..c81d5d849b694 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnContactUsTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnContactUsTest.xml @@ -20,6 +20,7 @@ <group value="mtf_migrated"/> </annotations> <before> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaSymbols1ConfigData.path}} {{StorefrontCustomerCaptchaSymbols1ConfigData.value}}" stepKey="setCaptchaSymbols" /> <magentoCLI command="config:set {{StorefrontCaptchaOnContactUsFormConfigData.path}} {{StorefrontCaptchaOnContactUsFormConfigData.value}}" stepKey="enableUserEditCaptcha"/> @@ -28,6 +29,7 @@ </actionGroup> </before> <after> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.path}} {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" /> <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms" /> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnCustomerLoginTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnCustomerLoginTest.xml index 332d7eb6067b5..67dba6212ed2c 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnCustomerLoginTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnCustomerLoginTest.xml @@ -20,6 +20,8 @@ <group value="mtf_migrated"/> </annotations> <before> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> + <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}}" stepKey="enableCaptchaOnCustomerLogin"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaSymbols1ConfigData.path}} {{StorefrontCustomerCaptchaSymbols1ConfigData.value}}" stepKey="setCaptchaSymbols" /> <actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches"> @@ -28,6 +30,8 @@ <createData entity="Simple_US_Customer" stepKey="customer"/> </before> <after> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> + <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.path}} {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" /> <actionGroup ref="CliCacheCleanActionGroup" stepKey="cleanInvalidatedCaches"> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnOnepageCheckoutPyamentTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnOnepageCheckoutPyamentTest.xml index a9b8331716e8e..c7e260eb47035 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnOnepageCheckoutPyamentTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaOnOnepageCheckoutPyamentTest.xml @@ -32,6 +32,7 @@ <magentoCLI command="config:set {{BankTransferEnableConfigData.path}} {{BankTransferEnableConfigData.value}}" stepKey="enableBankTransfer"/> <!-- Enable captcha for Checkout/Placing Order --> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCaptchaOnOnepageCheckoutConfigData.path}} {{StorefrontCaptchaOnOnepageCheckoutConfigData.value}}" stepKey="enableOnOpageCheckoutCaptcha" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAlwaysConfigData.path}} {{StorefrontCustomerCaptchaModeAlwaysConfigData.value}}" stepKey="alwaysEnableCaptcha" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> @@ -45,7 +46,8 @@ <magentoCLI command="config:set {{BankTransferDisabledConfigData.path}} {{BankTransferDisabledConfigData.value}}" stepKey="disabledBankTransfer"/> <!-- Set default configuration for captcha --> - <magentoCLI command="config:set {{StorefrontCaptchaOnOnepageCheckoutConfigData.path}} {{StorefrontCaptchaOnOnepageCheckoutConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms" /> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> + <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms"/> <magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAfterFailConfigData.path}} {{StorefrontCustomerCaptchaModeAfterFailConfigData.value}}" stepKey="defaultCaptchaMode" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.path}} {{StorefrontCustomerCaptchaDefaultSymbolsConfigData.value}}" stepKey="setDefaultCaptchaSymbols" /> diff --git a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaRegisterNewCustomerTest.xml b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaRegisterNewCustomerTest.xml index b7d5b60ddc632..5117cea21790b 100644 --- a/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaRegisterNewCustomerTest.xml +++ b/app/code/Magento/Captcha/Test/Mftf/Test/StorefrontCaptchaRegisterNewCustomerTest.xml @@ -21,6 +21,7 @@ </annotations> <before> <!-- Enable captcha for customer. --> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerCreateFormConfigData.path}} {{StorefrontCaptchaOnCustomerCreateFormConfigData.value}}" stepKey="enableUserRegistrationCaptcha" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAlwaysConfigData.path}} {{StorefrontCustomerCaptchaModeAlwaysConfigData.value}}" stepKey="alwaysEnableCaptcha" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaLength3ConfigData.path}} {{StorefrontCustomerCaptchaLength3ConfigData.value}}" stepKey="setCaptchaLength" /> @@ -31,6 +32,7 @@ </before> <after> <!-- Set default configuration. --> + <magentoCLI command="config:set {{StorefrontCustomerCaptchaEnableConfigData.path}} {{StorefrontCustomerCaptchaEnableConfigData.value}}" stepKey="enableCaptcha"/> <magentoCLI command="config:set {{StorefrontCaptchaOnCustomerLoginConfigData.path}} {{StorefrontCaptchaOnCustomerLoginConfigData.value}},{{StorefrontCaptchaOnCustomerForgotPasswordConfigData.value}}" stepKey="enableCaptchaOnDefaultForms" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaModeAfterFailConfigData.path}} {{StorefrontCustomerCaptchaModeAfterFailConfigData.value}}" stepKey="defaultCaptchaMode" /> <magentoCLI command="config:set {{StorefrontCustomerCaptchaDefaultLengthConfigData.path}} {{StorefrontCustomerCaptchaDefaultLengthConfigData.value}}" stepKey="setDefaultCaptchaLength" /> diff --git a/app/code/Magento/Captcha/composer.json b/app/code/Magento/Captcha/composer.json index 5bab62d515460..f56cd3837bbc0 100644 --- a/app/code/Magento/Captcha/composer.json +++ b/app/code/Magento/Captcha/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-captcha", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-authorization": "*", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-authorization": "100.4.*", "laminas/laminas-captcha": "^2.10", "laminas/laminas-db": "^2.8.2", "laminas/laminas-session": "^2.10" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/CardinalCommerce/composer.json b/app/code/Magento/CardinalCommerce/composer.json index 8b2989ef915e1..834cb3f314ad5 100644 --- a/app/code/Magento/CardinalCommerce/composer.json +++ b/app/code/Magento/CardinalCommerce/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-cardinal-commerce", "description": "Provides a possibility to enable 3-D Secure 2.0 support for payment methods.", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-payment": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddCategoryImageActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddCategoryImageActionGroup.xml index 5837891667cc9..8a706c4e09812 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddCategoryImageActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/AddCategoryImageActionGroup.xml @@ -20,8 +20,8 @@ <waitForPageLoad time="30" stepKey="waitForPageLoad"/> <waitForElementVisible selector="{{AdminCategoryContentSection.uploadButton}}" stepKey="seeImageSectionIsReady"/> <attachFile selector="{{AdminCategoryContentSection.uploadImageFile}}" userInput="{{image.file}}" stepKey="uploadFile"/> - <waitForAjaxLoad time="30" stepKey="waitForAjaxUpload"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoading"/> + <comment userInput="BIC workaround" stepKey="waitForAjaxUpload"/> + <waitForPageLoad stepKey="waitForLoading"/> <grabTextFrom selector="{{AdminCategoryContentSection.imageFileName}}" stepKey="grabCategoryFileName"/> <assertRegExp stepKey="assertEquals" message="pass"> <expectedResult type="string">/magento-logo(_[0-9]+)*?\.png$/</expectedResult> diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/NavigateToCreatedProductEditPageActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/NavigateToCreatedProductEditPageActionGroup.xml index 0c9b5fc1c40e6..d316ba69395ad 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/NavigateToCreatedProductEditPageActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/NavigateToCreatedProductEditPageActionGroup.xml @@ -22,9 +22,9 @@ <waitForPageLoad stepKey="waitForClearFilters"/> <dontSeeElement selector="{{AdminProductGridFilterSection.clearFilters}}" stepKey="dontSeeClearFilters"/> <click selector="{{AdminProductGridFilterSection.viewDropdown}}" stepKey="openViewBookmarksTab"/> - <click selector="{{AdminProductGridFilterSection.viewBookmark('Default View')}}" stepKey="resetToDefaultGridView"/> + <click selector="{{AdminProductGridFilterSection.viewBookmark(DefaultGridView.name)}}" stepKey="resetToDefaultGridView"/> <waitForPageLoad stepKey="waitForResetToDefaultView"/> - <see selector="{{AdminProductGridFilterSection.viewDropdown}}" userInput="Default View" stepKey="seeDefaultViewSelected"/> + <see selector="{{AdminProductGridFilterSection.viewDropdown}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> <click selector="{{AdminProductGridFilterSection.filters}}" stepKey="openProductFilters"/> <fillField selector="{{AdminProductGridFilterSection.skuFilter}}" userInput="{{product.sku}}" stepKey="fillProductSkuFilter"/> <click selector="{{AdminProductGridFilterSection.applyFilters}}" stepKey="clickApplyFilters"/> diff --git a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/ResetProductGridToDefaultViewActionGroup.xml b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/ResetProductGridToDefaultViewActionGroup.xml index 441fe377bd435..7de4e65f63a7f 100644 --- a/app/code/Magento/Catalog/Test/Mftf/ActionGroup/ResetProductGridToDefaultViewActionGroup.xml +++ b/app/code/Magento/Catalog/Test/Mftf/ActionGroup/ResetProductGridToDefaultViewActionGroup.xml @@ -16,8 +16,8 @@ <conditionalClick selector="{{AdminProductGridFilterSection.clearFilters}}" dependentSelector="{{AdminProductGridFilterSection.clearFilters}}" visible="true" stepKey="clickClearFilters"/> <click selector="{{AdminProductGridFilterSection.viewDropdown}}" stepKey="openViewBookmarksTab"/> - <click selector="{{AdminProductGridFilterSection.viewBookmark('Default View')}}" stepKey="resetToDefaultGridView"/> + <click selector="{{AdminProductGridFilterSection.viewBookmark(DefaultGridView.name)}}" stepKey="resetToDefaultGridView"/> <waitForPageLoad stepKey="waitForProductGridLoad"/> - <see selector="{{AdminProductGridFilterSection.viewDropdown}}" userInput="Default View" stepKey="seeDefaultViewSelected"/> + <see selector="{{AdminProductGridFilterSection.viewDropdown}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/Catalog/Test/Mftf/Helper/LocalFileAssertions.php b/app/code/Magento/Catalog/Test/Mftf/Helper/LocalFileAssertions.php index 14867cd130cd5..e344347a4aac8 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Helper/LocalFileAssertions.php +++ b/app/code/Magento/Catalog/Test/Mftf/Helper/LocalFileAssertions.php @@ -80,7 +80,7 @@ public function deleteFileIfExists($filePath): void public function deleteDirectory($path): void { $realPath = $this->expandPath($path); - if ($this->driver->isExists($realPath)) { + if ($this->driver->isDirectory($realPath)) { $this->driver->deleteDirectory($realPath); } } @@ -151,7 +151,7 @@ public function assertGlobbedFileExists($path, $pattern, $message = ''): void } /** - * Asserts that a file or directory exists + * Asserts that a directory exists * * @param string $path * @param string $message @@ -159,14 +159,14 @@ public function assertGlobbedFileExists($path, $pattern, $message = ''): void * * @throws \Magento\Framework\Exception\FileSystemException */ - public function assertPathExists($path, $message = ''): void + public function assertDirectoryExists($path, $message = ''): void { $realPath = $this->expandPath($path); - $this->assertTrue($this->driver->isExists($realPath), "Failed asserting $path exists. " . $message); + $this->assertTrue($this->driver->isDirectory($realPath), "Failed asserting $path exists. " . $message); } /** - * Asserts that a file or directory does not exist + * Asserts that a directory does not exist * * @param string $path * @param string $message @@ -174,10 +174,10 @@ public function assertPathExists($path, $message = ''): void * * @throws \Magento\Framework\Exception\FileSystemException */ - public function assertPathDoesNotExist($path, $message = ''): void + public function assertDirectoryDoesNotExist($path, $message = ''): void { $realPath = $this->expandPath($path); - $this->assertFalse($this->driver->isExists($realPath), "Failed asserting $path does not exist. " . $message); + $this->assertFalse($this->driver->isDirectory($realPath), "Failed asserting $path does not exist. " . $message); } /** diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGCatalogTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGCatalogTest.xml index 32444e3fee20f..839aea610257d 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGCatalogTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGCatalogTest.xml @@ -23,7 +23,7 @@ <testCaseId value="MAGETWO-84373"/> </annotations> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="navigateToNewCatalog"/> - <waitForLoadingMaskToDisappear stepKey="wait2" /> + <comment userInput="BIC workaround" stepKey="wait2"/> <click selector="{{AdminCategorySidebarActionSection.AddSubcategoryButton}}" stepKey="clickOnAddSubCategory"/> <fillField selector="{{AdminCategoryBasicFieldSection.CategoryNameInput}}" userInput="{{SimpleSubCategory.name}}" stepKey="enterCategoryName"/> <click selector="{{AdminProductFormSection.contentTab}}" stepKey="clickContentTab"/> @@ -32,11 +32,15 @@ <waitForPageLoad stepKey="waitForPageLoad" /> <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="clickBrowserBtn"/> <actionGroup ref="VerifyMediaGalleryStorageActionsActionGroup" stepKey="VerifyMediaGalleryStorageBtn"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder"> - <argument name="FolderName" value="Storage Root"/> + <comment userInput="BIC workaround" stepKey="navigateToFolder"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> </actionGroup> <actionGroup ref="CreateImageFolderActionGroup" stepKey="CreateImageFolder"> - <argument name="ImageFolder" value="ImageFolder"/> + <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> <actionGroup ref="AttachImageActionGroup" stepKey="attachImage1"> <argument name="Image" value="ImageUpload3"/> @@ -54,6 +58,12 @@ <seeElementInDOM selector="{{StorefrontCategoryMainSection.imageSource(ImageUpload3.fileName)}}" stepKey="assertMediaSource"/> <after> <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteCreatedFolder"> <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> diff --git a/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGProductTest.xml b/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGProductTest.xml index e5c8cc5ee342c..b5adb47bac1e8 100644 --- a/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGProductTest.xml +++ b/app/code/Magento/Catalog/Test/Mftf/Test/AdminAddImageToWYSIWYGProductTest.xml @@ -26,11 +26,21 @@ <after> <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> + <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteFolderFromMediaGallery"> + <argument name="ImageFolder" value="ImageFolder"/> + </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/> </after> - <amOnPage url="{{AdminProductCreatePage.url(AddToDefaultSet.attributeSetId, 'simple')}}" stepKey="navigateToNewProduct"/> - <waitForPageLoad stepKey="waitForPageLoadProductCreatePage"/> + <actionGroup ref="AdminOpenNewProductFormPageActionGroup" stepKey="navigateToNewProduct"/> + <comment userInput="BIC workaround" stepKey="waitForPageLoadProductCreatePage"/> <actionGroup ref="FillMainProductFormActionGroup" stepKey="fillBasicProductInfo" /> <click selector="{{AdminProductFormSection.contentTab}}" stepKey="clickContentTab" /> @@ -83,28 +93,32 @@ <click userInput="Storage Root" stepKey="clickOnRootFolder" /> <waitForLoadingMaskToDisappear stepKey="waitForLoading15"/> <dontSeeElement selector="{{ProductShortDescriptionWYSIWYGToolbarSection.InsertFile}}" stepKey="dontSeeAddSelectedBtn3" /> - <attachFile selector="{{ProductShortDescriptionWYSIWYGToolbarSection.BrowseUploadImage}}" userInput="{{ImageUpload3.value}}" stepKey="uploadImage3"/> - <waitForLoadingMaskToDisappear stepKey="waitForFileUpload3"/> - <waitForElementVisible selector="{{ProductShortDescriptionWYSIWYGToolbarSection.image(ImageUpload3.value)}}" stepKey="waitForUploadImage3" /> - <waitForElement selector="{{ProductShortDescriptionWYSIWYGToolbarSection.DeleteSelectedBtn}}" stepKey="waitForDeletebtn" /> - <see selector="{{ProductShortDescriptionWYSIWYGToolbarSection.DeleteSelectedBtn}}" userInput="Delete Selected" stepKey="seeDeleteBtn2"/> - <click selector="{{ProductShortDescriptionWYSIWYGToolbarSection.DeleteSelectedBtn}}" stepKey="clickDeleteSelected2" /> - <waitForElementVisible selector="{{AdminConfirmationModalSection.ok}}" stepKey="waitForConfirm3"/> - <click selector="{{AdminConfirmationModalSection.ok}}" stepKey="confirmDelete2" /> - <dontSeeElement selector="{{ProductDescriptionWYSIWYGToolbarSection.InsertFile}}" stepKey="dontSeeAddSelectedBtn4" /> + <comment userInput="BIC workaround" stepKey="uploadImage3"/> + <comment userInput="BIC workaround" stepKey="waitForFileUpload3"/> + <comment userInput="BIC workaround" stepKey="waitForUploadImage3"/> + <comment userInput="BIC workaround" stepKey="waitForDeletebtn"/> + <comment userInput="BIC workaround" stepKey="seeDeleteBtn2"/> + <comment userInput="BIC workaround" stepKey="clickDeleteSelected2"/> + <comment userInput="BIC workaround" stepKey="waitForConfirm3"/> + <comment userInput="BIC workaround" stepKey="confirmDelete2"/> + <comment userInput="BIC workaround" stepKey="dontSeeAddSelectedBtn4"/> + <click userInput="{{ImageFolder.name}}" stepKey="selectCreatedFolder2" /> + <waitForPageLoad stepKey="waitForSelectFolder2"/> <attachFile selector="{{ProductShortDescriptionWYSIWYGToolbarSection.BrowseUploadImage}}" userInput="{{ImageUpload3.value}}" stepKey="uploadImage4"/> - <waitForLoadingMaskToDisappear stepKey="waitForFileUpload4"/> + <waitForPageLoad stepKey="waitForFileUpload4"/> <waitForElementVisible selector="{{ProductShortDescriptionWYSIWYGToolbarSection.image(ImageUpload3.value)}}" stepKey="waitForUploadImage4" /> <click selector="{{ProductShortDescriptionWYSIWYGToolbarSection.InsertFile}}" stepKey="clickInsertBtn" /> - <waitForLoadingMaskToDisappear stepKey="waitForLoading11" /> + <waitForPageLoad stepKey="waitForLoading11" /> <waitForElementVisible selector="{{ProductShortDescriptionWYSIWYGToolbarSection.OkBtn}}" stepKey="waitForOkBtn2" /> <fillField selector="{{ProductShortDescriptionWYSIWYGToolbarSection.ImageDescription}}" userInput="{{ImageUpload3.content}}" stepKey="fillImageDescription2" /> <fillField selector="{{ProductShortDescriptionWYSIWYGToolbarSection.Height}}" userInput="{{ImageUpload3.height}}" stepKey="fillImageHeight2" /> <click selector="{{ProductShortDescriptionWYSIWYGToolbarSection.OkBtn}}" stepKey="clickOkBtn2" /> <waitForPageLoad stepKey="waitForPageLoad6"/> <actionGroup ref="AdminProductFormSaveActionGroup" stepKey="saveProduct"/> - <amOnPage url="{{_defaultProduct.urlKey}}.html" stepKey="navigateToProductPage"/> - <waitForPageLoad stepKey="waitForPageLoad7"/> + <actionGroup ref="StorefrontOpenProductPageActionGroup" stepKey="navigateToProductPage"> + <argument name="productUrl" value="{{_defaultProduct.urlKey}}"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="waitForPageLoad7"/> <seeElement selector="{{StorefrontProductInfoMainSection.mediaDescription}}" stepKey="assertMediaDescription"/> <seeElementInDOM selector="{{StorefrontCategoryMainSection.imageSource(ImageUpload3.fileName)}}" stepKey="assertMediaSource3"/> <seeElementInDOM selector="{{StorefrontCategoryMainSection.imageSource(ImageUpload1.fileName)}}" stepKey="assertMediaSource1"/> diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json index 6dde1d76e5e81..fad3d7ba349ef 100644 --- a/app/code/Magento/Catalog/composer.json +++ b/app/code/Magento/Catalog/composer.json @@ -1,48 +1,49 @@ { "name": "magento/module-catalog", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "104.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-asynchronous-operations": "*", - "magento/module-backend": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-rule": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-checkout": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-indexer": "*", - "magento/module-media-storage": "*", - "magento/module-msrp": "*", - "magento/module-page-cache": "*", - "magento/module-product-alert": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-url-rewrite": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-asynchronous-operations": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-catalog-rule": "101.2.*", + "magento/module-catalog-url-rewrite": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-indexer": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-msrp": "100.4.*", + "magento/module-page-cache": "100.4.*", + "magento/module-product-alert": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-url-rewrite": "102.0.*", + "magento/module-widget": "101.2.*", + "magento/module-wishlist": "101.2.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-sales": "*", - "magento/module-catalog-sample-data": "*" + "magento/module-cookie": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-catalog-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -52,3 +53,4 @@ } } } + diff --git a/app/code/Magento/Catalog/etc/config.xml b/app/code/Magento/Catalog/etc/config.xml index f5546a06dd235..f8a1b600bb0bd 100644 --- a/app/code/Magento/Catalog/etc/config.xml +++ b/app/code/Magento/Catalog/etc/config.xml @@ -68,6 +68,9 @@ <allowed_resources> <tmp_images_folder>tmp</tmp_images_folder> <catalog_images_folder>catalog</catalog_images_folder> + <media_gallery_image_folders> + <category_image_folder>catalog/category</category_image_folder> + </media_gallery_image_folders> <product_custom_options_fodler>custom_options</product_custom_options_fodler> </allowed_resources> </media_storage_configuration> diff --git a/app/code/Magento/CatalogAnalytics/composer.json b/app/code/Magento/CatalogAnalytics/composer.json index 43fb4c8a6f433..d068ec4879740 100644 --- a/app/code/Magento/CatalogAnalytics/composer.json +++ b/app/code/Magento/CatalogAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-catalog-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/CatalogCmsGraphQl/composer.json b/app/code/Magento/CatalogCmsGraphQl/composer.json index aa7a742f2f315..38c79b614b63e 100644 --- a/app/code/Magento/CatalogCmsGraphQl/composer.json +++ b/app/code/Magento/CatalogCmsGraphQl/composer.json @@ -2,21 +2,22 @@ "name": "magento/module-catalog-cms-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-cms-graph-ql": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-cms-graph-ql": "100.4.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-cms": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-graph-ql": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/CatalogCustomerGraphQl/composer.json b/app/code/Magento/CatalogCustomerGraphQl/composer.json index ce80ee602327e..683cb29b77a19 100644 --- a/app/code/Magento/CatalogCustomerGraphQl/composer.json +++ b/app/code/Magento/CatalogCustomerGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-catalog-customer-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-catalog-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-catalog-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/CatalogGraphQl/composer.json b/app/code/Magento/CatalogGraphQl/composer.json index 463f974056749..4598af31432bf 100644 --- a/app/code/Magento/CatalogGraphQl/composer.json +++ b/app/code/Magento/CatalogGraphQl/composer.json @@ -2,27 +2,28 @@ "name": "magento/module-catalog-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-eav": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-directory": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-eav-graph-ql": "*", - "magento/module-catalog-search": "*", - "magento/framework": "*", - "magento/module-graph-ql": "*" + "magento/module-eav": "102.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-directory": "100.4.*", + "magento/module-search": "101.1.*", + "magento/module-store": "101.1.*", + "magento/module-eav-graph-ql": "100.4.*", + "magento/module-catalog-search": "102.0.*", + "magento/framework": "103.0.*", + "magento/module-graph-ql": "100.4.*" }, "suggest": { - "magento/module-graph-ql-cache": "*", - "magento/module-store-graph-ql": "*" + "magento/module-graph-ql-cache": "100.4.*", + "magento/module-store-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -32,3 +33,4 @@ } } } + diff --git a/app/code/Magento/CatalogImportExport/composer.json b/app/code/Magento/CatalogImportExport/composer.json index 92a6620827990..4f0fe9d835f43 100644 --- a/app/code/Magento/CatalogImportExport/composer.json +++ b/app/code/Magento/CatalogImportExport/composer.json @@ -1,29 +1,30 @@ { "name": "magento/module-catalog-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.3", "require": { "php": "~7.3.0||~7.4.0", "ext-ctype": "*", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-authorization": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-catalog-url-rewrite": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-authorization": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/CatalogInventory/composer.json b/app/code/Magento/CatalogInventory/composer.json index b810e6613aebb..2cfcef2af5c22 100644 --- a/app/code/Magento/CatalogInventory/composer.json +++ b/app/code/Magento/CatalogInventory/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-catalog-inventory", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-quote": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ }, "abandoned": "magento/inventory-composer-metapackage" } + diff --git a/app/code/Magento/CatalogInventoryGraphQl/composer.json b/app/code/Magento/CatalogInventoryGraphQl/composer.json index d6d5b01091341..9138144e82c8f 100644 --- a/app/code/Magento/CatalogInventoryGraphQl/composer.json +++ b/app/code/Magento/CatalogInventoryGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-catalog-inventory-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json index 7c40ca8a9a33a..6ee0ff82822aa 100644 --- a/app/code/Magento/CatalogRule/composer.json +++ b/app/code/Magento/CatalogRule/composer.json @@ -1,29 +1,30 @@ { "name": "magento/module-catalog-rule", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-rule": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-rule": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-import-export": "*", - "magento/module-catalog-rule-sample-data": "*" + "magento/module-import-export": "101.0.*", + "magento/module-catalog-rule-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/CatalogRuleConfigurable/composer.json b/app/code/Magento/CatalogRuleConfigurable/composer.json index 19274fbae146f..5cf21573c66d5 100644 --- a/app/code/Magento/CatalogRuleConfigurable/composer.json +++ b/app/code/Magento/CatalogRuleConfigurable/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-catalog-rule-configurable", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", + "magento/framework": "103.0.*", "magento/magento-composer-installer": "*", - "magento/module-catalog": "*", - "magento/module-catalog-rule": "*", - "magento/module-configurable-product": "*" + "magento/module-catalog": "104.0.*", + "magento/module-catalog-rule": "101.2.*", + "magento/module-configurable-product": "100.4.*" }, "suggest": { - "magento/module-catalog-rule": "*" + "magento/module-catalog-rule": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/CatalogRuleGraphQl/composer.json b/app/code/Magento/CatalogRuleGraphQl/composer.json index c82d9bb20ddab..cea7d57a49753 100644 --- a/app/code/Magento/CatalogRuleGraphQl/composer.json +++ b/app/code/Magento/CatalogRuleGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-catalog-rule-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-catalog-rule": "*" + "magento/module-catalog-rule": "101.2.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/CatalogSearch/composer.json b/app/code/Magento/CatalogSearch/composer.json index 1efece402fd84..42463e82786bd 100644 --- a/app/code/Magento/CatalogSearch/composer.json +++ b/app/code/Magento/CatalogSearch/composer.json @@ -1,32 +1,33 @@ { "name": "magento/module-catalog-search", "description": "Catalog search", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "102.0.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-indexer": "*", - "magento/module-catalog-inventory": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-indexer": "100.4.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-search": "101.1.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -36,3 +37,4 @@ } } } + diff --git a/app/code/Magento/CatalogUrlRewrite/composer.json b/app/code/Magento/CatalogUrlRewrite/composer.json index fe489bcf0a3a0..08bd407c5ea82 100644 --- a/app/code/Magento/CatalogUrlRewrite/composer.json +++ b/app/code/Magento/CatalogUrlRewrite/composer.json @@ -1,29 +1,30 @@ { "name": "magento/module-catalog-url-rewrite", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-url-rewrite": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-url-rewrite": "102.0.*" }, "suggest": { - "magento/module-webapi": "*" + "magento/module-webapi": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/CatalogUrlRewriteGraphQl/composer.json b/app/code/Magento/CatalogUrlRewriteGraphQl/composer.json index 3119eb6667b06..294f9f44cd32a 100644 --- a/app/code/Magento/CatalogUrlRewriteGraphQl/composer.json +++ b/app/code/Magento/CatalogUrlRewriteGraphQl/composer.json @@ -2,23 +2,24 @@ "name": "magento/module-catalog-url-rewrite-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-url-rewrite-graph-ql": "*", - "magento/framework": "*" + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/module-url-rewrite-graph-ql": "100.4.*", + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-catalog-url-rewrite": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-url-rewrite-graph-ql": "*" + "magento/module-catalog-url-rewrite": "100.4.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/module-url-rewrite-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/CatalogWidget/composer.json b/app/code/Magento/CatalogWidget/composer.json index 305fb3ec47ad6..322110f73d804 100644 --- a/app/code/Magento/CatalogWidget/composer.json +++ b/app/code/Magento/CatalogWidget/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-catalog-widget", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-rule": "*", - "magento/module-store": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-rule": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-widget": "101.2.*", + "magento/module-wishlist": "101.2.*", + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/Checkout/Test/Mftf/Test/CheckCheckoutSuccessPageTest/CheckCheckoutSuccessPageAsRegisterCustomerTest.xml b/app/code/Magento/Checkout/Test/Mftf/Test/CheckCheckoutSuccessPageTest/CheckCheckoutSuccessPageAsRegisterCustomerTest.xml index ff0365a2f686c..f7b0fe144327a 100644 --- a/app/code/Magento/Checkout/Test/Mftf/Test/CheckCheckoutSuccessPageTest/CheckCheckoutSuccessPageAsRegisterCustomerTest.xml +++ b/app/code/Magento/Checkout/Test/Mftf/Test/CheckCheckoutSuccessPageTest/CheckCheckoutSuccessPageAsRegisterCustomerTest.xml @@ -15,6 +15,9 @@ <description value="To be sure that other elements of Success page are shown for placed order as registered Customer."/> <severity value="CRITICAL"/> <testCaseId value="MC-16488"/> + <skip> + <issueId value="MQE-2834" /> + </skip> <group value="checkout"/> </annotations> diff --git a/app/code/Magento/Checkout/composer.json b/app/code/Magento/Checkout/composer.json index 2c89c92648456..ef8439762c939 100644 --- a/app/code/Magento/Checkout/composer.json +++ b/app/code/Magento/Checkout/composer.json @@ -1,41 +1,42 @@ { "name": "magento/module-checkout", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-captcha": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-msrp": "*", - "magento/module-page-cache": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-security": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-authorization": "*" + "magento/framework": "103.0.*", + "magento/module-captcha": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-msrp": "100.4.*", + "magento/module-page-cache": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-rule": "101.2.*", + "magento/module-security": "100.4.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-authorization": "100.4.*" }, "suggest": { - "magento/module-cookie": "*" + "magento/module-cookie": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -45,3 +46,4 @@ } } } + diff --git a/app/code/Magento/CheckoutAgreements/composer.json b/app/code/Magento/CheckoutAgreements/composer.json index 1741de53e8637..812782716844c 100644 --- a/app/code/Magento/CheckoutAgreements/composer.json +++ b/app/code/Magento/CheckoutAgreements/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-checkout-agreements", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-checkout": "*", - "magento/module-quote": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/CheckoutAgreementsGraphQl/composer.json b/app/code/Magento/CheckoutAgreementsGraphQl/composer.json index 26b80a4457b4a..ab59af7c0746f 100644 --- a/app/code/Magento/CheckoutAgreementsGraphQl/composer.json +++ b/app/code/Magento/CheckoutAgreementsGraphQl/composer.json @@ -2,19 +2,20 @@ "name": "magento/module-checkout-agreements-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-checkout-agreements": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-checkout-agreements": "100.4.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php index fa873930aaade..e9ca54e31442a 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFiles.php @@ -61,7 +61,7 @@ public function __construct( public function execute() { $resultJson = $this->resultJsonFactory->create(); - + $result = []; if (!$this->getRequest()->isPost()) { $result = ['error' => true, 'message' => __('Wrong request.')]; /** @var \Magento\Framework\Controller\Result\Json $resultJson */ @@ -94,8 +94,7 @@ public function execute() // phpcs:ignore Magento2.Exceptions.ThrowCatch } catch (\Exception $e) { $result = ['error' => true, 'message' => $e->getMessage()]; - - return $resultJson->setData($result); } + return $resultJson->setData($result); } } diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php index 1f991bb47c6fd..5af9963355b1d 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolder.php @@ -60,17 +60,16 @@ public function __construct( */ public function execute() { + $result = []; try { $path = $this->getStorage()->getCmsWysiwygImages()->getCurrentPath(); $this->getStorage()->deleteDirectory($path); - - return $this->resultRawFactory->create(); } catch (\Exception $e) { $result = ['error' => true, 'message' => $e->getMessage()]; - /** @var \Magento\Framework\Controller\Result\Json $resultJson */ - $resultJson = $this->resultJsonFactory->create(); - - return $resultJson->setData($result); } + /** @var \Magento\Framework\Controller\Result\Json $resultJson */ + $resultJson = $this->resultJsonFactory->create(); + + return $resultJson->setData($result); } } diff --git a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php index 9e02c142c7a24..388d0b097450a 100644 --- a/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php +++ b/app/code/Magento/Cms/Model/Wysiwyg/Images/Storage.php @@ -9,8 +9,10 @@ namespace Magento\Cms\Model\Wysiwyg\Images; use Magento\Cms\Helper\Wysiwyg\Images; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; +use Magento\Framework\Exception\LocalizedException; /** * Wysiwyg Images model. @@ -35,6 +37,9 @@ class Storage extends \Magento\Framework\DataObject const THUMB_PLACEHOLDER_PATH_SUFFIX = 'Magento_Cms::images/placeholder_thumbnail.jpg'; + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + /** * Config object * @@ -158,6 +163,21 @@ class Storage extends \Magento\Framework\DataObject */ private $mime; + /** + * @var ScopeConfigInterface + */ + private $coreConfig; + + /** + * @var string + */ + private $allowedPathPattern; + + /** + * @var array + */ + private $allowedDirs; + /** * Construct * @@ -181,6 +201,7 @@ class Storage extends \Magento\Framework\DataObject * @param \Magento\Framework\Filesystem\Io\File|null $ioFile * @param \Psr\Log\LoggerInterface|null $logger * @param \Magento\Framework\File\Mime $mime + * @param ScopeConfigInterface $coreConfig * * @throws \Magento\Framework\Exception\FileSystemException * @SuppressWarnings(PHPMD.ExcessiveParameterList) @@ -205,7 +226,8 @@ public function __construct( \Magento\Framework\Filesystem\DriverInterface $file = null, \Magento\Framework\Filesystem\Io\File $ioFile = null, \Psr\Log\LoggerInterface $logger = null, - \Magento\Framework\File\Mime $mime = null + \Magento\Framework\File\Mime $mime = null, + ScopeConfigInterface $coreConfig = null ) { $this->_session = $session; $this->_backendUrl = $backendUrl; @@ -226,7 +248,31 @@ public function __construct( $this->file = $file ?: ObjectManager::getInstance()->get(\Magento\Framework\Filesystem\Driver\File::class); $this->ioFile = $ioFile ?: ObjectManager::getInstance()->get(\Magento\Framework\Filesystem\Io\File::class); $this->mime = $mime ?: ObjectManager::getInstance()->get(\Magento\Framework\File\Mime::class); + $this->coreConfig = $coreConfig ?: ObjectManager::getInstance()->get(ScopeConfigInterface::class); parent::__construct($data); + $this->initStorage(); + } + + /** + * Initialize storage by creating wysiwyg image folders + * + * @return void + */ + private function initStorage(): void + { + $imageFolders = $this->coreConfig->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + foreach ($imageFolders as $folder) { + try { + $this->_directory->create($folder); + } catch (LocalizedException $e) { + $this->logger->error( + sprintf("Creating media gallery image folder %s caused error: %s", $folder, $e->getMessage()) + ); + } + } } /** @@ -254,6 +300,7 @@ protected function createSubDirectories($path) * Prepare and get conditions for exclude directories * * @return array + * @deprecated */ protected function getConditionsForExcludeDirs() { @@ -281,6 +328,7 @@ protected function getConditionsForExcludeDirs() * @param \Magento\Framework\Data\Collection\Filesystem $collection * @param array $conditions * @return \Magento\Framework\Data\Collection\Filesystem + * @deprecated */ protected function removeItemFromCollection($collection, $conditions) { @@ -318,9 +366,11 @@ public function getDirsCollection($path) ->setCollectRecursively(false) ->setOrder('basename', \Magento\Framework\Data\Collection\Filesystem::SORT_ORDER_ASC); - $conditions = $this->getConditionsForExcludeDirs(); + if (!$this->isDirectoryAllowed($path)) { + $collection->setDirsFilter($this->getAllowedDirMask($path)); + } - return $this->removeItemFromCollection($collection, $conditions); + return $collection; } /** @@ -335,6 +385,8 @@ public function getDirsCollection($path) */ public function getFilesCollection($path, $type = null) { + $collectFiles = $this->isDirectoryAllowed($path); + if ($this->_coreFileStorageDb->checkDbUsage()) { $files = $this->_storageDatabaseFactory->create()->getDirectoryFiles($path); @@ -350,7 +402,7 @@ public function getFilesCollection($path, $type = null) )->setCollectDirs( false )->setCollectFiles( - true + $collectFiles )->setCollectRecursively( false )->setOrder( @@ -436,6 +488,12 @@ public function createDirectory($name, $path) ); } + if (!($this->isDirectoryAllowed(rtrim($path, '/') . '/' . $name))) { + throw new \Magento\Framework\Exception\LocalizedException( + __('We cannot create the folder under the selected directory.') + ); + } + $relativePath = (string) $this->_directory->getRelativePath($path); if (!$this->_directory->isDirectory($relativePath) || !$this->_directory->isWritable($relativePath)) { $path = $this->_cmsWysiwygImages->getStorageRoot(); @@ -477,14 +535,16 @@ public function createDirectory($name, $path) */ public function deleteDirectory($path) { - if ($this->_coreFileStorageDb->checkDbUsage()) { - $this->_directoryDatabaseFactory->create()->deleteDirectory($path); - } - if (!$this->isPathAllowed($path, $this->getConditionsForExcludeDirs())) { + if (!$this->isDirectoryAllowed(dirname($path))) { throw new \Magento\Framework\Exception\LocalizedException( - __('We cannot delete directory %1.', $this->_getRelativePathToRoot($path)) + __('We cannot delete the selected directory.') ); } + + if ($this->_coreFileStorageDb->checkDbUsage()) { + $this->_directoryDatabaseFactory->create()->deleteDirectory($path); + } + try { $this->_deleteByPath($path); $path = $this->getThumbnailRoot() . $this->_getRelativePathToRoot($path); @@ -524,6 +584,11 @@ protected function _deleteByPath($path) */ public function deleteFile($target) { + if (!$this->isDirectoryAllowed(dirname($target))) { + throw new \Magento\Framework\Exception\LocalizedException( + __('We can\'t delete the file right now.') + ); + } $relativePath = $this->_directory->getRelativePath($target); if ($this->_directory->isFile($relativePath)) { $this->_directory->delete($relativePath); @@ -551,9 +616,9 @@ public function deleteFile($target) */ public function uploadFile($targetPath, $type = null) { - if (!$this->isPathAllowed($targetPath, $this->getConditionsForExcludeDirs())) { + if (!($this->isDirectoryAllowed($targetPath))) { throw new \Magento\Framework\Exception\LocalizedException( - __('We can\'t upload the file to current folder right now. Please try another folder.') + __('We can\'t upload the file to the current folder right now. Please try another folder.') ); } /** @var \Magento\MediaStorage\Model\File\Uploader $uploader */ @@ -574,7 +639,7 @@ public function uploadFile($targetPath, $type = null) } // create thumbnail - $this->resizeFile($targetPath . '/' . ltrim($uploader->getUploadedFileName(), '/'), true); + $this->resizeFile(rtrim($targetPath, '/') . '/' . ltrim($uploader->getUploadedFileName(), '/'), true); return $result; } @@ -903,27 +968,105 @@ private function getExtensionsList($type = null): array } /** - * Check if path is not in excluded dirs. + * Check if directory is allowed * - * @param string $path Absolute path - * @param array $conditions Exclude conditions + * @param string $directoryPath Absolute path to a directory * @return bool */ - private function isPathAllowed($path, array $conditions): bool + private function isDirectoryAllowed($directoryPath): bool { - $isAllowed = true; - $regExp = $conditions['reg_exp'] ? '~' . implode('|', array_keys($conditions['reg_exp'])) . '~i' : null; $storageRoot = $this->_cmsWysiwygImages->getStorageRoot(); $storageRootLength = strlen($storageRoot); + $mediaSubPathname = substr($directoryPath, $storageRootLength); + if (!$mediaSubPathname) { + return false; + } + $mediaSubPathname = ltrim($mediaSubPathname, '/'); + return preg_match($this->getAllowedPathPattern(), $mediaSubPathname) == 1; + } - $mediaSubPathname = substr($path, $storageRootLength); - $rootChildParts = explode('/', '/' . ltrim($mediaSubPathname, '/')); + /** + * Get allowed path pattern + * + * @return string + */ + private function getAllowedPathPattern() + { + if (null === $this->allowedPathPattern) { + $mediaGalleryImageFolders = $this->coreConfig->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $regExp = '/^('; + $or = ''; + foreach($mediaGalleryImageFolders as $folder) { + $folderPattern = str_replace('/', '[\/]+', $folder); + $regExp .= $or . $folderPattern . '\b(?!-)(?:\/?[a-zA-Z0-9\-\_]+)*\/?$'; + $or = '|'; + } + $regExp .= ')/'; + $this->allowedPathPattern = $regExp; + } + return $this->allowedPathPattern; + } + + /** + * Get allowed media gallery image folders + * + * example: + * [ + * [0 => 'wysiwyg'], + * [0 => 'catalog', 1 => 'category'] + * ]; + * + * @return array + */ + private function getAllowedDirs(): array + { + if (null == $this->allowedDirs) { + $imageFolders = $this->coreConfig->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + + $this->allowedDirs = []; + foreach ($imageFolders as $folder) { + $this->allowedDirs[] = explode('/', $folder); + } + } + return $this->allowedDirs; + } - if (array_key_exists($rootChildParts[1], $conditions['plain']) - || ($regExp && preg_match($regExp, $path))) { - $isAllowed = false; + /** + * Get allowed dir mask. + * + * @param string $path + * @return string + */ + private function getAllowedDirMask(string $path) + { + $allowedDirs = $this->getAllowedDirs(); + // subfolder level under storage root + $subfolderLevel = 1; + $storageRoot = $this->_cmsWysiwygImages->getStorageRoot(); + $storageRootLength = strlen($storageRoot); + $mediaSubPathname = substr($path, $storageRootLength); + // Filter out the irrelevant allowed dirs for the path from the $allowedDirs array + if ($mediaSubPathname) { + $pathSegments = explode('/', trim($mediaSubPathname, '/')); + foreach ($pathSegments as $index => $pathSegment) { + // Find indexes of the relevant allowed dirs based on the path segment + $subDirKeys = array_keys(array_column($allowedDirs, $index), $pathSegment); + $dirs = []; + // Rebuild the allowed dirs based on the found indexes + foreach ($subDirKeys as $subDirKey) { + $dirs[] = $allowedDirs[$subDirKey]; + } + $allowedDirs = $dirs; + $subfolderLevel++; + } } - return $isAllowed; + return '/^(' . implode('|', array_unique(array_column($allowedDirs, $subfolderLevel - 1))) . ')$/'; } } diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminExpandMediaGalleryFolderActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminExpandMediaGalleryFolderActionGroup.xml new file mode 100644 index 0000000000000..f8a89a8ed3ac9 --- /dev/null +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/AdminExpandMediaGalleryFolderActionGroup.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminExpandMediaGalleryFolderActionGroup"> + <annotations> + <description>Expands the provided Folder Name in the Media Gallery.</description> + </annotations> + <arguments> + <argument name="FolderName" type="string"/> + </arguments> + <conditionalClick selector="{{MediaGallerySection.mediaGalleryFolderTreeIconCollapsed(FolderName)}}" dependentSelector="{{MediaGallerySection.mediaGalleryFolderTreeIconCollapsed(FolderName)}}" visible="true" stepKey="clickFolderIfCollapsed"/> + <waitForPageLoad stepKey="waitForPageLoad"/> + <waitForElement selector="{{MediaGallerySection.mediaGalleryFolderTreeIconExpanded(FolderName)}}" stepKey="waitForExpandedFolder"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeleteFolderActionGroup.xml b/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeleteFolderActionGroup.xml index 4c33b3d8ce35d..58240d2bccd56 100644 --- a/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeleteFolderActionGroup.xml +++ b/app/code/Magento/Cms/Test/Mftf/ActionGroup/DeleteFolderActionGroup.xml @@ -17,8 +17,8 @@ </arguments> <click userInput="{{ImageFolder.name}}" stepKey="clickOnCreatedFolder"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoading"/> - <see selector="{{MediaGallerySection.DeleteFolder}}" userInput="Delete Folder" stepKey="seeDeleteFolderBtn"/> + <waitForPageLoad stepKey="waitForLoading"/> + <waitForText selector="{{MediaGallerySection.DeleteFolder}}" userInput="Delete Folder" stepKey="seeDeleteFolderBtn"/> <click selector="{{MediaGallerySection.DeleteFolder}}" stepKey="clickDeleteFolderBtn"/> <waitForText userInput="OK" stepKey="waitForConfirm"/> <click selector="{{MediaGallerySection.confirmDelete}}" stepKey="confirmDelete"/> diff --git a/app/code/Magento/Cms/Test/Mftf/Section/TinyMCESection/MediaGallerySection.xml b/app/code/Magento/Cms/Test/Mftf/Section/TinyMCESection/MediaGallerySection.xml index b78639545e689..df00dc316856a 100644 --- a/app/code/Magento/Cms/Test/Mftf/Section/TinyMCESection/MediaGallerySection.xml +++ b/app/code/Magento/Cms/Test/Mftf/Section/TinyMCESection/MediaGallerySection.xml @@ -36,5 +36,7 @@ <element name="confirmDelete" type="button" selector=".action-primary.action-accept"/> <element name="imageBlockByName" type="block" selector="//div[@data-row='file'][contains(., '{{imageName}}')]" parameterized="true"/> <element name="insertEditImageModalWindow" type="block" selector=".mce-floatpanel.mce-window[aria-label='Insert/edit image']"/> + <element name="mediaGalleryFolderTreeIconCollapsed" type="button" parameterized="true" selector="//a[text()='{{folderName}}']/parent::li[contains(@class,'jstree-closed')]/ins"/> + <element name="mediaGalleryFolderTreeIconExpanded" type="button" parameterized="true" selector="//a[text()='{{folderName}}']/parent::li[contains(@class,'jstree-open')]/ins"/> </section> </sections> diff --git a/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGBlockTest.xml b/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGBlockTest.xml index aeb950487f29f..974f0446c6f29 100644 --- a/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGBlockTest.xml +++ b/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGBlockTest.xml @@ -37,9 +37,13 @@ <waitForPageLoad stepKey="waitForPageLoad2" /> <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="clickBrowserBtn"/> <actionGroup ref="VerifyMediaGalleryStorageActionsActionGroup" stepKey="VerifyMediaGalleryStorageBtn"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder"> + <comment userInput="BIC workaround" stepKey="navigateToFolder"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> <argument name="FolderName" value="Storage Root"/> </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="CreateImageFolderActionGroup" stepKey="CreateImageFolder"> <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> @@ -60,6 +64,12 @@ <seeElementInDOM selector="{{StorefrontBlockSection.imageSource(ImageUpload.fileName)}}" stepKey="assertMediaSource"/> <after> <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteCreatedFolder"> <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> diff --git a/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGCMSTest.xml b/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGCMSTest.xml index d75341f65d6d3..5ba8b87558d68 100644 --- a/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGCMSTest.xml +++ b/app/code/Magento/Cms/Test/Mftf/Test/AdminAddImageToWYSIWYGCMSTest.xml @@ -25,6 +25,12 @@ </before> <after> <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteCreatedFolder"> <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> @@ -43,8 +49,12 @@ <waitForPageLoad stepKey="waitForPageLoad" /> <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="clickBrowserBtn"/> <actionGroup ref="VerifyMediaGalleryStorageActionsActionGroup" stepKey="VerifyMediaGalleryStorageBtn"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder"> - <argument name="FolderName" value="Storage Root"/> + <comment userInput="BIC workaround" stepKey="navigateToFolder"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> </actionGroup> <actionGroup ref="CreateImageFolderActionGroup" stepKey="CreateImageFolder"> <argument name="ImageFolder" value="ImageFolder"/> diff --git a/app/code/Magento/Cms/Test/Mftf/Test/AdminMediaGalleryPopupUploadImagesWithoutErrorTest.xml b/app/code/Magento/Cms/Test/Mftf/Test/AdminMediaGalleryPopupUploadImagesWithoutErrorTest.xml index 58803533efaf2..ee7dc22f47155 100644 --- a/app/code/Magento/Cms/Test/Mftf/Test/AdminMediaGalleryPopupUploadImagesWithoutErrorTest.xml +++ b/app/code/Magento/Cms/Test/Mftf/Test/AdminMediaGalleryPopupUploadImagesWithoutErrorTest.xml @@ -33,6 +33,17 @@ <comment userInput="Disable WYSIWYG options" stepKey="commentDisableWYSIWYG"/> <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> <deleteData createDataKey="createBlock" stepKey="deleteBlock" /> + <!-- Delete Uploaded Images --> + <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteCreatedFolder"> + <argument name="ImageFolder" value="ImageFolder"/> + </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/> </after> <!--Open created block page and add image--> @@ -40,9 +51,23 @@ <actionGroup ref="NavigateToCreatedCMSBlockPageActionGroup" stepKey="navigateToCreatedCMSBlockPage1"> <argument name="CMSBlockPage" value="$$createBlock$$"/> </actionGroup> - <actionGroup ref="AdminAddImageToCMSBlockContent" stepKey="addImage"> - <argument name="image" value="TestImageNew"/> + <comment userInput="BIC workaround" stepKey="addImage"/> + <actionGroup ref="ClickInsertEditImageTinyMCEButtonActionGroup" stepKey="clickInsertImage"/> + <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="CreateImageFolderActionGroup" stepKey="createImageFolder"> + <argument name="ImageFolder" value="ImageFolder"/> + </actionGroup> + <actionGroup ref="AttachImageActionGroup" stepKey="attachImage"> + <argument name="Image" value="ImageUpload3"/> + </actionGroup> + <actionGroup ref="SaveImageActionGroup" stepKey="insertImage"/> + <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOk"/> <click selector="{{BlockWYSIWYGSection.ShowHideBtn}}" stepKey="clickShowHideBtnFirstTime"/> <click selector="{{BlockWYSIWYGSection.ShowHideBtn}}" stepKey="clickShowHideBtnSecondTime"/> <waitForPageLoad stepKey="waitForPageLoad"/> @@ -53,9 +78,23 @@ <switchToIFrame stepKey="switchBack"/> <!--Add image second time and assert--> <comment userInput="Add image second time and assert" stepKey="commentAddImageAndAssert"/> - <actionGroup ref="AdminAddImageToCMSBlockContent" stepKey="addImageSecondTime"> - <argument name="image" value="MagentoLogo"/> + <comment userInput="BIC workaround" stepKey="addImageSecondTime"/> + <actionGroup ref="ClickInsertEditImageTinyMCEButtonActionGroup" stepKey="clickInsertImage2"/> + <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="openMediaGallery2"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder2"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder2"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToTestFolder2"> + <argument name="FolderName" value="{{ImageFolder.name}}"/> + </actionGroup> + <actionGroup ref="AttachImageActionGroup" stepKey="attachImage2"> + <argument name="Image" value="ImageUpload3"/> </actionGroup> + <actionGroup ref="SaveImageActionGroup" stepKey="insertImage2"/> + <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOk2"/> <switchToIFrame selector="{{BlockContentSection.contentIframe}}" stepKey="switchToContentFrameSecondTime"/> <seeElement selector="{{BlockContentSection.image}}" stepKey="seeImageElement"/> </test> diff --git a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php index b03dbb8f0c888..9067e10253ddb 100644 --- a/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php +++ b/app/code/Magento/Cms/Test/Unit/Model/Wysiwyg/Images/StorageTest.php @@ -14,8 +14,8 @@ use Magento\Cms\Model\Wysiwyg\Images\Storage; use Magento\Cms\Model\Wysiwyg\Images\Storage\Collection as StorageCollection; use Magento\Cms\Model\Wysiwyg\Images\Storage\CollectionFactory; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\DataObject; use Magento\Framework\Exception\LocalizedException; use Magento\Framework\Filesystem; use Magento\Framework\Filesystem\Directory\Write; @@ -49,92 +49,92 @@ class StorageTest extends TestCase /** * @var Storage */ - protected $imagesStorage; + private $imagesStorage; /** * @var MockObject */ - protected $filesystemMock; + private $filesystemMock; /** * @var MockObject */ - protected $adapterFactoryMock; + private $adapterFactoryMock; /** * @var MockObject */ - protected $imageHelperMock; + private $imageHelperMock; /** * @var array() */ - protected $resizeParameters; + private $resizeParameters; /** * @var CollectionFactory|MockObject */ - protected $storageCollectionFactoryMock; + private $storageCollectionFactoryMock; /** * @var FileFactory|MockObject */ - protected $storageFileFactoryMock; + private $storageFileFactoryMock; /** * @var DatabaseFactory|MockObject */ - protected $storageDatabaseFactoryMock; + private $storageDatabaseFactoryMock; /** * @var \Magento\MediaStorage\Model\File\Storage\Directory\DatabaseFactory|MockObject */ - protected $directoryDatabaseFactoryMock; + private $directoryDatabaseFactoryMock; /** * @var Database|MockObject */ - protected $directoryCollectionMock; + private $directoryCollectionMock; /** * @var UploaderFactory|MockObject */ - protected $uploaderFactoryMock; + private $uploaderFactoryMock; /** * @var Session|MockObject */ - protected $sessionMock; + private $sessionMock; /** * @var Url|MockObject */ - protected $backendUrlMock; + private $backendUrlMock; /** * @var Write|MockObject */ - protected $directoryMock; + private $directoryMock; /** * @var DriverInterface|MockObject */ - protected $driverMock; + private $driverMock; /** * @var \Magento\MediaStorage\Helper\File\Storage\Database|MockObject */ - protected $coreFileStorageMock; + private $coreFileStorageMock; /** * @var ObjectManager|MockObject */ - protected $objectManagerHelper; + private $objectManagerHelper; /** * @var File|MockObject */ - protected $ioFileMock; + private $ioFileMock; /** * @var \Magento\Framework\Filesystem\Driver\File|MockObject @@ -148,6 +148,11 @@ class StorageTest extends TestCase 'gif' => 'image/png', ]; + /** + * @var \Magento\Framework\App\Config\ScopeConfigInterface|MockObject + */ + private $coreConfigMock; + /** * @return void * @SuppressWarnings(PHPMD.ExcessiveMethodLength) @@ -252,6 +257,21 @@ function ($path) { 'image_allowed' => $this->allowedImageExtensions, ]; + $this->coreConfigMock = $this->getMockBuilder(ScopeConfigInterface::class) + ->disableOriginalConstructor() + ->getMock(); + $config = [ + 'target', + 'folder1', + 'folder2/subfolder21', + 'folder2/subfolder22', + 'folder3/subfolder31/subfolder32' + ]; + $this->coreConfigMock->expects($this->any()) + ->method('getValue') + ->with('system/media_storage_configuration/allowed_resources/media_gallery_image_folders') + ->willReturn($config); + $this->imagesStorage = $this->objectManagerHelper->getObject( Storage::class, [ @@ -275,7 +295,8 @@ function ($path) { ], 'data' => [], 'file' => $this->fileMock, - 'ioFile' => $this->ioFileMock + 'ioFile' => $this->ioFileMock, + 'coreConfig' => $this->coreConfigMock ] ); } @@ -302,9 +323,7 @@ public function testGetResizeHeight() public function testDeleteDirectoryOverRoot() { $this->expectException('Magento\Framework\Exception\LocalizedException'); - $this->expectExceptionMessage('Directory /storage/some/another/dir is not under storage root path.'); - $this->driverMock->expects($this->atLeastOnce())->method('getRealPathSafety')->willReturnArgument(0); - $this->directoryMock->expects($this->atLeastOnce())->method('getAbsolutePath')->willReturnArgument(0); + $this->expectExceptionMessage('We cannot delete the selected directory.'); $this->imagesStorage->deleteDirectory(self::INVALID_DIRECTORY_OVER_ROOT); } @@ -314,9 +333,7 @@ public function testDeleteDirectoryOverRoot() public function testDeleteRootDirectory() { $this->expectException('Magento\Framework\Exception\LocalizedException'); - $this->expectExceptionMessage('We can\'t delete root directory /storage/root/dir right now.'); - $this->driverMock->expects($this->atLeastOnce())->method('getRealPathSafety')->willReturnArgument(0); - $this->directoryMock->expects($this->atLeastOnce())->method('getAbsolutePath')->willReturnArgument(0); + $this->expectExceptionMessage('We cannot delete the selected directory.'); $this->imagesStorage->deleteDirectory(self::STORAGE_ROOT_DIR); } @@ -341,7 +358,11 @@ public function testGetDirsCollectionCreateSubDirectories() ->method('create') ->with(rtrim(self::STORAGE_ROOT_DIR, '/') . '/' . $directoryName); - $this->generalTestGetDirsCollection(self::STORAGE_ROOT_DIR); + $this->generalTestGetDirsCollection( + self::STORAGE_ROOT_DIR, + 1, + '/^(target|folder1|folder2|folder3)$/' + ); } /** @@ -351,45 +372,9 @@ public function testGetDirsCollectionCreateSubDirectories() * @param array $expectedRemoveKeys * @dataProvider dirsCollectionDataProvider */ - public function testGetDirsCollection($exclude, $include, $fileNames, $expectedRemoveKeys) + public function testGetDirsCollection($path, $callNum, $dirsFilter='') { - $this->imagesStorage = $this->objectManagerHelper->getObject( - Storage::class, - [ - 'session' => $this->sessionMock, - 'backendUrl' => $this->backendUrlMock, - 'cmsWysiwygImages' => $this->imageHelperMock, - 'coreFileStorageDb' => $this->coreFileStorageMock, - 'filesystem' => $this->filesystemMock, - 'imageFactory' => $this->adapterFactoryMock, - 'assetRepo' => $this->createMock(Repository::class), - 'storageCollectionFactory' => $this->storageCollectionFactoryMock, - 'storageFileFactory' => $this->storageFileFactoryMock, - 'storageDatabaseFactory' => $this->storageDatabaseFactoryMock, - 'directoryDatabaseFactory' => $this->directoryDatabaseFactoryMock, - 'uploaderFactory' => $this->uploaderFactoryMock, - 'resizeParameters' => $this->resizeParameters, - 'dirs' => [ - 'exclude' => $exclude, - 'include' => $include, - ], - ] - ); - - $collection = []; - foreach ($fileNames as $filename) { - /** @var DataObject|MockObject $objectMock */ - $objectMock = $this->getMockBuilder(DataObject::class) - ->addMethods(['getFilename']) - ->disableOriginalConstructor() - ->getMock(); - $objectMock->expects($this->any()) - ->method('getFilename') - ->willReturn(self::STORAGE_ROOT_DIR . $filename); - $collection[] = $objectMock; - } - - $this->generalTestGetDirsCollection(self::STORAGE_ROOT_DIR, $collection, $expectedRemoveKeys); + $this->generalTestGetDirsCollection($path, $callNum, $dirsFilter); } /** @@ -399,48 +384,36 @@ public function dirsCollectionDataProvider() { return [ [ - 'exclude' => [ - ['name' => 'dress'], - ], - 'include' => [], - 'filenames' => [], - 'expectRemoveKeys' => [], + 'path' => self::STORAGE_ROOT_DIR, + 'callNum' => 1, + 'dirsFilter' => '/^(target|folder1|folder2|folder3)$/' ], [ - 'exclude' => [], - 'include' => [], - 'filenames' => [ - '/dress', - ], - 'expectRemoveKeys' => [], + 'path' => self::STORAGE_ROOT_DIR . 'target', + 'callNum' => 0, ], [ - 'exclude' => [ - ['name' => 'dress'], - ], - 'include' => [], - 'filenames' => [ - '/collection', - ], - 'expectRemoveKeys' => [], + 'path' => self::STORAGE_ROOT_DIR . 'folder1/subfolder', + 'callNum' => 0, ], [ - 'exclude' => [ - ['name' => 'gear', 'regexp' => 1], - ['name' => 'home', 'regexp' => 1], - ['name' => 'collection'], - ['name' => 'dress'], - ], - 'include' => [ - ['name' => 'home', 'regexp' => 1], - ['name' => 'collection'], - ], - 'filenames' => [ - '/dress', - '/collection', - '/gear', - ], - 'expectRemoveKeys' => [[0], [2]], + 'path' => self::STORAGE_ROOT_DIR . 'folder2', + 'callNum' => 1, + 'dirsFilter' => '/^(subfolder21|subfolder22)$/' + ], + [ + 'path' => self::STORAGE_ROOT_DIR . 'folder3/subfolder31', + 'callNum' => 1, + 'dirsFilter' => '/^(subfolder32)$/' + ], + [ + 'path' => self::STORAGE_ROOT_DIR . 'folder3/subfolder31/subfolder32', + 'callNum' => 0, + ], + [ + 'path' => self::STORAGE_ROOT_DIR . 'unknown', + 'callNum' => 1, + 'dirsFilter' => '/^()$/' ], ]; } @@ -449,10 +422,11 @@ public function dirsCollectionDataProvider() * General conditions for testGetDirsCollection tests * * @param string $path - * @param array $collectionArray - * @param array $expectedRemoveKeys + * @param int $callNum + * @param string $dirsFilter + * @throws \Exception */ - protected function generalTestGetDirsCollection($path, $collectionArray = [], $expectedRemoveKeys = []) + protected function generalTestGetDirsCollection(string $path, int $callNum, string $dirsFilter) { /** @var StorageCollection|MockObject $storageCollectionMock */ $storageCollectionMock = $this->getMockBuilder(\Magento\Cms\Model\Wysiwyg\Images\Storage\Collection::class) @@ -474,12 +448,9 @@ protected function generalTestGetDirsCollection($path, $collectionArray = [], $e ->method('setOrder') ->with('basename', \Magento\Framework\Data\Collection\Filesystem::SORT_ORDER_ASC) ->willReturnSelf(); - $storageCollectionMock->expects($this->once()) - ->method('getIterator') - ->willReturn(new \ArrayIterator($collectionArray)); - $storageCollectionInvMock = $storageCollectionMock->expects($this->exactly(count($expectedRemoveKeys))) - ->method('removeItemByKey'); - call_user_func_array([$storageCollectionInvMock, 'withConsecutive'], $expectedRemoveKeys); + $storageCollectionMock->expects($this->exactly($callNum)) + ->method('setDirsFilter') + ->with($dirsFilter); $this->storageCollectionFactoryMock->expects($this->once()) ->method('create') diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json index 8d69320102b5e..947e0d9d56a3e 100644 --- a/app/code/Magento/Cms/composer.json +++ b/app/code/Magento/Cms/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-cms", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "104.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-email": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-variable": "*", - "magento/module-widget": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-email": "101.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-variable": "100.4.*", + "magento/module-widget": "101.2.*" }, "suggest": { - "magento/module-cms-sample-data": "*" + "magento/module-cms-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/Cms/etc/config.xml b/app/code/Magento/Cms/etc/config.xml index c1b3717386454..36ebf2b488940 100644 --- a/app/code/Magento/Cms/etc/config.xml +++ b/app/code/Magento/Cms/etc/config.xml @@ -30,7 +30,9 @@ <system> <media_storage_configuration> <allowed_resources> - <wysiwyg_image_folder>wysiwyg</wysiwyg_image_folder> + <media_gallery_image_folders> + <wysiwyg_image_folder>wysiwyg</wysiwyg_image_folder> + </media_gallery_image_folders> <preview_folder>.thumbs</preview_folder> </allowed_resources> </media_storage_configuration> diff --git a/app/code/Magento/Cms/i18n/en_US.csv b/app/code/Magento/Cms/i18n/en_US.csv index b860a8fb1041e..7b6d8cf205021 100644 --- a/app/code/Magento/Cms/i18n/en_US.csv +++ b/app/code/Magento/Cms/i18n/en_US.csv @@ -79,7 +79,7 @@ Pages,Pages "Please rename the folder using only Latin letters, numbers, underscores and dashes.","Please rename the folder using only Latin letters, numbers, underscores and dashes." "We found a directory with the same name. Please try another folder name.","We found a directory with the same name. Please try another folder name." "We cannot create a new directory.","We cannot create a new directory." -"We cannot delete directory %1.","We cannot delete directory %1." +"We cannot delete the selected directory.","We cannot delete the selected directory." "We can't upload the file right now.","We can't upload the file right now." "We can't delete root directory %1 right now.","We can't delete root directory %1 right now." "Directory %1 is not under storage root path.","Directory %1 is not under storage root path." @@ -157,3 +157,6 @@ Enable,Enable "Custom Theme","Custom Theme" "Custom Layout","Custom Layout" "Edit Page Design","Edit Page Design" +"We cannot create the folder under the selected directory.","We cannot create the folder under the selected directory." +"We can't delete the file right now.", "We can't delete the file right now." +"We can't upload the file to the current folder right now. Please try another folder.","We can't upload the file to the current folder right now. Please try another folder." diff --git a/app/code/Magento/CmsGraphQl/composer.json b/app/code/Magento/CmsGraphQl/composer.json index 0e4c849fe8344..92b207126b8c1 100644 --- a/app/code/Magento/CmsGraphQl/composer.json +++ b/app/code/Magento/CmsGraphQl/composer.json @@ -2,22 +2,23 @@ "name": "magento/module-cms-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-widget": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-widget": "101.2.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-graph-ql-cache": "*", - "magento/module-store-graph-ql": "*" + "magento/module-graph-ql": "100.4.*", + "magento/module-graph-ql-cache": "100.4.*", + "magento/module-store-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/CmsUrlRewrite/composer.json b/app/code/Magento/CmsUrlRewrite/composer.json index 80e150771975f..dfcf8353d1706 100644 --- a/app/code/Magento/CmsUrlRewrite/composer.json +++ b/app/code/Magento/CmsUrlRewrite/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-cms-url-rewrite", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-store": "*", - "magento/module-url-rewrite": "*" + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-store": "101.1.*", + "magento/module-url-rewrite": "102.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/CmsUrlRewriteGraphQl/composer.json b/app/code/Magento/CmsUrlRewriteGraphQl/composer.json index fc393fdceadb5..bd3344fbeef5f 100644 --- a/app/code/Magento/CmsUrlRewriteGraphQl/composer.json +++ b/app/code/Magento/CmsUrlRewriteGraphQl/composer.json @@ -2,22 +2,23 @@ "name": "magento/module-cms-url-rewrite-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-store": "*", - "magento/module-url-rewrite-graph-ql": "*", - "magento/module-cms-graph-ql": "*" + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-store": "101.1.*", + "magento/module-url-rewrite-graph-ql": "100.4.*", + "magento/module-cms-graph-ql": "100.4.*" }, "suggest": { - "magento/module-cms-url-rewrite": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-cms-url-rewrite": "100.4.*", + "magento/module-catalog-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/CompareListGraphQl/composer.json b/app/code/Magento/CompareListGraphQl/composer.json index dd9c998857258..347a0fce9b266 100644 --- a/app/code/Magento/CompareListGraphQl/composer.json +++ b/app/code/Magento/CompareListGraphQl/composer.json @@ -2,16 +2,17 @@ "name": "magento/module-compare-list-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/Config/composer.json b/app/code/Magento/Config/composer.json index 63eca42a6ac48..81fde67e56c3f 100644 --- a/app/code/Magento/Config/composer.json +++ b/app/code/Magento/Config/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-config", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cron": "*", - "magento/module-deploy": "*", - "magento/module-directory": "*", - "magento/module-email": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-cron": "100.4.*", + "magento/module-deploy": "100.4.*", + "magento/module-directory": "100.4.*", + "magento/module-email": "101.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/ConfigurableImportExport/composer.json b/app/code/Magento/ConfigurableImportExport/composer.json index e27510166a421..65dba557c3dc3 100644 --- a/app/code/Magento/ConfigurableImportExport/composer.json +++ b/app/code/Magento/ConfigurableImportExport/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-configurable-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-configurable-product": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-configurable-product": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json index 7b1b1a18416f5..98422ca02e281 100644 --- a/app/code/Magento/ConfigurableProduct/composer.json +++ b/app/code/Magento/ConfigurableProduct/composer.json @@ -1,38 +1,39 @@ { "name": "magento/module-configurable-product", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-msrp": "*", - "magento/module-webapi": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-product-video": "*", - "magento/module-configurable-sample-data": "*", - "magento/module-product-links-sample-data": "*", - "magento/module-tax": "*" + "magento/module-msrp": "100.4.*", + "magento/module-webapi": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-rule": "101.2.*", + "magento/module-product-video": "100.4.*", + "magento/module-configurable-sample-data": "Sample Data version: 100.4.*", + "magento/module-product-links-sample-data": "Sample Data version: 100.4.*", + "magento/module-tax": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -42,3 +43,4 @@ } } } + diff --git a/app/code/Magento/ConfigurableProductGraphQl/composer.json b/app/code/Magento/ConfigurableProductGraphQl/composer.json index a6e1d1c822435..d4038d5dc831f 100644 --- a/app/code/Magento/ConfigurableProductGraphQl/composer.json +++ b/app/code/Magento/ConfigurableProductGraphQl/composer.json @@ -2,21 +2,22 @@ "name": "magento/module-configurable-product-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-catalog": "*", - "magento/module-configurable-product": "*", - "magento/module-graph-ql": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-quote": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-catalog-inventory": "*", - "magento/framework": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-catalog": "104.0.*", + "magento/module-configurable-product": "100.4.*", + "magento/module-graph-ql": "100.4.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-quote-graph-ql": "100.4.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/ConfigurableProductSales/composer.json b/app/code/Magento/ConfigurableProductSales/composer.json index e72db7424a6cc..4879edadd002b 100644 --- a/app/code/Magento/ConfigurableProductSales/composer.json +++ b/app/code/Magento/ConfigurableProductSales/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-configurable-product-sales", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-configurable-product": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-configurable-product": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Contact/composer.json b/app/code/Magento/Contact/composer.json index 1600c1e0c2543..e50b3b79e5012 100644 --- a/app/code/Magento/Contact/composer.json +++ b/app/code/Magento/Contact/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-contact", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Cookie/composer.json b/app/code/Magento/Cookie/composer.json index 5a47a5c7993bf..d67244c1756c1 100644 --- a/app/code/Magento/Cookie/composer.json +++ b/app/code/Magento/Cookie/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-cookie", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-backend": "*" + "magento/module-backend": "102.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Cron/composer.json b/app/code/Magento/Cron/composer.json index 00da35140744b..90b0804daa256 100644 --- a/app/code/Magento/Cron/composer.json +++ b/app/code/Magento/Cron/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-cron", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Csp/composer.json b/app/code/Magento/Csp/composer.json index 352735712b1b0..4ede90fb4e7cf 100644 --- a/app/code/Magento/Csp/composer.json +++ b/app/code/Magento/Csp/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-csp", "description": "CSP module enables Content Security Policies for Magento", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/Csp/etc/config.xml b/app/code/Magento/Csp/etc/config.xml index 07761995fdbca..f0a70946b49a3 100644 --- a/app/code/Magento/Csp/etc/config.xml +++ b/app/code/Magento/Csp/etc/config.xml @@ -106,7 +106,7 @@ <frame-ancestors> <policy_id>frame-ancestors</policy_id> <self>1</self> - <inline>1</inline> + <inline>0</inline> <eval>0</eval> <dynamic>0</dynamic> </frame-ancestors> diff --git a/app/code/Magento/CurrencySymbol/composer.json b/app/code/Magento/CurrencySymbol/composer.json index 746cfa0ed033d..e0a3a3d655de2 100644 --- a/app/code/Magento/CurrencySymbol/composer.json +++ b/app/code/Magento/CurrencySymbol/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-currency-symbol", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-page-cache": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-page-cache": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Customer/Api/SessionCleanerInterface.php b/app/code/Magento/Customer/Api/SessionCleanerInterface.php index d8534f8b34e83..eb24712105f96 100644 --- a/app/code/Magento/Customer/Api/SessionCleanerInterface.php +++ b/app/code/Magento/Customer/Api/SessionCleanerInterface.php @@ -13,7 +13,7 @@ interface SessionCleanerInterface { /** - * Destroy all active customer sessions related to given customer except current session. + * Destroy all active customer sessions related to given customer id, including current session. * * @param int $customerId * @return void diff --git a/app/code/Magento/Customer/Controller/Account/EditPost.php b/app/code/Magento/Customer/Controller/Account/EditPost.php index 901036302c779..d616c03be6bd0 100644 --- a/app/code/Magento/Customer/Controller/Account/EditPost.php +++ b/app/code/Magento/Customer/Controller/Account/EditPost.php @@ -4,6 +4,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Customer\Controller\Account; @@ -226,7 +227,7 @@ public function execute() try { // whether a customer enabled change email option - $this->processChangeEmailRequest($currentCustomerDataObject); + $isEmailChanged = $this->processChangeEmailRequest($currentCustomerDataObject); // whether a customer enabled change password option $isPasswordChanged = $this->changeCustomerPassword($currentCustomerDataObject->getEmail()); @@ -242,8 +243,8 @@ public function execute() ); $this->dispatchSuccessEvent($customerCandidateDataObject); $this->messageManager->addSuccessMessage(__('You saved the account information.')); - // logout from current session if password changed. - if ($isPasswordChanged) { + // logout from current session if password or email changed. + if ($isPasswordChanged || $isEmailChanged) { $this->session->logout(); $this->session->start(); return $resultRedirect->setPath('customer/account/login'); @@ -364,7 +365,7 @@ protected function changeCustomerPassword($email) * Process change email request * * @param CustomerInterface $currentCustomerDataObject - * @return void + * @return bool * @throws InvalidEmailOrPasswordException * @throws UserLockedException */ @@ -377,13 +378,15 @@ private function processChangeEmailRequest(CustomerInterface $currentCustomerDat $currentCustomerDataObject->getId(), $this->getRequest()->getPost('current_password') ); - $this->sessionCleaner->clearFor($currentCustomerDataObject->getId()); + $this->sessionCleaner->clearFor((int) $currentCustomerDataObject->getId()); + return true; } catch (InvalidEmailOrPasswordException $e) { throw new InvalidEmailOrPasswordException( __("The password doesn't match this account. Verify the password and try again.") ); } } + return false; } /** diff --git a/app/code/Magento/Customer/Model/ResourceModel/Customer.php b/app/code/Magento/Customer/Model/ResourceModel/Customer.php index 6ebd6b9410a0c..804f5dbb5e05c 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Customer.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Customer.php @@ -3,14 +3,15 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Customer\Model\ResourceModel; use Magento\Customer\Model\AccountConfirmation; use Magento\Customer\Model\Customer\NotificationStorage; use Magento\Framework\App\ObjectManager; -use Magento\Framework\Validator\Exception as ValidatorException; use Magento\Framework\Exception\AlreadyExistsException; +use Magento\Framework\Validator\Exception as ValidatorException; /** * Customer entity resource model @@ -403,4 +404,45 @@ public function changeResetPasswordLinkToken(\Magento\Customer\Model\Customer $c } return $this; } + + /** + * Gets the session cut off timestamp string for provided customer id. + * + * @param int $customerId + * @return int|null + */ + public function findSessionCutOff(int $customerId): ?int + { + $connection = $this->getConnection(); + $select = $connection->select()->from( + ['customer_table' => $this->getTable('customer_entity')], + ['session_cutoff' => 'customer_table.session_cutoff'] + )->where( + 'entity_id =?', + $customerId + )->limit( + 1 + ); + $lookup = $connection->fetchRow($select); + if (empty($lookup) || $lookup['session_cutoff'] == null) { + return null; + } + return strtotime($lookup['session_cutoff']); + } + + /** + * Update session cutoff column value for customer + * + * @param int $customerId + * @param int $timestamp + * @return void + */ + public function updateSessionCutOff(int $customerId, int $timestamp): void + { + $this->getConnection()->update( + $this->getTable('customer_entity'), + ['session_cutoff' => $this->dateTime->formatDate($timestamp)], + $this->getConnection()->quoteInto('entity_id = ?', $customerId) + ); + } } diff --git a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php index c3a82307ba465..c9ec3de19c244 100644 --- a/app/code/Magento/Customer/Model/ResourceModel/Visitor.php +++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Customer\Model\ResourceModel; @@ -59,7 +60,6 @@ protected function _prepareDataForSave(\Magento\Framework\Model\AbstractModel $v { return [ 'customer_id' => $visitor->getCustomerId(), - 'session_id' => $visitor->getSessionId(), 'last_visit_at' => $visitor->getLastVisitAt() ]; } @@ -95,4 +95,45 @@ public function clean(\Magento\Customer\Model\Visitor $object) return $this; } + + /** + * Gets created at value for the visitor id. + * + * @param int $visitorId + * @return int|null + */ + public function fetchCreatedAt(int $visitorId): ?int + { + $connection = $this->getConnection(); + $select = $connection->select()->from( + ['visitor_table' => $this->getTable('customer_visitor')], + ['created_at' => 'visitor_table.created_at'] + )->where( + 'visitor_table.visitor_id = ?', + (string) $visitorId + )->limit( + 1 + ); + $lookup = $connection->fetchRow($select); + if (empty($lookup) || $lookup['created_at'] == null) { + return null; + } + return strtotime($lookup['created_at']); + } + + /** + * Update visitor session created at column value + * + * @param int $visitorId + * @param int $timestamp + * @return void + */ + public function updateCreatedAt(int $visitorId, int $timestamp): void + { + $this->getConnection()->update( + $this->getTable('customer_visitor'), + ['created_at' => $this->dateTime->formatDate($timestamp)], + $this->getConnection()->quoteInto('visitor_id = ?', $visitorId) + ); + } } diff --git a/app/code/Magento/Customer/Model/Session.php b/app/code/Magento/Customer/Model/Session.php index 55e31cb4555b4..29659e0e1cd61 100644 --- a/app/code/Magento/Customer/Model/Session.php +++ b/app/code/Magento/Customer/Model/Session.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Customer\Model; use Magento\Customer\Api\CustomerRepositoryInterface; @@ -11,6 +13,7 @@ use Magento\Customer\Model\Config\Share; use Magento\Customer\Model\ResourceModel\Customer as ResourceCustomer; use Magento\Framework\App\ObjectManager; +use Magento\Framework\Session\Generic; /** * Customer session model @@ -70,7 +73,7 @@ class Session extends \Magento\Framework\Session\SessionManager protected $_configShare; /** - * @var \Magento\Framework\Session\Generic + * @var Generic */ protected $_session; @@ -132,7 +135,7 @@ class Session extends \Magento\Framework\Session\SessionManager * @param ResourceCustomer $customerResource * @param CustomerFactory $customerFactory * @param \Magento\Framework\UrlFactory $urlFactory - * @param \Magento\Framework\Session\Generic $session + * @param Generic $session * @param \Magento\Framework\Event\ManagerInterface $eventManager * @param \Magento\Framework\App\Http\Context $httpContext * @param CustomerRepositoryInterface $customerRepository @@ -158,7 +161,7 @@ public function __construct( ResourceCustomer $customerResource, CustomerFactory $customerFactory, \Magento\Framework\UrlFactory $urlFactory, - \Magento\Framework\Session\Generic $session, + Generic $session, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\Framework\App\Http\Context $httpContext, CustomerRepositoryInterface $customerRepository, @@ -176,6 +179,10 @@ public function __construct( $this->customerRepository = $customerRepository; $this->_eventManager = $eventManager; $this->_httpContext = $httpContext; + $this->groupManagement = $groupManagement; + $this->response = $response; + $this->accountConfirmation = $accountConfirmation ?: ObjectManager::getInstance() + ->get(AccountConfirmation::class); parent::__construct( $request, $sidResolver, @@ -187,10 +194,6 @@ public function __construct( $cookieMetadataFactory, $appState ); - $this->groupManagement = $groupManagement; - $this->response = $response; - $this->accountConfirmation = $accountConfirmation ?: ObjectManager::getInstance() - ->get(AccountConfirmation::class); $this->_eventManager->dispatch('customer_session_init', ['customer_session' => $this]); } @@ -510,6 +513,7 @@ public function logout() * * @param bool|null $loginUrl * @return bool + * @throws \Magento\Framework\Exception\SessionException */ public function authenticate($loginUrl = null) { diff --git a/app/code/Magento/Customer/Model/Session/SessionCleaner.php b/app/code/Magento/Customer/Model/Session/SessionCleaner.php index 5118c20329aaa..891656f59d28d 100644 --- a/app/code/Magento/Customer/Model/Session/SessionCleaner.php +++ b/app/code/Magento/Customer/Model/Session/SessionCleaner.php @@ -8,14 +8,14 @@ namespace Magento\Customer\Model\Session; use Magento\Customer\Api\SessionCleanerInterface; +use Magento\Customer\Model\ResourceModel\Customer as CustomerResourceModel; +use Magento\Customer\Model\ResourceModel\Visitor as VisitorResourceModel; use Magento\Customer\Model\ResourceModel\Visitor\CollectionFactory as VisitorCollectionFactory; use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Intl\DateTimeFactory; -use Magento\Framework\Session\Config; use Magento\Framework\Session\SaveHandlerInterface; use Magento\Framework\Session\SessionManagerInterface; -use Magento\Framework\Stdlib\DateTime; -use Magento\Store\Model\ScopeInterface; /** * Deletes all session data which relates to customer, including current session data. @@ -50,20 +50,43 @@ class SessionCleaner implements SessionCleanerInterface private $saveHandler; /** - * @inheritdoc + * @var CustomerResourceModel + */ + private $customerResourceModel; + + /** + * @var VisitorResourceModel + */ + private $visitorResourceModel; + + /** + * @param ScopeConfigInterface $scopeConfig + * @param DateTimeFactory $dateTimeFactory + * @param VisitorCollectionFactory $visitorCollectionFactory + * @param SessionManagerInterface $sessionManager + * @param SaveHandlerInterface $saveHandler + * @param CustomerResourceModel|null $customerResourceModel + * @param VisitorResourceModel|null $visitorResourceModel */ public function __construct( ScopeConfigInterface $scopeConfig, DateTimeFactory $dateTimeFactory, VisitorCollectionFactory $visitorCollectionFactory, SessionManagerInterface $sessionManager, - SaveHandlerInterface $saveHandler + SaveHandlerInterface $saveHandler, + CustomerResourceModel $customerResourceModel = null, + VisitorResourceModel $visitorResourceModel = null ) { $this->scopeConfig = $scopeConfig; $this->dateTimeFactory = $dateTimeFactory; $this->visitorCollectionFactory = $visitorCollectionFactory; $this->sessionManager = $sessionManager; $this->saveHandler = $saveHandler; + $this->customerResourceModel = $customerResourceModel + ?: ObjectManager::getInstance()->get(CustomerResourceModel::class); + + $this->visitorResourceModel = $visitorResourceModel + ?: ObjectManager::getInstance()->get(VisitorResourceModel::class); } /** @@ -71,25 +94,13 @@ public function __construct( */ public function clearFor(int $customerId): void { - $sessionLifetime = $this->scopeConfig->getValue( - Config::XML_PATH_COOKIE_LIFETIME, - ScopeInterface::SCOPE_STORE - ); $dateTime = $this->dateTimeFactory->create(); - $activeSessionsTime = $dateTime->setTimestamp($dateTime->getTimestamp() - $sessionLifetime) - ->format(DateTime::DATETIME_PHP_FORMAT); - /** @var \Magento\Customer\Model\ResourceModel\Visitor\Collection $visitorCollection */ - $visitorCollection = $this->visitorCollectionFactory->create(); - $visitorCollection->addFieldToFilter('customer_id', $customerId); - $visitorCollection->addFieldToFilter('last_visit_at', ['from' => $activeSessionsTime]); - $visitorCollection->addFieldToFilter('session_id', ['neq' => $this->sessionManager->getSessionId()]); - - /** @var \Magento\Customer\Model\Visitor $visitor */ - foreach ($visitorCollection->getItems() as $visitor) { - $sessionId = $visitor->getSessionId(); - $this->sessionManager->start(); - $this->saveHandler->destroy($sessionId); - $this->sessionManager->writeClose(); + $timestamp = $dateTime->getTimestamp(); + $this->customerResourceModel->updateSessionCutOff($customerId, $timestamp); + if ($this->sessionManager->getVisitorData() !== null) { + $visitorId = $this->sessionManager->getVisitorData()['visitor_id']; + $this->visitorResourceModel->updateCreatedAt((int) $visitorId, $timestamp + 1); } } } + diff --git a/app/code/Magento/Customer/Model/Session/Validators/CutoffValidator.php b/app/code/Magento/Customer/Model/Session/Validators/CutoffValidator.php new file mode 100644 index 0000000000000..7f7a0d26f0597 --- /dev/null +++ b/app/code/Magento/Customer/Model/Session/Validators/CutoffValidator.php @@ -0,0 +1,83 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +namespace Magento\Customer\Model\Session\Validators; + +use Magento\Customer\Model\ResourceModel\Customer as ResourceCustomer; +use Magento\Customer\Model\ResourceModel\Visitor as ResourceVisitor; +use Magento\Framework\Exception\SessionException; +use Magento\Framework\Phrase; +use Magento\Framework\Session\SessionManagerInterface; +use Magento\Framework\Session\ValidatorInterface; +use Magento\Framework\Session\Generic; + +/** + * Session Validator + */ +class CutoffValidator implements ValidatorInterface +{ + /** + * @var ResourceCustomer + */ + private $customerResource; + + /** + * @var ResourceVisitor + */ + private $visitorResource; + + /** + * @var Generic + */ + private $visitorSession; + + /** + * Cutoff validator constructor. + * + * @param ResourceCustomer $customerResource + * @param ResourceVisitor $visitorResource + * @param Generic $visitorSession + */ + public function __construct( + ResourceCustomer $customerResource, + ResourceVisitor $visitorResource, + Generic $visitorSession + ) { + $this->customerResource = $customerResource; + $this->visitorResource = $visitorResource; + $this->visitorSession = $visitorSession; + } + + /** + * Validate session + * + * @param SessionManagerInterface $session + * @return void + * @throws SessionException + */ + public function validate(SessionManagerInterface $session): void + { + try { + $visitor = $this->visitorSession->getVisitorData(); + if ($visitor !== null + && array_key_exists('customer_id', $visitor) + && array_key_exists('visitor_id', $visitor) + ) { + $cutoff = $this->customerResource->findSessionCutOff((int) $visitor['customer_id']); + $sessionCreationTime = $this->visitorResource->fetchCreatedAt((int) $visitor['visitor_id']); + if (isset($cutoff, $sessionCreationTime) && $cutoff > $sessionCreationTime) { + throw new SessionException( + new Phrase('The session has expired, please login again.') + ); + } + } + } catch (SessionException $e) { + $session->destroy(['clear_storage' => false]); + // throw core session exception + throw $e; + } + } +} diff --git a/app/code/Magento/Customer/Model/Visitor.php b/app/code/Magento/Customer/Model/Visitor.php index 99dec57b89d15..9bc7d65f75ee3 100644 --- a/app/code/Magento/Customer/Model/Visitor.php +++ b/app/code/Magento/Customer/Model/Visitor.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Customer\Model; @@ -103,7 +104,6 @@ class Visitor extends AbstractModel * @param array $ignores * @param array $data * @param RequestSafetyInterface|null $requestSafety - * * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( @@ -195,6 +195,25 @@ public function initByRequest($observer) return $this; } + /** + * @inheritdoc + */ + public function beforeSave() + { + $this->unsetData("session_id"); + return parent::beforeSave(); + } + + /** + * @inheritdoc + */ + public function afterSave() + { + $this->setSessionId($this->session->getSessionId()); + return parent::afterSave(); + } + + /** * Save visitor by request * diff --git a/app/code/Magento/Customer/Setup/Patch/Data/SessionIDColumnCleanUp.php b/app/code/Magento/Customer/Setup/Patch/Data/SessionIDColumnCleanUp.php new file mode 100644 index 0000000000000..961be514d9ba9 --- /dev/null +++ b/app/code/Magento/Customer/Setup/Patch/Data/SessionIDColumnCleanUp.php @@ -0,0 +1,102 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); +namespace Magento\Customer\Setup\Patch\Data; + +use Magento\Framework\DB\Adapter\Pdo\Mysql; +use Magento\Framework\Setup\ModuleDataSetupInterface; +use Magento\Framework\Setup\Patch\DataPatchInterface; +use Psr\Log\LoggerInterface; + +/** + * Class Clean Up Data Removes unused data + */ +class SessionIDColumnCleanUp implements DataPatchInterface +{ + /** + * @var ModuleDataSetupInterface + */ + private $moduleDataSetup; + + /** + * @var LoggerInterface + */ + private $logger; + + /** + * RemoveData constructor. + * @param ModuleDataSetupInterface $moduleDataSetup + * @param LoggerInterface $logger + */ + public function __construct( + ModuleDataSetupInterface $moduleDataSetup, + LoggerInterface $logger + ) { + $this->moduleDataSetup = $moduleDataSetup; + $this->logger = $logger; + } + + /** + * @inheritdoc + */ + public function apply() + { + try { + $this->cleanCustomerVisitorTable(); + } catch (\Throwable $e) { + $this->logger->warning( + 'Customer module SessionIDColumnCleanUp patch experienced an error and could not be completed.' + . ' Please submit a support ticket or email us at security@magento.com.' + ); + + return $this; + } + + return $this; + } + + /** + * Remove session id from customer_visitor table. + * + * @throws \Zend_Db_Statement_Exception + */ + private function cleanCustomerVisitorTable() + { + $tableName = $this->moduleDataSetup->getTable('customer_visitor'); + // phpcs:ignore Magento2.SQL.RawQuery + $rawQuery = sprintf( + 'UPDATE %s SET session_id = NULL WHERE session_id IS NOT NULL LIMIT 1000', + $tableName + ); + + $adapter = $this->moduleDataSetup->getConnection(); + if ($adapter instanceof Mysql) { + do { + $result = $adapter->rawQuery($rawQuery)->rowCount(); + } while ($result > 0); + } else { + do { + $result = $adapter->query($rawQuery)->rowCount(); + } while ($result > 0); + } + } + + /** + * @inheritdoc + */ + public static function getDependencies() + { + return []; + } + + /** + * @inheritdoc + */ + public function getAliases() + { + return []; + } +} diff --git a/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerAddressGridActionGroup.xml b/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerAddressGridActionGroup.xml index b8f5f5efc2bb4..3417f09a63988 100644 --- a/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerAddressGridActionGroup.xml +++ b/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerAddressGridActionGroup.xml @@ -13,11 +13,11 @@ <annotations> <description>Clears the Admin Customer Address grid Filters. Sets the grid view to 'Default View'.</description> </annotations> - + <conditionalClick selector="{{AdminCustomerAddressFiltersSection.clearAll}}" dependentSelector="{{AdminCustomerAddressFiltersSection.clearAll}}" visible="true" stepKey="clickClearFilters"/> <click selector="{{AdminCustomerAddressFiltersSection.viewDropdown}}" stepKey="openViewBookmarksTab"/> - <click selector="{{AdminCustomerAddressFiltersSection.viewBookmark('Default View')}}" stepKey="resetToDefaultGridView"/> + <click selector="{{AdminCustomerAddressFiltersSection.viewBookmark(DefaultGridView.name)}}" stepKey="resetToDefaultGridView"/> <waitForPageLoad stepKey="waitForGridLoad"/> - <see selector="{{AdminCustomerFiltersSection.viewDropdown}}" userInput="Default View" stepKey="seeDefaultViewSelected"/> + <see selector="{{AdminCustomerFiltersSection.viewDropdown}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerGridActionGroup.xml b/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerGridActionGroup.xml index 3649be6ed38db..bb272d59b4bcc 100644 --- a/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerGridActionGroup.xml +++ b/app/code/Magento/Customer/Test/Mftf/ActionGroup/AdminResetFilterInCustomerGridActionGroup.xml @@ -16,8 +16,8 @@ <conditionalClick selector="{{AdminCustomerFiltersSection.clearAll}}" dependentSelector="{{AdminCustomerFiltersSection.clearAll}}" visible="true" stepKey="clickClearFilters"/> <click selector="{{AdminCustomerFiltersSection.viewDropdown}}" stepKey="openViewBookmarksTab"/> - <click selector="{{AdminCustomerFiltersSection.viewBookmark('Default View')}}" stepKey="resetToDefaultGridView"/> + <click selector="{{AdminCustomerFiltersSection.viewBookmark(DefaultGridView.name)}}" stepKey="resetToDefaultGridView"/> <waitForPageLoad stepKey="waitForGridLoad"/> - <see selector="{{AdminCustomerFiltersSection.viewDropdown}}" userInput="Default View" stepKey="seeDefaultViewSelected"/> + <see selector="{{AdminCustomerFiltersSection.viewDropdown}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php b/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php index bb10d4bf008eb..8fad1780d0d58 100644 --- a/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php +++ b/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php @@ -9,6 +9,7 @@ use Magento\Customer\Model\ResourceModel\Visitor as VisitorResourceModel; use Magento\Customer\Model\Session; +use Magento\Customer\Model\Visitor; use Magento\Customer\Model\Visitor as VisitorModel; use Magento\Framework\App\Request\Http as HttpRequest; use Magento\Framework\DataObject; @@ -74,6 +75,7 @@ protected function setUp(): void 'addCommitCallback', 'commit', 'clean', + 'load', ])->disableOriginalConstructor() ->getMock(); $this->visitorResourceModelMock->expects($this->any())->method('getIdFieldName')->willReturn('visitor_id'); diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json index 3c25bee14ebe7..61382cbe1ed87 100644 --- a/app/code/Magento/Customer/composer.json +++ b/app/code/Magento/Customer/composer.json @@ -1,41 +1,42 @@ { "name": "magento/module-customer", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "103.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-integration": "*", - "magento/module-media-storage": "*", - "magento/module-newsletter": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-wishlist": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-integration": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-newsletter": "100.4.*", + "magento/module-page-cache": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-wishlist": "101.2.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-customer-sample-data": "*", - "magento/module-webapi": "*" + "magento/module-cookie": "100.4.*", + "magento/module-customer-sample-data": "Sample Data version: 100.4.*", + "magento/module-webapi": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -45,3 +46,4 @@ } } } + diff --git a/app/code/Magento/Customer/etc/db_schema.xml b/app/code/Magento/Customer/etc/db_schema.xml index 4d2b1c6454ae1..cdd1bc4c2b65e 100644 --- a/app/code/Magento/Customer/etc/db_schema.xml +++ b/app/code/Magento/Customer/etc/db_schema.xml @@ -50,6 +50,8 @@ <column xsi:type="timestamp" name="first_failure" on_update="false" nullable="true" comment="First Failure"/> <column xsi:type="timestamp" name="lock_expires" on_update="false" nullable="true" comment="Lock Expiration Date"/> + <column xsi:type="timestamp" name="session_cutoff" on_update="false" nullable="true" + comment="Session Cutoff Time"/> <constraint xsi:type="primary" referenceId="PRIMARY"> <column name="entity_id"/> </constraint> @@ -508,7 +510,10 @@ comment="Visitor ID"/> <column xsi:type="int" name="customer_id" unsigned="false" nullable="true" identity="false" comment="Customer ID"/> - <column xsi:type="varchar" name="session_id" nullable="true" length="64" comment="Session ID"/> + <column xsi:type="varchar" name="session_id" nullable="true" length="1" + comment="Deprecated: Session ID value no longer used"/> + <column xsi:type="timestamp" name="created_at" on_update="false" nullable="false" default="CURRENT_TIMESTAMP" + comment="Created At"/> <column xsi:type="timestamp" name="last_visit_at" on_update="true" nullable="false" default="CURRENT_TIMESTAMP" comment="Last Visit Time"/> <constraint xsi:type="primary" referenceId="PRIMARY"> diff --git a/app/code/Magento/Customer/etc/db_schema_whitelist.json b/app/code/Magento/Customer/etc/db_schema_whitelist.json index 686afb985c31e..24f1c8ab0c01c 100644 --- a/app/code/Magento/Customer/etc/db_schema_whitelist.json +++ b/app/code/Magento/Customer/etc/db_schema_whitelist.json @@ -29,7 +29,8 @@ "failures_num": true, "first_failure": true, "lock_expired": true, - "lock_expires": true + "lock_expires": true, + "session_cutoff": true }, "index": { "CUSTOMER_ENTITY_STORE_ID": true, @@ -328,6 +329,7 @@ "visitor_id": true, "customer_id": true, "session_id": true, + "created_at": true, "last_visit_at": true }, "index": { diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml index 06e986b8d7daa..bcc2bc6d2f56b 100644 --- a/app/code/Magento/Customer/etc/di.xml +++ b/app/code/Magento/Customer/etc/di.xml @@ -65,6 +65,16 @@ <preference for="Magento\Customer\Api\SessionCleanerInterface" type="Magento\Customer\Model\Session\SessionCleaner"/> <preference for="Magento\Customer\Api\GroupExcludedWebsiteRepositoryInterface" type="Magento\Customer\Model\ResourceModel\GroupExcludedWebsiteRepository" /> + <virtualType name="SessionValidator" type="Magento\Framework\Session\CompositeValidator"> + <arguments> + <argument name="validators" xsi:type="array"> + <item name="validator" xsi:type="object">Magento\Framework\Session\Validator</item> + <item name="cutoff_validator" xsi:type="object"> + Magento\Customer\Model\Session\Validators\CutoffValidator + </item> + </argument> + </arguments> + </virtualType> <type name="Magento\Customer\Model\Session"> <arguments> <argument name="configShare" xsi:type="object">Magento\Customer\Model\Config\Share\Proxy</argument> @@ -72,6 +82,7 @@ <argument name="customerResource" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Proxy</argument> <argument name="storage" xsi:type="object">Magento\Customer\Model\Session\Storage</argument> <argument name="customerRepository" xsi:type="object">Magento\Customer\Api\CustomerRepositoryInterface\Proxy</argument> + <argument name="validator" xsi:type="object">SessionValidator</argument> </arguments> </type> <type name="Magento\Customer\Helper\Address"> diff --git a/app/code/Magento/CustomerAnalytics/composer.json b/app/code/Magento/CustomerAnalytics/composer.json index abd9e93d89583..a0a4520ba62be 100644 --- a/app/code/Magento/CustomerAnalytics/composer.json +++ b/app/code/Magento/CustomerAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-customer-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-customer": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-customer": "103.0.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/CustomerDownloadableGraphQl/composer.json b/app/code/Magento/CustomerDownloadableGraphQl/composer.json index f7cdbb0dc86d6..5518f0cb68f6b 100644 --- a/app/code/Magento/CustomerDownloadableGraphQl/composer.json +++ b/app/code/Magento/CustomerDownloadableGraphQl/composer.json @@ -2,19 +2,20 @@ "name": "magento/module-customer-downloadable-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-downloadable-graph-ql": "*", - "magento/module-graph-ql": "*", - "magento/framework": "*" + "magento/module-downloadable-graph-ql": "100.4.*", + "magento/module-graph-ql": "100.4.*", + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/CustomerGraphQl/composer.json b/app/code/Magento/CustomerGraphQl/composer.json index 2ec396ca8ee92..92bf3d652953a 100644 --- a/app/code/Magento/CustomerGraphQl/composer.json +++ b/app/code/Magento/CustomerGraphQl/composer.json @@ -2,22 +2,23 @@ "name": "magento/module-customer-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-authorization": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-graph-ql": "*", - "magento/module-newsletter": "*", - "magento/module-integration": "*", - "magento/module-store": "*", - "magento/framework": "*", - "magento/module-directory": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-authorization": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-graph-ql": "100.4.*", + "magento/module-newsletter": "100.4.*", + "magento/module-integration": "100.4.*", + "magento/module-store": "101.1.*", + "magento/framework": "103.0.*", + "magento/module-directory": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/CustomerImportExport/composer.json b/app/code/Magento/CustomerImportExport/composer.json index 8104ea01875a6..f4105280d1c10 100644 --- a/app/code/Magento/CustomerImportExport/composer.json +++ b/app/code/Magento/CustomerImportExport/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-customer-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/Deploy/composer.json b/app/code/Magento/Deploy/composer.json index d8668dbb84874..38c5b4a977206 100644 --- a/app/code/Magento/Deploy/composer.json +++ b/app/code/Magento/Deploy/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-deploy", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-config": "*", - "magento/module-require-js": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "103.0.*", + "magento/module-config": "101.2.*", + "magento/module-require-js": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-user": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "cli_commands.php", @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Developer/composer.json b/app/code/Magento/Developer/composer.json index c5c949ec45f62..7b8dc1d280847 100644 --- a/app/code/Magento/Developer/composer.json +++ b/app/code/Magento/Developer/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-developer", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Dhl/composer.json b/app/code/Magento/Dhl/composer.json index d81ae0d7b4969..d519f65669c34 100644 --- a/app/code/Magento/Dhl/composer.json +++ b/app/code/Magento/Dhl/composer.json @@ -1,31 +1,32 @@ { "name": "magento/module-dhl", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-checkout": "*" + "magento/module-checkout": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -35,3 +36,4 @@ } } } + diff --git a/app/code/Magento/Directory/composer.json b/app/code/Magento/Directory/composer.json index e3646d38fe64d..dfab14d11dcc7 100644 --- a/app/code/Magento/Directory/composer.json +++ b/app/code/Magento/Directory/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-directory", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/DirectoryGraphQl/composer.json b/app/code/Magento/DirectoryGraphQl/composer.json index ef473e1c43b94..a0eab10139b3e 100644 --- a/app/code/Magento/DirectoryGraphQl/composer.json +++ b/app/code/Magento/DirectoryGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-directory-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-directory": "*", - "magento/module-store": "*", - "magento/module-graph-ql": "*", - "magento/framework": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-directory": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-graph-ql": "100.4.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json index 992bdbd1e263c..d20556483bc90 100644 --- a/app/code/Magento/Downloadable/composer.json +++ b/app/code/Magento/Downloadable/composer.json @@ -1,37 +1,38 @@ { "name": "magento/module-downloadable", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-gift-message": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-downloadable-sample-data": "*" + "magento/module-downloadable-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -41,3 +42,4 @@ } } } + diff --git a/app/code/Magento/DownloadableGraphQl/composer.json b/app/code/Magento/DownloadableGraphQl/composer.json index d03a5953506e5..050d07d579b8d 100644 --- a/app/code/Magento/DownloadableGraphQl/composer.json +++ b/app/code/Magento/DownloadableGraphQl/composer.json @@ -2,24 +2,25 @@ "name": "magento/module-downloadable-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-downloadable": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-quote-graph-ql": "*", - "magento/framework": "*" + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-downloadable": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-quote-graph-ql": "100.4.*", + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*", - "magento/module-sales-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.4.*", + "magento/module-sales-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/DownloadableImportExport/composer.json b/app/code/Magento/DownloadableImportExport/composer.json index 6dd7043fc02a9..9c4c81645cf69 100644 --- a/app/code/Magento/DownloadableImportExport/composer.json +++ b/app/code/Magento/DownloadableImportExport/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-downloadable-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-import-export": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-downloadable": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-import-export": "101.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/Eav/composer.json b/app/code/Magento/Eav/composer.json index 5636b0d05841c..bb5bb9653ac0c 100644 --- a/app/code/Magento/Eav/composer.json +++ b/app/code/Magento/Eav/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-eav", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "102.1.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/EavGraphQl/composer.json b/app/code/Magento/EavGraphQl/composer.json index ba4138f67cf62..14e91bc92bbe2 100644 --- a/app/code/Magento/EavGraphQl/composer.json +++ b/app/code/Magento/EavGraphQl/composer.json @@ -2,18 +2,19 @@ "name": "magento/module-eav-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-eav": "*" + "magento/framework": "103.0.*", + "magento/module-eav": "102.1.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/Elasticsearch/composer.json b/app/code/Magento/Elasticsearch/composer.json index 6bc6022cfc82d..b1586d35ffb23 100644 --- a/app/code/Magento/Elasticsearch/composer.json +++ b/app/code/Magento/Elasticsearch/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-elasticsearch", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "101.0.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-advanced-search": "*", - "magento/module-catalog": "*", - "magento/module-catalog-search": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-search": "*", - "magento/module-store": "*", - "magento/module-catalog-inventory": "*", - "magento/framework": "*", + "magento/module-advanced-search": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-search": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-search": "101.1.*", + "magento/module-store": "101.1.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/framework": "103.0.*", "elasticsearch/elasticsearch": "~7.11.0" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/Elasticsearch6/composer.json b/app/code/Magento/Elasticsearch6/composer.json index daf6c337b8703..cb3070bc68ae7 100644 --- a/app/code/Magento/Elasticsearch6/composer.json +++ b/app/code/Magento/Elasticsearch6/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-elasticsearch-6", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-advanced-search": "*", - "magento/module-catalog-search": "*", - "magento/module-search": "*", - "magento/module-elasticsearch": "*", + "magento/framework": "103.0.*", + "magento/module-advanced-search": "100.4.*", + "magento/module-catalog-search": "102.0.*", + "magento/module-search": "101.1.*", + "magento/module-elasticsearch": "101.0.*", "elasticsearch/elasticsearch": "~7.11.0" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Elasticsearch7/composer.json b/app/code/Magento/Elasticsearch7/composer.json index f14630e87a123..bb67aeaee855c 100644 --- a/app/code/Magento/Elasticsearch7/composer.json +++ b/app/code/Magento/Elasticsearch7/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-elasticsearch-7", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-elasticsearch": "*", + "magento/framework": "103.0.*", + "magento/module-elasticsearch": "101.0.*", "elasticsearch/elasticsearch": "~7.11.0", - "magento/module-advanced-search": "*", - "magento/module-catalog-search": "*" + "magento/module-advanced-search": "100.4.*", + "magento/module-catalog-search": "102.0.*" }, "suggest": { - "magento/module-config": "*", - "magento/module-search": "*" + "magento/module-config": "101.2.*", + "magento/module-search": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Email/composer.json b/app/code/Magento/Email/composer.json index 334bbcf9d4617..f7406df378cc4 100644 --- a/app/code/Magento/Email/composer.json +++ b/app/code/Magento/Email/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-email", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-require-js": "*", - "magento/module-media-storage": "*", - "magento/module-variable": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-require-js": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-variable": "100.4.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/EncryptionKey/composer.json b/app/code/Magento/EncryptionKey/composer.json index 6677a5b181f83..195e8ef0188f4 100644 --- a/app/code/Magento/EncryptionKey/composer.json +++ b/app/code/Magento/EncryptionKey/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-encryption-key", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Fedex/composer.json b/app/code/Magento/Fedex/composer.json index 575311e148457..e6b4c7647eab5 100644 --- a/app/code/Magento/Fedex/composer.json +++ b/app/code/Magento/Fedex/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-fedex", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/GiftMessage/composer.json b/app/code/Magento/GiftMessage/composer.json index cdf0533c3270d..ba3cf2fd161ec 100644 --- a/app/code/Magento/GiftMessage/composer.json +++ b/app/code/Magento/GiftMessage/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-gift-message", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-eav": "*", - "magento/module-multishipping": "*" + "magento/module-eav": "102.1.*", + "magento/module-multishipping": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/GiftMessageGraphQl/composer.json b/app/code/Magento/GiftMessageGraphQl/composer.json index 48088f2a48a32..0ef4e723741fc 100644 --- a/app/code/Magento/GiftMessageGraphQl/composer.json +++ b/app/code/Magento/GiftMessageGraphQl/composer.json @@ -2,18 +2,19 @@ "name": "magento/module-gift-message-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-gift-message": "*" + "magento/framework": "103.0.*", + "magento/module-gift-message": "100.4.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/GoogleAdwords/composer.json b/app/code/Magento/GoogleAdwords/composer.json index a37470115584f..c222767aca2a4 100644 --- a/app/code/Magento/GoogleAdwords/composer.json +++ b/app/code/Magento/GoogleAdwords/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-google-adwords", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/GoogleAnalytics/composer.json b/app/code/Magento/GoogleAnalytics/composer.json index 64d210c4f4811..3f068a0f8361d 100644 --- a/app/code/Magento/GoogleAnalytics/composer.json +++ b/app/code/Magento/GoogleAnalytics/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-google-analytics", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cookie": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-cookie": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/GoogleOptimizer/composer.json b/app/code/Magento/GoogleOptimizer/composer.json index 426526a922ec8..682f888f95157 100644 --- a/app/code/Magento/GoogleOptimizer/composer.json +++ b/app/code/Magento/GoogleOptimizer/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-google-optimizer", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-cms": "*", - "magento/module-google-analytics": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-cms": "104.0.*", + "magento/module-google-analytics": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/GraphQl/composer.json b/app/code/Magento/GraphQl/composer.json index 401e77a787acf..e0b26a2cf849e 100644 --- a/app/code/Magento/GraphQl/composer.json +++ b/app/code/Magento/GraphQl/composer.json @@ -2,19 +2,20 @@ "name": "magento/module-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-eav": "*", - "magento/framework": "*", - "magento/module-webapi": "*" + "magento/module-eav": "102.1.*", + "magento/framework": "103.0.*", + "magento/module-webapi": "100.4.*" }, "suggest": { - "magento/module-graph-ql-cache": "*" + "magento/module-graph-ql-cache": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/GraphQlCache/composer.json b/app/code/Magento/GraphQlCache/composer.json index 4cfdd0c4f660a..57b470cb512b9 100644 --- a/app/code/Magento/GraphQlCache/composer.json +++ b/app/code/Magento/GraphQlCache/composer.json @@ -2,16 +2,17 @@ "name": "magento/module-graph-ql-cache", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-page-cache": "*", - "magento/module-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-page-cache": "100.4.*", + "magento/module-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/GroupedCatalogInventory/composer.json b/app/code/Magento/GroupedCatalogInventory/composer.json index 0d91d939494a8..668bf4428e4ff 100644 --- a/app/code/Magento/GroupedCatalogInventory/composer.json +++ b/app/code/Magento/GroupedCatalogInventory/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-grouped-catalog-inventory", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-grouped-product": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-grouped-product": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/GroupedImportExport/composer.json b/app/code/Magento/GroupedImportExport/composer.json index 8806058c2bfc8..7c94b68702667 100644 --- a/app/code/Magento/GroupedImportExport/composer.json +++ b/app/code/Magento/GroupedImportExport/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-grouped-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-import-export": "*", - "magento/module-eav": "*", - "magento/module-grouped-product": "*", - "magento/module-import-export": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-eav": "102.1.*", + "magento/module-grouped-product": "100.4.*", + "magento/module-import-export": "101.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json index 554b0c239c8fb..7a7a74250e042 100644 --- a/app/code/Magento/GroupedProduct/composer.json +++ b/app/code/Magento/GroupedProduct/composer.json @@ -1,34 +1,35 @@ { "name": "magento/module-grouped-product", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-msrp": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-wishlist": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-msrp": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-wishlist": "101.2.*" }, "suggest": { - "magento/module-grouped-product-sample-data": "*" + "magento/module-grouped-product-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -38,3 +39,4 @@ } } } + diff --git a/app/code/Magento/GroupedProductGraphQl/composer.json b/app/code/Magento/GroupedProductGraphQl/composer.json index 5784acb5f5d04..88799e066b4a9 100644 --- a/app/code/Magento/GroupedProductGraphQl/composer.json +++ b/app/code/Magento/GroupedProductGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-grouped-product-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-grouped-product": "*", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*", - "magento/framework": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-grouped-product": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json index 3be5c03dc2828..6087f1f4cc3a7 100644 --- a/app/code/Magento/ImportExport/composer.json +++ b/app/code/Magento/ImportExport/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.0.3", "require": { "php": "~7.3.0||~7.4.0", "ext-ctype": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Indexer/composer.json b/app/code/Magento/Indexer/composer.json index 07d652e9fa2b5..4eb6d8b83e4b9 100644 --- a/app/code/Magento/Indexer/composer.json +++ b/app/code/Magento/Indexer/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-indexer", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/InstantPurchase/composer.json b/app/code/Magento/InstantPurchase/composer.json index 0807926b755a0..b98b233fec15f 100644 --- a/app/code/Magento/InstantPurchase/composer.json +++ b/app/code/Magento/InstantPurchase/composer.json @@ -6,16 +6,17 @@ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-quote": "*", - "magento/module-vault": "*", - "magento/framework": "*" + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-vault": "101.2.*", + "magento/framework": "103.0.*" }, "autoload": { "files": [ @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Integration/composer.json b/app/code/Magento/Integration/composer.json index c85e84284b43f..b4c273c3f33f6 100644 --- a/app/code/Magento/Integration/composer.json +++ b/app/code/Magento/Integration/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-integration", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-security": "*", - "magento/module-store": "*", - "magento/module-user": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-security": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-user": "101.2.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/JwtFrameworkAdapter/composer.json b/app/code/Magento/JwtFrameworkAdapter/composer.json index e99a527d0a97d..1f36b6e5594c9 100644 --- a/app/code/Magento/JwtFrameworkAdapter/composer.json +++ b/app/code/Magento/JwtFrameworkAdapter/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-jwt-framework-adapter", "description": "JWT Manager implementation based on jwt-framework", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", + "magento/framework": "103.0.*", "web-token/jwt-framework": "^v2.2.7" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/LayeredNavigation/composer.json b/app/code/Magento/LayeredNavigation/composer.json index fa3c90dbbd774..4adf621d09d3e 100644 --- a/app/code/Magento/LayeredNavigation/composer.json +++ b/app/code/Magento/LayeredNavigation/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-layered-navigation", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/LoginAsCustomer/composer.json b/app/code/Magento/LoginAsCustomer/composer.json index e58ec90e8f8bb..85c18493426d3 100755 --- a/app/code/Magento/LoginAsCustomer/composer.json +++ b/app/code/Magento/LoginAsCustomer/composer.json @@ -1,25 +1,29 @@ { "name": "magento/module-login-as-customer", "description": "Allow for admin to enter a customer account", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-login-as-customer-api": "*" - }, - "suggest": { - "magento/module-backend": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-login-as-customer-api": "100.4.*" + }, + "suggest": { + "magento/module-backend": "102.0.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomer\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerAdminUi/composer.json b/app/code/Magento/LoginAsCustomerAdminUi/composer.json index b6291226827a8..7aff7b9ef574c 100644 --- a/app/code/Magento/LoginAsCustomerAdminUi/composer.json +++ b/app/code/Magento/LoginAsCustomerAdminUi/composer.json @@ -1,28 +1,31 @@ { "name": "magento/module-login-as-customer-admin-ui", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-login-as-customer-api": "*", - "magento/module-login-as-customer-frontend-ui": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-sales": "*", - "magento/module-store": "*" - }, - "suggest": { - "magento/module-login-as-customer": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-login-as-customer-api": "100.4.*", + "magento/module-login-as-customer-frontend-ui": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*" + }, + "suggest": { + "magento/module-login-as-customer": "100.4.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerAdminUi\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerApi/composer.json b/app/code/Magento/LoginAsCustomerApi/composer.json index b48319b61398f..fce8b663c7ed9 100644 --- a/app/code/Magento/LoginAsCustomerApi/composer.json +++ b/app/code/Magento/LoginAsCustomerApi/composer.json @@ -1,19 +1,23 @@ { "name": "magento/module-login-as-customer-api", "description": "Allow for admin to enter a customer account", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerApi\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerAssistance/composer.json b/app/code/Magento/LoginAsCustomerAssistance/composer.json index 312268c6a7c47..a490373e6e648 100644 --- a/app/code/Magento/LoginAsCustomerAssistance/composer.json +++ b/app/code/Magento/LoginAsCustomerAssistance/composer.json @@ -1,28 +1,31 @@ { "name": "magento/module-login-as-customer-assistance", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-store": "*", - "magento/module-login-as-customer": "*", - "magento/module-login-as-customer-api": "*" - }, - "suggest": { - "magento/module-login-as-customer-admin-ui": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-login-as-customer": "100.4.*", + "magento/module-login-as-customer-api": "100.4.*" + }, + "suggest": { + "magento/module-login-as-customer-admin-ui": "100.4.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerAssistance\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerFrontendUi/composer.json b/app/code/Magento/LoginAsCustomerFrontendUi/composer.json index 279d8ae3ec79e..97da61d9a57ed 100644 --- a/app/code/Magento/LoginAsCustomerFrontendUi/composer.json +++ b/app/code/Magento/LoginAsCustomerFrontendUi/composer.json @@ -1,22 +1,25 @@ { "name": "magento/module-login-as-customer-frontend-ui", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-login-as-customer-api": "*", - "magento/module-customer": "*", - "magento/module-store": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-login-as-customer-api": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerFrontendUi\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerGraphQl/composer.json b/app/code/Magento/LoginAsCustomerGraphQl/composer.json index 9b3e7ca2efbb7..01a82a1efe76c 100755 --- a/app/code/Magento/LoginAsCustomerGraphQl/composer.json +++ b/app/code/Magento/LoginAsCustomerGraphQl/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-login-as-customer-graph-ql", "description": "Flexible login as a customer so a merchant or merchant admin can log into an end customer's account to assist them with their account.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-login-as-customer-api": "*", - "magento/module-login-as-customer-assistance": "*", - "magento/module-integration": "*", - "magento/module-store": "*", - "magento/module-customer": "*" - }, - "suggest": { - "magento/module-login-as-customer": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-login-as-customer-api": "100.4.*", + "magento/module-login-as-customer-assistance": "100.4.*", + "magento/module-integration": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-customer": "103.0.*" + }, + "suggest": { + "magento/module-login-as-customer": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/LoginAsCustomerLog/composer.json b/app/code/Magento/LoginAsCustomerLog/composer.json index cf888f8cb1a59..4e86ece88b06a 100644 --- a/app/code/Magento/LoginAsCustomerLog/composer.json +++ b/app/code/Magento/LoginAsCustomerLog/composer.json @@ -1,27 +1,30 @@ { "name": "magento/module-login-as-customer-log", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-login-as-customer-api": "*", - "magento/module-ui": "*", - "magento/module-user": "*" - }, - "suggest": { - "magento/module-login-as-customer": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-login-as-customer-api": "100.4.*", + "magento/module-ui": "101.2.*", + "magento/module-user": "101.2.*" + }, + "suggest": { + "magento/module-login-as-customer": "100.4.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerLog\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerPageCache/composer.json b/app/code/Magento/LoginAsCustomerPageCache/composer.json index 84d7f2e2a6730..119eb536af0bf 100644 --- a/app/code/Magento/LoginAsCustomerPageCache/composer.json +++ b/app/code/Magento/LoginAsCustomerPageCache/composer.json @@ -1,24 +1,27 @@ { "name": "magento/module-login-as-customer-page-cache", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-login-as-customer-api": "*" - }, - "suggest": { - "magento/module-page-cache": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-login-as-customer-api": "100.4.*" + }, + "suggest": { + "magento/module-page-cache": "100.4.*" + }, "autoload": { - "files": [ "registration.php" ], + "files": [ + "registration.php" + ], "psr-4": { "Magento\\LoginAsCustomerPageCache\\": "" } } } + diff --git a/app/code/Magento/LoginAsCustomerQuote/composer.json b/app/code/Magento/LoginAsCustomerQuote/composer.json index 556ffc0d3be43..71c74027f6449 100644 --- a/app/code/Magento/LoginAsCustomerQuote/composer.json +++ b/app/code/Magento/LoginAsCustomerQuote/composer.json @@ -1,21 +1,21 @@ { "name": "magento/module-login-as-customer-quote", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-quote": "*" - }, - "suggest": { - "magento/module-login-as-customer-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-quote": "101.2.*" + }, + "suggest": { + "magento/module-login-as-customer-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -25,3 +25,4 @@ } } } + diff --git a/app/code/Magento/LoginAsCustomerSales/composer.json b/app/code/Magento/LoginAsCustomerSales/composer.json index 3891504e54092..b222bc03dbd9b 100644 --- a/app/code/Magento/LoginAsCustomerSales/composer.json +++ b/app/code/Magento/LoginAsCustomerSales/composer.json @@ -1,21 +1,21 @@ { "name": "magento/module-login-as-customer-sales", - "description": "", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-user": "*", - "magento/module-login-as-customer-api": "*" - }, - "suggest": { - "magento/module-sales": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-user": "101.2.*", + "magento/module-login-as-customer-api": "100.4.*" + }, + "suggest": { + "magento/module-sales": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -25,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Marketplace/composer.json b/app/code/Magento/Marketplace/composer.json index 42bbcf151a17b..381655abcef23 100644 --- a/app/code/Magento/Marketplace/composer.json +++ b/app/code/Magento/Marketplace/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-marketplace", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/MediaContent/composer.json b/app/code/Magento/MediaContent/composer.json index 4dc2b3eba0f68..b61341a1e4a01 100644 --- a/app/code/Magento/MediaContent/composer.json +++ b/app/code/Magento/MediaContent/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-media-content", "description": "Magento module provides the implementation for managing relations between content and media files used in that content", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-content-api": "*", - "magento/module-media-gallery-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-content-api": "100.4.*", + "magento/module-media-gallery-api": "101.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/MediaContentApi/composer.json b/app/code/Magento/MediaContentApi/composer.json index fd1f2f9a0f265..c5285c2bef4c6 100644 --- a/app/code/Magento/MediaContentApi/composer.json +++ b/app/code/Magento/MediaContentApi/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-media-content-api", "description": "Magento module provides the API interfaces for managing relations between content and media files used in that content", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-media-gallery-api": "*", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-media-gallery-api": "101.0.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/MediaContentCatalog/composer.json b/app/code/Magento/MediaContentCatalog/composer.json index 2b19bc95f6ed3..2ef3c6b93fb74 100644 --- a/app/code/Magento/MediaContentCatalog/composer.json +++ b/app/code/Magento/MediaContentCatalog/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-media-content-catalog", "description": "Magento module provides the implementation of MediaContent functionality for Magento_Catalog module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-media-content-api": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-store": "*", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-media-content-api": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-eav": "102.1.*", + "magento/module-store": "101.1.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/MediaContentCms/composer.json b/app/code/Magento/MediaContentCms/composer.json index ea32fdd7a49fa..2302d73cfe388 100644 --- a/app/code/Magento/MediaContentCms/composer.json +++ b/app/code/Magento/MediaContentCms/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-media-content-cms", "description": "Magento module provides the implementation of MediaContent functionality for Magento_Cms module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-media-content-api": "*", - "magento/module-cms": "*", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-media-content-api": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/MediaContentSynchronization/composer.json b/app/code/Magento/MediaContentSynchronization/composer.json index 9f0f4f9588ad6..3d91b157b23fa 100644 --- a/app/code/Magento/MediaContentSynchronization/composer.json +++ b/app/code/Magento/MediaContentSynchronization/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-media-content-synchronization", "description": "Magento module provides implementation of the media content data synchronization.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/framework-bulk": "*", - "magento/module-media-content-synchronization-api": "*", - "magento/module-media-content-api": "*", - "magento/module-asynchronous-operations": "*" - }, - "suggest": { - "magento/module-media-gallery-synchronization": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/framework-bulk": "101.0.*", + "magento/module-media-content-synchronization-api": "100.4.*", + "magento/module-media-content-api": "100.4.*", + "magento/module-asynchronous-operations": "100.4.*" + }, + "suggest": { + "magento/module-media-gallery-synchronization": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/MediaContentSynchronizationApi/composer.json b/app/code/Magento/MediaContentSynchronizationApi/composer.json index 398aaf1de8071..cf00f89abeaea 100644 --- a/app/code/Magento/MediaContentSynchronizationApi/composer.json +++ b/app/code/Magento/MediaContentSynchronizationApi/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-media-content-synchronization-api", "description": "Magento module responsible for the media content synchronization implementation API", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-content-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-content-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/MediaContentSynchronizationCatalog/composer.json b/app/code/Magento/MediaContentSynchronizationCatalog/composer.json index 733f29d3a42c2..693bdb7cc6d38 100644 --- a/app/code/Magento/MediaContentSynchronizationCatalog/composer.json +++ b/app/code/Magento/MediaContentSynchronizationCatalog/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-media-content-synchronization-catalog", "description": "Magento module provides the implementation of MediaContentSynchronization functionality for Magento_Catalog module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-content-synchronization-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-media-content-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-content-synchronization-api": "100.4.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/module-media-content-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/MediaContentSynchronizationCms/composer.json b/app/code/Magento/MediaContentSynchronizationCms/composer.json index 9028b9dacd0a2..bb5fe5f85bb33 100644 --- a/app/code/Magento/MediaContentSynchronizationCms/composer.json +++ b/app/code/Magento/MediaContentSynchronizationCms/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-media-content-synchronization-cms", "description": "Magento module provides the implementation of MediaContentSynchronization functionality for Magento_Cms module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-content-synchronization-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-media-content-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-content-synchronization-api": "100.4.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/module-media-content-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/MediaGallery/Model/Directory/Config/Converter.php b/app/code/Magento/MediaGallery/Model/Directory/Config/Converter.php index 3d9911c805efb..76669f66705aa 100644 --- a/app/code/Magento/MediaGallery/Model/Directory/Config/Converter.php +++ b/app/code/Magento/MediaGallery/Model/Directory/Config/Converter.php @@ -11,6 +11,7 @@ /** * Media gallery directory config converter + * @deprecated */ class Converter implements ConverterInterface { diff --git a/app/code/Magento/MediaGallery/Model/Directory/Config/SchemaLocator.php b/app/code/Magento/MediaGallery/Model/Directory/Config/SchemaLocator.php index 7fdf414cdd228..139dc45bc0185 100644 --- a/app/code/Magento/MediaGallery/Model/Directory/Config/SchemaLocator.php +++ b/app/code/Magento/MediaGallery/Model/Directory/Config/SchemaLocator.php @@ -13,6 +13,7 @@ /** * Media gallery directory config schema locator + * @deprecated */ class SchemaLocator implements SchemaLocatorInterface { diff --git a/app/code/Magento/MediaGallery/Model/Directory/ExcludedPatternsConfig.php b/app/code/Magento/MediaGallery/Model/Directory/ExcludedPatternsConfig.php index 29ed5fbf04ecd..c41a2815cf24f 100644 --- a/app/code/Magento/MediaGallery/Model/Directory/ExcludedPatternsConfig.php +++ b/app/code/Magento/MediaGallery/Model/Directory/ExcludedPatternsConfig.php @@ -12,6 +12,7 @@ /** * Media gallery directory config + * @deprecated */ class ExcludedPatternsConfig implements ExcludedPatternsConfigInterface { diff --git a/app/code/Magento/MediaGallery/Model/Directory/IsExcluded.php b/app/code/Magento/MediaGallery/Model/Directory/IsExcluded.php index 5a74ce266cba5..27cd18ef67855 100644 --- a/app/code/Magento/MediaGallery/Model/Directory/IsExcluded.php +++ b/app/code/Magento/MediaGallery/Model/Directory/IsExcluded.php @@ -7,6 +7,8 @@ namespace Magento\MediaGallery\Model\Directory; +use Magento\Framework\App\Config\ScopeConfigInterface; +use Magento\Framework\App\ObjectManager; use Magento\Framework\Filesystem\File\WriteInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; @@ -18,8 +20,12 @@ */ class IsExcluded implements IsPathExcludedInterface { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + /** * @var ExcludedPatternsConfigInterface + * @deprecated */ private $config; @@ -31,15 +37,31 @@ class IsExcluded implements IsPathExcludedInterface /** @var WriteInterface */ private $mediaDirectory; + /** + * @var ScopeConfigInterface + */ + private $coreConfig; + + /** + * @var string + */ + private $allowedPathPattern; + /** * @param ExcludedPatternsConfigInterface $config * @param Filesystem $filesystem + * @param ScopeConfigInterface $coreConfig */ - public function __construct(ExcludedPatternsConfigInterface $config, Filesystem $filesystem) - { + public function __construct( + ExcludedPatternsConfigInterface $config, + Filesystem $filesystem, + ScopeConfigInterface $coreConfig = null + ) { $this->config = $config; $this->filesystem = $filesystem; $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $this->coreConfig = $coreConfig ?: ObjectManager::getInstance()->get(ScopeConfigInterface::class); + } /** @@ -51,17 +73,31 @@ public function __construct(ExcludedPatternsConfigInterface $config, Filesystem public function execute(string $path): bool { $realPath = $this->mediaDirectory->getDriver()->getRealPathSafety($path); - foreach ($this->config->get() as $pattern) { - if (empty($pattern)) { - continue; - } - preg_match($pattern, $realPath, $result); + return preg_match($this->getAllowedPathPattern(), $realPath) != 1; + } - if ($result) { - return true; + /** + * Get allowed path pattern + * + * @return string + */ + private function getAllowedPathPattern() + { + if (null === $this->allowedPathPattern) { + $mediaGalleryImageFolders = $this->coreConfig->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $regExp = '/^('; + $or = ''; + foreach($mediaGalleryImageFolders as $folder) { + $folderPattern = str_replace('/', '[\/]+', $folder); + $regExp .= $or . $folderPattern . '\b(?!-)(?:\/?[^\/]+)*\/?$'; + $or = '|'; } + $regExp .= ')/'; + $this->allowedPathPattern = $regExp; } - - return false; + return $this->allowedPathPattern; } } diff --git a/app/code/Magento/MediaGallery/composer.json b/app/code/Magento/MediaGallery/composer.json index d430a174a9738..1a4c73125c658 100644 --- a/app/code/Magento/MediaGallery/composer.json +++ b/app/code/Magento/MediaGallery/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-media-gallery", "description": "Magento module responsible for media handling", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*", - "magento/module-cms": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-cms": "104.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryApi/composer.json b/app/code/Magento/MediaGalleryApi/composer.json index 8bea8ee95b55a..8dae266b132e3 100644 --- a/app/code/Magento/MediaGalleryApi/composer.json +++ b/app/code/Magento/MediaGalleryApi/composer.json @@ -1,15 +1,16 @@ { "name": "magento/module-media-gallery-api", "description": "Magento module responsible for media gallery asset attributes storage and management", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "101.0.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -19,3 +20,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryCatalog/composer.json b/app/code/Magento/MediaGalleryCatalog/composer.json index 192d86684aa76..2f6ea45854e1e 100644 --- a/app/code/Magento/MediaGalleryCatalog/composer.json +++ b/app/code/Magento/MediaGalleryCatalog/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-media-gallery-catalog", "description": "Magento module responsible for catalog gallery processor delete operation handling", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*", - "magento/module-catalog": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-catalog": "104.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryCatalogIntegration/Test/Mftf/Test/AdminUploadSameImageDeleteFromTemporaryFolderTest.xml b/app/code/Magento/MediaGalleryCatalogIntegration/Test/Mftf/Test/AdminUploadSameImageDeleteFromTemporaryFolderTest.xml index 8add2021f056b..36d0ba03f1430 100644 --- a/app/code/Magento/MediaGalleryCatalogIntegration/Test/Mftf/Test/AdminUploadSameImageDeleteFromTemporaryFolderTest.xml +++ b/app/code/Magento/MediaGalleryCatalogIntegration/Test/Mftf/Test/AdminUploadSameImageDeleteFromTemporaryFolderTest.xml @@ -18,6 +18,9 @@ <testCaseId value="https://studio.cucumber.io/projects/131313/test-plan/folders/943908/scenarios/4836631"/> <severity value="CRITICAL"/> <group value="media_gallery_ui"/> + <skip> + <issueId value="DEPRECATED">Cannot access catalog/tmp/ directory in media gallery anymore</issueId> + </skip> </annotations> <before> <createData entity="SimpleSubCategory" stepKey="category"/> @@ -39,6 +42,7 @@ <!-- Open tmp/category folder --> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandCatalogTmpFolderActionGroup" stepKey="expandTmpFolder"/> <actionGroup ref="AdminMediaGalleryFolderSelectByFullPathActionGroup" stepKey="selectCategoryFolder"> <argument name="path" value="catalog/tmp/category"/> diff --git a/app/code/Magento/MediaGalleryCatalogIntegration/composer.json b/app/code/Magento/MediaGalleryCatalogIntegration/composer.json index efabb70da9f39..6f33af095b480 100644 --- a/app/code/Magento/MediaGalleryCatalogIntegration/composer.json +++ b/app/code/Magento/MediaGalleryCatalogIntegration/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-media-gallery-catalog-integration", "description": "Magento module responsible for extending catalog image uploader functionality", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-media-gallery-ui-api": "*" - }, - "suggest": { - "magento/module-catalog": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/module-media-gallery-ui-api": "100.4.*" + }, + "suggest": { + "magento/module-catalog": "104.0.*" + }, "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInCategoryFilterTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInCategoryFilterTest.xml index df3ac35c0bfcd..71d3b3d505514 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInCategoryFilterTest.xml +++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInCategoryFilterTest.xml @@ -23,13 +23,20 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> - <argument name="imageName" value="{{UpdatedImageDetails.title}}"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryAfter"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultViewAfter"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandCategoryFolder"> + <argument name="FolderName" value="category"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clickDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> - <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderAfter"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectSecondImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clickDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImages"/> + <comment userInput="BIC workaround" stepKey="resetAdminDataGridToDefaultView"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -37,8 +44,15 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="openCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -52,7 +66,7 @@ <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelectedContentImage"/> <actionGroup ref="AdminSaveCategoryFormActionGroup" stepKey="saveCategoryForm"/> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploaderAgain"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilterAgain"/> + <comment userInput="BIC workaround" stepKey="clearFilterAgain"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGridToDefaultViewAgain"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminEnhancedMediaGallerySelectUsedInFilterActionGroup" stepKey="setUsedInFilter"> diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterOnTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterOnTest.xml index a48256a4c2d29..ac056bbe615e4 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterOnTest.xml +++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiUsedInProductFilterOnTest.xml @@ -29,19 +29,23 @@ <magentoCLI command="config:set {{WysiwygDisabledByDefault.path}} {{WysiwygDisabledByDefault.value}}" stepKey="disableWYSIWYG"/> <deleteData createDataKey="createProduct" stepKey="deleteProduct"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilters"/> - <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToAssertEmptyUsedIn"/> - <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> - <actionGroup ref="AdminEnhancedMediaGalleryCloseViewDetailsActionGroup" stepKey="closeDetails"/> - - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageMetadata.title}}"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="clearFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clickDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> - - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersAfterDeleteImages"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="openViewImageDetailsToAssertEmptyUsedIn"/> + <comment userInput="BIC workaround" stepKey="assertThereIsNoUsedInSection"/> + <comment userInput="BIC workaround" stepKey="closeDetails"/> + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectFirstImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clickDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImages"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <comment userInput="BIC workaround" stepKey="clearFiltersAfterDeleteImages"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> @@ -49,6 +53,14 @@ <argument name="productId" value="$createProduct.id$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -59,7 +71,8 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="SaveProductFormActionGroup" stepKey="saveProduct"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView2"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminEnhancedMediaGallerySelectUsedInFilterActionGroup" stepKey="setUsedInFilter"> <argument name="filterName" value="Used in Products"/> @@ -73,7 +86,6 @@ <actionGroup ref="AdminAssertMediaGalleryFilterPlaceHolderGridActionGroup" stepKey="assertFilterApplied"> <argument name="filterPlaceholder" value="{{ImageMetadata.title}}"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersOnProductGrid"/> - + <comment userInput="BIC workaround" stepKey="clearFiltersOnProductGrid"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml index a3f1bd7c01136..2ec3a803a2f0c 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml +++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkCategoryGridTest.xml @@ -28,11 +28,11 @@ <after> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderForDelete"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -40,15 +40,15 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear" /> + <comment userInput="BIC workaround" stepKey="waitForLoadingMaskToDisappear"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetCategoryImageGalleryGridToDefaultView"/> <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createCategoryImageFolder"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertCategoryImageFolderCreated"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> @@ -63,7 +63,7 @@ <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploaderToVerifyLink"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryImageFolder"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear2"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> @@ -99,8 +99,9 @@ <deleteData createDataKey="category" stepKey="deleteCategory"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="openCategoryImageFolder"> - <argument name="name" value="categoryImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkProductGridTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkProductGridTest.xml index d2e8574ef7033..9c0fba7a83f56 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkProductGridTest.xml +++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkProductGridTest.xml @@ -61,6 +61,7 @@ <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetProductGridToDefaultView"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryClickEntityUsedInActionGroup" stepKey="clickUsedInProducts"> <argument name="entityName" value="Products"/> @@ -71,6 +72,7 @@ <deleteData createDataKey="product" stepKey="deleteProduct"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters2"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> diff --git a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkedCategoryGridTest.xml b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkedCategoryGridTest.xml index 8e197b740bb11..5a7dc35afee95 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkedCategoryGridTest.xml +++ b/app/code/Magento/MediaGalleryCatalogUi/Test/Mftf/Test/AdminMediaGalleryCatalogUiVerifyUsedInLinkedCategoryGridTest.xml @@ -22,18 +22,21 @@ <before> <createData entity="SimpleSubCategory" stepKey="category"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> <actionGroup ref="AdminOpenCategoryGridPageActionGroup" stepKey="openMediaGalleryCategoryGridPage"/> <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> </before> <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"/> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> <actionGroup ref="AdminOpenCategoryGridPageActionGroup" stepKey="openMediaGalleryCategoryGridPage"/> <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> @@ -43,8 +46,11 @@ <argument name="id" value="$category.id$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear" /> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <comment userInput="BIC workaround" stepKey="waitForLoadingMaskToDisappear"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"/> @@ -61,6 +67,10 @@ <actionGroup ref="AdminSaveCategoryFormActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploaderToVerifyLink"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters2"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryImageFolder"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryClickEntityUsedInActionGroup" stepKey="clickUsedInCategories"> @@ -94,6 +104,10 @@ <deleteData createDataKey="category" stepKey="deleteCategory"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder2"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="openCategoryImageFolder"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> diff --git a/app/code/Magento/MediaGalleryCatalogUi/composer.json b/app/code/Magento/MediaGalleryCatalogUi/composer.json index 985d581beff25..3b7fd244f705c 100644 --- a/app/code/Magento/MediaGalleryCatalogUi/composer.json +++ b/app/code/Magento/MediaGalleryCatalogUi/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-media-gallery-catalog-ui", "description": "Magento module that implement category grid for media gallery.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-store": "*", - "magento/module-ui": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" + }, "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertImageUsedInLinkBlocksGridTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertImageUsedInLinkBlocksGridTest.xml index 530605bb7e233..b4d02fe7f23e6 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertImageUsedInLinkBlocksGridTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertImageUsedInLinkBlocksGridTest.xml @@ -21,13 +21,15 @@ <before> <createData entity="_defaultBlock" stepKey="createBlock" /> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllImages"/> </before> <after> <deleteData createDataKey="createBlock" stepKey="deleteBlock"/> - <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersOnStandaloneMediaGalleryPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFiltersOnStandaloneMediaGalleryPage"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolderAgain"> <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> @@ -40,7 +42,7 @@ <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersOnMediaGalleryPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFiltersOnMediaGalleryPage"/> <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImagesAfterTest"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> @@ -51,7 +53,10 @@ <click selector="{{CmsWYSIWYGSection.InsertImageBtn}}" stepKey="clickInsertImageIcon" /> <waitForPageLoad stepKey="waitForInitialPageLoad" /> <waitForElementVisible selector="{{AdminMediaGalleryFolderSection.folderNewCreateButton}}" stepKey="waitForNewFolderButton"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilter"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> @@ -70,7 +75,10 @@ <click selector="{{BlockNewPagePageActionsSection.saveBlock}}" stepKey="saveBlock"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersOnStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFiltersOnStandaloneMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> @@ -82,6 +90,6 @@ <actionGroup ref="AdminAssertMediaGalleryFilterPlaceHolderGridActionGroup" stepKey="assertFilterApplied"> <argument name="filterPlaceholder" value="{{ImageMetadata.title}}"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilterInBlocksGrid"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilterInBlocksGrid"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkBlocksGridTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkBlocksGridTest.xml index b360d958aee33..1f641cd73d401 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkBlocksGridTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkBlocksGridTest.xml @@ -35,13 +35,14 @@ <click selector="{{CmsWYSIWYGSection.InsertImageBtn}}" stepKey="clickInsertImageIcon" /> <waitForPageLoad stepKey="waitForInitialPageLoad" /> <waitForPageLoad stepKey="waitForSecondaryPageLoad" /> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> - <argument name="name" value="blockImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> - <argument name="name" value="blockImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <waitForPageLoad stepKey="waitForGridToLoadAfterNewFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> @@ -56,7 +57,7 @@ <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="blockImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryClickEntityUsedInActionGroup" stepKey="clickUsedInBlocks"> @@ -72,7 +73,7 @@ <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultViewAgain"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderAgain"> - <argument name="name" value="blockImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> @@ -80,7 +81,7 @@ <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="blockImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </test> </tests> diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkPagesGridTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkPagesGridTest.xml index c29ddbae0eb52..89e11aa6f16e7 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkPagesGridTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkPagesGridTest.xml @@ -21,20 +21,23 @@ <issueId value="DEPRECATED">Use AdminMediaGalleryAssertUsedInLinkedPagesGridTest instead</issueId> </skip> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="login"/> </before> + <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultViewAgain"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> + <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="navigateToCreateNewPage"/> <actionGroup ref="FillOutCustomCMSPageContentActionGroup" stepKey="fillBasicPageDataForPageWithDefaultStore"> <argument name="title" value="Unique page title MediaGalleryUi"/> @@ -43,14 +46,15 @@ </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> - <wait time="5" stepKey="waitFilterReallyCleared"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="waitFilterReallyCleared"/> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <waitForPageLoad stepKey="waitForGridToLoadAfterNewFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> @@ -69,7 +73,7 @@ <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryClickEntityUsedInActionGroup" stepKey="clickUsedInPages"> @@ -85,7 +89,7 @@ <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultViewAgain"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderAgain"> - <argument name="name" value="pageTestImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkedPagesGridTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkedPagesGridTest.xml index 4e589faef9a1f..64ef9f4366b56 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkedPagesGridTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryAssertUsedInLinkedPagesGridTest.xml @@ -21,12 +21,15 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> </before> <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"/> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"/> @@ -37,7 +40,10 @@ <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="navigateToCreateNewPage"/> <actionGroup ref="AdminCmsPageFillOutBasicFieldsActionGroup" stepKey="fillBasicPageFields"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"/> @@ -51,7 +57,10 @@ <actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="saveCmsPageAndContinue"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFiltersAgain"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFiltersAgain"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryClickEntityUsedInActionGroup" stepKey="clickUsedInPages"> @@ -64,9 +73,12 @@ <argument name="pageUrlKey" value="{{_defaultCmsPage.identifier}}"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFiltersInPageGrid"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFiltersInPageGrid"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFiltersAndAgain"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFiltersAndAgain"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="expandWysiwygFolder2"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderAgain"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="openViewImageDetailsToVerifyEmptyUsedIn"/> <actionGroup ref="AssertAdminEnhancedMediaGalleryUsedInSectionNotDisplayedActionGroup" stepKey="assertThereIsNoUsedInSection"/> diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInBlocksFilterTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInBlocksFilterTest.xml index fa6dc6c1a07fa..8eafd393d245c 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInBlocksFilterTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInBlocksFilterTest.xml @@ -23,7 +23,16 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="login"/> </before> <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="selectWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/> <deleteData createDataKey="block" stepKey="deleteBlock"/> </after> <actionGroup ref="NavigateToCreatedCMSBlockPageActionGroup" stepKey="navigateToCreatedCMSBlockPage1"> @@ -31,6 +40,14 @@ </actionGroup> <click selector="{{CmsWYSIWYGSection.InsertImageBtn}}" stepKey="clickInsertImageIcon" /> <waitForPageLoad stepKey="waitForPageLoad" /> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -40,6 +57,7 @@ <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelectedContentImage"/> <click selector="{{BlockNewPagePageActionsSection.saveBlock}}" stepKey="saveBlock"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminEnhancedMediaGallerySelectUsedInFilterActionGroup" stepKey="setUsedInFilter"> <argument name="filterName" value="Used in Blocks"/> diff --git a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInPagesFilterTest.xml b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInPagesFilterTest.xml index 7254e95d619f5..a501493b650c4 100644 --- a/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInPagesFilterTest.xml +++ b/app/code/Magento/MediaGalleryCmsUi/Test/Mftf/Test/AdminMediaGalleryCmsUiUsedInPagesFilterTest.xml @@ -18,10 +18,32 @@ <severity value="CRITICAL"/> <group value="media_gallery_ui"/> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="login"/> </before> + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> + <actionGroup ref="AdminOpenCMSPagesGridActionGroup" stepKey="navigateToCmsPageGrid"/> + <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters2"/> + <actionGroup ref="AdminSearchCmsPageInGridByUrlKeyActionGroup" stepKey="findCreatedCmsPage"> + <argument name="urlKey" value="test-page-1"/> + </actionGroup> + <actionGroup ref="AdminDeleteCmsPageFromGridActionGroup" stepKey="deleteCmsPage"> + <argument name="urlKey" value="test-page-1"/> + </actionGroup> + <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clickApplyFiltersButton"/> + </after> + <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="navigateToCreateNewPage"/> <actionGroup ref="FillOutCustomCMSPageContentActionGroup" stepKey="fillBasicPageDataForPageWithDefaultStore"> <argument name="title" value="Unique page title MediaGalleryUi"/> @@ -30,7 +52,15 @@ </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <waitForPageLoad stepKey="waitForPageLoad" /> + <comment userInput="BIC workaround" stepKey="waitForPageLoad"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGallery"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -38,9 +68,10 @@ <argument name="imageName" value="{{ImageMetadata.title}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelectedContentImage"/> - <click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="savePage"/> + <actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="savePage"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminEnhancedMediaGallerySelectUsedInFilterActionGroup" stepKey="setUsedInFilter"> <argument name="filterName" value="Used in Pages"/> @@ -50,22 +81,15 @@ <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertImageInGrid"> <argument name="title" value="ImageMetadata.title"/> </actionGroup> - <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageMetadata.title}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clickDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> - - <actionGroup ref="AdminOpenCMSPagesGridActionGroup" stepKey="navigateToCmsPageGrid"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> - <actionGroup ref="AdminSearchCmsPageInGridByUrlKeyActionGroup" stepKey="findCreatedCmsPage"> - <argument name="urlKey" value="test-page-1"/> - </actionGroup> - <actionGroup ref="AdminDeleteCmsPageFromGridActionGroup" stepKey="deleteCmsPage"> - <argument name="urlKey" value="test-page-1"/> - </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clickApplyFiltersButton"/> + <comment userInput="BIC workaround" stepKey="resetAdminDataGridToDefaultView"/> + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectFirstImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clickDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImages"/> + <comment userInput="BIC workaround" stepKey="navigateToCmsPageGrid"/> + <comment userInput="BIC workaround" stepKey="clearGridFilters2"/> + <comment userInput="BIC workaround" stepKey="findCreatedCmsPage"/> + <comment userInput="BIC workaround" stepKey="deleteCmsPage"/> + <comment userInput="BIC workaround" stepKey="clickApplyFiltersButton"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryCmsUi/composer.json b/app/code/Magento/MediaGalleryCmsUi/composer.json index 1ecfb9a3c8855..dbb45765fc5c8 100644 --- a/app/code/Magento/MediaGalleryCmsUi/composer.json +++ b/app/code/Magento/MediaGalleryCmsUi/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-media-gallery-cms-ui", "description": "Cms related UI elements in the magento media gallery", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-cms": "*", - "magento/module-backend": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-cms": "104.0.*", + "magento/module-backend": "102.0.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryIntegration/composer.json b/app/code/Magento/MediaGalleryIntegration/composer.json index a9709da81222e..24c6db6f65d10 100644 --- a/app/code/Magento/MediaGalleryIntegration/composer.json +++ b/app/code/Magento/MediaGalleryIntegration/composer.json @@ -1,26 +1,24 @@ { "name": "magento/module-media-gallery-integration", "description": "Magento module responsible for integration of enhanced media gallery", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-ui-api": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-ui": "*" - }, - "require-dev": { - "magento/module-cms": "*" - }, - "suggest": { - "magento/module-catalog": "*", - "magento/module-cms": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-ui-api": "100.4.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/module-ui": "101.2.*" + }, + "suggest": { + "magento/module-catalog": "104.0.*", + "magento/module-cms": "104.0.*" + }, "autoload": { "files": [ "registration.php" @@ -28,5 +26,9 @@ "psr-4": { "Magento\\MediaGalleryIntegration\\": "" } + }, + "require-dev": { + "magento/module-cms": "*" } } + diff --git a/app/code/Magento/MediaGalleryMetadata/composer.json b/app/code/Magento/MediaGalleryMetadata/composer.json index c2ce66ce64c36..62bcb823df56f 100644 --- a/app/code/Magento/MediaGalleryMetadata/composer.json +++ b/app/code/Magento/MediaGalleryMetadata/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-media-gallery-metadata", "description": "Magento module responsible for images metadata processing", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-metadata-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-metadata-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryMetadataApi/composer.json b/app/code/Magento/MediaGalleryMetadataApi/composer.json index f8673884b050c..9ad2057bf30d9 100644 --- a/app/code/Magento/MediaGalleryMetadataApi/composer.json +++ b/app/code/Magento/MediaGalleryMetadataApi/composer.json @@ -1,15 +1,16 @@ { "name": "magento/module-media-gallery-metadata-api", "description": "Magento module responsible for media gallery metadata implementation API", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -19,3 +20,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryRenditions/Test/Integration/Model/GenerateRenditionsTest.php b/app/code/Magento/MediaGalleryRenditions/Test/Integration/Model/GenerateRenditionsTest.php index 9655f3949d404..8cb171dfc1fdf 100644 --- a/app/code/Magento/MediaGalleryRenditions/Test/Integration/Model/GenerateRenditionsTest.php +++ b/app/code/Magento/MediaGalleryRenditions/Test/Integration/Model/GenerateRenditionsTest.php @@ -8,6 +8,7 @@ namespace Magento\MediaGalleryRenditions\Test\Integration\Model; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Exception\LocalizedException; @@ -21,6 +22,15 @@ class GenerateRenditionsTest extends TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + private const TEST_DIR = 'testDir'; + + /** + * @var array + */ + private $origConfigValue; + /** * @var GenerateRenditionsInterface */ @@ -41,13 +51,42 @@ class GenerateRenditionsTest extends TestCase */ private $driver; + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + protected function setup(): void { - $this->generateRenditions = Bootstrap::getObjectManager()->get(GenerateRenditionsInterface::class); - $this->mediaDirectory = Bootstrap::getObjectManager()->get(Filesystem::class) + $this->objectManager = Bootstrap::getObjectManager(); + $this->generateRenditions = $this->objectManager->get(GenerateRenditionsInterface::class); + $this->mediaDirectory = $this->objectManager->get(Filesystem::class) ->getDirectoryWrite(DirectoryList::MEDIA); - $this->driver = Bootstrap::getObjectManager()->get(DriverInterface::class); - $this->renditionSizeConfig = Bootstrap::getObjectManager()->get(Config::class); + $this->mediaDirectory->create(self::TEST_DIR); + $this->driver = $this->objectManager->get(DriverInterface::class); + $this->renditionSizeConfig = $this->objectManager->get(Config::class); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, [self::TEST_DIR]), + ); + } + + protected function tearDown(): void + { + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); + if ($this->mediaDirectory->isExist(self::TEST_DIR)) { + $this->mediaDirectory->delete(self::TEST_DIR); + } } public static function tearDownAfterClass(): void @@ -75,7 +114,7 @@ public static function tearDownAfterClass(): void public function testExecute(string $path, string $renditionPath): void { $this->copyImage($path); - $this->generateRenditions->execute([$path]); + $this->generateRenditions->execute([self::TEST_DIR . '/' . $path]); $expectedRenditionPath = $this->mediaDirectory->getAbsolutePath($renditionPath); list($imageWidth, $imageHeight) = getimagesize($expectedRenditionPath); $this->assertFileExists($expectedRenditionPath); @@ -98,7 +137,7 @@ public function testExecute(string $path, string $renditionPath): void private function copyImage(string $path): void { $imagePath = realpath(__DIR__ . '/../../_files' . $path); - $modifiableFilePath = $this->mediaDirectory->getAbsolutePath($path); + $modifiableFilePath = $this->mediaDirectory->getAbsolutePath(self::TEST_DIR . $path ); $this->driver->copy( $imagePath, $modifiableFilePath @@ -113,11 +152,11 @@ public function renditionsImageProvider(): array return [ 'rendition_image_not_generated' => [ 'paths' => '/magento_medium_image.jpg', - 'renditionPath' => ".renditions/magento_medium_image.jpg" + 'renditionPath' => ".renditions/" . self::TEST_DIR . "/magento_medium_image.jpg" ], 'rendition_image_generated' => [ 'paths' => '/magento_large_image.jpg', - 'renditionPath' => ".renditions/magento_large_image.jpg" + 'renditionPath' => ".renditions/" . self::TEST_DIR . "/magento_large_image.jpg" ] ]; } diff --git a/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertImageLargeFileSizeTest.xml b/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertImageLargeFileSizeTest.xml index 2d80b490e2d9b..9bdce18f65aac 100644 --- a/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertImageLargeFileSizeTest.xml +++ b/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertImageLargeFileSizeTest.xml @@ -23,14 +23,22 @@ <before> <createData entity="SimpleSubCategory" stepKey="category"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllImages"/> </before> <after> <deleteData createDataKey="category" stepKey="deleteCategory"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllImages"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFiltersOnStandaloneMediaGalleryPage"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> <actionGroup ref="AdminOpenCategoryGridPageActionGroup" stepKey="openMediaGalleryCategoryGridPage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> @@ -41,7 +49,10 @@ <!-- Add image to category from gallery --> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFiltersAgain"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFiltersAgain"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="addCategoryImage"> <argument name="image" value="ImageUpload"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertLargeImageFileSizeTest.xml b/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertLargeImageFileSizeTest.xml index 061f062eabe6b..e6b5fcac3eb47 100644 --- a/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertLargeImageFileSizeTest.xml +++ b/app/code/Magento/MediaGalleryRenditions/Test/Mftf/Test/AdminMediaGalleryInsertLargeImageFileSizeTest.xml @@ -33,6 +33,7 @@ <argument name="categoryName" value="$category.name$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryForDelete"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> <argument name="imageName" value="{{ImageUpload.fileName}}"/> @@ -52,6 +53,7 @@ <!-- Add image to category from gallery --> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="addCategoryImage"> <argument name="image" value="ImageUpload"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryRenditions/composer.json b/app/code/Magento/MediaGalleryRenditions/composer.json index 873e0b4a8c60b..8cc29a994c53d 100644 --- a/app/code/Magento/MediaGalleryRenditions/composer.json +++ b/app/code/Magento/MediaGalleryRenditions/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-media-gallery-renditions", "description": "Magento module that implements height and width fields for for media gallery items.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-renditions-api": "*", - "magento/module-media-gallery-api": "*", - "magento/framework-message-queue": "*", - "magento/module-cms": "*" - }, - "suggest": { - "magento/module-media-content-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-renditions-api": "100.4.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/framework-message-queue": "100.4.*", + "magento/module-cms": "104.0.*" + }, + "suggest": { + "magento/module-media-content-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryRenditionsApi/composer.json b/app/code/Magento/MediaGalleryRenditionsApi/composer.json index 6e3c559f001c1..eeab2dd2517bc 100644 --- a/app/code/Magento/MediaGalleryRenditionsApi/composer.json +++ b/app/code/Magento/MediaGalleryRenditionsApi/composer.json @@ -1,15 +1,16 @@ { "name": "magento/module-media-gallery-renditions-api", "description": "Magento module that is responsible for the API implementation of Media Gallery Renditions.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*" + }, "autoload": { "files": [ "registration.php" @@ -19,3 +20,4 @@ } } } + diff --git a/app/code/Magento/MediaGallerySynchronization/composer.json b/app/code/Magento/MediaGallerySynchronization/composer.json index f9d642dd02568..d75d69474c789 100644 --- a/app/code/Magento/MediaGallerySynchronization/composer.json +++ b/app/code/Magento/MediaGallerySynchronization/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-media-gallery-synchronization", "description": "Magento module provides implementation of the media gallery data synchronization.", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/framework-message-queue": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/framework-message-queue": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/MediaGallerySynchronizationApi/composer.json b/app/code/Magento/MediaGallerySynchronizationApi/composer.json index 19bab75dd5f42..0f0d52947fa0a 100644 --- a/app/code/Magento/MediaGallerySynchronizationApi/composer.json +++ b/app/code/Magento/MediaGallerySynchronizationApi/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-media-gallery-synchronization-api", "description": "Magento module responsible for the media gallery synchronization implementation API", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-api": "101.0.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/MediaGallerySynchronizationMetadata/composer.json b/app/code/Magento/MediaGallerySynchronizationMetadata/composer.json index 0674014026b24..c037034b9f216 100644 --- a/app/code/Magento/MediaGallerySynchronizationMetadata/composer.json +++ b/app/code/Magento/MediaGallerySynchronizationMetadata/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-media-gallery-synchronization-metadata", "description": "Magento module responsible for images metadata synchronization", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-metadata-api": "*", - "magento/module-media-gallery-synchronization-api": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-media-gallery-metadata-api": "100.4.*", + "magento/module-media-gallery-synchronization-api": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryUi/Model/Directories/GetDirectoryTree.php b/app/code/Magento/MediaGalleryUi/Model/Directories/GetDirectoryTree.php index 35e34a7e5532c..0e0000cbb869f 100644 --- a/app/code/Magento/MediaGalleryUi/Model/Directories/GetDirectoryTree.php +++ b/app/code/Magento/MediaGalleryUi/Model/Directories/GetDirectoryTree.php @@ -119,8 +119,18 @@ private function findParent(array &$node, array &$treeNode, int $level = 0): arr } foreach ($treeNode['children'] as &$tnode) { - if ($node['path_array'][$level] === $tnode['path_array'][$level]) { - return $this->findParent($node, $tnode, $level + 1); + $tNodePathLength = count($tnode['path_array']); + $found = false; + while ($level < $tNodePathLength) { + if ($node['path_array'][$level] === $tnode['path_array'][$level]) { + $level ++; + $found = true; + } else { + break; + } + } + if ($found) { + return $this->findParent($node, $tnode, $level); } } return $result; diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup.xml index af2b383143f62..bfde689e2e310 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup.xml @@ -9,14 +9,12 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> <actionGroup name="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup"> <annotations> - <description>Validates that the provided elemen present on page but have attribute disabled.</description> + <description>Validates that the provided element is present on the page but is disabled.</description> </annotations> <arguments> <argument name="buttonName" type="string"/> </arguments> - <grabMultiple selector="{{AdminEnhancedMediaGalleryActionsSection.notDisabledButtons}}" stepKey="verifyDisabledAttribute"/> - <assertEquals stepKey="assertSelectedCategories"> <actualResult type="variable">verifyDisabledAttribute</actualResult> <expectedResult type="array">[{{buttonName}}]</expectedResult> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminCloseEnhancedMediaGalleryActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminCloseEnhancedMediaGalleryActionGroup.xml new file mode 100644 index 0000000000000..6202fd7e8ce87 --- /dev/null +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminCloseEnhancedMediaGalleryActionGroup.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminCloseEnhancedMediaGalleryActionGroup"> + <annotations> + <description>Clicks the Cancel button in the media gallery</description> + </annotations> + <waitForElementVisible selector="{{AdminEnhancedMediaGalleryActionsSection.cancel}}" stepKey="waitForCancelButton"/> + <click selector="{{AdminEnhancedMediaGalleryActionsSection.cancel}}" stepKey="clickCancelButton"/> + <waitForPageLoad stepKey="waitForMediaGalleryClose"/> + <waitForElementNotVisible selector="{{AdminEnhancedMediaGalleryActionsSection.cancel}}" stepKey="waitForCancelButtonGone"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryDeleteGridViewActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryDeleteGridViewActionGroup.xml index 95f3080049db7..0d1898f3ad8ba 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryDeleteGridViewActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryDeleteGridViewActionGroup.xml @@ -13,7 +13,7 @@ <description>Delete grid view bookmarks by name</description> </annotations> <arguments> - <argument name="viewToDelete" type="string"/> + <argument name="viewToDelete" type="string" defaultValue="{{NewGridView.name}}"/> </arguments> <click selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" stepKey="openViewBookmarks"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryImageDeleteActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryImageDeleteActionGroup.xml index b3733ceb4c4a0..1c19b5f53f23d 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryImageDeleteActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryImageDeleteActionGroup.xml @@ -12,11 +12,14 @@ <annotations> <description>Delete image from the Media Gallery</description> </annotations> + <arguments> + <argument name="imageName" type="string" defaultValue=""/> + </arguments> - <click selector="{{AdminEnhancedMediaGalleryImageActionsSection.openContextMenu}}" stepKey="openContextMenu"/> + <click selector="{{AdminEnhancedMediaGalleryImageActionsSection.openContextMenuByImage(imageName)}}" stepKey="openContextMenu"/> <click selector="{{AdminEnhancedMediaGalleryImageActionsSection.delete}}" stepKey="deleteImage"/> - <waitForLoadingMaskToDisappear stepKey="waitForDeleteModal"/> + <waitForPageLoad stepKey="waitForDeleteModal"/> <click selector="{{AdminEnhancedMediaGalleryDeleteModalSection.confirmDelete}}" stepKey="confirmDelete"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/> + <waitForPageLoad stepKey="waitForLoadingMaskToDisappear"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySaveCustomViewActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySaveCustomViewActionGroup.xml index 57096124c0370..fd9abd6e54d79 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySaveCustomViewActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySaveCustomViewActionGroup.xml @@ -13,12 +13,15 @@ <description>Save custom view media gallery</description> </annotations> <arguments> - <argument name="viewName" type="string" defaultValue="Test View"/> + <argument name="viewName" type="string" defaultValue="{{NewGridView.name}}"/> </arguments> - + <click selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" stepKey="openViewBookmarks"/> + <waitForElementVisible selector="{{AdminGridDefaultViewControls.saveViewAs}}" stepKey="waitForSaveViewButton"/> <click selector="{{AdminGridDefaultViewControls.saveViewAs}}" stepKey="saveView"/> + <waitForElementVisible selector="{{AdminGridDefaultViewControls.viewName}}" stepKey="waitForViewNameInput"/> <fillField selector="{{AdminGridDefaultViewControls.viewName}}" userInput="{{viewName}}" stepKey="inputViewName"/> <pressKey selector="{{AdminGridDefaultViewControls.viewName}}" parameterArray="[\Facebook\WebDriver\WebDriverKeys::ENTER]" stepKey="pressEnterKey"/> + <waitForElementNotVisible selector="{{AdminGridDefaultViewControls.viewName}}" stepKey="waitForViewNameInputGone"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup.xml index 4244724599fed..74c7822387aa3 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup.xml @@ -13,7 +13,7 @@ <description>Apply custom bookmarks view to the media gallery grid</description> </annotations> <arguments> - <argument name="selectView" type="string"/> + <argument name="selectView" type="string" defaultValue="{{DefaultGridView.name}}"/> </arguments> <click selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" stepKey="openViewBookmarks"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryUploadImageActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryUploadImageActionGroup.xml index 9a9c09cda9ab2..98bd25d7da302 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryUploadImageActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminEnhancedMediaGalleryUploadImageActionGroup.xml @@ -10,16 +10,15 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> <actionGroup name="AdminEnhancedMediaGalleryUploadImageActionGroup"> <annotations> - <description>Uploads the provided Image to Media Gallery. - If you use this action group, you MUST add steps to delete the image in the "after" steps.</description> + <description>Uploads the provided Image to Media Gallery. If you use this action group, you MUST add steps to delete the image in the "after" steps.</description> </annotations> <arguments> <argument name="image"/> </arguments> - <waitForPageLoad stepKey="waitForPageFullyLoaded"/> + <waitForElement selector="{{AdminEnhancedMediaGalleryActionsSection.upload}}" stepKey="waitForUploadButton"/> <attachFile selector="{{AdminEnhancedMediaGalleryActionsSection.upload}}" userInput="{{image.value}}" stepKey="uploadImage"/> <waitForPageLoad stepKey="waitForPageLoad"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/> + <comment userInput="BIC workaround" stepKey="waitForLoadingMaskToDisappear"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryAssertAttentionModalActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryAssertAttentionModalActionGroup.xml new file mode 100644 index 0000000000000..6fac4b2e7e115 --- /dev/null +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryAssertAttentionModalActionGroup.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminMediaGalleryAssertAttentionModalActionGroup"> + <annotations> + <description>Verifies that a modal is present that tells the user that they cannot create the directory</description> + </annotations> + <arguments> + <argument name="headerText" type="string" defaultValue="Attention"/> + <argument name="action" type="string" defaultValue="create"/> + <argument name="folderName" type="string" defaultValue="{{AdminMediaGalleryFolderData.name}}"/> + </arguments> + <waitForElementVisible selector="{{AdminMediaGalleryAttentionModalSection.attentionModalHeader(headerText)}}" stepKey="waitForModalHeader"/> + <waitForElementVisible selector="{{AdminMediaGalleryAttentionModalSection.attentionModalContent(action, folderName)}}" stepKey="waitForModalContent"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCloseAttentionModalActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCloseAttentionModalActionGroup.xml new file mode 100644 index 0000000000000..c5b889336af58 --- /dev/null +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCloseAttentionModalActionGroup.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminMediaGalleryCloseAttentionModalActionGroup"> + <annotations> + <description>Closes the attention modal</description> + </annotations> + <arguments> + <argument name="headerText" type="string" defaultValue="Attention"/> + </arguments> + <waitForElementVisible selector="{{AdminMediaGalleryAttentionModalSection.attentionModalOkButton}}" stepKey="waitForModalOkButton" /> + <click selector="{{AdminMediaGalleryAttentionModalSection.attentionModalOkButton}}" stepKey="clickModalOkButton"/> + <waitForElementNotVisible selector="{{AdminMediaGalleryAttentionModalSection.attentionModalHeader(headerText)}}" stepKey="waitForModalGone"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCreateNewFolderActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCreateNewFolderActionGroup.xml index f3ccc8ef7be04..fc9e4bb427f74 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCreateNewFolderActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryCreateNewFolderActionGroup.xml @@ -14,5 +14,6 @@ </arguments> <fillField selector="{{AdminMediaGalleryFolderSection.folderNameField}}" userInput="{{name}}" stepKey="setFolderName" /> <click selector="{{AdminMediaGalleryFolderSection.folderConfirmCreateButton}}" stepKey="clickCreateButton"/> + <waitForPageLoad stepKey="waitForFolderCreation"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryFolderSelectActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryFolderSelectActionGroup.xml index 5751b8ec323da..2fdd7f8360ebe 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryFolderSelectActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryFolderSelectActionGroup.xml @@ -18,6 +18,6 @@ <waitForElementVisible selector="{{AdminMediaGalleryFolderSection.folderInTree(name)}}" stepKey="waitBeforeClickOnFolder"/> <click selector="{{AdminMediaGalleryFolderSection.folderInTree(name)}}" stepKey="selectFolder"/> - <waitForLoadingMaskToDisappear stepKey="waitForFolderContents"/> + <waitForPageLoad stepKey="waitForFolderContents"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryImageDeleteActionGroup.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryImageDeleteActionGroup.xml index e6cbbfbc1f48d..b01cd02cd8a84 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryImageDeleteActionGroup.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/ActionGroup/AdminMediaGalleryImageDeleteActionGroup.xml @@ -14,8 +14,8 @@ </annotations> <waitForElementVisible selector="{{AdminMediaGalleryHeaderButtonsSection.deleteSelected}}" stepKey="waitForDeleteSelectedButton"/> <click selector="{{AdminMediaGalleryHeaderButtonsSection.deleteSelected}}" stepKey="ClickDeleteSelectedButton"/> - <waitForLoadingMaskToDisappear stepKey="waitForDeleteModal"/> + <waitForPageLoad stepKey="waitForDeleteModal"/> <click selector="{{AdminEnhancedMediaGalleryDeleteModalSection.confirmDelete}}" stepKey="confirmDelete"/> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/> + <waitForPageLoad stepKey="waitForLoadingMaskToDisappear"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Data/AdminMediaGalleryFolderData.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Data/AdminMediaGalleryFolderData.xml index e4149acdf58d1..6bfacaf75a0c3 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Data/AdminMediaGalleryFolderData.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Data/AdminMediaGalleryFolderData.xml @@ -11,6 +11,9 @@ <entity name="AdminMediaGalleryFolderData"> <data key="name" unique="suffix">folder</data> </entity> + <entity name="AdminMediaGalleryFolder2Data"> + <data key="name" unique="suffix">folder2</data> + </entity> <entity name="AdminMediaGalleryFolderInvalidData"> <data key="name">,.?/:;'[{]}|~`!@#$%^*()_=+</data> </entity> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryActionsSection.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryActionsSection.xml index 907f2c3116800..36a6a94edcd18 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryActionsSection.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryActionsSection.xml @@ -9,7 +9,7 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminEnhancedMediaGalleryActionsSection"> <element name="editViewButtonPartial" type="button" selector="/following-sibling::div/button[@class='action-edit']"/> - <element name="deleteViewButton" type="button" selector="//div[@data-bind='afterRender: \$data.setToolbarNode']//input/following-sibling::div/button[@class='action-delete']"/> + <element name="deleteViewButton" type="button" selector="//div[@data-bind='afterRender: \$data.setToolbarNode']//li[contains(@class,'_edit')]//input/following-sibling::div/button[@class='action-delete']"/> <element name="upload" type="input" selector="#image-uploader-input"/> <element name="cancel" type="button" selector="[data-ui-id='cancel-button']"/> <element name="notDisabledButtons" type="button" selector="//div[@class='page-actions floating-header']/button[not(@disabled='disabled') and not(@id='cancel')]"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryImageActionsSection.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryImageActionsSection.xml index 17c3e82144d6f..8b3e535ce6bda 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryImageActionsSection.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminEnhancedMediaGalleryImageActionsSection.xml @@ -9,6 +9,7 @@ xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> <section name="AdminEnhancedMediaGalleryImageActionsSection"> <element name="openContextMenu" type="button" selector=".three-dots"/> + <element name="openContextMenuByImage" type="button" parameterized="true" selector="//img[contains(@src,'{{image}}')]/ancestor::*[contains(@class,'media-gallery-wrap')]//*[contains(@class,'three-dots')]"/> <element name="contextMenuItem" type="block" selector="//div[@class='media-gallery-image']//ul[@class='action-menu _active']//li//a[@class='action-menu-item']"/> <element name="viewDetails" type="button" selector="//ul[@class='action-menu _active']//a[text()='View Details']" timeout="30"/> <element name="delete" type="button" selector="//ul[@class='action-menu _active']//a[text()='Delete']"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryAttentionModalSection.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryAttentionModalSection.xml new file mode 100644 index 0000000000000..7f548e70d6489 --- /dev/null +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryAttentionModalSection.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<sections xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Page/etc/SectionObject.xsd"> + <section name="AdminMediaGalleryAttentionModalSection"> + <element name="attentionModalHeader" type="block" parameterized="true" selector="//h1[contains(text(), '{{headerText}}')]"/> + <element name="attentionModalContent" type="block" parameterized="true" selector="//aside[contains(@class,'_show')]//div[@data-role='content']//div[text()='Could not {{action}} directories: {{folderName}}']"/> + <element name="attentionModalOkButton" type="button" selector="//button/span[contains(text(),'OK')]"/> + </section> +</sections> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryFolderSection.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryFolderSection.xml index be12829229663..a49ab74ecd198 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryFolderSection.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Section/AdminMediaGalleryFolderSection.xml @@ -17,7 +17,7 @@ <element name="folderConfirmDeleteButton" type="button" selector="//footer//button/span[contains(text(), 'OK')]" timeout="30"/> <element name="folderCancelDeleteButton" type="button" selector="//footer//button/span[contains(text(), 'Cancel')]"/> <element name="folderNameField" type="button" selector="[name=folder_name]"/> - <element name="folderConfirmCreateButton" type="button" selector="//button/span[contains(text(),'Confirm')]" timeout="30"/> + <element name="folderConfirmCreateButton" type="button" selector="//aside[contains(@class,'_show')]//button/span[contains(text(),'Confirm')]" timeout="30"/> <element name="folderNameValidationMessage" type="block" selector="label.mage-error"/> <element name="folderArrow" type="button" selector="#{{id}} > .jstree-icon" parameterized="true"/> <element name="checkIfFolderArrowExpand" type="button" selector="//li[@id='{{id}}' and contains(@class,'jstree-closed')]" parameterized="true"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Suite/MediaGalleryUiSuite.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Suite/MediaGalleryUiSuite.xml index bda9b6ad08e43..3b5725d617d2b 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Suite/MediaGalleryUiSuite.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Suite/MediaGalleryUiSuite.xml @@ -13,6 +13,14 @@ <actionGroup ref="AdminDisableWYSIWYGActionGroup" stepKey="disableWYSIWYG" /> <magentoCLI command="config:set {{MediaGalleryConfigDataEnabled.path}} {{MediaGalleryConfigDataEnabled.value}}" stepKey="enableEnhancedMediaGallery"/> <magentoCLI command="config:set {{MediaGalleryRenditionsDataEnabled.path}} {{MediaGalleryRenditionsDataEnabled.value}}" stepKey="enableMediaGalleryRenditions"/> + + <!-- Create Media Gallery Directories for `catalog/category` and `wysiwyg` --> + <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> + <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> + <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromCategoryImage"/> + <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> + <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logout"/> </before> <after> <magentoCLI command="config:set {{MediaGalleryRenditionsDataDisabled.path}} {{MediaGalleryRenditionsDataDisabled.value}}" stepKey="disableMediaGalleryRenditions"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDeleteImagesInBulkTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDeleteImagesInBulkTest.xml index fe2b5b1639fbe..670ffbcf6ce7c 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDeleteImagesInBulkTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDeleteImagesInBulkTest.xml @@ -26,9 +26,26 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> <after> <deleteData createDataKey="category" stepKey="deleteCategory"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandCategoryFolder"> + <argument name="FolderName" value="category"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDuplicatedImagesTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDuplicatedImagesTest.xml index e87354de41761..83b44f5654c15 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDuplicatedImagesTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryDuplicatedImagesTest.xml @@ -21,17 +21,35 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageUpload.fileName}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> - <argument name="imageName" value="{{ImageUpload_1.fileName}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clikDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilter"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> + <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> + <argument name="imageName" value="{{ImageUpload_1.fileName}}"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clikDeleteSelectedButton"/> + <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> @@ -51,6 +69,6 @@ <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertSecondImageInGrid"> <argument name="title" value="ImageUpload_1.filename"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilter"/> + <comment userInput="BIC workaround" stepKey="clearGridFilter"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryUploadImageWithMetadataTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryUploadImageWithMetadataTest.xml index f026b87f7ec88..f3f352e99bc22 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryUploadImageWithMetadataTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryUploadImageWithMetadataTest.xml @@ -18,10 +18,32 @@ <severity value="CRITICAL"/> <group value="media_gallery_ui"/> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> + + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + </after> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -29,42 +51,42 @@ <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageDescriptionActionGroup" stepKey="verifyImageDescription"> <argument name="description" value="ImageMetadata.description"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyImageKeywords"> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyImageKeywords"> <argument name="keywords" value="ImageMetadata.keywords"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyImageTitle"> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyImageTitle"> <argument name="title" value="ImageMetadata.title"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteJpegImage"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteJpegImage"/> - <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadPngImage"> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadPngImage"> <argument name="image" value="ImageUploadPng"/> - </actionGroup> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewPngImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageDescriptionActionGroup" stepKey="verifyPngImageDescription"> <argument name="description" value="ImageMetadata.description"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyPngImageKeywords"> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyPngImageKeywords"> <argument name="keywords" value="ImageMetadata.keywords"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyPngImageTitle"> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyPngImageTitle"> <argument name="title" value="ImageMetadata.title"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deletePngImage"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deletePngImage"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadGifImage"> <argument name="image" value="ImageUploadGif"/> - </actionGroup> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewGifImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageDescriptionActionGroup" stepKey="verifyGifImageDescription"> <argument name="description" value="ImageMetadata.description"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyGifImageKeywords"> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageKeywordsActionGroup" stepKey="verifyGifImageKeywords"> <argument name="keywords" value="ImageMetadata.keywords"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyGifImageTitle"> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageTitleActionGroup" stepKey="verifyGifImageTitle"> <argument name="title" value="ImageMetadata.title"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteGifImage"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteGifImage"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyFilterByAssetTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyFilterByAssetTest.xml index a3208af0da238..4c950df0e31fe 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyFilterByAssetTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyFilterByAssetTest.xml @@ -23,16 +23,25 @@ <createData entity="SimpleSubCategory" stepKey="category"/> <actionGroup ref="EnabledWYSIWYGActionGroup" stepKey="enableWYSIWYG"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllImages"/> </before> <after> <deleteData createDataKey="category" stepKey="deleteCategory"/> <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllImages"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <actionGroup ref="AdminOpenCategoryGridPageActionGroup" stepKey="openMediaGalleryCategoryGridPage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters2"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> @@ -41,7 +50,14 @@ <argument name="id" value="$category.id$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadFirstIMage"> <argument name="image" value="ImageUpload3"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyNotUsedOptionFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyNotUsedOptionFilterTest.xml index 4719b98c78dbe..faf8989d4236e 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyNotUsedOptionFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyNotUsedOptionFilterTest.xml @@ -24,20 +24,21 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="wysiwyg"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageMetadata.title}}"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> - <argument name="imageName" value="{{UpdatedImageDetails.title}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clikDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImage"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectFirstImageToDelete"/> + <comment userInput="BIC workaround" stepKey="selectSecondImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clikDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -45,6 +46,14 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadFirstImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -62,6 +71,7 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwygToFilterImage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView2"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplyUsedInFilterActionGroup" stepKey="applyUsedInCategoryFilter"> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUpdatedTagsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUpdatedTagsTest.xml index f47d6d9202c05..ee08344d1cd1c 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUpdatedTagsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUpdatedTagsTest.xml @@ -20,9 +20,27 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUsedInFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUsedInFilterTest.xml index d54399bdeb2b2..10051aab15c2a 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUsedInFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminEnhancedMediaGalleryVerifyUsedInFilterTest.xml @@ -24,21 +24,21 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="wysiwyg"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageMetadata.title}}"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectSecondImageToDelete"> - <argument name="imageName" value="{{UpdatedImageDetails.title}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clikDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImage"/> + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectFirstImageToDelete"/> + <comment userInput="BIC workaround" stepKey="selectSecondImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clikDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -46,6 +46,14 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadFirstIMage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -66,6 +74,7 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwygToFilterIMage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplyUsedInFilterActionGroup" stepKey="applyUsedInCategoryFilter"> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageFromTwoComponentsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageFromTwoComponentsTest.xml index cb7adf3307865..7aa32a76ee79b 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageFromTwoComponentsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageFromTwoComponentsTest.xml @@ -24,8 +24,12 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> <argument name="imageName" value="{{ImageMetadata.title}}"/> @@ -43,6 +47,10 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadContentImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -60,6 +68,7 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters2"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> <argument name="name" value="wysiwyg"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageTest.xml index d3925fcb265e1..38f11e790048d 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddCategoryImageTest.xml @@ -29,9 +29,10 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilter"/> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -39,8 +40,8 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> - <waitForPageLoad stepKey="waitForPageLoad"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="waitForPageLoad"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilter"/> <actionGroup ref="AdminMediaGalleryExpandFolderActionGroup" stepKey="expandCatalogFolder"> <argument name="fieldId" value="catalog"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddFromImageDetailsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddFromImageDetailsTest.xml index 94307fa510a50..93235269de0ed 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddFromImageDetailsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryAddFromImageDetailsTest.xml @@ -22,6 +22,14 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -29,8 +37,17 @@ <after> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewImageDetails"/> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <comment userInput="BIC workaround" stepKey="viewImageDetails"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewImageDetails"/> <actionGroup ref="AdminEnhancedMediaGalleryAddImageFromImageDetailsActionGroup" stepKey="addImageFromViewDetails"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateDeleteFolderTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateDeleteFolderTest.xml index 6e6f5240e84be..dcb994e89f60d 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateDeleteFolderTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateDeleteFolderTest.xml @@ -21,7 +21,21 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> </before> + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"/> + </after> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolderWithNotValidName"> @@ -38,7 +52,10 @@ <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> - + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"/> <seeElement selector="{{AdminMediaGalleryFolderSection.folderDeleteButton}}" stepKey="deleteFolderButtonIsNotDisabled"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="unselectFolder"/> @@ -50,8 +67,7 @@ <waitForElementVisible selector="{{AdminMediaGalleryFolderSection.folderCancelDeleteButton}}" stepKey="waitBeforeModalLoads"/> <click selector="{{AdminMediaGalleryFolderSection.folderCancelDeleteButton}}" stepKey="cancelDeleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertFolderWasNotDeleted"/> - - <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> - <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"/> + <comment userInput="BIC workaround" stepKey="deleteFolder"/> + <comment userInput="BIC workaround" stepKey="assertFolderWasDeleted"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateFolderAclTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateFolderAclTest.xml index 9738ddedc3cc3..28b37603823cb 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateFolderAclTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryCreateFolderAclTest.xml @@ -65,6 +65,7 @@ </actionGroup> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertCreateButtonEnabledAllOthersDisabled"> <argument name="buttonName" value="Create Folder"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDefaultViewWithoutFiltersTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDefaultViewWithoutFiltersTest.xml index 7c2087247c574..90c7c5bea399b 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDefaultViewWithoutFiltersTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDefaultViewWithoutFiltersTest.xml @@ -29,15 +29,15 @@ <!-- Open category page --> <actionGroup ref="AdminOpenCategoryGridPageActionGroup" stepKey="openCategoryPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> <actionGroup ref="AdminEditCategoryInGridPageActionGroup" stepKey="editCategoryItem"> <argument name="categoryName" value="$category.name$"/> </actionGroup> <!-- Open media gallery folder --> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGallery"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="selectDefaultView"> - <argument name="selectView" value="Default View"/> - </actionGroup> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="selectDefaultView"/> <!-- Asset folder is empty --> <actionGroup ref="AdminEnhancedMediaGalleryAssertNoActiveFiltersAppliedActionGroup" stepKey="assertEmptyFolder"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteAssetsAclTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteAssetsAclTest.xml index 1d51caf0fc400..481eea1b517ec 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteAssetsAclTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteAssetsAclTest.xml @@ -19,24 +19,44 @@ <severity value="MAJOR"/> <group value="media_gallery_ui"/> </annotations> + <before> + <!-- Upload Images --> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminBefore"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImageWysiwyg"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImageCategory"> + <argument name="image" value="ImageUpload"/> + </actionGroup> </before> + <after> + <!-- Delete User & Role --> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin1"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminAfter"/> - <amOnPage url="{{AdminRolesPage.url}}" stepKey="navigateToUserRoleGrid" /> - <waitForPageLoad stepKey="waitForRolesGridLoad" /> + <actionGroup ref="AdminUserOpenAdminRolesPageActionGroup" stepKey="navigateToUserRoleGrid"/> + <comment userInput="BIC workaround" stepKey="waitForRolesGridLoad"/> <actionGroup ref="AdminDeleteRoleActionGroup" stepKey="deleteUserRole"> <argument name="role" value="adminRole"/> </actionGroup> - <amOnPage url="{{AdminUsersPage.url}}" stepKey="goToAllUsersPage"/> - <waitForPageLoad stepKey="waitForUsersGridLoad" /> + <actionGroup ref="AdminOpenAdminUsersPageActionGroup" stepKey="goToAllUsersPage"/> + <comment userInput="BIC workaround" stepKey="waitForUsersGridLoad"/> <actionGroup ref="AdminDeleteNewUserActionGroup" stepKey="deleteUser"> <argument name="userName" value="{{admin2.username}}"/> </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> + <!-- Create Admin User & Role --> <actionGroup ref="AdminFillUserRoleRequiredDataActionGroup" stepKey="fillUserRoleRequiredData"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Media Gallery"/> @@ -46,29 +66,59 @@ <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Delete assets"/> </actionGroup> - <actionGroup ref="AdminAddRestrictedRoleActionGroup" stepKey="AddMediaGalleryPagesResource"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Pages"/> </actionGroup> <actionGroup ref="AdminUserSaveRoleActionGroup" stepKey="saveRole"/> - <actionGroup ref="AdminCreateUserActionGroup" stepKey="createAdminUser"> <argument name="role" value="adminRole"/> <argument name="User" value="admin2"/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutOfAdmin"/> + <!-- Login as New User --> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsNewUser"> <argument name="username" value="{{admin2.username}}"/> <argument name="password" value="{{admin2.password}}"/> </actionGroup> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertCreateButtonEnabledAllOthersDisabled"> + + <!-- Verify Storage Root Directory --> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="assertCreateButtonEnabledAllOthersDisabled"/> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertDeleteButtonEnabledAllOthersDisabledStorageRoot"> + <argument name="buttonName" value="Delete Images..."/> + </actionGroup> + + <!-- Verify Can Delete Images Under Wysiwyg Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertDeleteButtonEnabledAllOthersDisabledWysiwyg"> <argument name="buttonName" value="Delete Images..."/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage1"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertImageNotExistsInTheGridActionGroup" stepKey="assertImageDeleted1"> + <argument name="title" value="ImageUpload.title"/> + </actionGroup> + + <!-- Verify Can Delete Images Under Category Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertDeleteButtonEnabledAllOthersDisabledCategory"> + <argument name="buttonName" value="Delete Images..."/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage2"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertImageNotExistsInTheGridActionGroup" stepKey="assertImageDeleted2"> + <argument name="title" value="ImageUpload.title"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="logoutFromAdmin"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteFolderAclTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteFolderAclTest.xml index 121ad25c93f0d..4a0fa8570fa98 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteFolderAclTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteFolderAclTest.xml @@ -19,24 +19,55 @@ <severity value="MAJOR"/> <group value="media_gallery_ui"/> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminBefore"/> + + <!-- Create Media Gallery Directory --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm2"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder2"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> </before> + <after> + <!-- Delete User & Role --> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin1"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminAfter"/> - <amOnPage url="{{AdminRolesPage.url}}" stepKey="navigateToUserRoleGrid" /> - <waitForPageLoad stepKey="waitForRolesGridLoad" /> + <actionGroup ref="AdminUserOpenAdminRolesPageActionGroup" stepKey="navigateToUserRoleGrid"/> + <comment userInput="BIC workaround" stepKey="waitForRolesGridLoad"/> <actionGroup ref="AdminDeleteRoleActionGroup" stepKey="deleteUserRole"> <argument name="role" value="adminRole"/> </actionGroup> - <amOnPage url="{{AdminUsersPage.url}}" stepKey="goToAllUsersPage"/> - <waitForPageLoad stepKey="waitForUsersGridLoad" /> + <actionGroup ref="AdminOpenAdminUsersPageActionGroup" stepKey="goToAllUsersPage"/> + <comment userInput="BIC workaround" stepKey="waitForUsersGridLoad"/> <actionGroup ref="AdminDeleteNewUserActionGroup" stepKey="deleteUser"> <argument name="userName" value="{{admin2.username}}"/> </actionGroup> + + <!-- Delete Created Directories --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGrid"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> + <!-- Create Admin User & Role --> <actionGroup ref="AdminFillUserRoleRequiredDataActionGroup" stepKey="fillUserRoleRequiredData"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Media Gallery"/> @@ -46,29 +77,80 @@ <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Delete folder"/> </actionGroup> - <actionGroup ref="AdminAddRestrictedRoleActionGroup" stepKey="AddMediaGalleryPagesResource"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Pages"/> </actionGroup> <actionGroup ref="AdminUserSaveRoleActionGroup" stepKey="saveRole"/> - <actionGroup ref="AdminCreateUserActionGroup" stepKey="createAdminUser"> <argument name="role" value="adminRole"/> <argument name="User" value="admin2"/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutOfAdmin"/> + <!-- Login as New User --> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsNewUser"> <argument name="username" value="{{admin2.username}}"/> <argument name="password" value="{{admin2.password}}"/> </actionGroup> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertCreateButtonEnabledAllOthersDisabled"> + + <!-- Verify Cannot Delete Storage Root --> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="assertCreateButtonEnabledAllOthersDisabled"/> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertAllButtonsDisabled"> + <argument name="buttonName" value=""/> + </actionGroup> + + <!-- Verify Cannot Delete Wysiwyg Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertDeleteButtonEnabledAllOthersDisabled1"> + <argument name="buttonName" value="Delete Folder"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="attemptDeleteWysiwygFolder"/> + <actionGroup ref="AdminMediaGalleryAssertAttentionModalActionGroup" stepKey="assertAttentionModalWysiwyg"> + <argument name="action" value="delete"/> + <argument name="folderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryCloseAttentionModalActionGroup" stepKey="closeAttentionModalWysiwyg"/> + <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertWysiwygFolderNotDeleted"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + + <!-- Verify Cannot Delete Category Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertDeleteButtonEnabledAllOthersDisabled2"> <argument name="buttonName" value="Delete Folder"/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="attemptDeleteCategoryFolder"/> + <actionGroup ref="AdminMediaGalleryAssertAttentionModalActionGroup" stepKey="assertAttentionModalCategory"> + <argument name="action" value="delete"/> + <argument name="folderName" value="catalog/category"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryCloseAttentionModalActionGroup" stepKey="closeAttentionModalCategory"/> + <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertCategoryFolderNotDeleted"> + <argument name="name" value="category"/> + </actionGroup> + + <!-- Verify Can Delete Subdirectory --> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandCreatedFolder"> + <argument name="FolderName" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder2"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> + <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> + <argument name="name" value="{{AdminMediaGalleryFolder2Data.name}}"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="logoutFromAdmin"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageContextMenuTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageContextMenuTest.xml index 980d6b7c85c20..9638e1f85e751 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageContextMenuTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageContextMenuTest.xml @@ -18,10 +18,32 @@ <severity value="CRITICAL"/> <group value="media_gallery_ui"/> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> + + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + </after> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageFileTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageFileTest.xml index ad364e7709a33..3c1f84773055e 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageFileTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageFileTest.xml @@ -21,8 +21,28 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + </after> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageWithWarningPopupTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageWithWarningPopupTest.xml index 84dd84a22d3c3..7786ad79c66da 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageWithWarningPopupTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDeleteImageWithWarningPopupTest.xml @@ -20,12 +20,12 @@ </annotations> <before> <createData entity="SimpleSubCategory" stepKey="category"/> - <magentoCLI command="config:set cms/wysiwyg/enabled enabled" stepKey="enableWYSIWYG"/> + <actionGroup ref="EnabledWYSIWYGActionGroup" stepKey="enableWYSIWYG"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -33,8 +33,11 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadCategoryImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -45,8 +48,11 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwygToAssertMessage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilterAgain"/> + <comment userInput="BIC workaround" stepKey="clearFilterAgain"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGridToDefaultViewAgain"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder2"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> <argument name="imageName" value="{{ImageMetadata.title}}"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDisabledContentFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDisabledContentFilterTest.xml index 6b174e8c43c97..e680afdf26c18 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDisabledContentFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryDisabledContentFilterTest.xml @@ -24,8 +24,16 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -33,16 +41,19 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> - <waitForPageLoad stepKey="waitForPageLoad" /> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="waitForPageLoad"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilter"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> - <argument name="name" value="testImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> - <argument name="name" value="testImage"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterNewFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterNewFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -55,6 +66,7 @@ <actionGroup ref="AdminEnableCategoryActionGroup" stepKey="disableCategory"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplySelectFilterActionGroup" stepKey="selectFilterOption"> <argument name="filterLabel" value="Content Status"/> @@ -64,14 +76,10 @@ <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertImageInGrid"> <argument name="title" value="ImageMetadata.title"/> </actionGroup> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilterInMediaGalleryGrid"/> - <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderToDelete"> - <argument name="name" value="testImage"/> - </actionGroup> - <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> - <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="testImage"/> - </actionGroup> - <waitForLoadingMaskToDisappear stepKey="waitForLoadingMaskToDisappear"/> + <comment userInput="BIC workaround" stepKey="clearFilterInMediaGalleryGrid"/> + <comment userInput="BIC workaround" stepKey="selectFolderToDelete"/> + <comment userInput="BIC workaround" stepKey="deleteFolder"/> + <comment userInput="BIC workaround" stepKey="assertFolderWasDeleted"/> + <comment userInput="BIC workaround" stepKey="waitForLoadingMaskToDisappear"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEditImageDetailsFromGridTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEditImageDetailsFromGridTest.xml index 91a17a7c1167c..3a82bc84551ac 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEditImageDetailsFromGridTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEditImageDetailsFromGridTest.xml @@ -21,16 +21,27 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEnabledContentFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEnabledContentFilterTest.xml index c2b167912dda7..15710650147e4 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEnabledContentFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryEnabledContentFilterTest.xml @@ -24,16 +24,33 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"/> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> <actionGroup ref="AdminCategoriesOpenCategoryActionGroup" stepKey="openCategory"> <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -44,6 +61,7 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplySelectFilterActionGroup" stepKey="selectFilterOption"> <argument name="filterLabel" value="Content Status"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryFilterImagesBySourceTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryFilterImagesBySourceTest.xml index 4369a61708a83..94ff4802be4ef 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryFilterImagesBySourceTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryFilterImagesBySourceTest.xml @@ -22,14 +22,23 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> - <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <actionGroup ref="AdminEnhancedMediaGalleryViewImageDetails" stepKey="viewContentImageDetails"/> - <actionGroup ref="AdminEnhancedMediaGalleryVerifyImageDetailsActionGroup" stepKey="verifyImageDetails"> - <argument name="image" value="ImageUpload"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteContentImage"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="viewContentImageDetails"/> + <comment userInput="BIC workaround" stepKey="verifyImageDetails"/> + <comment userInput="BIC workaround" stepKey="deleteContentImage"/> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadContentImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySaveFiltersStateTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySaveFiltersStateTest.xml index b8ce1f76ad4c8..3f74f830a39d2 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySaveFiltersStateTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySaveFiltersStateTest.xml @@ -25,6 +25,7 @@ <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminEnhancedMediaGallerySelectSourceFilterActionGroup" stepKey="applyLocalFilter"> <argument name="filterValue" value="Local"/> @@ -34,12 +35,10 @@ <actionGroup ref="AdminEnhancedMediaGalleryAssertActiveFiltersActionGroup" stepKey="assertFilterApplied"> <argument name="resultValue" value="Uploaded Locally"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="selectDefaultView"> - <argument name="selectView" value="Default View"/> - </actionGroup> + <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="selectDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryAssertNoActiveFiltersAppliedActionGroup" stepKey="assertNoActiveFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryDeleteGridViewActionGroup" stepKey="deleteView"> - <argument name="viewToDelete" value="Test View"/> + <argument name="viewToDelete" value="{{NewGridView.name}}"/> </actionGroup> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryAscendingTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryAscendingTest.xml index 365252095d49e..d9067d71fb027 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryAscendingTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryAscendingTest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByDirectoryAscending"> <argument name="sortName" value="directory_asc"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryDescendingTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryDescendingTest.xml index 85c468996d515..6b51bbc07bdc7 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryDescendingTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByDirectoryDescendingTest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByDirectoryDescending"> <argument name="sortName" value="directory_desc"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameAToZTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameAToZTest.xml index 9dca51065124f..1f3140c94f6dd 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameAToZTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameAToZTest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByNameAToZ"> <argument name="sortName" value="name_az"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameZToATest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameZToATest.xml index 71d2020d08658..ec6d4677ace4a 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameZToATest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNameZToATest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByNameZToA"> <argument name="sortName" value="name_za"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNewestFirstTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNewestFirstTest.xml index 3da0546db090a..c17b65b8bcebe 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNewestFirstTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByNewestFirstTest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByNewestFirst"> <argument name="sortName" value="newest_first"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByOldestFirstTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByOldestFirstTest.xml index e6191d2d02287..4d7b61d308df7 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByOldestFirstTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySortByOldestFirstTest.xml @@ -24,24 +24,30 @@ <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectParentFolderForDelete"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteParentFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertParentFolderWasDeleted"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGalleryPage"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openParentFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createParentFolder"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertParentFolderCreated"> - <argument name="name" value="parentFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoadAfterParentFolderCreated"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoadAfterParentFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> @@ -51,7 +57,7 @@ <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadThirdImage"> <argument name="image" value="ImageUpload1"/> </actionGroup> - <waitForPageLoad stepKey="waitForGridToLoad"/> + <comment userInput="BIC workaround" stepKey="waitForGridToLoad"/> <actionGroup ref="AdminEnhancedMediaGalleryClickSortActionGroup" stepKey="sortByOldestFirst"> <argument name="sortName" value="oldest_first"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewCategoryFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewCategoryFilterTest.xml index 9c72ee4ac38fe..3d459b5d6fc3c 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewCategoryFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewCategoryFilterTest.xml @@ -24,8 +24,16 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> - <magentoCLI command="config:set cms/wysiwyg/enabled disabled" stepKey="disableWYSIWYG"/> + <actionGroup ref="DisabledWYSIWYGActionGroup" stepKey="disableWYSIWYG"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> <deleteData createDataKey="category" stepKey="deleteCategory"/> </after> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> @@ -33,8 +41,15 @@ <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryTinyMce4ActionGroup" stepKey="openMediaGalleryFromWysiwyg"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetGridToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -45,6 +60,7 @@ <actionGroup ref="AdminMediaGalleryClickOkButtonTinyMce4ActionGroup" stepKey="clickOkButton"/> <actionGroup ref="AdminSaveCategoryActionGroup" stepKey="saveCategory"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplySelectFilterActionGroup" stepKey="selectFilterOption"> <argument name="filterLabel" value="Store View"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewContentFilterTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewContentFilterTest.xml index 86cae11267eaa..4edcdf2f42e9a 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewContentFilterTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryStoreViewContentFilterTest.xml @@ -23,13 +23,30 @@ <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> </before> <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> <deleteData createDataKey="createCMSPage" stepKey="deleteCmsPage"/> </after> <actionGroup ref="NavigateToCreatedCMSPageActionGroup" stepKey="navigateToCreatedCMSPage"> <argument name="CMSPage" value="$$createCMSPage$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openCreateFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> @@ -37,10 +54,11 @@ <argument name="imageName" value="{{ImageMetadata.title}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryClickAddSelectedActionGroup" stepKey="clickAddSelectedImage"/> - <scrollToTopOfPage stepKey="scrollToTop"/> - <click selector="{{CmsNewPagePageActionsSection.saveAndContinueEdit}}" stepKey="clickSavePage"/> - <waitForPageLoad stepKey="waitForPageSave"/> + <comment userInput="BIC workaround" stepKey="scrollToTop"/> + <actionGroup ref="AdminSaveAndContinueEditCmsPageActionGroup" stepKey="clickSavePage"/> + <comment userInput="BIC workaround" stepKey="waitForPageSave"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> <actionGroup ref="AdminEnhancedMediaGalleryExpandFilterActionGroup" stepKey="expandFilters"/> <actionGroup ref="AdminMediaGalleryApplySelectFilterActionGroup" stepKey="selectFilterOption"> <argument name="filterLabel" value="Store View"/> @@ -50,12 +68,9 @@ <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertImageInGrid"> <argument name="title" value="ImageMetadata.title"/> </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryEnableMassActionModeActionGroup" stepKey="enableMassActionToDeleteImages"/> - <actionGroup ref="AdminEnhancedMediaGallerySelectImageForMassActionActionGroup" stepKey="selectFirstImageToDelete"> - <argument name="imageName" value="{{ImageMetadata.title}}"/> - </actionGroup> - <actionGroup ref="AdminEnhancedMediaGalleryClickDeleteImagesButtonActionGroup" stepKey="clikDeleteSelectedButton"/> - <actionGroup ref="AdminEnhancedMediaGalleryConfirmDeleteImagesActionGroup" stepKey="deleteImages"/> - + <comment userInput="BIC workaround" stepKey="enableMassActionToDeleteImages"/> + <comment userInput="BIC workaround" stepKey="selectFirstImageToDelete"/> + <comment userInput="BIC workaround" stepKey="clikDeleteSelectedButton"/> + <comment userInput="BIC workaround" stepKey="deleteImages"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySwitchingBetweenViewsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySwitchingBetweenViewsTest.xml index 01b8c27b7371d..41cd68fe61810 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySwitchingBetweenViewsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGallerySwitchingBetweenViewsTest.xml @@ -25,7 +25,7 @@ <after> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> <actionGroup ref="AdminEnhancedMediaGalleryDeleteGridViewActionGroup" stepKey="deleteView"> - <argument name="viewToDelete" value="New View"/> + <argument name="viewToDelete" value="{{NewGridView.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolderForDelete"/> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> @@ -34,27 +34,35 @@ </after> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> - <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"/> - <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"/> - <waitForLoadingMaskToDisappear stepKey="waitForFolderContents"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="waitForFolderContents"/> <actionGroup ref="AdminEnhancedMediaGallerySaveCustomViewActionGroup" stepKey="saveCustomView"> - <argument name="viewName" value="New View"/> + <argument name="viewName" value="{{NewGridView.name}}"/> </actionGroup> <actionGroup ref="AdminOpenCategoryPageActionGroup" stepKey="openCategoryPage"/> <actionGroup ref="AdminCategoriesOpenCategoryActionGroup" stepKey="openCategory"> <argument name="category" value="$$category$$"/> </actionGroup> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearFilters2"/> <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="selectDefaultView"> - <argument name="selectView" value="Default View"/> + <argument name="selectView" value="{{DefaultGridView.name}}"/> </actionGroup> <actionGroup ref="AssertFolderIsChangedActionGroup" stepKey="assertFolderIsChanged"> <argument name="newSelectedFolder" value="category" /> </actionGroup> <actionGroup ref="AdminEnhancedMediaGallerySelectCustomBookmarksViewActionGroup" stepKey="switchBackToNewView"> - <argument name="selectView" value="New View"/> + <argument name="selectView" value="{{NewGridView.name}}"/> </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryAssertActiveFiltersActionGroup" stepKey="assertFilterApplied"> <argument name="resultValue" value="{{AdminMediaGalleryFolderData.name}}"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadAssetsAclTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadAssetsAclTest.xml index c8f8655d11edb..5ebfec460da35 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadAssetsAclTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadAssetsAclTest.xml @@ -19,24 +19,45 @@ <severity value="MAJOR"/> <group value="media_gallery_ui"/> </annotations> + <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminBefore"/> </before> + <after> + <!-- Delete User & Role --> + <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin1"/> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdminAfter"/> - <amOnPage url="{{AdminRolesPage.url}}" stepKey="navigateToUserRoleGrid" /> - <waitForPageLoad stepKey="waitForRolesGridLoad" /> + <actionGroup ref="AdminUserOpenAdminRolesPageActionGroup" stepKey="navigateToUserRoleGrid"/> + <comment userInput="BIC workaround" stepKey="waitForRolesGridLoad"/> <actionGroup ref="AdminDeleteRoleActionGroup" stepKey="deleteUserRole"> <argument name="role" value="adminRole"/> </actionGroup> - <amOnPage url="{{AdminUsersPage.url}}" stepKey="goToAllUsersPage"/> - <waitForPageLoad stepKey="waitForUsersGridLoad" /> + <actionGroup ref="AdminOpenAdminUsersPageActionGroup" stepKey="goToAllUsersPage"/> + <comment userInput="BIC workaround" stepKey="waitForUsersGridLoad"/> <actionGroup ref="AdminDeleteNewUserActionGroup" stepKey="deleteUser"> <argument name="userName" value="{{admin2.username}}"/> </actionGroup> + + <!-- Delete Uploaded Images --> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage1"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage2"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> + <!-- Create Admin User & Role --> <actionGroup ref="AdminFillUserRoleRequiredDataActionGroup" stepKey="fillUserRoleRequiredData"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Media Gallery"/> @@ -46,29 +67,66 @@ <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Upload assets"/> </actionGroup> - <actionGroup ref="AdminAddRestrictedRoleActionGroup" stepKey="AddMediaGalleryPagesResource"> <argument name="User" value="adminRole"/> <argument name="restrictedRole" value="Pages"/> </actionGroup> <actionGroup ref="AdminUserSaveRoleActionGroup" stepKey="saveRole"/> - <actionGroup ref="AdminCreateUserActionGroup" stepKey="createAdminUser"> <argument name="role" value="adminRole"/> <argument name="User" value="admin2"/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutOfAdmin"/> + <!-- Login as New User --> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsNewUser"> <argument name="username" value="{{admin2.username}}"/> <argument name="password" value="{{admin2.password}}"/> </actionGroup> <actionGroup ref="AdminOpenCreateNewCMSPageActionGroup" stepKey="openNewPage"/> <actionGroup ref="AdminOpenMediaGalleryFromPageNoEditorActionGroup" stepKey="openMediaGalleryForPage"/> - <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertCreateButtonEnabledAllOthersDisabled"> + + <!-- Verify Cannot Upload To Storage Root Directory --> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="assertCreateButtonEnabledAllOthersDisabled"/> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertUploadButtonEnabledAllOthersDisabledStorageRoot"> <argument name="buttonName" value="Upload Image"/> </actionGroup> - <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="attemptToUploadImage"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + <waitForText userInput="{{ImageUpload.file}}: We can't upload the file to the current folder right now. Please try another folder." stepKey="waitForErrorMessage"/> + <actionGroup ref="AdminMediaGalleryAssertImageNotExistsInTheGridActionGroup" stepKey="assertImageNotUploaded"> + <argument name="title" value="ImageUpload.title"/> + </actionGroup> + + <!-- Verify Can Upload To Wysiwyg Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertUploadButtonEnabledAllOthersDisabledWysiwyg"> + <argument name="buttonName" value="Upload Image"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="attemptToUploadImageWysiwyg"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertImageInGridWysiwyg"> + <argument name="title" value="ImageUpload.filename"/> + </actionGroup> + + <!-- Verify Can Upload To Category Directory --> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCategoryFolder"> + <argument name="name" value="category"/> + </actionGroup> + <actionGroup ref="AdminAssertMediaGalleryButtonNotDisabledOnPageActionGroup" stepKey="assertUploadButtonEnabledAllOthersDisabledCategory"> + <argument name="buttonName" value="Upload Image"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="attemptToUploadImageCategory"> + <argument name="image" value="ImageUpload"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryAssertImageInGridActionGroup" stepKey="assertImageInGridCategory"> + <argument name="title" value="ImageUpload.filename"/> + </actionGroup> + <comment userInput="BIC workaround" stepKey="logoutFromAdmin"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadCategoryImageTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadCategoryImageTest.xml index fa43e4e17d406..94a5df2452644 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadCategoryImageTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryUploadCategoryImageTest.xml @@ -36,7 +36,8 @@ <actionGroup ref="AddCategoryImageActionGroup" stepKey="addCategoryImage"/> <actionGroup ref="AdminSaveCategoryFormActionGroup" stepKey="saveCategoryForm"/> <actionGroup ref="AdminOpenMediaGalleryFromCategoryImageUploaderActionGroup" stepKey="openMediaGalleryFromImageUploader"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="clearFilter"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> + <comment userInput="BIC workaround" stepKey="clearFilter"/> <actionGroup ref="AdminMediaGalleryExpandFolderActionGroup" stepKey="expandCatalogFolder"> <argument name="fieldId" value="catalog"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryVerifyImageGridAttributesTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryVerifyImageGridAttributesTest.xml index 01a26cce1b6fb..5883e757e8655 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryVerifyImageGridAttributesTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryVerifyImageGridAttributesTest.xml @@ -21,8 +21,17 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> </before> <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"/> </after> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsDeleteImageTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsDeleteImageTest.xml index 00fc07eb6c1af..5fc81facdbac9 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsDeleteImageTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsDeleteImageTest.xml @@ -21,7 +21,29 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsEditTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsEditTest.xml index 92909bcf06795..2fb1d230eef12 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsEditTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsEditTest.xml @@ -21,9 +21,29 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsTest.xml index a65dbf0c0f56d..1581786e95f1a 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminMediaGalleryViewDetailsTest.xml @@ -21,27 +21,34 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> </before> <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <wait time="5" stepKey="waitFilterReallyCleared"/> + <comment userInput="BIC workaround" stepKey="waitFilterReallyCleared"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="assetFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="assetFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <wait time="5" stepKey="waitFilterReallyCleared"/> + <comment userInput="BIC workaround" stepKey="waitFilterReallyCleared"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> - <argument name="name" value="assetFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> - <argument name="name" value="assetFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <waitForPageLoad stepKey="waitForGridToLoadAfterNewFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryCreateDeleteFolderTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryCreateDeleteFolderTest.xml index 164ab523d508a..91a01ecd9d2f7 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryCreateDeleteFolderTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryCreateDeleteFolderTest.xml @@ -21,8 +21,24 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> </before> + <after> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> + </after> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolderWithNotValidName"> <argument name="name" value="{{AdminMediaGalleryFolderInvalidData.name}}"/> @@ -38,6 +54,10 @@ <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openMediaGalleryForPage"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"/> <seeElement selector="{{AdminMediaGalleryFolderSection.folderDeleteButton}}" stepKey="deleteFolderButtonIsNotDisabled"/> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="unselectFolder"/> @@ -49,8 +69,7 @@ <waitForElementVisible selector="{{AdminMediaGalleryFolderSection.folderCancelDeleteButton}}" stepKey="waitBeforeModalLoads"/> <click selector="{{AdminMediaGalleryFolderSection.folderCancelDeleteButton}}" stepKey="cancelDeleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertFolderWasNotDeleted"/> - - <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> - <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"/> + <comment userInput="BIC workaround" stepKey="deleteFolder"/> + <comment userInput="BIC workaround" stepKey="assertFolderWasDeleted"/> </test> </tests> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsFromDialogTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsFromDialogTest.xml index 250b42c5510a7..e4fbfa1dfc6c0 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsFromDialogTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsFromDialogTest.xml @@ -21,16 +21,27 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryDeletedAllImagesActionGroup" stepKey="deleteAllMediaGalleryImages"/> + <comment userInput="BIC workaround" stepKey="deleteAllMediaGalleryImages"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminEnhancedMediaGalleryImageDeleteActionGroup" stepKey="deleteImage"> + <argument name="imageName" value="{{ImageUpload.fileName}}"/> + </actionGroup> <actionGroup ref="AdminLogoutActionGroup" stepKey="logoutFromAdmin"/> </after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> - <actionGroup ref="ClearFiltersAdminDataGridActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetMediaGalleryGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload"/> </actionGroup> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsTest.xml index 039e9212945e2..65248ebf0b96f 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryEditImageDetailsTest.xml @@ -24,6 +24,7 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> </before> <after> <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsEditTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsEditTest.xml index 2cf6bf5dfe623..d66af070b4ce9 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsEditTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsEditTest.xml @@ -21,9 +21,29 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> + <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> </before> <after> - <actionGroup ref="AdminEnhancedMediaGalleryImageDetailsDeleteActionGroup" stepKey="deleteImage"/> + <comment userInput="BIC workaround" stepKey="deleteImage"/> + <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="clearGridFilters"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectCreatedFolder"> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> + </actionGroup> + <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteCreatedFolder"/> </after> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> <argument name="image" value="ImageUpload3"/> diff --git a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsTest.xml b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsTest.xml index 0f4078d914b3a..b4cdb3c8b7151 100644 --- a/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsTest.xml +++ b/app/code/Magento/MediaGalleryUi/Test/Mftf/Test/AdminStandaloneMediaGalleryViewDetailsTest.xml @@ -21,27 +21,34 @@ <before> <actionGroup ref="AdminLoginActionGroup" stepKey="loginAsAdmin"/> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> + <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetToDefaultView"/> </before> <after> <actionGroup ref="AdminOpenStandaloneMediaGalleryActionGroup" stepKey="openStandaloneMediaGallery"/> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <wait time="5" stepKey="waitFilterReallyCleared"/> + <comment userInput="BIC workaround" stepKey="waitFilterReallyCleared"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectFolder"> - <argument name="name" value="assetTestFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryFolderDeleteActionGroup" stepKey="deleteFolder"/> <actionGroup ref="AdminMediaGalleryAssertFolderDoesNotExistActionGroup" stepKey="assertFolderWasDeleted"> - <argument name="name" value="assetTestFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> </after> <actionGroup ref="ResetAdminDataGridToDefaultViewActionGroup" stepKey="resetAdminDataGridToDefaultView"/> - <wait time="5" stepKey="waitFilterReallyCleared"/> + <comment userInput="BIC workaround" stepKey="waitFilterReallyCleared"/> + <actionGroup ref="AdminMediaGalleryFolderSelectActionGroup" stepKey="selectWysiwygFolder"> + <argument name="name" value="wysiwyg"/> + </actionGroup> <actionGroup ref="AdminMediaGalleryOpenNewFolderFormActionGroup" stepKey="openNewFolderForm"/> <actionGroup ref="AdminMediaGalleryCreateNewFolderActionGroup" stepKey="createNewFolder"> - <argument name="name" value="assetTestFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <actionGroup ref="AdminMediaGalleryAssertFolderNameActionGroup" stepKey="assertNewFolderCreated"> - <argument name="name" value="assetTestFolder"/> + <argument name="name" value="{{AdminMediaGalleryFolderData.name}}"/> </actionGroup> <waitForPageLoad stepKey="waitForGridToLoadAfterNewFolderCreated"/> <actionGroup ref="AdminEnhancedMediaGalleryUploadImageActionGroup" stepKey="uploadImage"> diff --git a/app/code/Magento/MediaGalleryUi/composer.json b/app/code/Magento/MediaGalleryUi/composer.json index 204e0b37c3bf8..86836c0846cf5 100644 --- a/app/code/Magento/MediaGalleryUi/composer.json +++ b/app/code/Magento/MediaGalleryUi/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-media-gallery-ui", "description": "Magento module responsible for the media gallery UI implementation", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-ui": "*", - "magento/module-store": "*", - "magento/module-media-gallery-ui-api": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-metadata-api": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-media-content-api": "*", - "magento/module-cms": "*", - "magento/module-directory": "*", - "magento/module-authorization": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2-p1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-ui": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-media-gallery-ui-api": "100.4.*", + "magento/module-media-gallery-api": "101.0.*", + "magento/module-media-gallery-metadata-api": "100.4.*", + "magento/module-media-gallery-synchronization-api": "100.4.*", + "magento/module-media-content-api": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-directory": "100.4.*", + "magento/module-authorization": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/MediaGalleryUiApi/composer.json b/app/code/Magento/MediaGalleryUiApi/composer.json index d577f50523f13..07d88e37b9045 100644 --- a/app/code/Magento/MediaGalleryUiApi/composer.json +++ b/app/code/Magento/MediaGalleryUiApi/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-media-gallery-ui-api", "description": "Magento module responsible for the media gallery UI implementation API", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*" - }, - "suggest": { - "magento/module-cms": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*" + }, + "suggest": { + "magento/module-cms": "104.0.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/MediaStorage/Model/File/Storage.php b/app/code/Magento/MediaStorage/Model/File/Storage.php index f5ebda4a8d55c..b6fd92925146f 100644 --- a/app/code/Magento/MediaStorage/Model/File/Storage.php +++ b/app/code/Magento/MediaStorage/Model/File/Storage.php @@ -299,9 +299,10 @@ public function getScriptConfig() $config['media_directory'] = $this->localMediaDirectory->getAbsolutePath(); $allowedResources = $this->_coreConfig->getValue(self::XML_PATH_MEDIA_RESOURCE_WHITELIST, 'default'); - foreach ($allowedResources as $allowedResource) { - $config['allowed_resources'][] = $allowedResource; - } + array_walk_recursive($allowedResources, function($value, $key) use (&$resources) { + $resources[] = $value; + }, $resources); + $config['allowed_resources'] = $resources; $config['update_time'] = $this->_scopeConfig->getValue( self::XML_PATH_MEDIA_UPDATE_TIME, diff --git a/app/code/Magento/MediaStorage/composer.json b/app/code/Magento/MediaStorage/composer.json index cb1057febb23e..481390835d534 100644 --- a/app/code/Magento/MediaStorage/composer.json +++ b/app/code/Magento/MediaStorage/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-media-storage", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/framework-bulk": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-theme": "*", - "magento/module-asynchronous-operations": "*", - "magento/module-authorization": "*" + "magento/framework": "103.0.*", + "magento/framework-bulk": "101.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-theme": "101.1.*", + "magento/module-asynchronous-operations": "100.4.*", + "magento/module-authorization": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/MessageQueue/composer.json b/app/code/Magento/MessageQueue/composer.json index 57603f0a73acc..dca0aa6316213 100644 --- a/app/code/Magento/MessageQueue/composer.json +++ b/app/code/Magento/MessageQueue/composer.json @@ -1,20 +1,21 @@ { "name": "magento/module-message-queue", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { - "magento/framework": "*", - "magento/framework-message-queue": "*", + "magento/framework": "103.0.*", + "magento/framework-message-queue": "100.4.*", "magento/magento-composer-installer": "*", "php": "~7.3.0||~7.4.0" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json index 5c9d2e4cf58fa..ca2ca28340868 100644 --- a/app/code/Magento/Msrp/composer.json +++ b/app/code/Magento/Msrp/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-msrp", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-store": "*", - "magento/module-tax": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-downloadable": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*" }, "suggest": { - "magento/module-bundle": "*", - "magento/module-msrp-sample-data": "*" + "magento/module-bundle": "101.0.*", + "magento/module-msrp-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/MsrpConfigurableProduct/composer.json b/app/code/Magento/MsrpConfigurableProduct/composer.json index 53d274a3c4006..bd8b6069067f4 100644 --- a/app/code/Magento/MsrpConfigurableProduct/composer.json +++ b/app/code/Magento/MsrpConfigurableProduct/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-msrp-configurable-product", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-msrp": "*", - "magento/module-configurable-product": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-msrp": "100.4.*", + "magento/module-configurable-product": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/MsrpGroupedProduct/composer.json b/app/code/Magento/MsrpGroupedProduct/composer.json index 5c426b5910ad7..a4623b69055c8 100644 --- a/app/code/Magento/MsrpGroupedProduct/composer.json +++ b/app/code/Magento/MsrpGroupedProduct/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-msrp-grouped-product", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-msrp": "*", - "magento/module-grouped-product": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-msrp": "100.4.*", + "magento/module-grouped-product": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Multishipping/composer.json b/app/code/Magento/Multishipping/composer.json index 8834603562332..32166aba6a026 100644 --- a/app/code/Magento/Multishipping/composer.json +++ b/app/code/Magento/Multishipping/composer.json @@ -1,28 +1,29 @@ { "name": "magento/module-multishipping", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-captcha": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-captcha": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -32,3 +33,4 @@ } } } + diff --git a/app/code/Magento/MysqlMq/composer.json b/app/code/Magento/MysqlMq/composer.json index 225b3a091a462..1c1bd38fbdfdf 100644 --- a/app/code/Magento/MysqlMq/composer.json +++ b/app/code/Magento/MysqlMq/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-mysql-mq", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { - "magento/framework": "*", - "magento/framework-message-queue": "*", + "magento/framework": "103.0.*", + "magento/framework-message-queue": "100.4.*", "magento/magento-composer-installer": "*", - "magento/module-store": "*", + "magento/module-store": "101.1.*", "php": "~7.3.0||~7.4.0" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/NewRelicReporting/composer.json b/app/code/Magento/NewRelicReporting/composer.json index ca4c72d5a3aad..e0cdd7188d8f4 100644 --- a/app/code/Magento/NewRelicReporting/composer.json +++ b/app/code/Magento/NewRelicReporting/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-new-relic-reporting", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", + "magento/framework": "103.0.*", "magento/magento-composer-installer": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-configurable-product": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-configurable-product": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Newsletter/Test/Mftf/Test/AdminAddImageToWYSIWYGNewsletterTest.xml b/app/code/Magento/Newsletter/Test/Mftf/Test/AdminAddImageToWYSIWYGNewsletterTest.xml index a6cb2456c583f..7e7725126b60b 100644 --- a/app/code/Magento/Newsletter/Test/Mftf/Test/AdminAddImageToWYSIWYGNewsletterTest.xml +++ b/app/code/Magento/Newsletter/Test/Mftf/Test/AdminAddImageToWYSIWYGNewsletterTest.xml @@ -35,8 +35,12 @@ <waitForPageLoad stepKey="waitForPageLoad" /> <actionGroup ref="ClickBrowseBtnOnUploadPopupActionGroup" stepKey="clickBrowserBtn"/> <actionGroup ref="VerifyMediaGalleryStorageActionsActionGroup" stepKey="VerifyMediaGalleryStorageBtn"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder"> - <argument name="FolderName" value="Storage Root"/> + <comment userInput="BIC workaround" stepKey="navigateToFolder"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> </actionGroup> <actionGroup ref="CreateImageFolderActionGroup" stepKey="CreateImageFolder"> <argument name="ImageFolder" value="ImageFolder"/> @@ -60,7 +64,13 @@ <seeElementInDOM selector="{{StorefrontNewsletterSection.imageSource(ImageUpload3.fileName)}}" stepKey="assertMediaSource"/> <closeTab stepKey="closeTab"/> <after> - <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> + <argument name="FolderName" value="Storage Root"/> + </actionGroup> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteCreatedFolder"> <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json index 790370c328644..0c6dcee0e7e13 100644 --- a/app/code/Magento/Newsletter/composer.json +++ b/app/code/Magento/Newsletter/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-newsletter", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cms": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-email": "*", - "magento/module-require-js": "*", - "magento/module-store": "*", - "magento/module-widget": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-cms": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-email": "101.1.*", + "magento/module-require-js": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-widget": "101.2.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/NewsletterGraphQl/composer.json b/app/code/Magento/NewsletterGraphQl/composer.json index 92352a8a9adfe..e55f7915448bb 100644 --- a/app/code/Magento/NewsletterGraphQl/composer.json +++ b/app/code/Magento/NewsletterGraphQl/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-newsletter-graph-ql", "description": "Provides GraphQl functionality for the newsletter subscriptions.", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, - "type": "magento2-module", + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-customer": "*", - "magento/module-newsletter": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-customer": "103.0.*", + "magento/module-newsletter": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/OfflinePayments/composer.json b/app/code/Magento/OfflinePayments/composer.json index 237812a205130..97b493c51d58b 100644 --- a/app/code/Magento/OfflinePayments/composer.json +++ b/app/code/Magento/OfflinePayments/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-offline-payments", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-payment": "*", - "magento/module-quote": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json index 7cd6f05f8ad1c..50b3a22a12d20 100644 --- a/app/code/Magento/OfflineShipping/composer.json +++ b/app/code/Magento/OfflineShipping/composer.json @@ -1,31 +1,32 @@ { "name": "magento/module-offline-shipping", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-rule": "101.2.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-checkout": "*", - "magento/module-offline-shipping-sample-data": "*" + "magento/module-checkout": "100.4.*", + "magento/module-offline-shipping-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -35,3 +36,4 @@ } } } + diff --git a/app/code/Magento/PageCache/composer.json b/app/code/Magento/PageCache/composer.json index 506fd54886d92..ded061707e8d3 100644 --- a/app/code/Magento/PageCache/composer.json +++ b/app/code/Magento/PageCache/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-page-cache", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-config": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-config": "101.2.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Payment/composer.json b/app/code/Magento/Payment/composer.json index 72246c5698f80..8d98ff45d29a1 100644 --- a/app/code/Magento/Payment/composer.json +++ b/app/code/Magento/Payment/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-payment", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Paypal/Setup/Patch/Data/UpdateBmltoPayLater.php b/app/code/Magento/Paypal/Setup/Patch/Data/UpdateBmltoPayLater.php index 449b130fa992e..9684c60cbdd60 100644 --- a/app/code/Magento/Paypal/Setup/Patch/Data/UpdateBmltoPayLater.php +++ b/app/code/Magento/Paypal/Setup/Patch/Data/UpdateBmltoPayLater.php @@ -134,6 +134,9 @@ public function apply() foreach ($bmlSettings as $bmlPath => $bmlValue) { $setting = str_replace(self::BMLPATH, '', $bmlPath); $settingParts = explode('_', $setting); + if (count($settingParts) !== 2) { + continue; + } $page = $settingParts[0]; $setting = $settingParts[1]; $payLaterPage = $page === 'checkout' ? 'cartpage' : $page; diff --git a/app/code/Magento/Paypal/composer.json b/app/code/Magento/Paypal/composer.json index 389544b6a17a4..a53dc451bdb1d 100644 --- a/app/code/Magento/Paypal/composer.json +++ b/app/code/Magento/Paypal/composer.json @@ -1,39 +1,40 @@ { "name": "magento/module-paypal", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-instant-purchase": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-vault": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-instant-purchase": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-vault": "101.2.*" }, "suggest": { - "magento/module-checkout-agreements": "*" + "magento/module-checkout-agreements": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -43,3 +44,4 @@ } } } + diff --git a/app/code/Magento/PaypalCaptcha/composer.json b/app/code/Magento/PaypalCaptcha/composer.json index b88eb2f1a552e..53625a2ea855a 100644 --- a/app/code/Magento/PaypalCaptcha/composer.json +++ b/app/code/Magento/PaypalCaptcha/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-paypal-captcha", "description": "Provides CAPTCHA validation for PayPal Payflow Pro", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-captcha": "*", - "magento/module-checkout": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-captcha": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-paypal": "*" + "magento/module-paypal": "101.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/PaypalGraphQl/composer.json b/app/code/Magento/PaypalGraphQl/composer.json index 285217da64d72..00d549a1f86ee 100644 --- a/app/code/Magento/PaypalGraphQl/composer.json +++ b/app/code/Magento/PaypalGraphQl/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-paypal-graph-ql", "description": "GraphQl support for Paypal", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-checkout": "*", - "magento/module-paypal": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-sales": "*", - "magento/module-payment": "*", - "magento/module-store": "*", - "magento/module-vault": "*" + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*", + "magento/module-checkout": "100.4.*", + "magento/module-paypal": "101.0.*", + "magento/module-quote-graph-ql": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-payment": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-vault": "101.2.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-store-graph-ql": "*" + "magento/module-graph-ql": "100.4.*", + "magento/module-store-graph-ql": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/Persistent/composer.json b/app/code/Magento/Persistent/composer.json index 68fe5cb47c00e..574ad63703514 100644 --- a/app/code/Magento/Persistent/composer.json +++ b/app/code/Magento/Persistent/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-persistent", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-cron": "*", - "magento/module-customer": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-cron": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-page-cache": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/ProductAlert/composer.json b/app/code/Magento/ProductAlert/composer.json index bfe2a43b373ce..7d1f0e40f90c3 100644 --- a/app/code/Magento/ProductAlert/composer.json +++ b/app/code/Magento/ProductAlert/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-product-alert", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-store": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/ProductVideo/composer.json b/app/code/Magento/ProductVideo/composer.json index b7268338398a7..71cc8975fe27e 100644 --- a/app/code/Magento/ProductVideo/composer.json +++ b/app/code/Magento/ProductVideo/composer.json @@ -1,28 +1,29 @@ { "name": "magento/module-product-video", "description": "Add Video to Products", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", + "magento/framework": "103.0.*", "magento/magento-composer-installer": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*" + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-customer": "*", - "magento/module-config": "*" + "magento/module-customer": "103.0.*", + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -32,3 +33,4 @@ } } } + diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json index 31312fae26e78..acdde6006b549 100644 --- a/app/code/Magento/Quote/composer.json +++ b/app/code/Magento/Quote/composer.json @@ -1,35 +1,36 @@ { "name": "magento/module-quote", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-payment": "*", - "magento/module-sales": "*", - "magento/module-sales-sequence": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-payment": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-sequence": "100.4.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*" }, "suggest": { - "magento/module-webapi": "*" + "magento/module-webapi": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -39,3 +40,4 @@ } } } + diff --git a/app/code/Magento/QuoteAnalytics/composer.json b/app/code/Magento/QuoteAnalytics/composer.json index 4bfb7172c4c83..c903999dad429 100644 --- a/app/code/Magento/QuoteAnalytics/composer.json +++ b/app/code/Magento/QuoteAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-quote-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/QuoteBundleOptions/composer.json b/app/code/Magento/QuoteBundleOptions/composer.json index a2651272018a8..2d6cd95f82761 100644 --- a/app/code/Magento/QuoteBundleOptions/composer.json +++ b/app/code/Magento/QuoteBundleOptions/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-quote-bundle-options", "description": "Magento module provides data provider for creating buy request for bundle products", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/QuoteConfigurableOptions/composer.json b/app/code/Magento/QuoteConfigurableOptions/composer.json index 51d6933d5c6d6..0411ce38850c3 100644 --- a/app/code/Magento/QuoteConfigurableOptions/composer.json +++ b/app/code/Magento/QuoteConfigurableOptions/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-quote-configurable-options", "description": "Magento module provides data provider for creating buy request for configurable products", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/QuoteDownloadableLinks/composer.json b/app/code/Magento/QuoteDownloadableLinks/composer.json index ad120dea96263..a098f1c196fd1 100644 --- a/app/code/Magento/QuoteDownloadableLinks/composer.json +++ b/app/code/Magento/QuoteDownloadableLinks/composer.json @@ -1,16 +1,17 @@ { "name": "magento/module-quote-downloadable-links", "description": "Magento module provides data provider for creating buy request for links of downloadable products", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*" + }, "autoload": { "files": [ "registration.php" @@ -20,3 +21,4 @@ } } } + diff --git a/app/code/Magento/QuoteGraphQl/composer.json b/app/code/Magento/QuoteGraphQl/composer.json index 7a02e25ef3382..838e4d5b9fd35 100644 --- a/app/code/Magento/QuoteGraphQl/composer.json +++ b/app/code/Magento/QuoteGraphQl/composer.json @@ -2,28 +2,29 @@ "name": "magento/module-quote-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-quote": "*", - "magento/module-checkout": "*", - "magento/module-catalog": "*", - "magento/module-store": "*", - "magento/module-customer": "*", - "magento/module-customer-graph-ql": "*", - "magento/module-sales": "*", - "magento/module-directory": "*", - "magento/module-graph-ql": "*", - "magento/module-gift-message": "*", - "magento/module-catalog-inventory": "*" + "magento/framework": "103.0.*", + "magento/module-quote": "101.2.*", + "magento/module-checkout": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-store": "101.1.*", + "magento/module-customer": "103.0.*", + "magento/module-customer-graph-ql": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-graph-ql": "100.4.*", + "magento/module-gift-message": "100.4.*", + "magento/module-catalog-inventory": "100.4.*" }, "suggest": { - "magento/module-graph-ql-cache": "*" + "magento/module-graph-ql-cache": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/RelatedProductGraphQl/composer.json b/app/code/Magento/RelatedProductGraphQl/composer.json index 2cb851d56e58e..5aa29dab07580 100644 --- a/app/code/Magento/RelatedProductGraphQl/composer.json +++ b/app/code/Magento/RelatedProductGraphQl/composer.json @@ -2,19 +2,20 @@ "name": "magento/module-related-product-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*", - "magento/framework": "*" + "magento/module-catalog": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*", + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -24,3 +25,4 @@ } } } + diff --git a/app/code/Magento/ReleaseNotification/composer.json b/app/code/Magento/ReleaseNotification/composer.json index c2e347bc66ef0..cdcbe4a1ac43b 100644 --- a/app/code/Magento/ReleaseNotification/composer.json +++ b/app/code/Magento/ReleaseNotification/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-release-notification", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/module-user": "*", - "magento/module-backend": "*", - "magento/module-ui": "*", - "magento/framework": "*" - }, - "suggest": { - "magento/module-config": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/module-user": "101.2.*", + "magento/module-backend": "102.0.*", + "magento/module-ui": "101.2.*", + "magento/framework": "103.0.*" + }, + "suggest": { + "magento/module-config": "101.2.*" + }, "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/RemoteStorage/Filesystem.php b/app/code/Magento/RemoteStorage/Filesystem.php index 801fed51d4f69..4593c26281554 100644 --- a/app/code/Magento/RemoteStorage/Filesystem.php +++ b/app/code/Magento/RemoteStorage/Filesystem.php @@ -95,7 +95,9 @@ public function getDirectoryWrite($directoryCode, $driverCode = DriverPool::REMO $uri = $this->getUri($directoryCode) ?: ''; $this->writeInstances[$code] = $this->writeFactory->create( $this->driverPool->getDriver()->getAbsolutePath('', $uri), - $driverCode + $driverCode, + null, + $directoryCode ); } diff --git a/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/Write.php b/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/Write.php new file mode 100644 index 0000000000000..45d9d97fe9f15 --- /dev/null +++ b/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/Write.php @@ -0,0 +1,66 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); + +namespace Magento\RemoteStorage\Model\Filesystem\Directory; + +use Magento\Framework\App\Filesystem\DirectoryList; +use Magento\Framework\Filesystem\Directory\PathValidatorInterface; +use Magento\Framework\Filesystem\Directory\WriteInterface; +use Magento\Framework\Filesystem\DriverInterface; +use Magento\RemoteStorage\Driver\DriverPool; +use Magento\RemoteStorage\Filesystem; + +/** + * Remote storage write class + */ +class Write extends \Magento\Framework\Filesystem\Directory\Write +{ + /** + * @var WriteInterface + */ + private $localDirectoryWrite; + + /** + * Write constructor. + * + * @param \Magento\Framework\Filesystem\File\WriteFactory $fileFactory + * @param DriverInterface $driver + * @param string $path + * @param Filesystem $filesystem + * @param int|null $createPermissions + * @param PathValidatorInterface|null $pathValidator + * @param string $directoryCode + * @throws \Magento\Framework\Exception\FileSystemException + */ + public function __construct( + \Magento\Framework\Filesystem\File\WriteFactory $fileFactory, + DriverInterface $driver, + $path, + Filesystem $filesystem, + ?int $createPermissions = null, + ?PathValidatorInterface $pathValidator = null, + ?string $directoryCode = DirectoryList::PUB + ) { + parent::__construct($fileFactory, $driver, $path, $createPermissions, $pathValidator); + $this->localDirectoryWrite = $filesystem->getDirectoryWrite( + $directoryCode, + DriverPool::FILE + ); + } + + /** + * @inheritDoc + */ + public function delete($path = null) + { + $deleted = parent::delete($path); + if ($deleted) { + $deleted = $this->localDirectoryWrite->delete($path); + } + return $deleted; + } +} diff --git a/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/WriteFactory.php b/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/WriteFactory.php new file mode 100644 index 0000000000000..41dc40ca09a8b --- /dev/null +++ b/app/code/Magento/RemoteStorage/Model/Filesystem/Directory/WriteFactory.php @@ -0,0 +1,87 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +namespace Magento\RemoteStorage\Model\Filesystem\Directory; + +use Magento\Framework\Filesystem\Directory\CompositePathValidator; +use Magento\Framework\Filesystem\Directory\DenyListPathValidator; +use Magento\Framework\Filesystem\Directory\PathValidator; +use Magento\Framework\Filesystem\Directory\WriteFactory as BaseWriteFactory; +use Magento\Framework\Filesystem\DriverPool as BaseDriverPool; +use Magento\RemoteStorage\Driver\DriverPool; +use Magento\Framework\ObjectManagerInterface; + +/** + * The factory of the filesystem directory instances for remote storage write operations. + */ +class WriteFactory extends BaseWriteFactory +{ + /** + * Object Manager + * + * @var ObjectManagerInterface + */ + private $objectManager; + + /** + * Pool of filesystem drivers + * + * @var BaseDriverPool + */ + private $driverPool; + + /** + * WriteFactory constructor. + * + * @param ObjectManagerInterface $objectManager + * @param BaseDriverPool $driverPool + */ + public function __construct( + ObjectManagerInterface $objectManager, + BaseDriverPool $driverPool + ) { + $this->objectManager = $objectManager; + $this->driverPool = $driverPool; + parent::__construct($driverPool); + } + + /** + * @inheritDoc + */ + public function create( + $path, + $driverCode = DriverPool::REMOTE, + $createPermissions = null, + $directoryCode = null + ) { + if ($driverCode == DriverPool::REMOTE) { + $driver = $this->driverPool->getDriver($driverCode); + $factory = new \Magento\Framework\Filesystem\File\WriteFactory( + $this->driverPool + ); + + $validators = [ + 'pathValidator' => new PathValidator($driver), + 'denyListPathValidator' => new DenyListPathValidator($driver) + ]; + + $pathValidator = new CompositePathValidator($validators); + return $this->objectManager->create( + Write::class, + [ + 'fileFactory' => $factory, + 'driver' => $driver, + 'path' => $path, + 'createPermissions' => $createPermissions, + 'pathValidator' => $pathValidator, + 'directoryCode' => $directoryCode + ] + ); + } else { + return parent::create($path, $driverCode, $createPermissions); + } + + } +} diff --git a/app/code/Magento/RemoteStorage/composer.json b/app/code/Magento/RemoteStorage/composer.json index 1b6b361366848..42d9aab2dc7a8 100644 --- a/app/code/Magento/RemoteStorage/composer.json +++ b/app/code/Magento/RemoteStorage/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-remote-storage", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-backend": "*", - "magento/module-sitemap": "*", - "magento/module-cms": "*", - "magento/module-downloadable": "*", - "magento/module-catalog": "*", - "magento/module-media-storage": "*", - "magento/module-import-export": "*", - "magento/module-catalog-import-export": "*", - "magento/module-downloadable-import-export": "*", + "magento/module-backend": "102.0.*", + "magento/module-sitemap": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-downloadable": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-media-storage": "100.4.*", + "magento/module-import-export": "101.0.*", + "magento/module-catalog-import-export": "101.1.*", + "magento/module-downloadable-import-export": "100.4.*", "predis/predis": "*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/RemoteStorage/etc/di.xml b/app/code/Magento/RemoteStorage/etc/di.xml index aa1447b84b2cd..e0f437513d1ac 100644 --- a/app/code/Magento/RemoteStorage/etc/di.xml +++ b/app/code/Magento/RemoteStorage/etc/di.xml @@ -10,6 +10,7 @@ <preference for="Magento\RemoteStorage\Driver\Adapter\CachedAdapterInterface" type="Magento\RemoteStorage\Driver\Adapter\CachedAdapter"/> <preference for="Magento\RemoteStorage\Driver\Adapter\MetadataProviderInterface" type="Magento\RemoteStorage\Driver\Adapter\MetadataProvider"/> <preference for="Magento\RemoteStorage\Driver\Adapter\MetadataProviderFactoryInterface" type="Magento\RemoteStorage\Driver\Adapter\MetadataProviderFactory"/> + <preference for="Magento\Framework\Filesystem\DriverPool" type="Magento\RemoteStorage\Driver\DriverPool"/> <virtualType name="remoteWriteFactory" type="Magento\Framework\Filesystem\Directory\WriteFactory"> <arguments> <argument name="driverPool" xsi:type="object">Magento\RemoteStorage\Driver\DriverPool</argument> @@ -22,8 +23,9 @@ </virtualType> <type name="Magento\RemoteStorage\Filesystem"> <arguments> - <argument name="writeFactory" xsi:type="object">remoteWriteFactory</argument> - <argument name="readFactory" xsi:type="object">remoteReadFactory</argument> + <argument name="writeFactory" xsi:type="object"> + Magento\RemoteStorage\Model\Filesystem\Directory\WriteFactory + </argument> </arguments> </type> <virtualType name="customRemoteFilesystem" type="Magento\RemoteStorage\Filesystem"> diff --git a/app/code/Magento/Reports/composer.json b/app/code/Magento/Reports/composer.json index df535ae28b135..7eb1ae8d64bac 100644 --- a/app/code/Magento/Reports/composer.json +++ b/app/code/Magento/Reports/composer.json @@ -1,35 +1,36 @@ { "name": "magento/module-reports", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-downloadable": "*", - "magento/module-eav": "*", - "magento/module-quote": "*", - "magento/module-review": "*", - "magento/module-sales": "*", - "magento/module-sales-rule": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*", - "magento/module-directory": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-downloadable": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-quote": "101.2.*", + "magento/module-review": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-sales-rule": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-widget": "101.2.*", + "magento/module-wishlist": "101.2.*", + "magento/module-directory": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -39,3 +40,4 @@ } } } + diff --git a/app/code/Magento/RequireJs/composer.json b/app/code/Magento/RequireJs/composer.json index 9c3b84e88df53..9835ed7a6d9d9 100644 --- a/app/code/Magento/RequireJs/composer.json +++ b/app/code/Magento/RequireJs/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-require-js", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json index 5a428ae15fd67..1d7a28a284ae4 100644 --- a/app/code/Magento/Review/composer.json +++ b/app/code/Magento/Review/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-review", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-newsletter": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-newsletter": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-cookie": "*", - "magento/module-review-sample-data": "*" + "magento/module-cookie": "100.4.*", + "magento/module-review-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/ReviewAnalytics/composer.json b/app/code/Magento/ReviewAnalytics/composer.json index d18ec43a93ac1..26ca19d9e12b8 100644 --- a/app/code/Magento/ReviewAnalytics/composer.json +++ b/app/code/Magento/ReviewAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-review-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-review": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-review": "100.4.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/ReviewGraphQl/composer.json b/app/code/Magento/ReviewGraphQl/composer.json index 819ddefd76213..9bb3d32aa62b5 100644 --- a/app/code/Magento/ReviewGraphQl/composer.json +++ b/app/code/Magento/ReviewGraphQl/composer.json @@ -2,21 +2,22 @@ "name": "magento/module-review-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/module-catalog": "*", - "magento/module-review": "*", - "magento/module-store": "*", - "magento/framework": "*" + "magento/module-catalog": "104.0.*", + "magento/module-review": "100.4.*", + "magento/module-store": "101.1.*", + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-graph-ql": "*", - "magento/module-graph-ql-cache": "*" + "magento/module-graph-ql": "100.4.*", + "magento/module-graph-ql-cache": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Robots/composer.json b/app/code/Magento/Robots/composer.json index 2035010b0ce8b..486a817d02118 100644 --- a/app/code/Magento/Robots/composer.json +++ b/app/code/Magento/Robots/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-robots", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-theme": "*" + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Rss/composer.json b/app/code/Magento/Rss/composer.json index bd845acc12f9a..a273a0cc7b9cb 100644 --- a/app/code/Magento/Rss/composer.json +++ b/app/code/Magento/Rss/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-rss", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-customer": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Rule/composer.json b/app/code/Magento/Rule/composer.json index 0ab2b6780dcad..1d088a33e0a8b 100644 --- a/app/code/Magento/Rule/composer.json +++ b/app/code/Magento/Rule/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-rule", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-eav": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-eav": "102.1.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Sales/Test/Mftf/Test/StorefrontPrintOrderGuestTest.xml b/app/code/Magento/Sales/Test/Mftf/Test/StorefrontPrintOrderGuestTest.xml index 074a976de9425..f09e63b41f1fc 100644 --- a/app/code/Magento/Sales/Test/Mftf/Test/StorefrontPrintOrderGuestTest.xml +++ b/app/code/Magento/Sales/Test/Mftf/Test/StorefrontPrintOrderGuestTest.xml @@ -16,6 +16,9 @@ <description value="Print Order from Guest on Frontend"/> <severity value="CRITICAL"/> <testCaseId value="MC-28494"/> + <skip> + <issueId value="MQE-2834" /> + </skip> <group value="sales"/> <group value="mtf_migrated"/> </annotations> diff --git a/app/code/Magento/Sales/Test/Mftf/Test/StorefrontRedirectToOrderHistoryTest.xml b/app/code/Magento/Sales/Test/Mftf/Test/StorefrontRedirectToOrderHistoryTest.xml index ccc675f20de01..79395a0e7bb39 100644 --- a/app/code/Magento/Sales/Test/Mftf/Test/StorefrontRedirectToOrderHistoryTest.xml +++ b/app/code/Magento/Sales/Test/Mftf/Test/StorefrontRedirectToOrderHistoryTest.xml @@ -16,6 +16,9 @@ <description value="Check while order printing URL with an id of not relevant order redirects to order history"/> <severity value="MAJOR"/> <testCaseId value="MC-28543"/> + <skip> + <issueId value="MQE-2834" /> + </skip> <group value="sales"/> </annotations> <before> diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json index 411ad3739d560..77d288c9ae08f 100644 --- a/app/code/Magento/Sales/composer.json +++ b/app/code/Magento/Sales/composer.json @@ -1,45 +1,46 @@ { "name": "magento/module-sales", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "103.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-bundle": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-gift-message": "*", - "magento/module-media-storage": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-sales-rule": "*", - "magento/module-sales-sequence": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-bundle": "101.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-gift-message": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-reports": "100.4.*", + "magento/module-sales-rule": "101.2.*", + "magento/module-sales-sequence": "100.4.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-widget": "101.2.*", + "magento/module-wishlist": "101.2.*" }, "suggest": { - "magento/module-sales-sample-data": "*" + "magento/module-sales-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -49,3 +50,4 @@ } } } + diff --git a/app/code/Magento/SalesAnalytics/composer.json b/app/code/Magento/SalesAnalytics/composer.json index ca7926f2d8b5a..5057e2e182474 100644 --- a/app/code/Magento/SalesAnalytics/composer.json +++ b/app/code/Magento/SalesAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-sales-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.1", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/SalesGraphQl/composer.json b/app/code/Magento/SalesGraphQl/composer.json index b85d8c0f852da..0b6facbfdb974 100644 --- a/app/code/Magento/SalesGraphQl/composer.json +++ b/app/code/Magento/SalesGraphQl/composer.json @@ -2,21 +2,22 @@ "name": "magento/module-sales-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-catalog": "*", - "magento/module-tax": "*", - "magento/module-quote": "*", - "magento/module-graph-ql": "*", - "magento/module-shipping": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-catalog": "104.0.*", + "magento/module-tax": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-graph-ql": "100.4.*", + "magento/module-shipping": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/SalesInventory/composer.json b/app/code/Magento/SalesInventory/composer.json index 6a91b04a7c0d9..fbf4820f4d110 100644 --- a/app/code/Magento/SalesInventory/composer.json +++ b/app/code/Magento/SalesInventory/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-sales-inventory", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-sales": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json index 20246f67e337e..e824f4d7667e9 100644 --- a/app/code/Magento/SalesRule/composer.json +++ b/app/code/Magento/SalesRule/composer.json @@ -1,42 +1,43 @@ { "name": "magento/module-sales-rule", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/framework-bulk": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-rule": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-rule": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-widget": "*", - "magento/module-captcha": "*", - "magento/module-checkout": "*", - "magento/module-authorization": "*", - "magento/module-asynchronous-operations": "*" + "magento/framework": "103.0.*", + "magento/framework-bulk": "101.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-rule": "101.2.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-reports": "100.4.*", + "magento/module-rule": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-widget": "101.2.*", + "magento/module-captcha": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-authorization": "100.4.*", + "magento/module-asynchronous-operations": "100.4.*" }, "suggest": { - "magento/module-sales-rule-sample-data": "*" + "magento/module-sales-rule-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -46,3 +47,4 @@ } } } + diff --git a/app/code/Magento/SalesSequence/composer.json b/app/code/Magento/SalesSequence/composer.json index a0f9cb45cafc8..a39c350628c8a 100644 --- a/app/code/Magento/SalesSequence/composer.json +++ b/app/code/Magento/SalesSequence/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-sales-sequence", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/SampleData/composer.json b/app/code/Magento/SampleData/composer.json index 30efc94bc9274..baa802aa8753c 100644 --- a/app/code/Magento/SampleData/composer.json +++ b/app/code/Magento/SampleData/composer.json @@ -1,21 +1,22 @@ { "name": "magento/module-sample-data", "description": "Sample Data fixtures", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, "suggest": { - "magento/sample-data-media": "*" + "magento/sample-data-media": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "cli_commands.php", @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Search/composer.json b/app/code/Magento/Search/composer.json index 3df1dc5935ad8..9740043cc44eb 100644 --- a/app/code/Magento/Search/composer.json +++ b/app/code/Magento/Search/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-search", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog-search": "*", - "magento/module-reports": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog-search": "102.0.*", + "magento/module-reports": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Security/Model/AdminSessionInfo.php b/app/code/Magento/Security/Model/AdminSessionInfo.php index 77d864965baca..c14d399e98cac 100644 --- a/app/code/Magento/Security/Model/AdminSessionInfo.php +++ b/app/code/Magento/Security/Model/AdminSessionInfo.php @@ -3,12 +3,13 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Security\Model; /** * Admin Session Info Model * - * @method string getSessionId() * @method int getUserId() getUserId() * @method int getStatus() * @method string getUpdatedAt() diff --git a/app/code/Magento/Security/Model/AdminSessionsManager.php b/app/code/Magento/Security/Model/AdminSessionsManager.php index 7503fe04ba480..154760eb835d1 100644 --- a/app/code/Magento/Security/Model/AdminSessionsManager.php +++ b/app/code/Magento/Security/Model/AdminSessionsManager.php @@ -3,11 +3,12 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Security\Model; use Magento\Framework\HTTP\PhpEnvironment\RemoteAddress; -use \Magento\Security\Model\ResourceModel\AdminSessionInfo\CollectionFactory; +use Magento\Security\Model\ResourceModel\AdminSessionInfo\CollectionFactory; /** * Admin Sessions Manager Model @@ -114,7 +115,7 @@ public function processLogin() $result = $this->createAdminSessionInfoCollection()->updateActiveSessionsStatus( AdminSessionInfo::LOGGED_OUT_BY_LOGIN, $this->getCurrentSession()->getUserId(), - $this->getCurrentSession()->getSessionId(), + $this->getCurrentSession()->getId(), $olderThen ); if ($result) { @@ -173,8 +174,15 @@ public function processLogout() public function getCurrentSession() { if (!$this->currentSession) { + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); + if (!$adminSessionInfoId) { + $this->createNewSession(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); + $this->logoutOtherUserSessions(); + } + $this->currentSession = $this->adminSessionInfoFactory->create(); - $this->currentSession->load($this->authSession->getSessionId(), 'session_id'); + $this->currentSession->load($adminSessionInfoId, 'id'); } return $this->currentSession; @@ -256,7 +264,7 @@ public function logoutOtherUserSessions() ->filterByUser( $this->authSession->getUser()->getId(), \Magento\Security\Model\AdminSessionInfo::LOGGED_IN, - $this->authSession->getSessionId() + $this->authSession->getAdminSessionInfoId() ) ->filterExpiredSessions($this->securityConfig->getAdminSessionLifetime()) ->loadData(); @@ -290,17 +298,18 @@ public function cleanExpiredSessions() */ protected function createNewSession() { - $this->adminSessionInfoFactory + $adminSessionInfo = $this->adminSessionInfoFactory ->create() ->setData( [ - 'session_id' => $this->authSession->getSessionId(), 'user_id' => $this->authSession->getUser()->getId(), 'ip' => $this->remoteAddress->getRemoteAddress(), 'status' => AdminSessionInfo::LOGGED_IN ] )->save(); + $this->authSession->setAdminSessionInfoId($adminSessionInfo->getId()); + return $this; } diff --git a/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo.php b/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo.php index 5f81a0d121f25..98e7aa84fb262 100644 --- a/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo.php +++ b/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo.php @@ -3,6 +3,7 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); namespace Magento\Security\Model\ResourceModel; @@ -89,7 +90,7 @@ public function updateStatusByUserId( $whereStatement['updated_at > ?'] = $this->dateTime->formatDate($updateOlderThen); } if (!empty($excludedSessionIds)) { - $whereStatement['session_id NOT IN (?)'] = $excludedSessionIds; + $whereStatement['id NOT IN (?)'] = $excludedSessionIds; } if (!empty($withStatuses)) { $whereStatement['status IN (?)'] = $withStatuses; diff --git a/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo/Collection.php b/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo/Collection.php index 7c4e521419563..aee9010f468f4 100644 --- a/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo/Collection.php +++ b/app/code/Magento/Security/Model/ResourceModel/AdminSessionInfo/Collection.php @@ -3,6 +3,8 @@ * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Security\Model\ResourceModel\AdminSessionInfo; /** @@ -103,7 +105,7 @@ public function filterByUser( $this->addFieldToFilter('user_id', $userId); $this->addFieldToFilter('status', $status); if (null !== $sessionIdToExclude) { - $this->addFieldToFilter('session_id', ['neq' => $sessionIdToExclude]); + $this->addFieldToFilter('id', ['neq' => $sessionIdToExclude]); } return $this; } diff --git a/app/code/Magento/Security/Setup/Patch/Data/SessionIDColumnCleanUp.php b/app/code/Magento/Security/Setup/Patch/Data/SessionIDColumnCleanUp.php new file mode 100644 index 0000000000000..f868698505609 --- /dev/null +++ b/app/code/Magento/Security/Setup/Patch/Data/SessionIDColumnCleanUp.php @@ -0,0 +1,102 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +declare(strict_types=1); +namespace Magento\Security\Setup\Patch\Data; + +use Magento\Framework\DB\Adapter\Pdo\Mysql; +use Magento\Framework\Setup\ModuleDataSetupInterface; +use Magento\Framework\Setup\Patch\DataPatchInterface; +use Psr\Log\LoggerInterface; + +/** + * Class Clean Up Data Removes unused data + */ +class SessionIDColumnCleanUp implements DataPatchInterface +{ + /** + * @var ModuleDataSetupInterface + */ + private $moduleDataSetup; + + /** + * @var LoggerInterface + */ + private $logger; + + /** + * RemoveData constructor. + * @param ModuleDataSetupInterface $moduleDataSetup + * @param LoggerInterface $logger + */ + public function __construct( + ModuleDataSetupInterface $moduleDataSetup, + LoggerInterface $logger + ) { + $this->moduleDataSetup = $moduleDataSetup; + $this->logger = $logger; + } + + /** + * @inheritdoc + */ + public function apply() + { + try { + $this->cleanAdminUserSessionTable(); + } catch (\Throwable $e) { + $this->logger->warning( + 'Security module SessionIDColumnCleanUp patch experienced an error and could not be completed.' + . ' Please submit a support ticket or email us at security@magento.com.' + ); + + return $this; + } + + return $this; + } + + /** + * Remove session id from admin_user_session table. + * + * @throws \Zend_Db_Statement_Exception + */ + private function cleanAdminUserSessionTable() + { + $tableName = $this->moduleDataSetup->getTable('admin_user_session'); + // phpcs:ignore Magento2.SQL.RawQuery + $rawQuery = sprintf( + 'UPDATE %s SET session_id = NULL WHERE session_id IS NOT NULL LIMIT 1000', + $tableName + ); + + $adapter = $this->moduleDataSetup->getConnection(); + if ($adapter instanceof Mysql) { + do { + $result = $adapter->rawQuery($rawQuery)->rowCount(); + } while ($result > 0); + } else { + do { + $result = $adapter->query($rawQuery)->rowCount(); + } while ($result > 0); + } + } + + /** + * @inheritdoc + */ + public static function getDependencies() + { + return []; + } + + /** + * @inheritdoc + */ + public function getAliases() + { + return []; + } +} diff --git a/app/code/Magento/Security/Test/Unit/Model/AdminSessionsManagerTest.php b/app/code/Magento/Security/Test/Unit/Model/AdminSessionsManagerTest.php index e8d5d99017736..e352583ea575f 100644 --- a/app/code/Magento/Security/Test/Unit/Model/AdminSessionsManagerTest.php +++ b/app/code/Magento/Security/Test/Unit/Model/AdminSessionsManagerTest.php @@ -72,8 +72,7 @@ protected function setUp(): void $this->objectManager = new ObjectManager($this); $this->authSessionMock = $this->getMockBuilder(Session::class) - ->addMethods(['isActive', 'getStatus', 'getUser', 'getId', 'getUpdatedAt']) - ->onlyMethods(['getSessionId']) + ->addMethods(['isActive', 'getStatus', 'getUser', 'getId', 'getUpdatedAt', 'getAdminSessionInfoId', 'setAdminSessionInfoId']) ->disableOriginalConstructor() ->getMock(); @@ -101,8 +100,8 @@ protected function setUp(): void ); $this->currentSessionMock = $this->getMockBuilder(AdminSessionInfo::class) - ->addMethods(['isActive', 'getStatus', 'getUserId', 'getSessionId', 'getUpdatedAt']) - ->onlyMethods(['load', 'setData', 'setIsOtherSessionsTerminated', 'save']) + ->addMethods(['isActive', 'getStatus', 'getUserId', 'getUpdatedAt']) + ->onlyMethods(['load', 'setData', 'setIsOtherSessionsTerminated', 'save', 'getId']) ->disableOriginalConstructor() ->getMock(); @@ -141,19 +140,18 @@ public function testProcessLogin() $useId = 1; $sessionLifetime = 100; $ip = 12345; - $sessionId = 50; $timestamp = time(); $olderThen = $timestamp - $sessionLifetime; + $adminSessionInfoId = 50; + $this->authSessionMock->expects($this->any()) + ->method('getAdminSessionInfoId') + ->willReturn($adminSessionInfoId); $this->adminSessionInfoFactoryMock->expects($this->exactly(2)) ->method('create') ->willReturn($this->currentSessionMock); - $this->authSessionMock->expects($this->exactly(2)) - ->method('getSessionId') - ->willReturn($sessionId); - $this->authSessionMock->expects($this->once()) ->method('getUser') ->willReturn($this->userMock); @@ -172,7 +170,6 @@ public function testProcessLogin() $this->currentSessionMock->expects($this->once()) ->method('save') ->willReturnSelf(); - $this->dateTimeMock->expects($this->once()) ->method('gmtTimestamp') ->willReturn($timestamp); @@ -189,9 +186,9 @@ public function testProcessLogin() ->method('getUserId') ->willReturn($useId); - $this->currentSessionMock->expects($this->once()) - ->method('getSessionId') - ->willReturn($sessionId); + $this->currentSessionMock->expects($this->any()) + ->method('getId') + ->willReturn($adminSessionInfoId); $this->adminSessionInfoCollectionFactoryMock->expects($this->once()) ->method('create') @@ -201,7 +198,7 @@ public function testProcessLogin() ->with( AdminSessionInfo::LOGGED_OUT_BY_LOGIN, $useId, - $sessionId, + $adminSessionInfoId, $olderThen ) ->willReturn(1); @@ -219,18 +216,17 @@ public function testProcessLogin() */ public function testProcessProlong() { - $sessionId = 50; $lastUpdatedAt = '2015-12-31 23:59:59'; $newUpdatedAt = '2016-01-01 00:00:30'; + $adminSessionInfoId = 50; + $this->authSessionMock->expects($this->any()) + ->method('getAdminSessionInfoId') + ->willReturn($adminSessionInfoId); $this->adminSessionInfoFactoryMock->expects($this->any()) ->method('create') ->willReturn($this->currentSessionMock); - $this->authSessionMock->expects($this->once()) - ->method('getSessionId') - ->willReturn($sessionId); - $this->currentSessionMock->expects($this->once()) ->method('load') ->willReturnSelf(); @@ -264,16 +260,15 @@ public function testProcessProlong() */ public function testProcessLogout() { - $sessionId = 50; + $adminSessionInfoId = 50; + $this->authSessionMock->expects($this->any()) + ->method('getAdminSessionInfoId') + ->willReturn($adminSessionInfoId); $this->adminSessionInfoFactoryMock->expects($this->any()) ->method('create') ->willReturn($this->currentSessionMock); - $this->authSessionMock->expects($this->once()) - ->method('getSessionId') - ->willReturn($sessionId); - $this->currentSessionMock->expects($this->once()) ->method('load') ->willReturnSelf(); @@ -295,16 +290,15 @@ public function testProcessLogout() */ public function testGetCurrentSession() { - $sessionId = 50; + $adminSessionInfoId = 50; + $this->authSessionMock->expects($this->any()) + ->method('getAdminSessionInfoId') + ->willReturn($adminSessionInfoId); $this->adminSessionInfoFactoryMock->expects($this->any()) ->method('create') ->willReturn($this->currentSessionMock); - $this->authSessionMock->expects($this->once()) - ->method('getSessionId') - ->willReturn($sessionId); - $this->currentSessionMock->expects($this->once()) ->method('load') ->willReturnSelf(); @@ -341,9 +335,32 @@ public function testCleanExpiredSessions() */ public function testGetLogoutReasonMessage($expectedResult, $sessionStatus) { - $this->adminSessionInfoFactoryMock->expects($this->once()) + $this->adminSessionInfoFactoryMock->expects($this->exactly(2)) ->method('create') ->willReturn($this->currentSessionMock); + $this->authSessionMock->expects($this->any()) + ->method('getUser') + ->willReturn($this->userMock); + $this->currentSessionMock->expects($this->once()) + ->method('setData') + ->willReturn($this->currentSessionMock); + $this->currentSessionMock->expects($this->once()) + ->method('save') + ->willReturn($this->currentSessionMock); + $this->adminSessionInfoCollectionFactoryMock->expects($this->once()) + ->method('create') + ->willReturn($this->adminSessionInfoCollectionMock); + $this->adminSessionInfoCollectionMock->expects($this->once())->method('filterByUser') + ->willReturnSelf(); + $this->adminSessionInfoCollectionMock->expects($this->once()) + ->method('filterExpiredSessions') + ->willReturnSelf(); + $this->adminSessionInfoCollectionMock->expects($this->once()) + ->method('loadData') + ->willReturnSelf(); + $this->adminSessionInfoCollectionMock->expects($this->once()) + ->method('setDataToAll') + ->willReturnSelf(); $this->currentSessionMock->expects($this->once()) ->method('getStatus') ->willReturn($sessionStatus); @@ -423,22 +440,24 @@ public function testLogoutOtherUserSessions() { $useId = 1; $sessionLifetime = 100; - $sessionId = 50; + $adminSessionInfoId = 50; + $this->authSessionMock->expects($this->any()) + ->method('getAdminSessionInfoId') + ->willReturn($adminSessionInfoId); + $this->adminSessionInfoCollectionFactoryMock->expects($this->once()) ->method('create') ->willReturn($this->adminSessionInfoCollectionMock); $this->authSessionMock->expects($this->once()) ->method('getUser') ->willReturn($this->userMock); - $this->authSessionMock->expects($this->once()) - ->method('getSessionId') - ->willReturn($sessionId); + $this->userMock->expects($this->once()) ->method('getId') ->willReturn($useId); $this->adminSessionInfoCollectionMock->expects($this->once()) ->method('filterByUser') - ->with($useId, AdminSessionInfo::LOGGED_IN, $sessionId) + ->with($useId, AdminSessionInfo::LOGGED_IN, $adminSessionInfoId) ->willReturnSelf(); $this->securityConfigMock->expects($this->once()) ->method('getAdminSessionLifetime') diff --git a/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfo/CollectionTest.php b/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfo/CollectionTest.php index d7fe3880bfb48..12eaad210069c 100644 --- a/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfo/CollectionTest.php +++ b/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfo/CollectionTest.php @@ -115,7 +115,7 @@ public function testFilterByUser() ->withConsecutive( ['user_id', $userId], ['status', $status], - ['session_id', ['neq' => $sessionIdToExclude]] + ['id', ['neq' => $sessionIdToExclude]] ) ->willReturnSelf(); diff --git a/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfoTest.php b/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfoTest.php index b654732af2447..e2b58020bef40 100644 --- a/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfoTest.php +++ b/app/code/Magento/Security/Test/Unit/Model/ResourceModel/AdminSessionInfoTest.php @@ -89,7 +89,7 @@ public function testUpdateStatusByUserId() 'user_id = ?' => (int) $userId, ]; if (!empty($excludedSessionIds)) { - $whereStatement['session_id NOT IN (?)'] = $excludedSessionIds; + $whereStatement['id NOT IN (?)'] = $excludedSessionIds; } if (!empty($withStatuses)) { $whereStatement['status IN (?)'] = $withStatuses; diff --git a/app/code/Magento/Security/composer.json b/app/code/Magento/Security/composer.json index 355a4fefb9c2f..aab090d752776 100644 --- a/app/code/Magento/Security/composer.json +++ b/app/code/Magento/Security/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-security", "description": "Security management module", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-config": "*", - "magento/module-backend": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "103.0.*", + "magento/module-config": "101.2.*", + "magento/module-backend": "102.0.*", + "magento/module-store": "101.1.*", + "magento/module-user": "101.2.*" }, "suggest": { - "magento/module-customer": "*" + "magento/module-customer": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Security/etc/db_schema.xml b/app/code/Magento/Security/etc/db_schema.xml index 0775c08b46244..9cf0b0a1d1eb5 100644 --- a/app/code/Magento/Security/etc/db_schema.xml +++ b/app/code/Magento/Security/etc/db_schema.xml @@ -10,7 +10,8 @@ <table name="admin_user_session" resource="default" engine="innodb" comment="Admin User sessions table"> <column xsi:type="int" name="id" unsigned="true" nullable="false" identity="true" comment="Entity ID"/> - <column xsi:type="varchar" name="session_id" nullable="false" length="128" comment="Session ID value"/> + <column xsi:type="varchar" name="session_id" nullable="true" length="1" + comment="Deprecated: Session ID value no longer used"/> <column xsi:type="int" name="user_id" unsigned="true" nullable="true" identity="false" comment="Admin User ID"/> <column xsi:type="smallint" name="status" unsigned="true" nullable="false" identity="false" diff --git a/app/code/Magento/SendFriend/composer.json b/app/code/Magento/SendFriend/composer.json index 17c908ab33e3e..2369e8432ddbc 100644 --- a/app/code/Magento/SendFriend/composer.json +++ b/app/code/Magento/SendFriend/composer.json @@ -1,24 +1,25 @@ { "name": "magento/module-send-friend", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-customer": "*", - "magento/module-store": "*", - "magento/module-captcha": "*", - "magento/module-authorization": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-customer": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-captcha": "100.4.*", + "magento/module-authorization": "100.4.*", + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -28,3 +29,4 @@ } } } + diff --git a/app/code/Magento/SendFriendGraphQl/composer.json b/app/code/Magento/SendFriendGraphQl/composer.json index 456780c1c1841..b0ce37458b1c5 100644 --- a/app/code/Magento/SendFriendGraphQl/composer.json +++ b/app/code/Magento/SendFriendGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-send-friend-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-send-friend": "*", - "magento/module-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-send-friend": "100.4.*", + "magento/module-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/Shipping/composer.json b/app/code/Magento/Shipping/composer.json index 5ea8430226ad8..7f57c94c60012 100644 --- a/app/code/Magento/Shipping/composer.json +++ b/app/code/Magento/Shipping/composer.json @@ -1,37 +1,38 @@ { "name": "magento/module-shipping", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", "ext-gd": "*", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-contact": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*", - "magento/module-user": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-contact": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-ui": "101.2.*", + "magento/module-user": "101.2.*" }, "suggest": { - "magento/module-fedex": "*", - "magento/module-ups": "*", - "magento/module-config": "*" + "magento/module-fedex": "100.4.*", + "magento/module-ups": "100.4.*", + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -41,3 +42,4 @@ } } } + diff --git a/app/code/Magento/Sitemap/composer.json b/app/code/Magento/Sitemap/composer.json index 6a9f20ac8bddf..502ef0e1f47af 100644 --- a/app/code/Magento/Sitemap/composer.json +++ b/app/code/Magento/Sitemap/composer.json @@ -1,30 +1,31 @@ { "name": "magento/module-sitemap", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-robots": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-url-rewrite": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-robots": "101.1.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -34,3 +35,4 @@ } } } + diff --git a/app/code/Magento/Store/composer.json b/app/code/Magento/Store/composer.json index e6f7f0d5ac274..cb1e37585dc71 100644 --- a/app/code/Magento/Store/composer.json +++ b/app/code/Magento/Store/composer.json @@ -1,29 +1,30 @@ { "name": "magento/module-store", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-media-storage": "*", - "magento/module-ui": "*", - "magento/module-customer": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-ui": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*" }, "suggest": { - "magento/module-deploy": "*" + "magento/module-deploy": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/StoreGraphQl/composer.json b/app/code/Magento/StoreGraphQl/composer.json index a7cab5851a9ee..c5d7987c5fecf 100644 --- a/app/code/Magento/StoreGraphQl/composer.json +++ b/app/code/Magento/StoreGraphQl/composer.json @@ -2,16 +2,17 @@ "name": "magento/module-store-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/Swagger/composer.json b/app/code/Magento/Swagger/composer.json index 759e72350b0a6..c6385f81c99e5 100644 --- a/app/code/Magento/Swagger/composer.json +++ b/app/code/Magento/Swagger/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-swagger", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/SwaggerWebapi/composer.json b/app/code/Magento/SwaggerWebapi/composer.json index 78021f7cb4ec5..09c078448232d 100644 --- a/app/code/Magento/SwaggerWebapi/composer.json +++ b/app/code/Magento/SwaggerWebapi/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-swagger-webapi", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-swagger": "*" + "magento/framework": "103.0.*", + "magento/module-swagger": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/SwaggerWebapiAsync/composer.json b/app/code/Magento/SwaggerWebapiAsync/composer.json index 283b2fe1f1758..d42e387499e8a 100644 --- a/app/code/Magento/SwaggerWebapiAsync/composer.json +++ b/app/code/Magento/SwaggerWebapiAsync/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-swagger-webapi-async", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-swagger": "*" + "magento/framework": "103.0.*", + "magento/module-swagger": "100.4.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json index 2c9b7a03ba011..fed44d3d02671 100644 --- a/app/code/Magento/Swatches/composer.json +++ b/app/code/Magento/Swatches/composer.json @@ -1,32 +1,33 @@ { "name": "magento/module-swatches", "description": "Add Swatches to Products", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-config": "*", - "magento/module-configurable-product": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-page-cache": "*", - "magento/module-media-storage": "*", - "magento/module-store": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-configurable-product": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-page-cache": "100.4.*", + "magento/module-media-storage": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*" }, "suggest": { - "magento/module-layered-navigation": "*", - "magento/module-swatches-sample-data": "*" + "magento/module-layered-navigation": "100.4.*", + "magento/module-swatches-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -36,3 +37,4 @@ } } } + diff --git a/app/code/Magento/SwatchesGraphQl/composer.json b/app/code/Magento/SwatchesGraphQl/composer.json index 959f0f201d2b3..bb8545e64f3c3 100644 --- a/app/code/Magento/SwatchesGraphQl/composer.json +++ b/app/code/Magento/SwatchesGraphQl/composer.json @@ -2,20 +2,21 @@ "name": "magento/module-swatches-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-swatches": "*", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*" + "magento/framework": "103.0.*", + "magento/module-swatches": "100.4.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*" }, "suggest": { - "magento/module-configurable-product-graph-ql": "*" + "magento/module-configurable-product-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/SwatchesLayeredNavigation/composer.json b/app/code/Magento/SwatchesLayeredNavigation/composer.json index 3b987f8096f18..f0f794db094f2 100644 --- a/app/code/Magento/SwatchesLayeredNavigation/composer.json +++ b/app/code/Magento/SwatchesLayeredNavigation/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-swatches-layered-navigation", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", + "magento/framework": "103.0.*", "magento/magento-composer-installer": "*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json index 2fe0597c85a63..d6745f763537f 100644 --- a/app/code/Magento/Tax/composer.json +++ b/app/code/Magento/Tax/composer.json @@ -1,35 +1,36 @@ { "name": "magento/module-tax", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-reports": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-page-cache": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-reports": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-tax-sample-data": "*" + "magento/module-tax-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -39,3 +40,4 @@ } } } + diff --git a/app/code/Magento/TaxGraphQl/composer.json b/app/code/Magento/TaxGraphQl/composer.json index b97e414cacb67..0b4805fe24493 100644 --- a/app/code/Magento/TaxGraphQl/composer.json +++ b/app/code/Magento/TaxGraphQl/composer.json @@ -2,18 +2,19 @@ "name": "magento/module-tax-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-tax": "*", - "magento/module-catalog-graph-ql": "*" + "magento/module-tax": "100.4.*", + "magento/module-catalog-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/TaxImportExport/composer.json b/app/code/Magento/TaxImportExport/composer.json index 01c069b4299c1..9f6547300406c 100644 --- a/app/code/Magento/TaxImportExport/composer.json +++ b/app/code/Magento/TaxImportExport/composer.json @@ -1,23 +1,24 @@ { "name": "magento/module-tax-import-export", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-directory": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-directory": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -27,3 +28,4 @@ } } } + diff --git a/app/code/Magento/Theme/Test/Mftf/Test/AdminDesignConfigMediaGalleryImageUploadTest.xml b/app/code/Magento/Theme/Test/Mftf/Test/AdminDesignConfigMediaGalleryImageUploadTest.xml index 07db3a5a18b73..7546e93db4f98 100644 --- a/app/code/Magento/Theme/Test/Mftf/Test/AdminDesignConfigMediaGalleryImageUploadTest.xml +++ b/app/code/Magento/Theme/Test/Mftf/Test/AdminDesignConfigMediaGalleryImageUploadTest.xml @@ -36,9 +36,16 @@ <comment userInput="Upload Image" stepKey="uploadImageComment"/> <click selector="{{AdminDesignConfigSection.selectFromGalleryByFieldsetName('Head')}}" stepKey="openMediaGallery"/> <actionGroup ref="VerifyMediaGalleryStorageActionsActionGroup" stepKey="verifyMediaGalleryStorageBtn"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder"> + <comment userInput="BIC workaround" stepKey="navigateToFolder"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder"> <argument name="FolderName" value="Storage Root"/> </actionGroup> + <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> + </actionGroup> + <actionGroup ref="CreateImageFolderActionGroup" stepKey="CreateImageFolder"> + <argument name="ImageFolder" value="ImageFolder"/> + </actionGroup> <actionGroup ref="AttachImageActionGroup" stepKey="selectImageFromMediaStorage"> <argument name="Image" value="ImageUpload3"/> </actionGroup> @@ -62,17 +69,18 @@ <!--Delete Image: will be in both root and favicon--> <comment userInput="Delete Image" stepKey="deleteImageComment"/> <actionGroup ref="NavigateToMediaGalleryActionGroup" stepKey="navigateToMediaGallery"/> - <actionGroup ref="NavigateToMediaFolderActionGroup" stepKey="navigateToFolder2"> + <comment userInput="BIC workaround" stepKey="navigateToFolder2"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandStorageRootFolder2"> <argument name="FolderName" value="Storage Root"/> </actionGroup> - <actionGroup ref="DeleteImageFromStorageActionGroup" stepKey="deleteImageFromStorage"> - <argument name="Image" value="ImageUpload3"/> + <actionGroup ref="AdminExpandMediaGalleryFolderActionGroup" stepKey="expandWysiwygFolder"> + <argument name="FolderName" value="wysiwyg"/> </actionGroup> - <actionGroup ref="NavigateToFaviconMediaFolderActionGroup" stepKey="navigateToFolder3"> - <argument name="StoreFolder" value="{{AdminDesignConfigSection.storeLink}}"/> - </actionGroup> - <actionGroup ref="DeleteImageFromStorageActionGroup" stepKey="deleteImageFromStorage2"> - <argument name="Image" value="ImageUpload3"/> + <comment userInput="BIC workaround" stepKey="deleteImageFromStorage"/> + <actionGroup ref="DeleteFolderActionGroup" stepKey="DeleteFolderFromMediaGallery"> + <argument name="ImageFolder" value="ImageFolder"/> </actionGroup> + <comment userInput="BIC workaround" stepKey="navigateToFolder3"/> + <comment userInput="BIC workaround" stepKey="deleteImageFromStorage2"/> </test> </tests> diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json index 63779c6f9bf5d..711825a4f1a7b 100644 --- a/app/code/Magento/Theme/composer.json +++ b/app/code/Magento/Theme/composer.json @@ -1,33 +1,34 @@ { "name": "magento/module-theme", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.1.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-cms": "*", - "magento/module-config": "*", - "magento/module-customer": "*", - "magento/module-eav": "*", - "magento/module-media-storage": "*", - "magento/module-require-js": "*", - "magento/module-store": "*", - "magento/module-ui": "*", - "magento/module-widget": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-cms": "104.0.*", + "magento/module-config": "101.2.*", + "magento/module-customer": "103.0.*", + "magento/module-eav": "102.1.*", + "magento/module-media-storage": "100.4.*", + "magento/module-require-js": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-widget": "101.2.*" }, "suggest": { - "magento/module-theme-sample-data": "*", - "magento/module-deploy": "*", - "magento/module-directory": "*" + "magento/module-theme-sample-data": "Sample Data version: 100.4.*", + "magento/module-deploy": "100.4.*", + "magento/module-directory": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -37,3 +38,4 @@ } } } + diff --git a/app/code/Magento/ThemeGraphQl/composer.json b/app/code/Magento/ThemeGraphQl/composer.json index cee740d449b37..b8e43a5b52846 100644 --- a/app/code/Magento/ThemeGraphQl/composer.json +++ b/app/code/Magento/ThemeGraphQl/composer.json @@ -2,17 +2,18 @@ "name": "magento/module-theme-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, "suggest": { - "magento/module-store-graph-ql": "*" + "magento/module-store-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/Translation/composer.json b/app/code/Magento/Translation/composer.json index 7f67749fa88f4..664d0286ffb30 100644 --- a/app/code/Magento/Translation/composer.json +++ b/app/code/Magento/Translation/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-translation", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-developer": "*", - "magento/module-store": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-developer": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*" }, "suggest": { - "magento/module-deploy": "*" + "magento/module-deploy": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminResetDataGridToDefaultViewActionGroup.xml b/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminResetDataGridToDefaultViewActionGroup.xml new file mode 100644 index 0000000000000..babeec9037276 --- /dev/null +++ b/app/code/Magento/Ui/Test/Mftf/ActionGroup/AdminResetDataGridToDefaultViewActionGroup.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd"> + <actionGroup name="AdminResetDataGridToDefaultViewActionGroup"> + <annotations> + <description>Resets an Admin Grid page to the 'Default View'.</description> + </annotations> + <arguments> + <argument name="index" type="string" defaultValue="1"/> + </arguments> + + <waitForElementVisible selector="{{AdminDataGridHeaderSection.bookmarkToggleByIndex(index)}}" stepKey="waitForViewBookmarks"/> + <click selector="{{AdminDataGridHeaderSection.bookmarkToggleByIndex(index)}}" stepKey="openViewBookmarks"/> + <click selector="{{AdminDataGridHeaderSection.bookmarkOptionByIndex(index, DefaultGridView.name)}}" stepKey="selectDefaultGridView"/> + <waitForPageLoad stepKey="waitForGridReset"/> + <see selector="{{AdminDataGridHeaderSection.bookmarkToggleByIndex(index)}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> + </actionGroup> +</actionGroups> diff --git a/app/code/Magento/Ui/Test/Mftf/ActionGroup/ResetAdminDataGridToDefaultViewActionGroup.xml b/app/code/Magento/Ui/Test/Mftf/ActionGroup/ResetAdminDataGridToDefaultViewActionGroup.xml index 2c382c07f2a09..8cf58ea69e0a7 100644 --- a/app/code/Magento/Ui/Test/Mftf/ActionGroup/ResetAdminDataGridToDefaultViewActionGroup.xml +++ b/app/code/Magento/Ui/Test/Mftf/ActionGroup/ResetAdminDataGridToDefaultViewActionGroup.xml @@ -15,7 +15,8 @@ <waitForElementVisible selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" stepKey="waitForViewBookmarks"/> <click selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" stepKey="openViewBookmarks"/> - <click selector="{{AdminDataGridHeaderSection.bookmarkOption('Default View')}}" stepKey="selectDefaultGridView"/> - <see selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" userInput="Default View" stepKey="seeDefaultViewSelected"/> + <click selector="{{AdminDataGridHeaderSection.bookmarkOption(DefaultGridView.name)}}" stepKey="selectDefaultGridView"/> + <waitForPageLoad stepKey="waitForGridReset"/> + <see selector="{{AdminDataGridHeaderSection.bookmarkToggle}}" userInput="{{DefaultGridView.name}}" stepKey="seeDefaultViewSelected"/> </actionGroup> </actionGroups> diff --git a/app/code/Magento/Ui/Test/Mftf/Data/GridViewData.xml b/app/code/Magento/Ui/Test/Mftf/Data/GridViewData.xml new file mode 100644 index 0000000000000..ec9857861cc75 --- /dev/null +++ b/app/code/Magento/Ui/Test/Mftf/Data/GridViewData.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + /** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +--> + +<entities xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:noNamespaceSchemaLocation="urn:magento:mftf:DataGenerator/etc/dataProfileSchema.xsd"> + <entity name="DefaultGridView"> + <data key="name">Default View</data> + </entity> + <entity name="NewGridView"> + <data key="name" unique="suffix">New View</data> + </entity> +</entities> diff --git a/app/code/Magento/Ui/Test/Mftf/Section/AdminDataGridHeaderSection.xml b/app/code/Magento/Ui/Test/Mftf/Section/AdminDataGridHeaderSection.xml index 15835aa439b08..bbe1fc7834f7a 100644 --- a/app/code/Magento/Ui/Test/Mftf/Section/AdminDataGridHeaderSection.xml +++ b/app/code/Magento/Ui/Test/Mftf/Section/AdminDataGridHeaderSection.xml @@ -21,7 +21,9 @@ <element name="clearFilters" type="button" selector=".admin__data-grid-header [data-action='grid-filter-reset']" timeout="30"/> <!--Grid view bookmarks--> <element name="bookmarkToggle" type="button" selector="div.admin__data-grid-action-bookmarks button[data-bind='toggleCollapsible']" timeout="30"/> + <element name="bookmarkToggleByIndex" type="button" selector="(//div[contains(@class,'admin__data-grid-action-bookmarks')])[{{index}}]//button[@data-bind='toggleCollapsible']" parameterized="true" timeout="30"/> <element name="bookmarkOption" type="button" selector="//div[contains(@class, 'admin__data-grid-action-bookmarks')]/ul/li/div/a[text() = '{{label}}']" parameterized="true" timeout="30"/> + <element name="bookmarkOptionByIndex" type="button" selector="(//div[contains(@class, 'admin__data-grid-action-bookmarks')])[{{index}}]/ul/li/div/a[text() = '{{label}}']" parameterized="true" timeout="30"/> <!--Visible columns management--> <element name="columnsToggle" type="button" selector="div.admin__data-grid-action-columns button[data-bind='toggleCollapsible']" timeout="30"/> <element name="columnCheckbox" type="checkbox" selector="//div[contains(@class,'admin__data-grid-action-columns')]//div[contains(@class, 'admin__field-option')]//label[text() = '{{column}}']/preceding-sibling::input" parameterized="true"/> diff --git a/app/code/Magento/Ui/composer.json b/app/code/Magento/Ui/composer.json index b4aeda0fc1e6a..800949e9bebbb 100644 --- a/app/code/Magento/Ui/composer.json +++ b/app/code/Magento/Ui/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-ui", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-eav": "*", - "magento/module-store": "*", - "magento/module-user": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-eav": "102.1.*", + "magento/module-store": "101.1.*", + "magento/module-user": "101.2.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/Ups/composer.json b/app/code/Magento/Ups/composer.json index fa8962f0af592..9c02743a2353d 100644 --- a/app/code/Magento/Ups/composer.json +++ b/app/code/Magento/Ups/composer.json @@ -1,28 +1,29 @@ { "name": "magento/module-ups", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog-inventory": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-config": "*" + "magento/module-config": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -32,3 +33,4 @@ } } } + diff --git a/app/code/Magento/UrlRewrite/composer.json b/app/code/Magento/UrlRewrite/composer.json index 44ca51e8bcbe2..5b59b040cb00a 100644 --- a/app/code/Magento/UrlRewrite/composer.json +++ b/app/code/Magento/UrlRewrite/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-url-rewrite", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "102.0.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-cms": "*", - "magento/module-cms-url-rewrite": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-url-rewrite": "100.4.*", + "magento/module-cms": "104.0.*", + "magento/module-cms-url-rewrite": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/UrlRewriteGraphQl/composer.json b/app/code/Magento/UrlRewriteGraphQl/composer.json index 766ad3ab46ebd..b6594f4600713 100644 --- a/app/code/Magento/UrlRewriteGraphQl/composer.json +++ b/app/code/Magento/UrlRewriteGraphQl/composer.json @@ -2,18 +2,19 @@ "name": "magento/module-url-rewrite-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-url-rewrite": "*" + "magento/framework": "103.0.*", + "magento/module-url-rewrite": "102.0.*" }, "suggest": { - "magento/module-graph-ql": "*" + "magento/module-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/User/composer.json b/app/code/Magento/User/composer.json index 6ba4be749cc7c..a53b5fe67ca0d 100644 --- a/app/code/Magento/User/composer.json +++ b/app/code/Magento/User/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-user", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-email": "*", - "magento/module-integration": "*", - "magento/module-security": "*", - "magento/module-store": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-email": "101.1.*", + "magento/module-integration": "100.4.*", + "magento/module-security": "100.4.*", + "magento/module-store": "101.1.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/Usps/composer.json b/app/code/Magento/Usps/composer.json index 3d5c0669c679d..1f8dc3a38dac7 100644 --- a/app/code/Magento/Usps/composer.json +++ b/app/code/Magento/Usps/composer.json @@ -1,27 +1,28 @@ { "name": "magento/module-usps", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", "lib-libxml": "*", - "magento/framework": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-config": "*", - "magento/module-directory": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-shipping": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-config": "101.2.*", + "magento/module-directory": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-shipping": "100.4.*", + "magento/module-store": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -31,3 +32,4 @@ } } } + diff --git a/app/code/Magento/Variable/Model/Variable.php b/app/code/Magento/Variable/Model/Variable.php index ac4f45da5779b..5c4c24feeaf0a 100644 --- a/app/code/Magento/Variable/Model/Variable.php +++ b/app/code/Magento/Variable/Model/Variable.php @@ -5,18 +5,22 @@ */ namespace Magento\Variable\Model; +use Magento\Framework\Model\AbstractModel; +use Magento\Framework\Validator\HTML\WYSIWYGValidatorInterface; +use Magento\Framework\App\ObjectManager; + /** * Custom variable model * * @method string getCode() - * @method \Magento\Variable\Model\Variable setCode(string $value) + * @method Variable setCode(string $value) * @method string getName() - * @method \Magento\Variable\Model\Variable setName(string $value) + * @method Variable setName(string $value) * * @api * @since 100.0.2 */ -class Variable extends \Magento\Framework\Model\AbstractModel +class Variable extends AbstractModel { const TYPE_TEXT = 'text'; @@ -32,6 +36,11 @@ class Variable extends \Magento\Framework\Model\AbstractModel */ protected $_escaper = null; + /** + * @var WYSIWYGValidatorInterface + */ + private $wysiwygValidator; + /** * @param \Magento\Framework\Model\Context $context * @param \Magento\Framework\Registry $registry @@ -46,10 +55,14 @@ public function __construct( \Magento\Framework\Escaper $escaper, \Magento\Variable\Model\ResourceModel\Variable $resource, \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, - array $data = [] + array $data = [], + ?WYSIWYGValidatorInterface $wysiwygValidator = null ) { $this->_escaper = $escaper; parent::__construct($context, $registry, $resource, $resourceCollection, $data); + $this->wysiwygValidator = $wysiwygValidator + ?? ObjectManager::getInstance()->get(WYSIWYGValidatorInterface::class); + } /** @@ -122,6 +135,21 @@ public function getValue($type = null) return $this->getData('html_value'); } + /** + * @inheritDoc + */ + public function beforeSave() + { + $html_field = $this->getValue(self::TYPE_HTML); + parent::beforeSave(); + + //Validating HTML content. + if ($html_field && $html_field !== $this->getOrigData('html_value')) { + $this->wysiwygValidator->validate($html_field); + } + return $this; + } + /** * Validation of object data. Checking for unique variable code * diff --git a/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php b/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php index 4439a930ce548..e191b58c4c294 100644 --- a/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php +++ b/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php @@ -12,8 +12,10 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager; use Magento\Variable\Model\ResourceModel\Variable; use Magento\Variable\Model\ResourceModel\Variable\Collection; +use Magento\Framework\Validator\HTML\WYSIWYGValidatorInterface; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; +use Magento\Framework\Validation\ValidationException; class VariableTest extends TestCase { @@ -49,6 +51,7 @@ class VariableTest extends TestCase protected function setUp(): void { + $this->wysiwygValidator = $this->createMock(WYSIWYGValidatorInterface::class); $this->objectManager = new ObjectManager($this); $this->escaperMock = $this->getMockBuilder(Escaper::class) ->disableOriginalConstructor() @@ -65,6 +68,7 @@ protected function setUp(): void 'escaper' => $this->escaperMock, 'resource' => $this->resourceMock, 'resourceCollection' => $this->resourceCollectionMock, + 'wysiwygValidator' => $this->wysiwygValidator ] ); $this->validationFailedPhrase = __('Validation has failed.'); @@ -195,4 +199,58 @@ public function validateMissingInfoDataProvider() 'Missing name' => ['some-code', ''], ]; } + + /** + * Test Variable validation. + * + * @param string $value + * @param bool $isChanged + * @param bool $isValidated + * @param bool $exceptionThrown + * @dataProvider getWysiwygValidationCases + */ + public function testBeforeSave(string $value,bool $isChanged,bool $isValidated, bool $exceptionThrown): void + { + $actuallyThrown = false; + + if (!$isValidated) { + $this->wysiwygValidator->expects($this->any()) + ->method('validate') + ->willThrowException(new ValidationException(__('HTML is invalid'))); + } else { + $this->wysiwygValidator->expects($this->any())->method('validate'); + } + + $this->model->setData('html_value', $value); + + if (!$isChanged) { + $this->model->setOrigData('html_value', $value); + } else { + $this->model->setOrigData('html_value', $value . '-OLD'); + } + + try { + $this->model->beforeSave(); + } catch (\Throwable $exception) { + $actuallyThrown = true; + } + + $this->assertEquals($exceptionThrown, $actuallyThrown); + } + + /** + * Validation cases. + * + * @return array + */ + public function getWysiwygValidationCases(): array + { + return + [ + 'changed-html-value-without-exception' => ['<b>Test Html</b>',true,true,false], + 'changed-html-value-with-exception' => ['<b>Test Html</b>',true,false,true], + 'no-changed-html-value-without-exception' => ['<b>Test Html</b>',false,false,false], + 'no-html-value-with-exception' => ['',true,false,false] + ]; + } } diff --git a/app/code/Magento/Variable/composer.json b/app/code/Magento/Variable/composer.json index e6eed40a814db..e4c2a6d529832 100644 --- a/app/code/Magento/Variable/composer.json +++ b/app/code/Magento/Variable/composer.json @@ -1,22 +1,23 @@ { "name": "magento/module-variable", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-store": "*", - "magento/module-config": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-store": "101.1.*", + "magento/module-config": "101.2.*", + "magento/module-ui": "101.2.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -26,3 +27,4 @@ } } } + diff --git a/app/code/Magento/Vault/composer.json b/app/code/Magento/Vault/composer.json index 31d5ceb906246..eeb286a033521 100644 --- a/app/code/Magento/Vault/composer.json +++ b/app/code/Magento/Vault/composer.json @@ -1,25 +1,25 @@ { "name": "magento/module-vault", - "description": "", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-payment": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-theme": "*" + "magento/framework": "103.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-payment": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +29,4 @@ } } } + diff --git a/app/code/Magento/VaultGraphQl/composer.json b/app/code/Magento/VaultGraphQl/composer.json index aff9a700fbcad..9e7832c8ee184 100644 --- a/app/code/Magento/VaultGraphQl/composer.json +++ b/app/code/Magento/VaultGraphQl/composer.json @@ -2,16 +2,17 @@ "name": "magento/module-vault-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-vault": "*", - "magento/module-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.0", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-vault": "101.2.*", + "magento/module-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/Version/composer.json b/app/code/Magento/Version/composer.json index d2b2127446c21..d1a9f535b7c2d 100644 --- a/app/code/Magento/Version/composer.json +++ b/app/code/Magento/Version/composer.json @@ -1,18 +1,19 @@ { "name": "magento/module-version", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.0", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -22,3 +23,4 @@ } } } + diff --git a/app/code/Magento/Webapi/composer.json b/app/code/Magento/Webapi/composer.json index 11382cc318554..9e143fe113465 100644 --- a/app/code/Magento/Webapi/composer.json +++ b/app/code/Magento/Webapi/composer.json @@ -1,26 +1,27 @@ { "name": "magento/module-webapi", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.2", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-authorization": "*", - "magento/module-backend": "*", - "magento/module-integration": "*", - "magento/module-store": "*" + "magento/framework": "103.0.*", + "magento/module-authorization": "100.4.*", + "magento/module-backend": "102.0.*", + "magento/module-integration": "100.4.*", + "magento/module-store": "101.1.*" }, "suggest": { - "magento/module-user": "*", - "magento/module-customer": "*" + "magento/module-user": "101.2.*", + "magento/module-customer": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -30,3 +31,4 @@ } } } + diff --git a/app/code/Magento/WebapiAsync/composer.json b/app/code/Magento/WebapiAsync/composer.json index e0c6a96f1ffe6..6c8c8d239d748 100644 --- a/app/code/Magento/WebapiAsync/composer.json +++ b/app/code/Magento/WebapiAsync/composer.json @@ -1,25 +1,26 @@ { "name": "magento/module-webapi-async", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/framework-message-queue": "*", - "magento/module-webapi": "*", - "magento/module-asynchronous-operations": "*" + "magento/framework": "103.0.*", + "magento/framework-message-queue": "100.4.*", + "magento/module-webapi": "100.4.*", + "magento/module-asynchronous-operations": "100.4.*" }, "suggest": { - "magento/module-user": "*", - "magento/module-customer": "*" + "magento/module-user": "101.2.*", + "magento/module-customer": "103.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -29,3 +30,4 @@ } } } + diff --git a/app/code/Magento/WebapiSecurity/composer.json b/app/code/Magento/WebapiSecurity/composer.json index 5b48ed8644709..52d16688a1ac5 100644 --- a/app/code/Magento/WebapiSecurity/composer.json +++ b/app/code/Magento/WebapiSecurity/composer.json @@ -1,19 +1,20 @@ { "name": "magento/module-webapi-security", "description": "WebapiSecurity module provides option to loosen security on some webapi resources.", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-webapi": "*" + "magento/framework": "103.0.*", + "magento/module-webapi": "100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -23,3 +24,4 @@ } } } + diff --git a/app/code/Magento/Weee/composer.json b/app/code/Magento/Weee/composer.json index 7024de0f595c7..11148e19a235a 100644 --- a/app/code/Magento/Weee/composer.json +++ b/app/code/Magento/Weee/composer.json @@ -1,33 +1,34 @@ { "name": "magento/module-weee", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-directory": "*", - "magento/module-eav": "*", - "magento/module-page-cache": "*", - "magento/module-quote": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-directory": "100.4.*", + "magento/module-eav": "102.1.*", + "magento/module-page-cache": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-bundle": "*" + "magento/module-bundle": "101.0.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -37,3 +38,4 @@ } } } + diff --git a/app/code/Magento/WeeeGraphQl/composer.json b/app/code/Magento/WeeeGraphQl/composer.json index be7e50ab2fca1..20d7c067e8331 100644 --- a/app/code/Magento/WeeeGraphQl/composer.json +++ b/app/code/Magento/WeeeGraphQl/composer.json @@ -2,20 +2,21 @@ "name": "magento/module-weee-graph-ql", "description": "N/A", "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], + "version": "100.4.1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-store": "*", - "magento/module-tax": "*", - "magento/module-weee": "*" + "magento/framework": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-tax": "100.4.*", + "magento/module-weee": "100.4.*" }, "suggest": { - "magento/module-catalog-graph-ql": "*" + "magento/module-catalog-graph-ql": "100.4.*" }, - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json index 3014c99a35a14..254512daef8a2 100644 --- a/app/code/Magento/Widget/composer.json +++ b/app/code/Magento/Widget/composer.json @@ -1,29 +1,30 @@ { "name": "magento/module-widget", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-cms": "*", - "magento/module-email": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-variable": "*", - "magento/module-ui": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-cms": "104.0.*", + "magento/module-email": "101.1.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-variable": "100.4.*", + "magento/module-ui": "101.2.*" }, "suggest": { - "magento/module-widget-sample-data": "*" + "magento/module-widget-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -33,3 +34,4 @@ } } } + diff --git a/app/code/Magento/Wishlist/Controller/Shared/Allcart.php b/app/code/Magento/Wishlist/Controller/Shared/Allcart.php index 89413eff8323f..1c504a7a8a80d 100644 --- a/app/code/Magento/Wishlist/Controller/Shared/Allcart.php +++ b/app/code/Magento/Wishlist/Controller/Shared/Allcart.php @@ -10,7 +10,6 @@ use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; -use Magento\Framework\App\Action\HttpGetActionInterface; use Magento\Framework\App\Action\HttpPostActionInterface; use Magento\Framework\Controller\Result\Forward; use Magento\Framework\Controller\Result\Redirect; @@ -20,7 +19,7 @@ /** * Wishlist Allcart Controller */ -class Allcart extends Action implements HttpGetActionInterface, HttpPostActionInterface +class Allcart extends Action implements HttpPostActionInterface { /** * @var WishlistProvider diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json index b426ffe01cecc..22023d56b84f2 100644 --- a/app/code/Magento/Wishlist/composer.json +++ b/app/code/Magento/Wishlist/composer.json @@ -1,37 +1,38 @@ { "name": "magento/module-wishlist", "description": "N/A", + "type": "magento2-module", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "101.2.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-backend": "*", - "magento/module-catalog": "*", - "magento/module-catalog-inventory": "*", - "magento/module-checkout": "*", - "magento/module-customer": "*", - "magento/module-rss": "*", - "magento/module-sales": "*", - "magento/module-store": "*", - "magento/module-theme": "*", - "magento/module-ui": "*", - "magento/module-captcha": "*" + "magento/framework": "103.0.*", + "magento/module-backend": "102.0.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-inventory": "100.4.*", + "magento/module-checkout": "100.4.*", + "magento/module-customer": "103.0.*", + "magento/module-rss": "100.4.*", + "magento/module-sales": "103.0.*", + "magento/module-store": "101.1.*", + "magento/module-theme": "101.1.*", + "magento/module-ui": "101.2.*", + "magento/module-captcha": "100.4.*" }, "suggest": { - "magento/module-configurable-product": "*", - "magento/module-downloadable": "*", - "magento/module-bundle": "*", - "magento/module-cookie": "*", - "magento/module-grouped-product": "*", - "magento/module-wishlist-sample-data": "*" + "magento/module-configurable-product": "100.4.*", + "magento/module-downloadable": "100.4.*", + "magento/module-bundle": "101.0.*", + "magento/module-cookie": "100.4.*", + "magento/module-grouped-product": "100.4.*", + "magento/module-wishlist-sample-data": "Sample Data version: 100.4.*" }, - "type": "magento2-module", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" @@ -41,3 +42,4 @@ } } } + diff --git a/app/code/Magento/WishlistAnalytics/composer.json b/app/code/Magento/WishlistAnalytics/composer.json index 309257f857ed2..87114b22240fb 100644 --- a/app/code/Magento/WishlistAnalytics/composer.json +++ b/app/code/Magento/WishlistAnalytics/composer.json @@ -1,17 +1,18 @@ { "name": "magento/module-wishlist-analytics", "description": "N/A", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-wishlist": "*", - "magento/module-analytics": "*" - }, "type": "magento2-module", "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.2", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-wishlist": "101.2.*", + "magento/module-analytics": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -21,3 +22,4 @@ } } } + diff --git a/app/code/Magento/WishlistGraphQl/composer.json b/app/code/Magento/WishlistGraphQl/composer.json index 40b9377d716e7..e59f3e502583e 100755 --- a/app/code/Magento/WishlistGraphQl/composer.json +++ b/app/code/Magento/WishlistGraphQl/composer.json @@ -2,20 +2,21 @@ "name": "magento/module-wishlist-graph-ql", "description": "N/A", "type": "magento2-module", - "require": { - "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/module-wishlist": "*", - "magento/module-store": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-quote": "*", - "magento/module-catalog": "*", - "magento/module-catalog-graph-ql": "*" - }, "license": [ "OSL-3.0", "AFL-3.0" ], + "version": "100.4.3", + "require": { + "php": "~7.3.0||~7.4.0", + "magento/framework": "103.0.*", + "magento/module-wishlist": "101.2.*", + "magento/module-store": "101.1.*", + "magento/module-quote-graph-ql": "100.4.*", + "magento/module-quote": "101.2.*", + "magento/module-catalog": "104.0.*", + "magento/module-catalog-graph-ql": "100.4.*" + }, "autoload": { "files": [ "registration.php" @@ -25,3 +26,4 @@ } } } + diff --git a/app/design/adminhtml/Magento/backend/Magento_AdminAnalytics/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_AdminAnalytics/web/css/source/_module.less index 05c0653a9bac3..cb6991638fe56 100644 --- a/app/design/adminhtml/Magento/backend/Magento_AdminAnalytics/web/css/source/_module.less +++ b/app/design/adminhtml/Magento/backend/Magento_AdminAnalytics/web/css/source/_module.less @@ -29,6 +29,12 @@ } } + .modal-list { + margin-left: 0; + padding-left: 40px; + padding-top: 5px; + } + -webkit-transform: translateX(0); -webkit-transition: -webkit-transform 0s; transition: transform 0s; diff --git a/app/design/adminhtml/Magento/backend/composer.json b/app/design/adminhtml/Magento/backend/composer.json index 249441be1753e..efab371d9a720 100644 --- a/app/design/adminhtml/Magento/backend/composer.json +++ b/app/design/adminhtml/Magento/backend/composer.json @@ -1,21 +1,23 @@ { "name": "magento/theme-adminhtml-backend", "description": "N/A", + "type": "magento2-theme", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-theme", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/design/frontend/Magento/blank/composer.json b/app/design/frontend/Magento/blank/composer.json index 066d0cd1cc9f2..2f3d5e74834e7 100644 --- a/app/design/frontend/Magento/blank/composer.json +++ b/app/design/frontend/Magento/blank/composer.json @@ -1,21 +1,23 @@ { "name": "magento/theme-frontend-blank", "description": "N/A", + "type": "magento2-theme", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-theme", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/design/frontend/Magento/luma/composer.json b/app/design/frontend/Magento/luma/composer.json index 16bed43fe8cbf..98febc30b1784 100644 --- a/app/design/frontend/Magento/luma/composer.json +++ b/app/design/frontend/Magento/luma/composer.json @@ -1,22 +1,24 @@ { "name": "magento/theme-frontend-luma", "description": "N/A", + "type": "magento2-theme", + "license": [ + "OSL-3.0", + "AFL-3.0" + ], "config": { "sort-packages": true }, + "version": "100.4.3", "require": { "php": "~7.3.0||~7.4.0", - "magento/framework": "*", - "magento/theme-frontend-blank": "*" + "magento/framework": "103.0.*", + "magento/theme-frontend-blank": "100.4.*" }, - "type": "magento2-theme", - "license": [ - "OSL-3.0", - "AFL-3.0" - ], "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/de_DE/composer.json b/app/i18n/Magento/de_DE/composer.json index 5a488a3e32c2b..fd23d037ba459 100644 --- a/app/i18n/Magento/de_DE/composer.json +++ b/app/i18n/Magento/de_DE/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-de_de", "description": "German (Germany) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/en_US/composer.json b/app/i18n/Magento/en_US/composer.json index 1108c70de28a6..194854d58bbe2 100644 --- a/app/i18n/Magento/en_US/composer.json +++ b/app/i18n/Magento/en_US/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-en_us", "description": "English (United States) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/es_ES/composer.json b/app/i18n/Magento/es_ES/composer.json index 5bc3cb5730adf..0b49475587d54 100644 --- a/app/i18n/Magento/es_ES/composer.json +++ b/app/i18n/Magento/es_ES/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-es_es", "description": "Spanish (Spain) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/fr_FR/composer.json b/app/i18n/Magento/fr_FR/composer.json index 50c541308673b..ada414e6a7a32 100644 --- a/app/i18n/Magento/fr_FR/composer.json +++ b/app/i18n/Magento/fr_FR/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-fr_fr", "description": "French (France) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/nl_NL/composer.json b/app/i18n/Magento/nl_NL/composer.json index a182e179d4103..a881eed112ea0 100644 --- a/app/i18n/Magento/nl_NL/composer.json +++ b/app/i18n/Magento/nl_NL/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-nl_nl", "description": "Dutch (Netherlands) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/pt_BR/composer.json b/app/i18n/Magento/pt_BR/composer.json index 46734cc09b363..6e10bc16f6a79 100644 --- a/app/i18n/Magento/pt_BR/composer.json +++ b/app/i18n/Magento/pt_BR/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-pt_br", "description": "Portuguese (Brazil) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/app/i18n/Magento/zh_Hans_CN/composer.json b/app/i18n/Magento/zh_Hans_CN/composer.json index ce214ce649f56..8491eced1389f 100644 --- a/app/i18n/Magento/zh_Hans_CN/composer.json +++ b/app/i18n/Magento/zh_Hans_CN/composer.json @@ -1,6 +1,7 @@ { "name": "magento/language-zh_hans_cn", "description": "Chinese (China) language", + "type": "magento2-language", "license": [ "OSL-3.0", "AFL-3.0" @@ -8,13 +9,14 @@ "config": { "sort-packages": true }, + "version": "100.4.0", "require": { - "magento/framework": "*" + "magento/framework": "103.0.*" }, - "type": "magento2-language", "autoload": { "files": [ "registration.php" ] } } + diff --git a/composer.json b/composer.json index 87e119febcf65..768c09417d654 100644 --- a/composer.json +++ b/composer.json @@ -10,6 +10,7 @@ "preferred-install": "dist", "sort-packages": true }, + "version": "2.4.3-p1", "require": { "php": "~7.3.0||~7.4.0", "ext-bcmath": "*", @@ -42,7 +43,7 @@ "laminas/laminas-dependency-plugin": "^2.1.0", "laminas/laminas-di": "^3.2.0", "laminas/laminas-eventmanager": "^3.0.0", - "laminas/laminas-escaper": "2.7.0", + "laminas/laminas-escaper": "2.7.0", "laminas/laminas-feed": "^2.13.0", "laminas/laminas-filter": "^2.11", "laminas/laminas-http": "^2.6.0", @@ -82,6 +83,30 @@ "wikimedia/less.php": "^3.0.0", "web-token/jwt-framework": "^v2.2.7" }, + "suggest": { + "ext-pcntl": "Need for run processes in parallel mode" + }, + "autoload": { + "exclude-from-classmap": [ + "**/dev/**", + "**/update/**", + "**/Test/**" + ], + "files": [ + "app/etc/NonComposerComponentRegistration.php" + ], + "psr-0": { + "": [ + "app/code/", + "generated/code/" + ] + }, + "psr-4": { + "Magento\\": "app/code/Magento/", + "Magento\\Framework\\": "lib/internal/Magento/Framework/", + "Magento\\Setup\\": "setup/src/Magento/Setup/" + } + }, "require-dev": { "allure-framework/allure-phpunit": "~1.4", "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", @@ -98,289 +123,266 @@ "squizlabs/php_codesniffer": "~3.5.4", "symfony/finder": "^5.2" }, - "suggest": { - "ext-pcntl": "Need for run processes in parallel mode" + "conflict": { + "gene/bluefoot": "*" }, "replace": { - "magento/module-marketplace": "*", - "magento/module-admin-analytics": "*", - "magento/module-admin-notification": "*", - "magento/module-advanced-pricing-import-export": "*", - "magento/module-amqp": "*", - "magento/module-amqp-store": "*", - "magento/module-analytics": "*", - "magento/module-asynchronous-operations": "*", - "magento/module-authorization": "*", - "magento/module-advanced-search": "*", - "magento/module-backend": "*", - "magento/module-backup": "*", - "magento/module-bundle": "*", - "magento/module-bundle-graph-ql": "*", - "magento/module-bundle-import-export": "*", - "magento/module-cache-invalidate": "*", - "magento/module-captcha": "*", - "magento/module-cardinal-commerce": "*", - "magento/module-catalog": "*", - "magento/module-catalog-customer-graph-ql": "*", - "magento/module-catalog-analytics": "*", - "magento/module-catalog-import-export": "*", - "magento/module-catalog-inventory": "*", - "magento/module-catalog-inventory-graph-ql": "*", - "magento/module-catalog-rule": "*", - "magento/module-catalog-rule-graph-ql": "*", - "magento/module-catalog-rule-configurable": "*", - "magento/module-catalog-search": "*", - "magento/module-catalog-url-rewrite": "*", - "magento/module-catalog-widget": "*", - "magento/module-checkout": "*", - "magento/module-checkout-agreements": "*", - "magento/module-checkout-agreements-graph-ql": "*", - "magento/module-cms": "*", - "magento/module-cms-url-rewrite": "*", - "magento/module-compare-list-graph-ql": "*", - "magento/module-config": "*", - "magento/module-configurable-import-export": "*", - "magento/module-configurable-product": "*", - "magento/module-configurable-product-sales": "*", - "magento/module-contact": "*", - "magento/module-cookie": "*", - "magento/module-cron": "*", - "magento/module-currency-symbol": "*", - "magento/module-customer": "*", - "magento/module-customer-analytics": "*", - "magento/module-customer-downloadable-graph-ql": "*", - "magento/module-customer-import-export": "*", - "magento/module-deploy": "*", - "magento/module-developer": "*", - "magento/module-dhl": "*", - "magento/module-directory": "*", - "magento/module-directory-graph-ql": "*", - "magento/module-downloadable": "*", - "magento/module-downloadable-graph-ql": "*", - "magento/module-downloadable-import-export": "*", - "magento/module-eav": "*", - "magento/module-elasticsearch": "*", - "magento/module-elasticsearch-6": "*", - "magento/module-elasticsearch-7": "*", - "magento/module-email": "*", - "magento/module-encryption-key": "*", - "magento/module-fedex": "*", - "magento/module-gift-message": "*", - "magento/module-gift-message-graph-ql": "*", - "magento/module-google-adwords": "*", - "magento/module-google-analytics": "*", - "magento/module-google-optimizer": "*", - "magento/module-graph-ql": "*", - "magento/module-graph-ql-cache": "*", - "magento/module-catalog-graph-ql": "*", - "magento/module-catalog-cms-graph-ql": "*", - "magento/module-catalog-url-rewrite-graph-ql": "*", - "magento/module-configurable-product-graph-ql": "*", - "magento/module-customer-graph-ql": "*", - "magento/module-eav-graph-ql": "*", - "magento/module-swatches-graph-ql": "*", - "magento/module-tax-graph-ql": "*", - "magento/module-url-rewrite-graph-ql": "*", - "magento/module-cms-url-rewrite-graph-ql": "*", - "magento/module-weee-graph-ql": "*", - "magento/module-cms-graph-ql": "*", - "magento/module-grouped-import-export": "*", - "magento/module-grouped-product": "*", - "magento/module-grouped-catalog-inventory": "*", - "magento/module-grouped-product-graph-ql": "*", - "magento/module-import-export": "*", - "magento/module-indexer": "*", - "magento/module-instant-purchase": "*", - "magento/module-integration": "*", - "magento/module-layered-navigation": "*", - "magento/module-login-as-customer": "*", - "magento/module-login-as-customer-admin-ui": "*", - "magento/module-login-as-customer-api": "*", - "magento/module-login-as-customer-assistance": "*", - "magento/module-login-as-customer-frontend-ui": "*", - "magento/module-login-as-customer-graph-ql": "*", - "magento/module-login-as-customer-log": "*", - "magento/module-login-as-customer-quote": "*", - "magento/module-login-as-customer-page-cache": "*", - "magento/module-login-as-customer-sales": "*", - "magento/module-media-content": "*", - "magento/module-media-content-api": "*", - "magento/module-media-content-catalog": "*", - "magento/module-media-content-cms": "*", - "magento/module-media-gallery": "*", - "magento/module-media-gallery-api": "*", - "magento/module-media-gallery-ui": "*", - "magento/module-media-gallery-ui-api": "*", - "magento/module-media-gallery-integration": "*", - "magento/module-media-gallery-synchronization": "*", - "magento/module-media-gallery-synchronization-api": "*", - "magento/module-media-content-synchronization": "*", - "magento/module-media-content-synchronization-api": "*", - "magento/module-media-content-synchronization-catalog": "*", - "magento/module-media-content-synchronization-cms": "*", - "magento/module-media-gallery-synchronization-metadata": "*", - "magento/module-media-gallery-metadata": "*", - "magento/module-media-gallery-metadata-api": "*", - "magento/module-media-gallery-catalog-ui": "*", - "magento/module-media-gallery-cms-ui": "*", - "magento/module-media-gallery-catalog-integration": "*", - "magento/module-media-gallery-catalog": "*", - "magento/module-media-gallery-renditions": "*", - "magento/module-media-gallery-renditions-api": "*", - "magento/module-media-storage": "*", - "magento/module-message-queue": "*", - "magento/module-msrp": "*", - "magento/module-msrp-configurable-product": "*", - "magento/module-msrp-grouped-product": "*", - "magento/module-multishipping": "*", - "magento/module-mysql-mq": "*", - "magento/module-new-relic-reporting": "*", - "magento/module-newsletter": "*", - "magento/module-newsletter-graph-ql": "*", - "magento/module-offline-payments": "*", - "magento/module-offline-shipping": "*", - "magento/module-page-cache": "*", - "magento/module-payment": "*", - "magento/module-paypal": "*", - "magento/module-paypal-captcha": "*", - "magento/module-paypal-graph-ql": "*", - "magento/module-persistent": "*", - "magento/module-product-alert": "*", - "magento/module-product-video": "*", - "magento/module-quote": "*", - "magento/module-quote-analytics": "*", - "magento/module-quote-bundle-options": "*", - "magento/module-quote-configurable-options": "*", - "magento/module-quote-downloadable-links": "*", - "magento/module-quote-graph-ql": "*", - "magento/module-related-product-graph-ql": "*", - "magento/module-release-notification": "*", - "magento/module-reports": "*", - "magento/module-require-js": "*", - "magento/module-review": "*", - "magento/module-review-graph-ql": "*", - "magento/module-review-analytics": "*", - "magento/module-robots": "*", - "magento/module-rss": "*", - "magento/module-rule": "*", - "magento/module-sales": "*", - "magento/module-sales-analytics": "*", - "magento/module-sales-graph-ql": "*", - "magento/module-sales-inventory": "*", - "magento/module-sales-rule": "*", - "magento/module-sales-sequence": "*", - "magento/module-sample-data": "*", - "magento/module-search": "*", - "magento/module-security": "*", - "magento/module-send-friend": "*", - "magento/module-send-friend-graph-ql": "*", - "magento/module-shipping": "*", - "magento/module-sitemap": "*", - "magento/module-store": "*", - "magento/module-store-graph-ql": "*", - "magento/module-swagger": "*", - "magento/module-swagger-webapi": "*", - "magento/module-swagger-webapi-async": "*", - "magento/module-swatches": "*", - "magento/module-swatches-layered-navigation": "*", - "magento/module-tax": "*", - "magento/module-tax-import-export": "*", - "magento/module-theme": "*", - "magento/module-theme-graph-ql": "*", - "magento/module-translation": "*", - "magento/module-ui": "*", - "magento/module-ups": "*", - "magento/module-url-rewrite": "*", - "magento/module-user": "*", - "magento/module-usps": "*", - "magento/module-variable": "*", - "magento/module-vault": "*", - "magento/module-vault-graph-ql": "*", - "magento/module-version": "*", - "magento/module-webapi": "*", - "magento/module-webapi-async": "*", - "magento/module-webapi-security": "*", - "magento/module-weee": "*", - "magento/module-widget": "*", - "magento/module-wishlist": "*", - "magento/module-wishlist-graph-ql": "*", - "magento/module-wishlist-analytics": "*", - "magento/theme-adminhtml-backend": "*", - "magento/theme-frontend-blank": "*", - "magento/theme-frontend-luma": "*", - "magento/language-de_de": "*", - "magento/language-en_us": "*", - "magento/language-es_es": "*", - "magento/language-fr_fr": "*", - "magento/language-nl_nl": "*", - "magento/language-pt_br": "*", - "magento/language-zh_hans_cn": "*", - "magento/framework": "*", - "magento/framework-amqp": "*", - "magento/framework-bulk": "*", - "magento/framework-message-queue": "*", + "magento/module-marketplace": "100.4.2", + "magento/module-admin-analytics": "100.4.3-p1", + "magento/module-admin-notification": "100.4.2", + "magento/module-advanced-pricing-import-export": "100.4.3", + "magento/module-amqp": "100.4.1", + "magento/module-amqp-store": "100.4.1", + "magento/module-analytics": "100.4.3", + "magento/module-asynchronous-operations": "100.4.3", + "magento/module-authorization": "100.4.3", + "magento/module-advanced-search": "100.4.1", + "magento/module-backend": "102.0.3", + "magento/module-backup": "100.4.3", + "magento/module-bundle": "101.0.3", + "magento/module-bundle-graph-ql": "100.4.3", + "magento/module-bundle-import-export": "100.4.2", + "magento/module-cache-invalidate": "100.4.1", + "magento/module-captcha": "100.4.3-p1", + "magento/module-cardinal-commerce": "100.4.1", + "magento/module-catalog": "104.0.3-p1", + "magento/module-catalog-customer-graph-ql": "100.4.3", + "magento/module-catalog-analytics": "100.4.1", + "magento/module-catalog-import-export": "101.1.3", + "magento/module-catalog-inventory": "100.4.3", + "magento/module-catalog-inventory-graph-ql": "100.4.0", + "magento/module-catalog-rule": "101.2.3", + "magento/module-catalog-rule-graph-ql": "100.4.1", + "magento/module-catalog-rule-configurable": "100.4.2", + "magento/module-catalog-search": "102.0.3", + "magento/module-catalog-url-rewrite": "100.4.3", + "magento/module-catalog-widget": "100.4.3", + "magento/module-checkout": "100.4.3-p1", + "magento/module-checkout-agreements": "100.4.2", + "magento/module-checkout-agreements-graph-ql": "100.4.0", + "magento/module-cms": "104.0.3-p1", + "magento/module-cms-url-rewrite": "100.4.2", + "magento/module-compare-list-graph-ql": "100.4.0", + "magento/module-config": "101.2.3", + "magento/module-configurable-import-export": "100.4.1", + "magento/module-configurable-product": "100.4.3", + "magento/module-configurable-product-sales": "100.4.1", + "magento/module-contact": "100.4.3", + "magento/module-cookie": "100.4.3", + "magento/module-cron": "100.4.3", + "magento/module-currency-symbol": "100.4.2", + "magento/module-customer": "103.0.3-p1", + "magento/module-customer-analytics": "100.4.1", + "magento/module-customer-downloadable-graph-ql": "100.4.0", + "magento/module-customer-import-export": "100.4.3", + "magento/module-deploy": "100.4.3", + "magento/module-developer": "100.4.3", + "magento/module-dhl": "100.4.2", + "magento/module-directory": "100.4.3", + "magento/module-directory-graph-ql": "100.4.1", + "magento/module-downloadable": "100.4.3", + "magento/module-downloadable-graph-ql": "100.4.3", + "magento/module-downloadable-import-export": "100.4.2", + "magento/module-eav": "102.1.3", + "magento/module-elasticsearch": "101.0.3", + "magento/module-elasticsearch-6": "100.4.3", + "magento/module-elasticsearch-7": "100.4.3", + "magento/module-email": "101.1.3", + "magento/module-encryption-key": "100.4.2", + "magento/module-fedex": "100.4.2", + "magento/module-gift-message": "100.4.2", + "magento/module-gift-message-graph-ql": "100.4.1", + "magento/module-google-adwords": "100.4.1", + "magento/module-google-analytics": "100.4.0", + "magento/module-google-optimizer": "100.4.2", + "magento/module-graph-ql": "100.4.3", + "magento/module-graph-ql-cache": "100.4.0", + "magento/module-catalog-graph-ql": "100.4.3", + "magento/module-catalog-cms-graph-ql": "100.4.0", + "magento/module-catalog-url-rewrite-graph-ql": "100.4.2", + "magento/module-configurable-product-graph-ql": "100.4.3", + "magento/module-customer-graph-ql": "100.4.3", + "magento/module-eav-graph-ql": "100.4.1", + "magento/module-swatches-graph-ql": "100.4.2", + "magento/module-tax-graph-ql": "100.4.0", + "magento/module-url-rewrite-graph-ql": "100.4.2", + "magento/module-cms-url-rewrite-graph-ql": "100.4.1", + "magento/module-weee-graph-ql": "100.4.1", + "magento/module-cms-graph-ql": "100.4.1", + "magento/module-grouped-import-export": "100.4.1", + "magento/module-grouped-product": "100.4.3", + "magento/module-grouped-catalog-inventory": "100.4.0", + "magento/module-grouped-product-graph-ql": "100.4.3", + "magento/module-import-export": "101.0.3", + "magento/module-indexer": "100.4.3", + "magento/module-instant-purchase": "100.4.2", + "magento/module-integration": "100.4.3", + "magento/module-layered-navigation": "100.4.3", + "magento/module-login-as-customer": "100.4.3", + "magento/module-login-as-customer-admin-ui": "100.4.3-p1", + "magento/module-login-as-customer-api": "100.4.2", + "magento/module-login-as-customer-assistance": "100.4.2-p1", + "magento/module-login-as-customer-frontend-ui": "100.4.3-p1", + "magento/module-login-as-customer-graph-ql": "100.4.0", + "magento/module-login-as-customer-log": "100.4.2-p1", + "magento/module-login-as-customer-quote": "100.4.2-p1", + "magento/module-login-as-customer-page-cache": "100.4.3-p1", + "magento/module-login-as-customer-sales": "100.4.3-p1", + "magento/module-media-content": "100.4.2", + "magento/module-media-content-api": "100.4.2", + "magento/module-media-content-catalog": "100.4.2", + "magento/module-media-content-cms": "100.4.2", + "magento/module-media-gallery": "100.4.2-p1", + "magento/module-media-gallery-api": "101.0.2", + "magento/module-media-gallery-ui": "100.4.2-p1", + "magento/module-media-gallery-ui-api": "100.4.1", + "magento/module-media-gallery-integration": "100.4.2", + "magento/module-media-gallery-synchronization": "100.4.2", + "magento/module-media-gallery-synchronization-api": "100.4.1", + "magento/module-media-content-synchronization": "100.4.2", + "magento/module-media-content-synchronization-api": "100.4.1", + "magento/module-media-content-synchronization-catalog": "100.4.1", + "magento/module-media-content-synchronization-cms": "100.4.1", + "magento/module-media-gallery-synchronization-metadata": "100.4.0", + "magento/module-media-gallery-metadata": "100.4.1", + "magento/module-media-gallery-metadata-api": "100.4.0", + "magento/module-media-gallery-catalog-ui": "100.4.1-p1", + "magento/module-media-gallery-cms-ui": "100.4.1-p1", + "magento/module-media-gallery-catalog-integration": "100.4.1-p1", + "magento/module-media-gallery-catalog": "100.4.1", + "magento/module-media-gallery-renditions": "100.4.1-p1", + "magento/module-media-gallery-renditions-api": "100.4.0", + "magento/module-media-storage": "100.4.2-p1", + "magento/module-message-queue": "100.4.3", + "magento/module-msrp": "100.4.2", + "magento/module-msrp-configurable-product": "100.4.1", + "magento/module-msrp-grouped-product": "100.4.1", + "magento/module-multishipping": "100.4.3", + "magento/module-mysql-mq": "100.4.1", + "magento/module-new-relic-reporting": "100.4.1", + "magento/module-newsletter": "100.4.3-p1", + "magento/module-newsletter-graph-ql": "100.4.0", + "magento/module-offline-payments": "100.4.2", + "magento/module-offline-shipping": "100.4.2", + "magento/module-page-cache": "100.4.3", + "magento/module-payment": "100.4.3", + "magento/module-paypal": "101.0.3-p1", + "magento/module-paypal-captcha": "100.4.1", + "magento/module-paypal-graph-ql": "100.4.1", + "magento/module-persistent": "100.4.3", + "magento/module-product-alert": "100.4.2", + "magento/module-product-video": "100.4.3", + "magento/module-quote": "101.2.3", + "magento/module-quote-analytics": "100.4.3", + "magento/module-quote-bundle-options": "100.4.0", + "magento/module-quote-configurable-options": "100.4.0", + "magento/module-quote-downloadable-links": "100.4.0", + "magento/module-quote-graph-ql": "100.4.3", + "magento/module-related-product-graph-ql": "100.4.1", + "magento/module-release-notification": "100.4.1", + "magento/module-reports": "100.4.3", + "magento/module-require-js": "100.4.0", + "magento/module-review": "100.4.3", + "magento/module-review-graph-ql": "100.4.0", + "magento/module-review-analytics": "100.4.1", + "magento/module-robots": "101.1.0", + "magento/module-rss": "100.4.2", + "magento/module-rule": "100.4.2", + "magento/module-sales": "103.0.3-p1", + "magento/module-sales-analytics": "100.4.1", + "magento/module-sales-graph-ql": "100.4.3", + "magento/module-sales-inventory": "100.4.0", + "magento/module-sales-rule": "101.2.3", + "magento/module-sales-sequence": "100.4.1", + "magento/module-sample-data": "100.4.1", + "magento/module-search": "101.1.3", + "magento/module-security": "100.4.3-p1", + "magento/module-send-friend": "100.4.2", + "magento/module-send-friend-graph-ql": "100.4.0", + "magento/module-shipping": "100.4.3", + "magento/module-sitemap": "100.4.2", + "magento/module-store": "101.1.3", + "magento/module-store-graph-ql": "100.4.2", + "magento/module-swagger": "100.4.2", + "magento/module-swagger-webapi": "100.4.0", + "magento/module-swagger-webapi-async": "100.4.0", + "magento/module-swatches": "100.4.3", + "magento/module-swatches-layered-navigation": "100.4.0", + "magento/module-tax": "100.4.3", + "magento/module-tax-import-export": "100.4.3", + "magento/module-theme": "101.1.3-p1", + "magento/module-theme-graph-ql": "100.4.1", + "magento/module-translation": "100.4.3", + "magento/module-ui": "101.2.3-p1", + "magento/module-ups": "100.4.3", + "magento/module-url-rewrite": "102.0.2", + "magento/module-user": "101.2.3", + "magento/module-usps": "100.4.2", + "magento/module-variable": "100.4.1-p1", + "magento/module-vault": "101.2.3-p1", + "magento/module-vault-graph-ql": "100.4.0", + "magento/module-version": "100.4.0", + "magento/module-webapi": "100.4.2", + "magento/module-webapi-async": "100.4.1", + "magento/module-webapi-security": "100.4.1", + "magento/module-weee": "100.4.3", + "magento/module-widget": "101.2.3", + "magento/module-wishlist": "101.2.3-p1", + "magento/module-wishlist-graph-ql": "100.4.3", + "magento/module-wishlist-analytics": "100.4.2", + "magento/theme-adminhtml-backend": "100.4.3-p1", + "magento/theme-frontend-blank": "100.4.3", + "magento/theme-frontend-luma": "100.4.3", + "magento/language-de_de": "100.4.0", + "magento/language-en_us": "100.4.0", + "magento/language-es_es": "100.4.0", + "magento/language-fr_fr": "100.4.0", + "magento/language-nl_nl": "100.4.0", + "magento/language-pt_br": "100.4.0", + "magento/language-zh_hans_cn": "100.4.0", + "magento/framework": "103.0.3-p1", + "magento/framework-amqp": "100.4.1", + "magento/framework-bulk": "101.0.0", + "magento/framework-message-queue": "100.4.3", "trentrichardson/jquery-timepicker-addon": "1.4.3", "components/jquery": "1.11.0", "blueimp/jquery-file-upload": "5.6.14", "components/jqueryui": "1.10.4", "twbs/bootstrap": "3.1.0", "tinymce/tinymce": "3.4.7", - "magento/module-csp": "*", - "magento/module-aws-s3": "*", - "magento/module-remote-storage": "*", - "magento/module-jwt-framework-adapter": "*" + "magento/module-csp": "100.4.2-p1", + "magento/module-aws-s3": "100.4.1-p1", + "magento/module-remote-storage": "100.4.1-p1", + "magento/module-jwt-framework-adapter": "100.4.0" }, - "conflict": { - "gene/bluefoot": "*" + "autoload-dev": { + "psr-4": { + "Magento\\PhpStan\\": "dev/tests/static/framework/Magento/PhpStan/", + "Magento\\Sniffs\\": "dev/tests/static/framework/Magento/Sniffs/", + "Magento\\TestFramework\\Inspection\\": "dev/tests/static/framework/Magento/TestFramework/Inspection/", + "Magento\\TestFramework\\Utility\\": "dev/tests/static/framework/Magento/TestFramework/Utility/", + "Magento\\Tools\\": "dev/tools/Magento/Tools/", + "Magento\\Tools\\Sanity\\": "dev/build/publication/sanity/Magento/Tools/Sanity/" + } }, + "prefer-stable": true, "extra": { "component_paths": { - "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", + "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", "components/jquery": [ "lib/web/jquery.js", "lib/web/jquery/jquery.min.js", "lib/web/jquery/jquery-migrate.js" ], - "blueimp/jquery-file-upload": "lib/web/jquery/fileUploader", "components/jqueryui": [ "lib/web/jquery/jquery-ui.js" ], + "tinymce/tinymce": "lib/web/tiny_mce_4", + "trentrichardson/jquery-timepicker-addon": "lib/web/jquery/jquery-ui-timepicker-addon.js", "twbs/bootstrap": [ "lib/web/jquery/jquery.tabs.js" - ], - "tinymce/tinymce": "lib/web/tiny_mce_4" - } - }, - "autoload": { - "psr-4": { - "Magento\\Framework\\": "lib/internal/Magento/Framework/", - "Magento\\Setup\\": "setup/src/Magento/Setup/", - "Magento\\": "app/code/Magento/" - }, - "psr-0": { - "": [ - "app/code/", - "generated/code/" ] - }, - "files": [ - "app/etc/NonComposerComponentRegistration.php" - ], - "exclude-from-classmap": [ - "**/dev/**", - "**/update/**", - "**/Test/**" - ] - }, - "autoload-dev": { - "psr-4": { - "Magento\\Sniffs\\": "dev/tests/static/framework/Magento/Sniffs/", - "Magento\\Tools\\": "dev/tools/Magento/Tools/", - "Magento\\Tools\\Sanity\\": "dev/build/publication/sanity/Magento/Tools/Sanity/", - "Magento\\TestFramework\\Inspection\\": "dev/tests/static/framework/Magento/TestFramework/Inspection/", - "Magento\\TestFramework\\Utility\\": "dev/tests/static/framework/Magento/TestFramework/Utility/", - "Magento\\PhpStan\\": "dev/tests/static/framework/Magento/PhpStan/" } - }, - "prefer-stable": true + } } + diff --git a/composer.lock b/composer.lock index 26f41ce520aed..04e9291ebdafc 100644 --- a/composer.lock +++ b/composer.lock @@ -7961,12 +7961,12 @@ "version": "1.3.1", "source": { "type": "git", - "url": "https://github.com/allure-framework/allure-php-commons.git", + "url": "https://github.com/allure-framework/allure-php-api.git", "reference": "f64b69afeff472c564a4e2379efb2b69c430ec5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/allure-framework/allure-php-commons/zipball/f64b69afeff472c564a4e2379efb2b69c430ec5a", + "url": "https://api.github.com/repos/allure-framework/allure-php-api/zipball/f64b69afeff472c564a4e2379efb2b69c430ec5a", "reference": "f64b69afeff472c564a4e2379efb2b69c430ec5a", "shasum": "" }, @@ -8009,7 +8009,7 @@ ], "support": { "email": "allure@yandex-team.ru", - "issues": "https://github.com/allure-framework/allure-php-commons/issues", + "issues": "https://github.com/allure-framework/allure-php-api/issues", "source": "https://github.com/allure-framework/allure-php-api" }, "time": "2021-03-26T14:32:27+00:00" diff --git a/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php b/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php index fcbd413d977e6..322c0274e1f40 100644 --- a/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php +++ b/dev/tests/integration/testsuite/Magento/Backend/Model/Auth/SessionTest.php @@ -39,6 +39,7 @@ protected function setUp(): void ->setCurrentScope(\Magento\Backend\App\Area\FrontNameResolver::AREA_CODE); $this->auth = $this->objectManager->create(\Magento\Backend\Model\Auth::class); $this->authSession = $this->objectManager->create(\Magento\Backend\Model\Auth\Session::class); + $this->authSession->setUser($this->objectManager->create(\Magento\User\Model\User::class)); $this->auth->setAuthStorage($this->authSession); $this->auth->logout(); } diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFilesTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFilesTest.php index d399734146546..3086224bf20f8 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFilesTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFilesTest.php @@ -8,6 +8,7 @@ namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\FileSystemException; use Magento\Framework\Filesystem\Directory\DenyListPathValidator; @@ -21,6 +22,14 @@ */ class DeleteFilesTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + /** * @var \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\DeleteFiles */ @@ -73,7 +82,7 @@ class DeleteFilesTest extends \PHPUnit\Framework\TestCase protected function setUp(): void { $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $directoryName = 'directory1'; + $directoryName = 'testDir'; $this->directoryList = $this->objectManager->get(DirectoryList::class); $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); /** @var \Magento\Cms\Helper\Wysiwyg\Images $imagesHelper */ @@ -84,19 +93,27 @@ protected function setUp(): void $filePath = $this->fullDirectoryPath . DIRECTORY_SEPARATOR . $this->fileName; $fixtureDir = realpath(__DIR__ . '/../../../../../Catalog/_files'); copy($fixtureDir . '/' . $this->fileName, $filePath); - $path = $this->fullDirectoryPath . '/.htaccess'; - $denyListPathValidator = $this->objectManager - ->create(DenyListPathValidator::class, ['driver' => $this->mediaDirectory->getDriver()]); - $denyListPathValidator->addException($path); - $bypassDenyListWriteFactory = $this->objectManager->create(WriteFactory::class, [ - 'denyListPathValidator' => $denyListPathValidator - ]); - $this->bypassDenyListWrite = $bypassDenyListWriteFactory - ->create($this->directoryList->getPath(DirectoryList::MEDIA)); - if (!$this->bypassDenyListWrite->isFile($path)) { - $this->bypassDenyListWrite->writeFile($path, "Order deny,allow\nDeny from all"); - } $this->model = $this->objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\DeleteFiles::class); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['testDir']), + ); + } + + protected function tearDown(): void + { + $this->mediaDirectory->delete($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); } /** @@ -152,14 +169,28 @@ public function executeDataProvider(): array */ public function testDeleteHtaccess() { + $testDir = $this->imagesHelper->getStorageRoot() . "directory1"; + $this->mediaDirectory->create($this->mediaDirectory->getRelativePath($testDir)); + $path = $testDir . '/.htaccess'; + $denyListPathValidator = $this->objectManager + ->create(DenyListPathValidator::class, ['driver' => $this->mediaDirectory->getDriver()]); + $denyListPathValidator->addException($path); + $bypassDenyListWriteFactory = $this->objectManager->create(WriteFactory::class, [ + 'denyListPathValidator' => $denyListPathValidator + ]); + $this->bypassDenyListWrite = $bypassDenyListWriteFactory + ->create($this->directoryList->getPath(DirectoryList::MEDIA)); + if (!$this->bypassDenyListWrite->isFile($path)) { + $this->bypassDenyListWrite->writeFile($path, "Order deny,allow\nDeny from all"); + } $this->model->getRequest()->setMethod('POST') ->setPostValue('files', [$this->imagesHelper->idEncode('.htaccess')]); - $this->model->getStorage()->getSession()->setCurrentPath($this->fullDirectoryPath); + $this->model->getStorage()->getSession()->setCurrentPath($testDir); $this->model->execute(); $this->assertTrue( $this->bypassDenyListWrite->isExist( - $this->bypassDenyListWrite->getRelativePath($this->fullDirectoryPath . '/' . '.htaccess') + $this->bypassDenyListWrite->getRelativePath($testDir . '/' . '.htaccess') ) ); } diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolderTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolderTest.php index a80d2102edd0a..8fd8a077d40c6 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolderTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/DeleteFolderTest.php @@ -6,6 +6,7 @@ namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\Response\HttpFactory as ResponseFactory; @@ -16,6 +17,19 @@ */ class DeleteFolderTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + /** * @var \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\DeleteFolder */ @@ -51,14 +65,38 @@ class DeleteFolderTest extends \PHPUnit\Framework\TestCase */ protected function setUp(): void { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->filesystem = $objectManager->get(\Magento\Framework\Filesystem::class); + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); /** @var \Magento\Cms\Helper\Wysiwyg\Images $imagesHelper */ - $this->imagesHelper = $objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); + $this->imagesHelper = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); $this->fullDirectoryPath = $this->imagesHelper->getStorageRoot(); - $this->responseFactory = $objectManager->get(ResponseFactory::class); - $this->model = $objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\DeleteFolder::class); + $this->mediaDirectory->create($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $this->responseFactory = $this->objectManager->get(ResponseFactory::class); + $this->model = $this->objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\DeleteFolder::class); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['testDir']), + ); + } + + protected function tearDown(): void + { + $directoryName = 'testDir'; + $this->mediaDirectory->delete( + $this->mediaDirectory->getRelativePath($this->imagesHelper->getStorageRoot() . '/' . $directoryName) + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); } /** @@ -70,21 +108,14 @@ protected function setUp(): void */ public function testExecute() { - $directoryName = DIRECTORY_SEPARATOR . 'NewDirectory'; - $this->mediaDirectory->create( - $this->mediaDirectory->getRelativePath($this->fullDirectoryPath . $directoryName) - ); - $this->model->getRequest()->setParams(['node' => $this->imagesHelper->idEncode($directoryName)]); + $directoryName = 'testDir/NewDirectory'; + $path = $this->mediaDirectory->getRelativePath($this->fullDirectoryPath . $directoryName); + $this->mediaDirectory->create($path); + $this->model->getRequest()->setParams(['node' => $this->imagesHelper->idEncode($path)]); $this->model->getRequest()->setMethod('POST'); $this->model->execute(); - $this->assertFalse( - $this->mediaDirectory->isExist( - $this->mediaDirectory->getRelativePath( - $this->fullDirectoryPath . $directoryName - ) - ) - ); + $this->assertFalse($this->mediaDirectory->isExist($path)); } /** @@ -120,7 +151,10 @@ public function testExecuteWithLinkedMedia() */ public function testExecuteWithWrongDirectoryName() { - $directoryName = '/../../etc/'; + $directoryName = 'testDir/../../../etc/'; + $testDir = $this->mediaDirectory->getRelativePath($this->fullDirectoryPath . 'testDir'); + $this->mediaDirectory->create($testDir); + $this->assertFileExists($this->fullDirectoryPath . $directoryName); $this->model->getRequest()->setParams(['node' => $this->imagesHelper->idEncode($directoryName)]); $this->model->execute(); @@ -136,7 +170,7 @@ public function testExecuteWithWrongDirectoryName() public function testExecuteWithExcludedDirectoryName() { $directoryName = 'downloadable'; - $expectedResponseMessage = 'We cannot delete directory /downloadable.'; + $expectedResponseMessage = 'We cannot delete the selected directory.'; $mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); $mediaDirectory->create($directoryName); $this->assertFileExists($this->fullDirectoryPath . $directoryName); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolderTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolderTest.php index 55f74b79ff577..e95c28139ddd0 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolderTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/NewFolderTest.php @@ -6,6 +6,7 @@ namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; /** @@ -15,6 +16,19 @@ */ class NewFolderTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + /** * @var \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\NewFolder */ @@ -50,13 +64,34 @@ class NewFolderTest extends \PHPUnit\Framework\TestCase */ protected function setUp(): void { - $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $this->filesystem = $objectManager->get(\Magento\Framework\Filesystem::class); + $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); /** @var \Magento\Cms\Helper\Wysiwyg\Images $imagesHelper */ - $this->imagesHelper = $objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); + $this->imagesHelper = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); - $this->fullDirectoryPath = $this->imagesHelper->getStorageRoot(); - $this->model = $objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\NewFolder::class); + $this->fullDirectoryPath = $this->imagesHelper->getStorageRoot() . '/testDir'; + $this->mediaDirectory->create($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $this->model = $this->objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\NewFolder::class); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['testDir']), + ); + } + + protected function tearDown(): void + { + $this->mediaDirectory->delete($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); } /** @@ -93,7 +128,7 @@ public function testExecuteWithLinkedMedia() ->setPostValue('name', $this->dirName); $this->model->getStorage() ->getSession() - ->setCurrentPath($this->fullDirectoryPath . DIRECTORY_SEPARATOR . 'wysiwyg'); + ->setCurrentPath($this->imagesHelper->getStorageRoot() . DIRECTORY_SEPARATOR . 'wysiwyg'); $this->model->execute(); $this->assertTrue(is_dir($linkedDirectoryPath . DIRECTORY_SEPARATOR . $this->dirName)); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/UploadTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/UploadTest.php index 3ebfce78f8f9d..bf06f12c6abcf 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/UploadTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/UploadTest.php @@ -8,6 +8,7 @@ namespace Magento\Cms\Controller\Adminhtml\Wysiwyg\Images; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Controller\Result\Json as JsonResponse; use Magento\Framework\App\Response\HttpFactory as ResponseFactory; @@ -20,6 +21,14 @@ */ class UploadTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + /** * @var \Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\Upload */ @@ -60,20 +69,25 @@ class UploadTest extends \PHPUnit\Framework\TestCase */ private $responseFactory; + /** + * @var \Magento\Cms\Helper\Wysiwyg\Images + */ + private $imagesHelper; + /** * @inheritdoc */ protected function setUp(): void { $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); - $directoryName = 'directory1'; + $directoryName = 'testDir'; $excludedDirName = 'downloadable'; $this->filesystem = $this->objectManager->get(\Magento\Framework\Filesystem::class); /** @var \Magento\Cms\Helper\Wysiwyg\Images $imagesHelper */ - $imagesHelper = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); + $this->imagesHelper = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); - $this->fullDirectoryPath = $imagesHelper->getStorageRoot() . DIRECTORY_SEPARATOR . $directoryName; - $this->fullExcludedDirectoryPath = $imagesHelper->getStorageRoot() . DIRECTORY_SEPARATOR . $excludedDirName; + $this->fullDirectoryPath = $this->imagesHelper->getStorageRoot() . DIRECTORY_SEPARATOR . $directoryName; + $this->fullExcludedDirectoryPath = $this->imagesHelper->getStorageRoot() . DIRECTORY_SEPARATOR . $excludedDirName; $this->mediaDirectory->create($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); $this->responseFactory = $this->objectManager->get(ResponseFactory::class); $this->model = $this->objectManager->get(\Magento\Cms\Controller\Adminhtml\Wysiwyg\Images\Upload::class); @@ -89,6 +103,29 @@ protected function setUp(): void 'size' => filesize($fixtureDir), ], ]; + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['testDir']), + ); + } + + protected function tearDown(): void + { + $directoryName = 'testDir'; + $this->mediaDirectory->delete( + $this->mediaDirectory->getRelativePath($this->imagesHelper->getStorageRoot() . '/' . $directoryName) + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); } /** @@ -132,7 +169,7 @@ public function testExecute() */ public function testExecuteWithExcludedDirectory() { - $expectedError = 'We can\'t upload the file to current folder right now. Please try another folder.'; + $expectedError = 'We can\'t upload the file to the current folder right now. Please try another folder.'; $this->model->getRequest()->setParams(['type' => 'image/png']); $this->model->getRequest()->setMethod('POST'); $this->model->getStorage()->getSession()->setCurrentPath($this->fullExcludedDirectoryPath); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php index 96084981fe0b8..93b29aa546966 100644 --- a/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php +++ b/dev/tests/integration/testsuite/Magento/Cms/Model/Wysiwyg/Images/StorageTest.php @@ -7,6 +7,7 @@ namespace Magento\Cms\Model\Wysiwyg\Images; use Magento\Cms\Model\Wysiwyg\Images\Storage\Collection; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\DataObject; use Magento\Framework\Filesystem; @@ -24,10 +25,8 @@ */ class StorageTest extends \PHPUnit\Framework\TestCase { - /** - * @var string - */ - protected static $_baseDir; + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; /** * @var \Magento\Framework\ObjectManagerInterface @@ -50,33 +49,24 @@ class StorageTest extends \PHPUnit\Framework\TestCase private $driver; /** - * @inheritdoc + * @var array */ - // phpcs:disable - public static function setUpBeforeClass(): void - { - self::$_baseDir = Bootstrap::getObjectManager()->get( - \Magento\Cms\Helper\Wysiwyg\Images::class - )->getCurrentPath() . 'MagentoCmsModelWysiwygImagesStorageTest'; - if (!file_exists(self::$_baseDir)) { - mkdir(self::$_baseDir); - } - touch(self::$_baseDir . '/1.swf'); - } - // phpcs:enable + private $origConfigValue; /** - * @inheritdoc + * @var \Magento\Framework\Filesystem\Directory\WriteInterface */ - // phpcs:ignore - public static function tearDownAfterClass(): void - { - Bootstrap::getObjectManager()->create( - File::class - )->deleteDirectory( - self::$_baseDir - ); - } + private $mediaDirectory; + + /** + * @var string + */ + private $fullDirectoryPath; + + /** + * @var \Magento\Cms\Helper\Wysiwyg\Images + */ + private $imagesHelper; /** * @inheritdoc @@ -85,10 +75,33 @@ protected function setUp(): void { $this->objectManager = Bootstrap::getObjectManager(); $this->filesystem = $this->objectManager->get(Filesystem::class); + $this->imagesHelper = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); + $this->mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); + $this->fullDirectoryPath = $this->imagesHelper->getStorageRoot() . '/MagentoCmsModelWysiwygImagesStorageTest'; + $this->mediaDirectory->create($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['MagentoCmsModelWysiwygImagesStorageTest']), + ); $this->storage = $this->objectManager->create(Storage::class); $this->driver = Bootstrap::getObjectManager()->get(DriverInterface::class); } + protected function tearDown(): void + { + $this->mediaDirectory->delete($this->mediaDirectory->getRelativePath($this->fullDirectoryPath)); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); + } /** * @magentoAppIsolation enabled * @return void @@ -106,7 +119,7 @@ public function testGetFilesCollection(): void $modifiableFilePath ); $this->storage->resizeFile($modifiableFilePath); - $collection = $this->storage->getFilesCollection(self::$_baseDir, 'image'); + $collection = $this->storage->getFilesCollection($this->fullDirectoryPath, '/image'); $this->assertInstanceOf(Collection::class, $collection); foreach ($collection as $item) { $thumbUrl = parse_url($item->getThumbUrl(), PHP_URL_PATH); @@ -144,9 +157,9 @@ public function testGetThumbsPath(): void public function testDeleteDirectory(): void { $path = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class)->getCurrentPath(); - $dir = 'testDeleteDirectory'; + $dir = 'MagentoCmsModelWysiwygImagesStorageTest/testDeleteDirectory'; $fullPath = $path . $dir; - $this->storage->createDirectory($dir, $path); + $this->storage->createDirectory('testDeleteDirectory', $path . '/MagentoCmsModelWysiwygImagesStorageTest'); $this->assertFileExists($fullPath); $this->storage->deleteDirectory($fullPath); $this->assertFileDoesNotExist($fullPath); @@ -158,7 +171,7 @@ public function testDeleteDirectory(): void public function testDeleteDirectoryWithExcludedDirPath(): void { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); - $this->expectExceptionMessage('We cannot delete directory /downloadable.'); + $this->expectExceptionMessage('We cannot delete the selected directory.'); $dir = $this->objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class)->getCurrentPath() . 'downloadable'; $this->storage->deleteDirectory($dir); @@ -184,8 +197,8 @@ public function testUploadFile(): void 'size' => 12500, ]; - $this->storage->uploadFile(self::$_baseDir); - $this->assertTrue(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + $this->storage->uploadFile($this->fullDirectoryPath); + $this->assertTrue(is_file($this->fullDirectoryPath . DIRECTORY_SEPARATOR . $fileName)); // phpcs:enable } @@ -196,7 +209,7 @@ public function testUploadFileWithExcludedDirPath(): void { $this->expectException(\Magento\Framework\Exception\LocalizedException::class); $this->expectExceptionMessage( - 'We can\'t upload the file to current folder right now. Please try another folder.' + 'We can\'t upload the file to the current folder right now. Please try another folder.' ); $fileName = 'magento_small_image.jpg'; @@ -246,8 +259,8 @@ public function testUploadFileWithWrongExtension(string $fileName, string $fileT 'size' => 12500, ]; - $this->storage->uploadFile(self::$_baseDir, $storageType); - $this->assertFalse(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + $this->storage->uploadFile($this->fullDirectoryPath, $storageType); + $this->assertFalse(is_file($this->fullDirectoryPath . DIRECTORY_SEPARATOR . $fileName)); // phpcs:enable } @@ -293,8 +306,8 @@ public function testUploadFileWithWrongFile(): void 'size' => 12500, ]; - $this->storage->uploadFile(self::$_baseDir); - $this->assertFalse(is_file(self::$_baseDir . DIRECTORY_SEPARATOR . $fileName)); + $this->storage->uploadFile($this->fullDirectoryPath); + $this->assertFalse(is_file($this->fullDirectoryPath . DIRECTORY_SEPARATOR . $fileName)); // phpcs:enable } @@ -303,13 +316,13 @@ public function testUploadFileWithWrongFile(): void * * @param string $directory * @param string $filename - * @param string $expectedUrl + * @param array $expectedUrls * @return void * @magentoAppIsolation enabled * @magentoAppArea adminhtml * @dataProvider getThumbnailUrlDataProvider */ - public function testGetThumbnailUrl(string $directory, string $filename, string $expectedUrl): void + public function testGetThumbnailUrl(string $directory, string $filename, array $expectedUrls): void { $root = $this->storage->getCmsWysiwygImages()->getStorageRoot(); $directory = implode('/', array_filter([rtrim($root, '/'), trim($directory, '/')])); @@ -321,8 +334,8 @@ public function testGetThumbnailUrl(string $directory, string $filename, string foreach ($collection as $item) { $paths[] = parse_url($item->getThumbUrl(), PHP_URL_PATH); } - $this->assertEquals([$expectedUrl], $paths); - $this->storage->deleteFile($path); + $this->assertEquals($expectedUrls, $paths); + $this->driver->deleteFile($path); } /** @@ -351,7 +364,7 @@ public function testResizeFile(array $sizes, bool $resized): void $imageHeight ); - $this->storage->deleteFile($path); + $this->driver->deleteFile($path); } /** @@ -388,17 +401,27 @@ public function getThumbnailUrlDataProvider(): array [ '/', 'image1.png', - '/media/.thumbs/image1.png' + [] ], [ '/cms', 'image2.png', - '/media/.thumbscms/image2.png' + [] ], [ '/cms/pages', 'image3.png', - '/media/.thumbscms/pages/image3.png' + [] + ], + [ + '/MagentoCmsModelWysiwygImagesStorageTest', + 'image2.png', + ['/media/.thumbsMagentoCmsModelWysiwygImagesStorageTest/image2.png'] + ], + [ + '/MagentoCmsModelWysiwygImagesStorageTest/pages', + 'image3.png', + ['/media/.thumbsMagentoCmsModelWysiwygImagesStorageTest/pages/image3.png'] ] ]; } diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php index 3a16d3eafd6ce..08045f64682ae 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/AccountManagementTest.php @@ -106,15 +106,12 @@ protected function setUp(): void */ protected function tearDown(): void { - /** @var \Magento\Customer\Model\CustomerRegistry $customerRegistry */ $customerRegistry = $this->objectManager->get(\Magento\Customer\Model\CustomerRegistry::class); - /** @var \Magento\Customer\Model\CustomerRegistry $addressRegistry */ $addressRegistry = $this->objectManager->get(\Magento\Customer\Model\AddressRegistry::class); //Cleanup customer from registry $customerRegistry->remove(1); $addressRegistry->remove(1); $addressRegistry->remove(2); - /** @var \Magento\Customer\Model\ResourceModel\Visitor $resourceModel */ $resourceModel = $this->objectManager->get(\Magento\Customer\Model\ResourceModel\Visitor::class); $resourceModel->getConnection()->delete($resourceModel->getMainTable()); parent::tearDown(); @@ -145,6 +142,8 @@ public function testLoginWrongPassword() } /** + * Test attempt to login with wrong user name. + * */ public function testLoginWrongUsername() { @@ -163,25 +162,24 @@ public function testChangePassword() { /** @var SessionManagerInterface $session */ $session = $this->objectManager->get(SessionManagerInterface::class); + $customerId = 1; $time = time(); $session->start(); - $guessSessionId = $session->getSessionId(); - $this->createVisitorSession($guessSessionId); - $session->setTestData('guest_session_data'); // open new session $activeSessionId = uniqid("active-$time-"); $this->startNewSession($activeSessionId); - $this->createVisitorSession($activeSessionId, 1); - $session->setTestData('customer_session_data_1'); + $activeVisitor = $this->createVisitorSession($activeSessionId, $customerId); + $session->setVisitorData($activeVisitor->getData()); // open new session $currentSessionId = uniqid("current-$time-"); $this->startNewSession($currentSessionId); - $this->createVisitorSession($currentSessionId, 1); - $session->setTestData('customer_session_data_current'); + $currentVisitor = $this->createVisitorSession($currentSessionId, $customerId); + $session->setVisitorData($currentVisitor->getData()); + $this->assertNull($this->getCustomerCutoff($customerId), 'Customer cutoff session should not be set.'); // change password $this->accountManagement->changePassword('customer@example.com', 'password', 'new_Password123'); $this->assertEquals( @@ -192,23 +190,10 @@ public function testChangePassword() // open customer active session $this->startNewSession($activeSessionId); - $this->assertNull($session->getTestData(), 'Customer active session data wasn\'t cleaned up'); - - // open customer current session - $this->startNewSession($currentSessionId); - $this->assertEquals( - 'customer_session_data_current', - $session->getTestData(), - 'Customer current session data was cleaned up' - ); - - // open guess session - $this->startNewSession($guessSessionId); - $this->assertEquals( - 'guest_session_data', - $session->getTestData(), - 'Guest session data was cleaned up' - ); + $this->assertNotNull($this->getCustomerCutoff($customerId), 'Customer cutoff session should be set.'); + // Make sure current visitor session is updated. + $this->assertLessThanOrEqual($this->getCustomerCutoff($customerId), $this->getVisitorCreatedAt($activeVisitor->getId())); + $this->assertGreaterThan($this->getCustomerCutoff($customerId), $this->getVisitorCreatedAt($currentVisitor->getId())); $this->accountManagement->authenticate('customer@example.com', 'new_Password123'); } @@ -226,6 +211,8 @@ public function testChangePasswordWrongPassword() } /** + * Test change password on the wrong user + * */ public function testChangePasswordWrongUser() { @@ -433,27 +420,27 @@ public function testResetPassword() /** @var SessionManagerInterface $session */ $session = $this->objectManager->get(SessionManagerInterface::class); $time = time(); + $customerId = 1; $session->start(); - $guessSessionId = $session->getSessionId(); - $this->createVisitorSession($guessSessionId); - $session->setTestData('guest_session_data'); // open new session $activeSessionId = uniqid("active-$time-"); $this->startNewSession($activeSessionId); - $this->createVisitorSession($activeSessionId, 1); - $session->setTestData('customer_session_data_1'); + $activeVisitor = $this->createVisitorSession($activeSessionId, $customerId); + $session->setVisitorData($activeVisitor->getData()); // open new session $currentSessionId = uniqid("current-$time-"); $this->startNewSession($currentSessionId); - $this->createVisitorSession($currentSessionId, 1); - $session->setTestData('customer_session_data_current'); + $currentVisitor = $this->createVisitorSession($currentSessionId, $customerId); + $session->setVisitorData($currentVisitor->getData()); $resetToken = 'lsdj579slkj5987slkj595lkj'; $password = 'new_Password123'; + $this->assertNull($this->getCustomerCutoff($customerId), 'Customer cutoff session should not be set.'); + $this->setResetPasswordData($resetToken, 'Y-m-d H:i:s'); $this->assertTrue($this->accountManagement->resetPassword('customer@example.com', $resetToken, $password)); @@ -465,23 +452,10 @@ public function testResetPassword() // open customer active session $this->startNewSession($activeSessionId); - $this->assertNull($session->getTestData(), 'Customer active session data wasn\'t cleaned up'); - - // open customer current session - $this->startNewSession($currentSessionId); - $this->assertEquals( - 'customer_session_data_current', - $session->getTestData(), - 'Customer current session data was cleaned up' - ); - - // open guess session - $this->startNewSession($guessSessionId); - $this->assertEquals( - 'guest_session_data', - $session->getTestData(), - 'Guest session data was cleaned up' - ); + $this->assertNotNull($this->getCustomerCutoff($customerId), 'Customer cutoff session should be set.'); + // Make sure current visitor session is updated. + $this->assertLessThanOrEqual($this->getCustomerCutoff($customerId), $this->getVisitorCreatedAt($activeVisitor->getId())); + $this->assertGreaterThan($this->getCustomerCutoff($customerId), $this->getVisitorCreatedAt($currentVisitor->getId())); } /** @@ -814,6 +788,34 @@ protected function setResetPasswordData( } /** + * Returns the customers cutoff value + * + * @param int $customerId + * @return mixed + */ + private function getCustomerCutoff( + int $customerId + ) { + $customerModel = $this->objectManager->get(\Magento\Customer\Model\ResourceModel\Customer::class); + return $customerModel->findSessionCutOff($customerId); + } + + /** + * Returns the visitors created at value + * + * @param int $visitorId + * @return mixed + */ + private function getVisitorCreatedAt( + int $visitorId + ) { + $visitorModel = $this->objectManager->get(\Magento\Customer\Model\ResourceModel\Visitor::class); + return $visitorModel->fetchCreatedAt($visitorId); + } + + /** + * Starts a new session + * * @param string $sessionId */ private function startNewSession(string $sessionId): void @@ -829,9 +831,12 @@ private function startNewSession(string $sessionId): void } /** + * Creates a new visitor session + * * @param string $sessionId * @param int|null $customerId * @return Visitor + * @throws \Exception */ private function createVisitorSession(string $sessionId, ?int $customerId = null): Visitor { diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/SessionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/SessionTest.php index 4795f7425eed2..a49f61d1f9eea 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Model/SessionTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/SessionTest.php @@ -6,12 +6,12 @@ namespace Magento\Customer\Model; use Magento\Framework\App\PageCache\FormKey; +use Magento\Framework\App\Response\Http as HttpResponse; use Magento\Framework\App\ResponseInterface; use Magento\Framework\Session\SidResolverInterface; use Magento\Framework\Stdlib\Cookie\CookieMetadataFactory; use Magento\Framework\Stdlib\Cookie\PublicCookieMetadata; use Magento\TestFramework\Helper\Bootstrap; -use Magento\Framework\App\Response\Http as HttpResponse; /** * @magentoDataFixture Magento/Customer/_files/customer.php @@ -121,14 +121,14 @@ public function testNoSid(): void $this->_customerSession->authenticate(); $location = (string)$this->response->getHeader('Location'); $this->assertNotEmpty($location); - $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM .'=', $location); + $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $location); $beforeAuthUrl = $this->_customerSession->getData('before_auth_url'); $this->assertNotEmpty($beforeAuthUrl); - $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM .'=', $beforeAuthUrl); + $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $beforeAuthUrl); $this->_customerSession->authenticate('/customer/account'); $location = (string)$this->response->getHeader('Location'); $this->assertNotEmpty($location); - $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM .'=', $location); + $this->assertStringNotContainsString(SidResolverInterface::SESSION_ID_QUERY_PARAM . '=', $location); } } diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/VisitorTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/VisitorTest.php index 0d5a5f262d1a6..e2d5b0c24ded7 100644 --- a/dev/tests/integration/testsuite/Magento/Customer/Model/VisitorTest.php +++ b/dev/tests/integration/testsuite/Magento/Customer/Model/VisitorTest.php @@ -63,23 +63,23 @@ public function testBindCustomerLogout() */ public function testClean() { - $customerIdNow = 1; + $customerIdNow = '1'; + $createdAtNow = date('Y-m-d H:i:s', time()); $lastVisitNow = date('Y-m-d H:i:s', time()); - $sessionIdNow = 'asaswljxvgklasdflkjasieasd'; $customerIdPast = null; + $createdAtPast = date('Y-m-d H:i:s', time() - 172800); $lastVisitPast = date('Y-m-d H:i:s', time() - 172800); - $sessionIdPast = 'kui0aa57nqddl8vk7k6ohgi352'; /** @var \Magento\Customer\Model\Visitor $visitor */ $visitor = Bootstrap::getObjectManager()->get(\Magento\Customer\Model\Visitor::class); $visitor->setCustomerId($customerIdPast); - $visitor->setSessionId($sessionIdPast); + $visitor->setCreatedAt($createdAtPast); $visitor->setLastVisitAt($lastVisitPast); $visitor->save(); $visitorIdPast = $visitor->getId(); $visitor->unsetData(); $visitor->setCustomerId($customerIdNow); - $visitor->setSessionId($sessionIdNow); + $visitor->setCreatedAt($createdAtNow); $visitor->setLastVisitAt($lastVisitNow); $visitor->save(); $visitorIdNow = $visitor->getId(); @@ -90,15 +90,12 @@ public function testClean() $this->assertEquals([], $visitor->getData()); $visitor->unsetData(); $visitor->load($visitorIdNow); - $this->assertEquals( - [ - 'visitor_id' => $visitorIdNow, - 'customer_id' => $customerIdNow, - 'session_id' => $sessionIdNow, - 'last_visit_at' => $lastVisitNow - ], - $visitor->getData() - ); + $result = $visitor->getData(); + $this->assertEquals($visitorIdNow, $result['visitor_id']); + $this->assertEquals($customerIdNow, $result['customer_id']); + $this->assertGreaterThanOrEqual(strtotime($createdAtNow), strtotime($result['created_at'])); + $this->assertEquals($lastVisitNow, $result['last_visit_at']); + $this->assertNull($result['session_id']); } /** diff --git a/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php index c66f8e3894fe8..0c03eb6378711 100644 --- a/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php +++ b/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php @@ -6,6 +6,7 @@ namespace Magento\Framework\Session\SaveHandler; use Magento\Framework\App\ResourceConnection; +use Magento\Framework\Encryption\EncryptorInterface; class DbTableTest extends \PHPUnit\Framework\TestCase { @@ -77,6 +78,11 @@ class DbTableTest extends \PHPUnit\Framework\TestCase */ protected $_sessionTable; + /** + * @var EncryptorInterface + */ + private $_encryptor; + /** * @return void */ @@ -89,6 +95,7 @@ protected function setUp(): void $resource = $this->_objectManager->get(\Magento\Framework\App\ResourceConnection::class); $this->_connection = $resource->getConnection(); $this->_sessionTable = $resource->getTableName('session'); + $this->_encryptor = $this->_objectManager->get(EncryptorInterface::class); // session stores serialized objects with protected properties // we need to test this case to ensure that DB adapter successfully processes "\0" symbols in serialized data @@ -165,10 +172,10 @@ public function testWriteEncoded() )->where( self::COLUMN_SESSION_ID . ' = :' . self::COLUMN_SESSION_ID ); - $bind = [self::COLUMN_SESSION_ID => self::SESSION_ID]; + $bind = [self::COLUMN_SESSION_ID => $this->_encryptor->hash(self::SESSION_ID)]; $session = $this->_connection->fetchRow($select, $bind); - $this->assertEquals(self::SESSION_ID, $session[self::COLUMN_SESSION_ID]); + $this->assertEquals($this->_encryptor->hash(self::SESSION_ID), $session[self::COLUMN_SESSION_ID]); $this->assertTrue( ctype_digit((string)$session[self::COLUMN_SESSION_EXPIRES]), 'Value of session expire field must have integer type' @@ -204,7 +211,7 @@ public function readEncodedDataProvider() */ public function testReadEncoded($sessionData) { - $sessionRecord = [self::COLUMN_SESSION_ID => self::SESSION_ID, self::COLUMN_SESSION_DATA => $sessionData]; + $sessionRecord = [self::COLUMN_SESSION_ID => $this->_encryptor->hash(self::SESSION_ID), self::COLUMN_SESSION_DATA => $sessionData]; $this->_connection->insertOnDuplicate($this->_sessionTable, $sessionRecord, [self::COLUMN_SESSION_DATA]); $sessionData = $this->_model->read(self::SESSION_ID); diff --git a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/CreateByPathsTest.php b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/CreateByPathsTest.php index d65125567221e..a78fdb87a23a4 100644 --- a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/CreateByPathsTest.php +++ b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/CreateByPathsTest.php @@ -8,6 +8,7 @@ namespace Magento\MediaGallery\Model\Directory\Command; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Exception\CouldNotDeleteException; use Magento\Framework\Exception\CouldNotSaveException; @@ -21,10 +22,18 @@ */ class CreateByPathsTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + /** * Test directory name */ - private const TEST_DIRECTORY_NAME = 'testCreateDirectory'; + private const TEST_DIRECTORY_NAME = 'testDir/testCreateDirectory'; /** * Absolute path to the media directory @@ -41,15 +50,53 @@ class CreateByPathsTest extends \PHPUnit\Framework\TestCase */ private $deleteByPaths; + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + + /** + * @var \Magento\Framework\Filesystem\Directory\WriteInterface + */ + private $mediaDirectory; + /** * @inheritdoc */ protected function setUp(): void { - $this->createByPaths = Bootstrap::getObjectManager()->get(CreateDirectoriesByPathsInterface::class); - $this->deleteByPaths = Bootstrap::getObjectManager()->get(DeleteDirectoriesByPathsInterface::class); - $this->mediaDirectoryPath = Bootstrap::getObjectManager()->get(Filesystem::class) + $this->objectManager = Bootstrap::getObjectManager(); + $this->createByPaths = $this->objectManager->get(CreateDirectoriesByPathsInterface::class); + $this->deleteByPaths = $this->objectManager->get(DeleteDirectoriesByPathsInterface::class); + $this->mediaDirectory = $this->objectManager->get(Filesystem::class) + ->getDirectoryWrite(DirectoryList::MEDIA); + $this->mediaDirectoryPath = $this->objectManager->get(Filesystem::class) ->getDirectoryRead(DirectoryList::MEDIA)->getAbsolutePath(); + $this->mediaDirectory->create( + $this->mediaDirectory->getRelativePath($this->mediaDirectoryPath . '/testDir') + ); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, ['testDir']), + ); + } + + protected function tearDown(): void + { + $this->mediaDirectory->delete( + $this->mediaDirectory->getRelativePath($this->mediaDirectoryPath . '/testDir') + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); } /** @@ -102,7 +149,7 @@ public function notAllowedPathsProvider(): array public function testCreateChildDirectoryTheSameNameAsParentDirectory(): void { $dir = self::TEST_DIRECTORY_NAME; - $childPath = $dir . '/' . $dir; + $childPath = $dir . '/testCreateDirectory'; $this->createByPaths->execute([$dir]); $this->assertFileExists($this->mediaDirectoryPath . $dir); diff --git a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/DeleteByPathsTest.php b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/DeleteByPathsTest.php index 6b3c21c90c652..e27d298688831 100644 --- a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/DeleteByPathsTest.php +++ b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/Command/DeleteByPathsTest.php @@ -8,6 +8,7 @@ namespace Magento\MediaGallery\Model\Directory\Command; +use Magento\Framework\App\Config\ScopeConfigInterface; use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\Filesystem; use Magento\MediaGalleryApi\Api\DeleteDirectoriesByPathsInterface; @@ -18,6 +19,14 @@ */ class DeleteByPathsTest extends \PHPUnit\Framework\TestCase { + private const MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH + = 'system/media_storage_configuration/allowed_resources/media_gallery_image_folders'; + + /** + * @var array + */ + private $origConfigValue; + /** * @var DeleteDirectoriesByPathsInterface */ @@ -33,13 +42,29 @@ class DeleteByPathsTest extends \PHPUnit\Framework\TestCase */ private $filesystem; + /** + * @var \Magento\Framework\ObjectManagerInterface + */ + private $objectManager; + /** * @inheritdoc */ protected function setUp(): void { - $this->deleteByPaths = Bootstrap::getObjectManager()->get(DeleteDirectoriesByPathsInterface::class); - $this->filesystem = Bootstrap::getObjectManager()->get(Filesystem::class); + $this->objectManager = Bootstrap::getObjectManager(); + $this->deleteByPaths = $this->objectManager->get(DeleteDirectoriesByPathsInterface::class); + $this->filesystem = $this->objectManager->get(Filesystem::class); + $config = $this->objectManager->get(ScopeConfigInterface::class); + $this->origConfigValue = $config->getValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + 'default' + ); + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + array_merge($this->origConfigValue, [$this->testDirectoryName]), + ); } /** @@ -48,12 +73,14 @@ protected function setUp(): void */ public function testDeleteDirectory(): void { + $testDir = $this->testDirectoryName . '/testDir'; /** @var \Magento\Framework\Filesystem\Directory\WriteInterface $mediaDirectory */ $mediaDirectory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); $mediaDirectory->create($this->testDirectoryName); - $fullPath = $mediaDirectory->getAbsolutePath($this->testDirectoryName); + $mediaDirectory->create($testDir); + $fullPath = $mediaDirectory->getAbsolutePath($testDir); $this->assertFileExists($fullPath); - $this->deleteByPaths->execute([$this->testDirectoryName]); + $this->deleteByPaths->execute([$testDir]); $this->assertFileDoesNotExist($fullPath); } @@ -94,6 +121,11 @@ public function notAllowedPathsProvider(): array */ protected function tearDown(): void { + $scopeConfig = $this->objectManager->get(\Magento\Framework\App\Config\MutableScopeConfigInterface::class); + $scopeConfig->setValue( + self::MEDIA_GALLERY_IMAGE_FOLDERS_CONFIG_PATH, + $this->origConfigValue + ); $directory = $this->filesystem->getDirectoryWrite(DirectoryList::MEDIA); if ($directory->isExist($this->testDirectoryName)) { $directory->delete($this->testDirectoryName); diff --git a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/IsExcludedTest.php b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/IsExcludedTest.php index c9b0f8f1632dc..01db1eae3d058 100644 --- a/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/IsExcludedTest.php +++ b/dev/tests/integration/testsuite/Magento/MediaGallery/Model/Directory/IsExcludedTest.php @@ -49,6 +49,10 @@ public function directoriesDataProvider(): array return [ [ 'catalog', + true + ], + [ + 'catalog/category', false ], [ diff --git a/dev/tests/integration/testsuite/Magento/Security/Model/AdminSessionsManagerTest.php b/dev/tests/integration/testsuite/Magento/Security/Model/AdminSessionsManagerTest.php index 17bed5eb55ca5..2fd624f86501e 100644 --- a/dev/tests/integration/testsuite/Magento/Security/Model/AdminSessionsManagerTest.php +++ b/dev/tests/integration/testsuite/Magento/Security/Model/AdminSessionsManagerTest.php @@ -82,9 +82,9 @@ public function testProcessLogout() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $this->auth->logout(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $this->assertEquals($this->adminSessionInfo->getStatus(), AdminSessionInfo::LOGGED_OUT); } @@ -99,8 +99,8 @@ public function testIsAdminSessionIsCreated() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $sessionId = $this->authSession->getSessionId(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $this->assertGreaterThanOrEqual(1, (int)$this->adminSessionInfo->getId()); $this->auth->logout(); } @@ -125,7 +125,8 @@ public function testTerminateOtherSessionsProcessLogin() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $session->load('669e2e3d752e8', 'session_id'); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); + $session->load($adminSessionInfoId, 'id'); $this->assertEquals( AdminSessionInfo::LOGGED_OUT_BY_LOGIN, (int) $session->getStatus() @@ -143,11 +144,11 @@ public function testGetCurrentSession() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $sessionId = $this->authSession->getSessionId(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $this->assertEquals( - $this->adminSessionInfo->getSessionId(), - $this->adminSessionsManager->getCurrentSession()->getSessionId() + $this->adminSessionInfo->getId(), + $this->adminSessionsManager->getCurrentSession()->getId() ); } @@ -189,10 +190,11 @@ protected function getCollectionForLogoutOtherUserSessions(\Magento\Security\Mod { /** @var \Magento\Security\Model\ResourceModel\AdminSessionInfo\Collection $collection */ $collection = $session->getResourceCollection(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $collection->filterByUser( $this->authSession->getUser()->getId(), \Magento\Security\Model\AdminSessionInfo::LOGGED_IN, - $this->authSession->getSessionId() + $adminSessionInfoId ) ->filterExpiredSessions(100) ->load(); diff --git a/dev/tests/integration/testsuite/Magento/Security/Model/Plugin/AuthSessionTest.php b/dev/tests/integration/testsuite/Magento/Security/Model/Plugin/AuthSessionTest.php index 42619d6e6828d..4d487af7f8e71 100644 --- a/dev/tests/integration/testsuite/Magento/Security/Model/Plugin/AuthSessionTest.php +++ b/dev/tests/integration/testsuite/Magento/Security/Model/Plugin/AuthSessionTest.php @@ -93,7 +93,7 @@ public function testConsecutiveProcessProlong() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $prolongsDiff = log($this->securityConfig->getAdminSessionLifetime()) - 2; // X from comment above $dateInPast = $this->dateTime->formatDate($this->authSession->getUpdatedAt() - $prolongsDiff); $this->adminSessionsManager->getCurrentSession() @@ -102,10 +102,10 @@ public function testConsecutiveProcessProlong() $dateInPast ) ->save(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $oldUpdatedAt = $this->adminSessionInfo->getUpdatedAt(); $this->authSession->prolong(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $updatedAt = $this->adminSessionInfo->getUpdatedAt(); $this->assertSame(strtotime($oldUpdatedAt), strtotime($updatedAt)); @@ -125,7 +125,7 @@ public function testProcessProlong() \Magento\TestFramework\Bootstrap::ADMIN_NAME, \Magento\TestFramework\Bootstrap::ADMIN_PASSWORD ); - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $prolongsDiff = 4 * log($this->securityConfig->getAdminSessionLifetime()) + 2; // X from comment above $dateInPast = $this->dateTime->formatDate($this->authSession->getUpdatedAt() - $prolongsDiff); $this->adminSessionsManager->getCurrentSession() @@ -134,10 +134,10 @@ public function testProcessProlong() $dateInPast ) ->save(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $oldUpdatedAt = $this->adminSessionInfo->getUpdatedAt(); $this->authSession->prolong(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $updatedAt = $this->adminSessionInfo->getUpdatedAt(); $this->assertGreaterThan(strtotime($oldUpdatedAt), strtotime($updatedAt)); @@ -169,7 +169,7 @@ public function testProcessProlongWithExpiredUser() ->save(); // need to trigger a prolong - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $prolongsDiff = 4 * log($this->securityConfig->getAdminSessionLifetime()) + 2; $dateInPast = $this->dateTime->formatDate($this->authSession->getUpdatedAt() - $prolongsDiff); $this->adminSessionsManager->getCurrentSession() @@ -178,7 +178,7 @@ public function testProcessProlongWithExpiredUser() $dateInPast ) ->save(); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $this->authSession->prolong(); static::assertFalse($this->auth->isLoggedIn()); $user->reload(); diff --git a/dev/tests/integration/testsuite/Magento/Security/Model/ResourceModel/AdminSessionInfoTest.php b/dev/tests/integration/testsuite/Magento/Security/Model/ResourceModel/AdminSessionInfoTest.php index e2092badcfbe0..5319d6de7264e 100644 --- a/dev/tests/integration/testsuite/Magento/Security/Model/ResourceModel/AdminSessionInfoTest.php +++ b/dev/tests/integration/testsuite/Magento/Security/Model/ResourceModel/AdminSessionInfoTest.php @@ -37,7 +37,6 @@ protected function tearDown(): void public function getTestData() { return [ - 'session_id' => '569e273d752e9', 'user_id' => 1, 'status' => 1, 'created_at' => '2016-01-21 15:00:00', diff --git a/dev/tests/integration/testsuite/Magento/Security/Model/UserExpirationManagerTest.php b/dev/tests/integration/testsuite/Magento/Security/Model/UserExpirationManagerTest.php index ed8d451848986..719c1c69f05de 100644 --- a/dev/tests/integration/testsuite/Magento/Security/Model/UserExpirationManagerTest.php +++ b/dev/tests/integration/testsuite/Magento/Security/Model/UserExpirationManagerTest.php @@ -69,10 +69,10 @@ public function testDeactivateExpiredUsersWithExpiredUser() $adminUsernameFromFixture = 'adminUserNotExpired'; $this->loginUser($adminUsernameFromFixture); $user = $this->loadUserByUsername($adminUsernameFromFixture); - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $this->expireUser($user); $this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); $user->reload(); $userExpirationModel = $this->loadExpiredUserModelByUser($user); static::assertEquals(0, $user->getIsActive()); @@ -89,11 +89,11 @@ public function testDeactivateExpiredUsersWithNonExpiredUser() $adminUsernameFromFixture = 'adminUserNotExpired'; $this->loginUser($adminUsernameFromFixture); $user = $this->loadUserByUsername($adminUsernameFromFixture); - $sessionId = $this->authSession->getSessionId(); + $adminSessionInfoId = $this->authSession->getAdminSessionInfoId(); $this->userExpirationManager->deactivateExpiredUsersById([$user->getId()]); $user->reload(); $userExpirationModel = $this->loadExpiredUserModelByUser($user); - $this->adminSessionInfo->load($sessionId, 'session_id'); + $this->adminSessionInfo->load($adminSessionInfoId, 'id'); static::assertEquals(1, $user->getIsActive()); static::assertEquals($user->getId(), $userExpirationModel->getId()); static::assertEquals(AdminSessionInfo::LOGGED_IN, (int)$this->adminSessionInfo->getStatus()); diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/SharedTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/SharedTest.php index 6cd6f3a5fe5ba..ee720891e4cf2 100644 --- a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/SharedTest.php +++ b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/SharedTest.php @@ -4,9 +4,14 @@ * See COPYING.txt for license details. */ +declare(strict_types=1); + namespace Magento\Wishlist\Controller; -class SharedTest extends \Magento\TestFramework\TestCase\AbstractController +use Magento\Framework\App\Request\Http as HttpRequest; +use Magento\TestFramework\TestCase\AbstractController; + +class SharedTest extends AbstractController { /** * @magentoDataFixture Magento/Wishlist/_files/wishlist_shared.php @@ -16,6 +21,7 @@ class SharedTest extends \Magento\TestFramework\TestCase\AbstractController public function testAllcartAction() { $this->getRequest()->setParam('code', 'fixture_unique_code'); + $this->getRequest()->setMethod(HttpRequest::METHOD_POST); $this->dispatch('wishlist/shared/allcart'); /** @var \Magento\Checkout\Model\Cart $cart */ diff --git a/lib/internal/Magento/Framework/Amqp/composer.json b/lib/internal/Magento/Framework/Amqp/composer.json index fc65e37d12ecf..20f95fac3b2ec 100644 --- a/lib/internal/Magento/Framework/Amqp/composer.json +++ b/lib/internal/Magento/Framework/Amqp/composer.json @@ -1,25 +1,27 @@ { "name": "magento/framework-amqp", "description": "N/A", - "config": { - "sort-packages": true - }, "type": "magento2-library", "license": [ "OSL-3.0", "AFL-3.0" ], + "config": { + "sort-packages": true + }, + "version": "100.4.1", "require": { - "magento/framework": "*", + "magento/framework": "103.0.*", "php": "~7.3.0||~7.4.0", "php-amqplib/php-amqplib": "~2.7.0||~2.10.0" }, "autoload": { - "psr-4": { - "Magento\\Framework\\Amqp\\": "" - }, "files": [ "registration.php" - ] + ], + "psr-4": { + "Magento\\Framework\\Amqp\\": "" + } } } + diff --git a/lib/internal/Magento/Framework/Bulk/composer.json b/lib/internal/Magento/Framework/Bulk/composer.json index b8e0992182169..aa9dad9589657 100644 --- a/lib/internal/Magento/Framework/Bulk/composer.json +++ b/lib/internal/Magento/Framework/Bulk/composer.json @@ -1,24 +1,26 @@ { "name": "magento/framework-bulk", "description": "N/A", - "config": { - "sort-packages": true - }, "type": "magento2-library", "license": [ "OSL-3.0", "AFL-3.0" ], + "config": { + "sort-packages": true + }, + "version": "101.0.0", "require": { - "magento/framework": "*", + "magento/framework": "103.0.*", "php": "~7.3.0||~7.4.0" }, "autoload": { - "psr-4": { - "Magento\\Framework\\Bulk\\": "" - }, "files": [ "registration.php" - ] + ], + "psr-4": { + "Magento\\Framework\\Bulk\\": "" + } } } + diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/DenyListPathValidator.php b/lib/internal/Magento/Framework/Filesystem/Directory/DenyListPathValidator.php index 60a2a5ca14298..fe49a37ba234e 100644 --- a/lib/internal/Magento/Framework/Filesystem/Directory/DenyListPathValidator.php +++ b/lib/internal/Magento/Framework/Filesystem/Directory/DenyListPathValidator.php @@ -71,7 +71,7 @@ public function validate( foreach ($this->fileDenyList as $file) { $baseName = pathinfo($actualPath, PATHINFO_BASENAME); - if (str_contains($baseName, $file) || preg_match('#' . "\." . $file . '#', $fullPath)) { + if (strpos($baseName, $file) !== false || preg_match('#' . "\." . $file . '#', $fullPath)) { throw new ValidatorException( new Phrase('"%1" is not a valid file path', [$path]) ); diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php index a5e1cf65e9bcb..b2b451af62f44 100644 --- a/lib/internal/Magento/Framework/Filesystem/Directory/Write.php +++ b/lib/internal/Magento/Framework/Filesystem/Directory/Write.php @@ -38,7 +38,7 @@ public function __construct( \Magento\Framework\Filesystem\File\WriteFactory $fileFactory, DriverInterface $driver, $path, - $createPermissions = null, + ?int $createPermissions = null, ?PathValidatorInterface $pathValidator = null ) { parent::__construct($fileFactory, $driver, $path, $pathValidator); diff --git a/lib/internal/Magento/Framework/Filesystem/Directory/WriteFactory.php b/lib/internal/Magento/Framework/Filesystem/Directory/WriteFactory.php index c9369130c320d..96446d8c6e2f3 100644 --- a/lib/internal/Magento/Framework/Filesystem/Directory/WriteFactory.php +++ b/lib/internal/Magento/Framework/Filesystem/Directory/WriteFactory.php @@ -49,9 +49,10 @@ public function __construct( * @param string $path * @param string $driverCode * @param int $createPermissions + * @param string $directoryCode * @return Write */ - public function create($path, $driverCode = DriverPool::FILE, $createPermissions = null) + public function create($path, $driverCode = DriverPool::FILE, $createPermissions = null, $directoryCode = null) { $driver = $this->driverPool->getDriver($driverCode); $factory = new \Magento\Framework\Filesystem\File\WriteFactory( diff --git a/lib/internal/Magento/Framework/Filesystem/Test/Unit/Directory/WriteTest.php b/lib/internal/Magento/Framework/Filesystem/Test/Unit/Directory/WriteTest.php index 7f340aec3dc70..fdde17b2dabf8 100644 --- a/lib/internal/Magento/Framework/Filesystem/Test/Unit/Directory/WriteTest.php +++ b/lib/internal/Magento/Framework/Filesystem/Test/Unit/Directory/WriteTest.php @@ -53,7 +53,7 @@ protected function setUp(): void $this->fileFactory, $this->driver, $this->path, - 'cool-permissions' + 0555 ); } diff --git a/lib/internal/Magento/Framework/MessageQueue/composer.json b/lib/internal/Magento/Framework/MessageQueue/composer.json index 056f1d40c39cf..1fb1ac69417d2 100644 --- a/lib/internal/Magento/Framework/MessageQueue/composer.json +++ b/lib/internal/Magento/Framework/MessageQueue/composer.json @@ -1,24 +1,26 @@ { "name": "magento/framework-message-queue", "description": "N/A", - "config": { - "sort-packages": true - }, "type": "magento2-library", "license": [ "OSL-3.0", "AFL-3.0" ], + "config": { + "sort-packages": true + }, + "version": "100.4.3", "require": { - "magento/framework": "*", + "magento/framework": "103.0.*", "php": "~7.3.0||~7.4.0" }, "autoload": { - "psr-4": { - "Magento\\Framework\\MessageQueue\\": "" - }, "files": [ "registration.php" - ] + ], + "psr-4": { + "Magento\\Framework\\MessageQueue\\": "" + } } } + diff --git a/lib/internal/Magento/Framework/Session/CompositeValidator.php b/lib/internal/Magento/Framework/Session/CompositeValidator.php new file mode 100644 index 0000000000000..b9d93673a3afd --- /dev/null +++ b/lib/internal/Magento/Framework/Session/CompositeValidator.php @@ -0,0 +1,38 @@ +<?php +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +declare(strict_types=1); + +namespace Magento\Framework\Session; + +/** + * Use sequence of validators to validate sessions. + */ +class CompositeValidator implements ValidatorInterface +{ + /** + * @var ValidatorInterface[] + */ + private $validators; + + /** + * @param ValidatorInterface[] $validators + */ + public function __construct(array $validators) + { + $this->validators = $validators; + } + + /** + * @inheritDoc + */ + public function validate(SessionManagerInterface $session): void + { + foreach ($this->validators as $validator) { + $validator->validate($session); + } + } +} diff --git a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php index cf3449a8c3fcf..2f5a5a8610bf9 100644 --- a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php +++ b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php @@ -6,6 +6,9 @@ namespace Magento\Framework\Session\SaveHandler; +use Magento\Framework\App\ObjectManager; +use Magento\Framework\App\ResourceConnection; +use Magento\Framework\Encryption\EncryptorInterface; use Magento\Framework\Exception\SessionException; use Magento\Framework\Phrase; @@ -28,16 +31,28 @@ class DbTable extends \SessionHandler */ protected $connection; + /** + * @var EncryptorInterface + */ + private $encryptor; + /** * Constructor * - * @param \Magento\Framework\App\ResourceConnection $resource + * @param ResourceConnection $resource + * @param EncryptorInterface|null $encryptor + * @throws SessionException */ - public function __construct(\Magento\Framework\App\ResourceConnection $resource) - { + public function __construct( + ResourceConnection $resource, + EncryptorInterface $encryptor = null + ) { $this->_sessionTable = $resource->getTableName('session'); $this->connection = $resource->getConnection(); $this->checkConnection(); + $this->encryptor = $encryptor ?: ObjectManager::getInstance()->get( + EncryptorInterface::class + ); } /** @@ -98,7 +113,7 @@ public function read($sessionId) )->where( 'session_id = :session_id' ); - $bind = ['session_id' => $sessionId]; + $bind = ['session_id' => $this->encryptor->hash($sessionId)]; $data = $this->connection->fetchOne($select, $bind); // check if session data is a base64 encoded string @@ -118,8 +133,9 @@ public function read($sessionId) */ public function write($sessionId, $sessionData) { + $hashedSessionId = $this->encryptor->hash($sessionId); // need to use write connection to get the most fresh DB sessions - $bindValues = ['session_id' => $sessionId]; + $bindValues = ['session_id' => $hashedSessionId]; $select = $this->connection->select()->from($this->_sessionTable)->where('session_id = :session_id'); $exists = $this->connection->fetchOne($select, $bindValues); @@ -128,9 +144,9 @@ public function write($sessionId, $sessionData) $bind = ['session_expires' => time(), 'session_data' => $sessionData]; if ($exists) { - $this->connection->update($this->_sessionTable, $bind, ['session_id=?' => $sessionId]); + $this->connection->update($this->_sessionTable, $bind, ['session_id=?' => $hashedSessionId]); } else { - $bind['session_id'] = $sessionId; + $bind['session_id'] = $hashedSessionId; $this->connection->insert($this->_sessionTable, $bind); } return true; @@ -144,7 +160,7 @@ public function write($sessionId, $sessionData) */ public function destroy($sessionId) { - $where = ['session_id = ?' => $sessionId]; + $where = ['session_id = ?' => $this->encryptor->hash($sessionId)]; $this->connection->delete($this->_sessionTable, $where); return true; } diff --git a/lib/internal/Magento/Framework/Session/SessionManager.php b/lib/internal/Magento/Framework/Session/SessionManager.php index 2298fb61c4dec..75b71df84b552 100644 --- a/lib/internal/Magento/Framework/Session/SessionManager.php +++ b/lib/internal/Magento/Framework/Session/SessionManager.php @@ -215,6 +215,8 @@ public function start() $this->_addHost(); \Magento\Framework\Profiler::stop('session_start'); + } else { + $this->validator->validate($this); } // phpstan:ignore $this->storage->init(isset($_SESSION) ? $_SESSION : []); diff --git a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php index 72a31c531696e..68fff7ed996f4 100644 --- a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php +++ b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php @@ -9,6 +9,7 @@ use Magento\Framework\App\ResourceConnection; use Magento\Framework\DB\Adapter\Pdo\Mysql; +use Magento\Framework\Encryption\EncryptorInterface; use Magento\Framework\Session\SaveHandler\DbTable; use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\TestCase; @@ -157,7 +158,10 @@ protected function _prepareResourceMock($connection) $resource->expects($this->once())->method('getTableName')->willReturn(self::SESSION_TABLE); $resource->expects($this->once())->method('getConnection')->willReturn($connection); - $this->_model = new DbTable($resource); + $encryptorMock = $this->createMock(EncryptorInterface::class); + $encryptorMock->expects($this->any())->method('hash')->willReturnArgument(0); + + $this->_model = new DbTable($resource, $encryptorMock); } /** diff --git a/lib/internal/Magento/Framework/composer.json b/lib/internal/Magento/Framework/composer.json index 8134559201b76..8e701b27a36ec 100644 --- a/lib/internal/Magento/Framework/composer.json +++ b/lib/internal/Magento/Framework/composer.json @@ -9,6 +9,7 @@ "config": { "sort-packages": true }, + "version": "103.0.3-p1", "require": { "php": "~7.3.0||~7.4.0", "ext-bcmath": "*", @@ -55,11 +56,12 @@ "ext-imagick": "Use Image Magick >=3.0.0 as an optional alternative image processing library" }, "autoload": { - "psr-4": { - "Magento\\Framework\\": "" - }, "files": [ "registration.php" - ] + ], + "psr-4": { + "Magento\\Framework\\": "" + } } } + diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js index 74984024b74a0..d22fe6eb0dc5b 100644 --- a/lib/web/mage/adminhtml/browser.js +++ b/lib/web/mage/adminhtml/browser.js @@ -429,13 +429,18 @@ define([ }, context: self.element, showLoader: true - }).done($.proxy(function () { - self.tree.jstree('refresh', self.activeNode.id); - self.reload(); - $(window).trigger('fileDeleted.mediabrowser', { - ids: self.activeNode.id - }); - + }).done($.proxy(function (data) { + if (data.error) { + alert({ + content: data.message + }); + } else { + self.tree.jstree('refresh', self.activeNode.id); + self.reload(); + $(window).trigger('fileDeleted.mediabrowser', { + ids: self.activeNode.id + }); + } }, this)); }, @@ -476,13 +481,21 @@ define([ }, context: self.element, showLoader: true - }).done($.proxy(function () { - self.reload(); - self.element.find('#delete_files, #insert_files').toggleClass(self.options.hidden, true); + }).done($.proxy(function (data) { + if (data.error) { + alert({ + content: data.message + }); + } else { + self.reload(); + self.element.find('#delete_files, #insert_files').toggleClass( + self.options.hidden, true + ); - $(window).trigger('fileDeleted.mediabrowser', { - ids: ids - }); + $(window).trigger('fileDeleted.mediabrowser', { + ids: ids + }); + } }, this)); }, diff --git a/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php b/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php index 948e77f81fd2c..75097b36115ce 100644 --- a/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php +++ b/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php @@ -163,6 +163,13 @@ protected function execute(InputInterface $input, OutputInterface $output) '<info>Please re-run Magento compile command. Use the command "setup:di:compile"</info>' ); } + $output->writeln( + "<info>Media files stored outside of 'Media Gallery Allowed' folders" + . " will not be available to the media gallery.</info>" + ); + $output->writeln( + '<info>Please refer to Developer Guide for more details.</info>' + ); } catch (\Exception $e) { $output->writeln('<error>' . $e->getMessage() . '</error>'); return Cli::RETURN_FAILURE; diff --git a/setup/src/Magento/Setup/Test/Unit/Console/Command/UpgradeCommandTest.php b/setup/src/Magento/Setup/Test/Unit/Console/Command/UpgradeCommandTest.php index 4146804b10272..14c7b61b215ca 100644 --- a/setup/src/Magento/Setup/Test/Unit/Console/Command/UpgradeCommandTest.php +++ b/setup/src/Magento/Setup/Test/Unit/Console/Command/UpgradeCommandTest.php @@ -120,6 +120,10 @@ public function testExecute($options, $deployMode, $expectedString, $expectedOpt */ public function executeDataProvider() { + $mediaGalleryNotice = "Media files stored outside of 'Media Gallery Allowed' folders will not be available " + . "to the media gallery.\n" + . "Please refer to Developer Guide for more details.\n"; + return [ [ 'options' => [ @@ -128,7 +132,7 @@ public function executeDataProvider() ], 'deployMode' => \Magento\Framework\App\State::MODE_PRODUCTION, 'expectedString' => 'Please re-run Magento compile command. Use the command "setup:di:compile"' - . PHP_EOL, + . PHP_EOL . $mediaGalleryNotice, 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false, @@ -145,7 +149,7 @@ public function executeDataProvider() '--keep-generated' => true, ], 'deployMode' => \Magento\Framework\App\State::MODE_PRODUCTION, - 'expectedString' => '', + 'expectedString' => $mediaGalleryNotice, 'expectedOptions' => [ 'keep-generated' => true, 'convert-old-scripts' => false, @@ -158,7 +162,7 @@ public function executeDataProvider() [ 'options' => ['--magento-init-params' => '', '--convert-old-scripts' => false], 'deployMode' => \Magento\Framework\App\State::MODE_DEVELOPER, - 'expectedString' => '', + 'expectedString' => $mediaGalleryNotice, 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false, @@ -171,7 +175,7 @@ public function executeDataProvider() [ 'options' => ['--magento-init-params' => '', '--convert-old-scripts' => false], 'deployMode' => \Magento\Framework\App\State::MODE_DEFAULT, - 'expectedString' => '', + 'expectedString' => $mediaGalleryNotice, 'expectedOptions' => [ 'keep-generated' => false, 'convert-old-scripts' => false,