github.com/minio/console@v1.4.1/web-app/e2e/lifecycle.spec.ts (about) 1 // This file is part of MinIO Console Server 2 // Copyright (c) 2023 MinIO, Inc. 3 // 4 // This program is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Affero General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // This program is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Affero General Public License for more details. 13 // 14 // You should have received a copy of the GNU Affero General Public License 15 // along with this program. If not, see <http://www.gnu.org/licenses/>. 16 17 import { expect, Page } from "@playwright/test"; 18 import { test as baseTest } from "./fixtures/baseFixture"; 19 import { minioadminFile } from "./consts"; 20 import { BucketsListPage } from "./pom/BucketsListPage"; 21 import { CreateBucketPage } from "./pom/CreateBucketPage"; 22 import { BucketSummaryPage } from "./pom/BucketSummaryPage"; 23 24 type LifeCycleObjectVersionFx = { 25 activeBucketName: string; 26 bucketsListPage: BucketsListPage; 27 createBucketPage: CreateBucketPage; 28 bucketSummaryPage: any; 29 }; 30 31 const test = baseTest.extend<LifeCycleObjectVersionFx>({ 32 activeBucketName: "", 33 bucketListPage: async ({ page }: { page: Page }, use: any) => { 34 let bucketListPage = new BucketsListPage(page); 35 await bucketListPage.loadPage(); 36 await bucketListPage.goToCreateBucket(); 37 await use(bucketListPage); 38 }, 39 createBucketPage: async ({ page }: { page: Page }, use: any) => { 40 let createBucketPage = new CreateBucketPage(page); 41 await use(createBucketPage); 42 }, 43 //bucket name is dynamic in parallel test runs. 44 bucketSummaryPage: async ({ page }: { page: Page }, use: any) => { 45 await use((bucketName: string) => { 46 return new BucketSummaryPage(page, bucketName); 47 }); 48 }, 49 }); 50 51 test.use({ storageState: minioadminFile }); 52 53 const versionedBucketName = "versioned-bucket"; 54 const nonVersionedBucketName = "non-versioned-bucket"; 55 56 test.describe("Add Lifecycle Rule Modal in bucket settings tests for object version ", () => { 57 test("Test if Object Version selector is present in Lifecycle rule modal", async ({ 58 page, 59 bucketListPage, 60 createBucketPage, 61 bucketSummaryPage, 62 }) => { 63 await test.step("Create Versioned Bucket", async () => { 64 await createBucketPage.createVersionedBucket(versionedBucketName); 65 await bucketListPage.clickOnBucketRow(versionedBucketName); 66 bucketSummaryPage = bucketSummaryPage(versionedBucketName); 67 await bucketSummaryPage.clickOnTab("lifecycle"); //Tab Text is used. 68 }); 69 70 await test.step("Check if object version option is available on a versioned bucket", async () => { 71 const objectVersionsEl = await bucketSummaryPage.getObjectVersionOption(); 72 await expect(await objectVersionsEl).toHaveText("Current Version"); 73 await expect(await objectVersionsEl).toBeTruthy(); 74 await bucketSummaryPage.getLocator("#close").click(); 75 }); 76 77 await test.step("Clean up bucket and verify the clean up", async () => { 78 await bucketSummaryPage.confirmDeleteBucket(); 79 const existBukCount = 80 await bucketListPage.isBucketExist(versionedBucketName); 81 await expect(existBukCount).toEqual(0); 82 }); 83 }); 84 85 test("Test if Object Version selector is NOT present in Lifecycle rule modal", async ({ 86 page, 87 createBucketPage, 88 bucketListPage, 89 bucketSummaryPage, 90 }) => { 91 await test.step("Create NON Versioned Bucket and navigate to lifecycle settings in summary page", async () => { 92 await createBucketPage.createBucket(nonVersionedBucketName); 93 await bucketListPage.clickOnBucketRow(nonVersionedBucketName); 94 bucketSummaryPage = bucketSummaryPage(versionedBucketName); 95 await bucketSummaryPage.clickOnTab("lifecycle"); 96 }); 97 98 await test.step("Check if object version option is NOT available on a non versioned bucket", async () => { 99 const objectVersionsEl = await bucketSummaryPage.getObjectVersionOption(); 100 await expect(await objectVersionsEl.count()).toEqual(0); 101 await bucketSummaryPage.getLocator("#close").click(); 102 }); 103 104 await test.step("Clean up bucket and verify the clean up", async () => { 105 await bucketSummaryPage.confirmDeleteBucket(); 106 const existBukCount = await bucketListPage.isBucketExist( 107 nonVersionedBucketName, 108 ); 109 await expect(existBukCount).toEqual(0); 110 }); 111 }); 112 });