github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/tests/ResourceFeature.elm (about)

     1  module ResourceFeature exposing (all)
     2  
     3  import Application.Application as Application
     4  import Common exposing (and, given, then_, when)
     5  import Data
     6  import Dict
     7  import Expect
     8  import Html.Attributes as Attr
     9  import Message.Callback as Callback
    10  import Message.Effects as Effects
    11  import Message.Message as Message exposing (DomID(..))
    12  import Message.TopLevelMessage exposing (TopLevelMessage(..))
    13  import Resource.Resource as Resource
    14  import Test exposing (Test, describe, test)
    15  import Test.Html.Event as Event
    16  import Test.Html.Query as Query
    17  import Test.Html.Selector exposing (attribute, containing, style, tag, text)
    18  
    19  
    20  all : Test
    21  all =
    22      describe "Resource page"
    23          [ test "unpinned versions are clickable" <|
    24              given iAmOnTheResourcePage
    25                  >> and theResourceIsAlreadyPinned
    26                  >> and iAmLookingAtAVersionOtherThanThePinnedOne
    27                  >> when iAmLookingAtThePinButton
    28                  >> then_ iSeeItIsClickable
    29          , test "clicking unpinned version sends PinResource request" <|
    30              given iAmOnTheResourcePage
    31                  >> and theResourceIsAlreadyPinned
    32                  >> when iClickTheVersionThatIsNotPinned
    33                  >> then_ myBrowserSendsAPinResourceRequest
    34          , test "clicking pinned version sends UnpinResource request" <|
    35              given iAmOnTheResourcePage
    36                  >> and theResourceIsAlreadyPinned
    37                  >> when iClickTheVersionThatIsPinned
    38                  >> then_ myBrowserSendsAnUnpinResourceRequest
    39          ]
    40  
    41  
    42  iAmOnTheResourcePage _ =
    43      Common.init
    44          ("/teams/"
    45              ++ Data.teamName
    46              ++ "/pipelines/"
    47              ++ Data.pipelineName
    48              ++ "/resources/"
    49              ++ Data.resourceName
    50          )
    51  
    52  
    53  theResourceIsAlreadyPinned =
    54      Application.handleCallback
    55          (Callback.ResourceFetched <| Ok <| Data.resource pinnedVersion)
    56          >> Tuple.first
    57          >> Application.handleCallback
    58              (Callback.VersionedResourcesFetched <|
    59                  Ok
    60                      ( Resource.startingPage
    61                      , { content =
    62                              [ Data.versionedResource pinnedVersion 0
    63                              , Data.versionedResource notThePinnedVersion 1
    64                              ]
    65                        , pagination =
    66                              { previousPage = Nothing
    67                              , nextPage = Nothing
    68                              }
    69                        }
    70                      )
    71              )
    72          >> Tuple.first
    73  
    74  
    75  pinnedVersion =
    76      "pinned-version"
    77  
    78  
    79  notThePinnedVersion =
    80      "not-the-pinned-version"
    81  
    82  
    83  iAmLookingAtAVersionOtherThanThePinnedOne =
    84      Common.queryView
    85          >> Query.find
    86              [ tag "li"
    87              , containing [ text notThePinnedVersion ]
    88              ]
    89  
    90  
    91  iAmLookingAtThePinButton =
    92      Query.find
    93          [ attribute <|
    94              Attr.attribute "aria-label" "Pin Resource Version"
    95          ]
    96  
    97  
    98  iSeeItIsClickable =
    99      Expect.all
   100          [ Query.has [ style "cursor" "pointer" ]
   101          , Event.simulate Event.click
   102              >> Event.expect (Update <| Message.Click <| PinButton unpinnedVersionID)
   103          ]
   104  
   105  
   106  iClickTheVersionThatIsNotPinned =
   107      Application.update (Update <| (Message.Click <| PinButton unpinnedVersionID))
   108  
   109  
   110  iClickTheVersionThatIsPinned =
   111      Application.update (Update <| (Message.Click <| PinButton pinnedVersionID))
   112  
   113  
   114  pinnedVersionID =
   115      Data.resourceVersionId 0
   116  
   117  
   118  unpinnedVersionID =
   119      Data.resourceVersionId 1
   120  
   121  
   122  resourceID =
   123      Data.resourceId
   124  
   125  
   126  myBrowserSendsAPinResourceRequest =
   127      Tuple.second >> Common.contains (Effects.DoPinVersion unpinnedVersionID)
   128  
   129  
   130  myBrowserSendsAnUnpinResourceRequest =
   131      Tuple.second >> Common.contains (Effects.DoUnpinVersion resourceID)