{-# LANGUAGE OverloadedStrings #-} module ModulesTest (moduleTests) where import AssertionHelpers import Control.Applicative import Data.Aeson import Data.Connect.Descriptor import qualified Data.HashMap.Strict as HM import Test.HUnit import ValueExtractors moduleTests :: Test moduleTests = TestList [ testWebPanelCorrectFormat , testGeneralPageCorrectFormat , testEmptyModulesAreNotShown , testIssueGlanceCorrectFormat , testIssueContentCorrectFormat ] testIssueGlanceCorrectFormat :: Test testIssueGlanceCorrectFormat = TestCase $ do let jig = JIRAIssueGlance { jigKey = "jira-issue-glance-module" , jigName = simpleText "My glance" , jigContent = JIRAIssueGlanceContentLabel (simpleText "my label") , jigIcon = IconDetails { iconUrl = "my_icon.svg" , iconWidth = Just 24 , iconHeight = Just 25 } , jigTarget = JIRAIssueGlanceTargetWebPanel ("/panel_url") , jigConditions = [] } let jv = toJSON jig isObject jv @? "Expected the issue glance to be an object" (getString =<< get "key" jv) `isEqualTo` "jira-issue-glance-module" (getString =<< get "value" =<< get "name" jv) `isEqualTo` "My glance" (getString =<< get "type" =<< get "target" jv) `isEqualTo` "web_panel" (getString =<< get "url" =<< get "target" jv) `isEqualTo` "/panel_url" (getString =<< get "type" =<< get "content" jv) `isEqualTo` "label" (getString =<< get "value" =<< get "label" =<< get "content" jv) `isEqualTo` "my label" (get "url" =<< get "icon" jv) `isEqualTo` "my_icon.svg" (getNumber =<< get "width" =<< get "icon" jv) `isEqualTo` 24 (getNumber =<< get "height" =<< get "icon" jv) `isEqualTo` 25 testIssueContentCorrectFormat :: Test testIssueContentCorrectFormat = TestCase $ do let jic = JIRAIssueContent { jicKey = "jira-issue-content-module" , jicName = simpleText "My content" , jicTooltip = simpleText "My tooltip" , jicIcon = IconDetails { iconUrl = "my_icon.svg" , iconWidth = Just 24 , iconHeight = Just 25 } , jicTarget = JIRAIssueContentTargetWebPanel "/panel_url" , jicConditions = [] , jicContentPresentConditions = [] } let jv = toJSON jic isObject jv @? "Expected the issue glance to be an object" (getString =<< get "key" jv) `isEqualTo` "jira-issue-content-module" (getString =<< get "value" =<< get "name" jv) `isEqualTo` "My content" (getString =<< get "value" =<< get "tooltip" jv) `isEqualTo` "My tooltip" (getString =<< get "type" =<< get "target" jv) `isEqualTo` "web_panel" (getString =<< get "url" =<< get "target" jv) `isEqualTo` "/panel_url" (get "url" =<< get "icon" jv) `isEqualTo` "my_icon.svg" (getNumber =<< get "width" =<< get "icon" jv) `isEqualTo` 24 (getNumber =<< get "height" =<< get "icon" jv) `isEqualTo` 25 testWebPanelCorrectFormat :: Test testWebPanelCorrectFormat = TestCase $ do let wp = WebPanel { wpKey = "web-panel-key" , wpName = simpleText "My web panel" , wpUrl = "/panel/my-panel?issue_key={issue.key}" , wpLocation = "atl.jira.view.issue.right.context" , wpConditions = [staticJiraCondition UserIsAdminJiraCondition] , wpTooltip = Just . simpleText $ "A tooltip for the web panel..." , wpWeight = Just 1234 , wpLayout = Just $ WebPanelLayout (Pixels 321) (Percentage 80) , wpParams = HM.fromList [("one", "1"), ("two", "2")] } 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 = JIRAPage { jiraPageKey = "general-page-key" , jiraPageName = simpleText "General Page Name" , jiraPageUrl = "/panel/page-panel-name?page_id={page.id}" , jiraPageLocation = Just "some-confluence-location" , jiraPageIcon = Just $ IconDetails "/path/to/icon" (Just 10) (Just 20) , jiraPageWeight = Just 10000 , jiraPageConditions = [staticJiraCondition IsIssueReportedByCurrentUserJiraCondition] , jiraPageParams = HM.fromList [("gpOne", "gp1"), ("gpTwo", "gp2")] } 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." testEmptyModulesAreNotShown :: Test testEmptyModulesAreNotShown = TestCase $ do let modules = Modules emptyJIRAModules emptyConfluenceModules let jv = toJSON modules fieldIsNotPresent "webPanels" jv @? "Expected the field webPanels to be present" fieldIsNotPresent "generalPages" jv @? "Expected the field webPanels to be present"