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)