storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/browser/app/js/objects/__tests__/ObjectActions.test.js (about)

     1  /*
     2   * MinIO Cloud Storage (C) 2018 MinIO, Inc.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  import React from "react"
    18  import { shallow } from "enzyme"
    19  import { ObjectActions } from "../ObjectActions"
    20  
    21  describe("ObjectActions", () => {
    22    it("should render without crashing", () => {
    23      shallow(<ObjectActions object={{ name: "obj1" }} currentPrefix={"pre1/"} />)
    24    })
    25  
    26    it("should show DeleteObjectConfirmModal when delete action is clicked", () => {
    27      const wrapper = shallow(
    28        <ObjectActions object={{ name: "obj1" }} currentPrefix={"pre1/"} />
    29      )
    30      wrapper
    31        .find("a")
    32        .last()
    33        .simulate("click", { preventDefault: jest.fn() })
    34      expect(wrapper.state("showDeleteConfirmation")).toBeTruthy()
    35      expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(1)
    36    })
    37  
    38    it("should hide DeleteObjectConfirmModal when Cancel button is clicked", () => {
    39      const wrapper = shallow(
    40        <ObjectActions object={{ name: "obj1" }} currentPrefix={"pre1/"} />
    41      )
    42      wrapper
    43        .find("a")
    44        .last()
    45        .simulate("click", { preventDefault: jest.fn() })
    46      wrapper.find("DeleteObjectConfirmModal").prop("hideDeleteConfirmModal")()
    47      wrapper.update()
    48      expect(wrapper.state("showDeleteConfirmation")).toBeFalsy()
    49      expect(wrapper.find("DeleteObjectConfirmModal").length).toBe(0)
    50    })
    51  
    52    it("should call deleteObject with object name", () => {
    53      const deleteObject = jest.fn()
    54      const wrapper = shallow(
    55        <ObjectActions
    56          object={{ name: "obj1" }}
    57          currentPrefix={"pre1/"}
    58          deleteObject={deleteObject}
    59        />
    60      )
    61      wrapper
    62        .find("a")
    63        .last()
    64        .simulate("click", { preventDefault: jest.fn() })
    65      wrapper.find("DeleteObjectConfirmModal").prop("deleteObject")()
    66      expect(deleteObject).toHaveBeenCalledWith("obj1")
    67    })
    68  
    69  
    70    it("should call downloadObject when single object is selected and download button is clicked", () => {
    71      const downloadObject = jest.fn()
    72      const wrapper = shallow(
    73        <ObjectActions
    74          object={{ name: "obj1" }}
    75          currentPrefix={"pre1/"}
    76          downloadObject={downloadObject} />
    77      )
    78      wrapper
    79        .find("a")
    80        .at(1)
    81        .simulate("click", { preventDefault: jest.fn() })
    82      expect(downloadObject).toHaveBeenCalled()
    83    })
    84  
    85  
    86    it("should show PreviewObjectModal when preview action is clicked", () => {
    87      const wrapper = shallow(
    88        <ObjectActions 
    89        object={{ name: "obj1", contentType: "image/jpeg"}} 
    90        currentPrefix={"pre1/"} />
    91      )
    92      wrapper
    93        .find("a")
    94        .at(1)
    95        .simulate("click", { preventDefault: jest.fn() })
    96      expect(wrapper.state("showPreview")).toBeTruthy()
    97      expect(wrapper.find("PreviewObjectModal").length).toBe(1)
    98    })
    99  
   100    it("should hide PreviewObjectModal when cancel button is clicked", () => {
   101      const wrapper = shallow(
   102        <ObjectActions 
   103          object={{ name: "obj1" , contentType: "image/jpeg"}}
   104          currentPrefix={"pre1/"} />
   105      )
   106      wrapper
   107        .find("a")
   108        .at(1)
   109        .simulate("click", { preventDefault: jest.fn() })
   110      wrapper.find("PreviewObjectModal").prop("hidePreviewModal")()
   111      wrapper.update()
   112      expect(wrapper.state("showPreview")).toBeFalsy()
   113      expect(wrapper.find("PreviewObjectModal").length).toBe(0)
   114    })
   115    it("should not show PreviewObjectModal when preview action is clicked if object is not an image", () => {
   116      const wrapper = shallow(
   117        <ObjectActions 
   118        object={{ name: "obj1"}} 
   119        currentPrefix={"pre1/"} />
   120      )
   121      expect(wrapper
   122        .find("a")
   123        .length).toBe(3) // find only the other 2
   124    })
   125  
   126    it("should call shareObject with object and expiry", () => {
   127      const shareObject = jest.fn()
   128      const wrapper = shallow(
   129        <ObjectActions
   130          object={{ name: "obj1" }}
   131          currentPrefix={"pre1/"}
   132          shareObject={shareObject}
   133        />
   134      )
   135      wrapper
   136        .find("a")
   137        .first()
   138        .simulate("click", { preventDefault: jest.fn() })
   139      expect(shareObject).toHaveBeenCalledWith("obj1", 5, 0, 0)
   140    })
   141  
   142    it("should render ShareObjectModal when an object is shared", () => {
   143      const wrapper = shallow(
   144        <ObjectActions
   145          object={{ name: "obj1" }}
   146          currentPrefix={"pre1/"}
   147          showShareObjectModal={true}
   148          shareObjectName={"obj1"}
   149        />
   150      )
   151      expect(wrapper.find("Connect(ShareObjectModal)").length).toBe(1)
   152    })
   153  
   154    it("shouldn't render ShareObjectModal when the names of the objects don't match", () => {
   155      const wrapper = shallow(
   156        <ObjectActions
   157          object={{ name: "obj1" }}
   158          currentPrefix={"pre1/"}
   159          showShareObjectModal={true}
   160          shareObjectName={"obj2"}
   161        />
   162      )
   163      expect(wrapper.find("Connect(ShareObjectModal)").length).toBe(0)
   164    })
   165  })