packages feed

atlassian-connect-descriptor-0.1.0.0: tests/ModulesTest.hs

{-# LANGUAGE OverloadedStrings #-}
module ModulesTest (moduleTests) where

import           AssertionHelpers
import           Control.Applicative
import           Data.Aeson
import           Data.Connect.BaseTypes
import           Data.Connect.Conditions (JIRACondition (..),
                                          staticJiraCondition)
import           Data.Connect.Modules
import           Test.HUnit
import           ValueExtractors

moduleTests :: Test
moduleTests = TestList
    [ testWebPanelCorrectFormat
    , testGeneralPageCorrectFormat
    ]

testWebPanelCorrectFormat :: Test
testWebPanelCorrectFormat = TestCase $ do
    let wp = WebPanel
              { wpKey = "web-panel-key"
              , wpName = Name "My web panel"
              , wpUrl = "/panel/my-panel?issue_key={issue.key}"
              , wpLocation = "atl.jira.view.issue.right.context"
              , wpConditions = [staticJiraCondition UserIsAdminJiraCondition]
              }
    let jv = toJSON wp
    isObject jv @? "Expected the web panel to be an object"
    (getString =<< get "key" jv) `isEqualTo` "web-panel-key"
    (getString =<< get "value" =<< get "name" jv) `isEqualTo` "My web panel"
    (getString =<< get "url" jv) `isEqualTo` "/panel/my-panel?issue_key={issue.key}"
    (getString =<< get "location" jv) `isEqualTo` "atl.jira.view.issue.right.context"
    (isArray <$> get "conditions" jv) @? "Expected the conditions to be an array"

testGeneralPageCorrectFormat :: Test
testGeneralPageCorrectFormat = TestCase $ do
    let gp = GeneralPage
              { generalPageKey = "general-page-key"
              , generalPageName = Name "General Page Name"
              , generalPageUrl = "/panel/page-panel-name?page_id={page.id}"
              , generalPageLocation = Just "some-confluence-location"
              , generalPageIcon = Just $ IconDetails "/path/to/icon" (Just 10) (Just 20)
              , generalPageWeight = Just 10000
              , generalPageConditions = [staticJiraCondition IsIssueReportedByCurrentUserJiraCondition]
              }
    let jv = toJSON gp
    isObject jv @? "Expected the web panel to be an object"
    get "key" jv `isEqualTo` "general-page-key"
    (get "value" =<< get "name" jv) `isEqualTo` "General Page Name"
    get "url" jv `isEqualTo` "/panel/page-panel-name?page_id={page.id}"
    get "location" jv `isEqualTo` "some-confluence-location"
    (isObject <$> get "icon" jv) @? "Expected an icon to be present"
    (get "url" =<< get "icon" jv) `isEqualTo` "/path/to/icon"
    (getNumber =<< get "width" =<< get "icon" jv) `isEqualTo` 10
    (getNumber =<< get "height" =<< get "icon" jv) `isEqualTo` 20
    (getNumber =<< get "weight" jv) `isEqualTo` 10000
    (isArray <$> get "conditions" jv) @? "Expected the conditions to be present."