atlassian-connect-descriptor 0.4.5.0 → 0.4.6.0
raw patch · 6 files changed
+95/−21 lines, 6 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Data.Connect.Descriptor: JIRAIssueGlance :: Text -> I18nText -> JIRAIssueGlanceContent -> IconDetails -> JIRAIssueGlanceTarget -> [Condition] -> JIRAIssueGlance
+ Data.Connect.Descriptor: JIRAIssueGlanceContentLabel :: I18nText -> JIRAIssueGlanceContent
+ Data.Connect.Descriptor: JIRAIssueGlanceTargetWebPanel :: Text -> JIRAIssueGlanceTarget
+ Data.Connect.Descriptor: [jigConditions] :: JIRAIssueGlance -> [Condition]
+ Data.Connect.Descriptor: [jigContent] :: JIRAIssueGlance -> JIRAIssueGlanceContent
+ Data.Connect.Descriptor: [jigIcon] :: JIRAIssueGlance -> IconDetails
+ Data.Connect.Descriptor: [jigKey] :: JIRAIssueGlance -> Text
+ Data.Connect.Descriptor: [jigName] :: JIRAIssueGlance -> I18nText
+ Data.Connect.Descriptor: [jigTarget] :: JIRAIssueGlance -> JIRAIssueGlanceTarget
+ Data.Connect.Descriptor: [jigclLabel] :: JIRAIssueGlanceContent -> I18nText
+ Data.Connect.Descriptor: [jigtwpUrl] :: JIRAIssueGlanceTarget -> Text
+ Data.Connect.Descriptor: [jmJiraIssueGlances] :: JIRAModules -> Maybe [JIRAIssueGlance]
+ Data.Connect.Descriptor: data JIRAIssueGlance
+ Data.Connect.Descriptor: data JIRAIssueGlanceContent
+ Data.Connect.Descriptor: data JIRAIssueGlanceTarget
- Data.Connect.Descriptor: JIRAModules :: Maybe [JIRAWebSection] -> Maybe [WebItem] -> Maybe [WebPanel] -> Maybe [JIRAPage] -> Maybe [JIRAPage] -> Maybe JIRAPage -> Maybe [JIRASearchRequestView] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAProjectAdminTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAReport] -> Maybe [Webhook] -> Maybe [JIRAWorkflowPostFunction] -> Maybe [JIRAEntityProperties] -> JIRAModules
+ Data.Connect.Descriptor: JIRAModules :: Maybe [JIRAWebSection] -> Maybe [WebItem] -> Maybe [WebPanel] -> Maybe [JIRAPage] -> Maybe [JIRAPage] -> Maybe JIRAPage -> Maybe [JIRASearchRequestView] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAProjectAdminTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAGenericTabPanel] -> Maybe [JIRAIssueGlance] -> Maybe [JIRAReport] -> Maybe [Webhook] -> Maybe [JIRAWorkflowPostFunction] -> Maybe [JIRAEntityProperties] -> JIRAModules
Files
- atlassian-connect-descriptor.cabal +3/−3
- src/Data/Connect/Descriptor.hs +3/−0
- src/Data/Connect/Modules.hs +42/−0
- tests/Main.hs +20/−0
- tests/ModulesTest.hs +27/−0
- tests/Test.hs +0/−18
atlassian-connect-descriptor.cabal view
@@ -10,7 +10,7 @@ -- PVP summary: +-+------- breaking API changes -- | | +----- non-breaking API additions -- | | | +--- code changes with no API change-version: 0.4.5.0+version: 0.4.6.0 -- A short (one-line) description of the package. synopsis: Code that helps you create a valid Atlassian Connect Descriptor.@@ -93,9 +93,9 @@ Test-Suite test-descriptor hs-source-dirs: tests- type: detailed-0.9+ type: exitcode-stdio-1.0 - test-module: Test+ main-is: Main.hs other-modules: Util , AssertionHelpers , ValueExtractors
src/Data/Connect/Descriptor.hs view
@@ -128,6 +128,9 @@ , JIRAProjectAdminTabPanel(..) -- ** JIRA Specific Modules , JIRASearchRequestView(..)+ , JIRAIssueGlance(..)+ , JIRAIssueGlanceContent(..)+ , JIRAIssueGlanceTarget(..) , JIRAReport(..) , JIRAReportCategory(..) , Target(..)
src/Data/Connect/Modules.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE OverloadedStrings #-} module Data.Connect.Modules ( Modules(..) , JIRAModules(..)@@ -15,6 +16,9 @@ , JIRAGenericTabPanel(..) , JIRAProjectAdminTabPanel(..) , JIRASearchRequestView(..)+ , JIRAIssueGlance(..)+ , JIRAIssueGlanceContent(..)+ , JIRAIssueGlanceTarget(..) , JIRAReport(..) , JIRAReportCategory(..) , Target(..)@@ -113,6 +117,7 @@ , jmJiraProjectAdminTabPanels :: Maybe [JIRAProjectAdminTabPanel] , jmJiraIssueTabPanels :: Maybe [JIRAGenericTabPanel] , jmJiraComponentTabPanels :: Maybe [JIRAGenericTabPanel]+ , jmJiraIssueGlances :: Maybe [JIRAIssueGlance] , jmJiraReports :: Maybe [JIRAReport] , jmWebhooks :: Maybe [Webhook] , jmJiraWorkflowPostFunctions :: Maybe [JIRAWorkflowPostFunction]@@ -157,6 +162,7 @@ Nothing Nothing Nothing+ Nothing -- | Empty Confluence Modules; useful when you only want to define a few modules via Haskell record syntax. emptyConfluenceModules :: ConfluenceModules@@ -405,6 +411,42 @@ toJSON = genericToJSON baseOptions { fieldLabelModifier = stripFieldNamePrefix "jiraPage" }++-- | This module adds a glance to the context area of the new Jira issue view.+-- Glances can have an icon, content, and status.+data JIRAIssueGlance = JIRAIssueGlance+ { jigKey :: T.Text -- ^ The add-on unique key for this module.+ , jigName :: I18nText -- ^ The name of this JIRA Glance.+ , jigContent :: JIRAIssueGlanceContent -- ^ This content becomes the label next to the icon. It's handy for communicating a small amount of information.+ , jigIcon :: IconDetails -- ^ Specifies an icon to display at the left of the glance view control. The icon resource provided in this field should be 24x24 pixels or larger, preferably in .SVG format.+ , jigTarget :: JIRAIssueGlanceTarget -- ^ Specifies the target action when clicking on the glance.+ , jigConditions :: [Condition] -- ^ The conditions under which the glance will be shown.+ } deriving (Show, Generic)++instance ToJSON JIRAIssueGlance where+ toJSON = genericToJSON baseOptions+ { fieldLabelModifier = stripFieldNamePrefix "jig"+ }++data JIRAIssueGlanceContent = JIRAIssueGlanceContentLabel+ { jigclLabel :: I18nText+ } deriving (Show)++instance ToJSON JIRAIssueGlanceContent where+ toJSON label@(JIRAIssueGlanceContentLabel {}) = object+ [ "type" .= T.pack "label"+ , "label" .= (jigclLabel label) + ]++data JIRAIssueGlanceTarget = JIRAIssueGlanceTargetWebPanel+ { jigtwpUrl :: T.Text -- ^ The url to the content that will be loaded in the glance iframe.+ } deriving (Show)++instance ToJSON JIRAIssueGlanceTarget where+ toJSON wp@(JIRAIssueGlanceTargetWebPanel {}) = object+ [ "type" .= T.pack "web_panel"+ , "url" .= (jigtwpUrl wp)+ ] -- | A Search Request View allows you to render a custom representation of a search result. Rendering a custom XML -- format is a common example.
+ tests/Main.hs view
@@ -0,0 +1,20 @@+module Main where++import ConditionsTest+import DescriptorTest+import ModulesTest+import qualified Test.HUnit as HU+import System.Exit (exitWith, ExitCode(..))++hunitTests :: HU.Test+hunitTests = HU.TestList+ [ HU.TestLabel "Condition Tests" conditionsTests+ , HU.TestLabel "Module Tests" moduleTests+ , HU.TestLabel "Descriptor Tests" descriptorTests+ ]++main :: IO ()+main = do+ counts <- HU.runTestTT hunitTests+ let mistakes = HU.errors counts + HU.failures counts+ exitWith (if mistakes > 0 then ExitFailure mistakes else ExitSuccess)
tests/ModulesTest.hs view
@@ -14,7 +14,34 @@ [ testWebPanelCorrectFormat , testGeneralPageCorrectFormat , testEmptyModulesAreNotShown+ , testIssueGlanceCorrectFormat ]++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 testWebPanelCorrectFormat :: Test testWebPanelCorrectFormat = TestCase $ do
− tests/Test.hs
@@ -1,18 +0,0 @@-module Test where--import ConditionsTest-import DescriptorTest-import qualified Distribution.TestSuite as TS-import ModulesTest-import qualified Test.HUnit as HU-import Util--hunitTests :: HU.Test-hunitTests = HU.TestList- [ HU.TestLabel "Condition Tests" conditionsTests- , HU.TestLabel "Module Tests" moduleTests- , HU.TestLabel "Descriptor Tests" descriptorTests- ]--tests :: IO [TS.Test]-tests = return [ TS.Test (hunitTestInstance hunitTests) ]