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

     1  module TooltipTests exposing (all)
     2  
     3  import Browser.Dom
     4  import Common
     5  import Data
     6  import Expect
     7  import HoverState exposing (TooltipPosition(..))
     8  import Message.Callback as Callback
     9  import Message.Effects as Effects
    10  import Message.Message exposing (DomID(..), Message(..), PipelinesSection(..))
    11  import Test exposing (Test, describe, test)
    12  import Tooltip
    13  
    14  
    15  all : Test
    16  all =
    17      describe ".handleCallback" <|
    18          [ describe "OnlyShowWhenOverflowing policy"
    19              [ test "callback with overflowing viewport turns hover -> pending" <|
    20                  \_ ->
    21                      ( { hovered = HoverState.Hovered domID }, [] )
    22                          |> Tooltip.handleCallback
    23                              (Callback.GotViewport domID <|
    24                                  Ok overflowingViewport
    25                              )
    26                          |> Tuple.first
    27                          |> .hovered
    28                          |> Expect.equal (HoverState.TooltipPending domID)
    29              , test "callback with overflowing viewport gets element position" <|
    30                  \_ ->
    31                      ( { hovered = HoverState.Hovered domID }, [] )
    32                          |> Tooltip.handleCallback
    33                              (Callback.GotViewport domID <|
    34                                  Ok overflowingViewport
    35                              )
    36                          |> Tuple.second
    37                          |> Common.contains (Effects.GetElement domID)
    38              , test "callback with non-overflowing does nothing" <|
    39                  \_ ->
    40                      ( { hovered = HoverState.Hovered domID }, [] )
    41                          |> Tooltip.handleCallback
    42                              (Callback.GotViewport domID <|
    43                                  Ok nonOverflowingViewport
    44                              )
    45                          |> Tuple.first
    46                          |> .hovered
    47                          |> Expect.equal (HoverState.Hovered domID)
    48              ]
    49          , test "AlwaysShow callback with non-overflowing viewport gets element" <|
    50              \_ ->
    51                  ( { hovered = HoverState.Hovered Dashboard }, [] )
    52                      |> Tooltip.handleCallback
    53                          (Callback.GotViewport Dashboard <| Ok nonOverflowingViewport)
    54                      |> Tuple.second
    55                      |> Common.contains (Effects.GetElement Dashboard)
    56          , test "callback with tooltip position turns pending -> tooltip" <|
    57              \_ ->
    58                  ( { hovered = HoverState.TooltipPending domID }, [] )
    59                      |> Tooltip.handleCallback
    60                          (Callback.GotElement <| Ok Data.elementPosition)
    61                      |> Tuple.first
    62                      |> .hovered
    63                      |> Expect.equal (HoverState.Tooltip domID Data.elementPosition)
    64          ]
    65  
    66  
    67  nonOverflowingViewport : Browser.Dom.Viewport
    68  nonOverflowingViewport =
    69      { scene =
    70          { width = 1
    71          , height = 0
    72          }
    73      , viewport =
    74          { width = 1
    75          , height = 0
    76          , x = 0
    77          , y = 0
    78          }
    79      }
    80  
    81  
    82  domID : DomID
    83  domID =
    84      SideBarPipeline AllPipelinesSection Data.pipelineId
    85  
    86  
    87  overflowingViewport : Browser.Dom.Viewport
    88  overflowingViewport =
    89      { scene =
    90          { width = 1
    91          , height = 0
    92          }
    93      , viewport =
    94          { width = 0
    95          , height = 0
    96          , x = 0
    97          , y = 0
    98          }
    99      }