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  });