git.iko.soy/typeable/mandrill
on 3e533ce help sign in
.gitignore−1
since splitsnapshots
unifiedsplit
@@ -3,4 +3,3 @@ dist
3cabal.sandbox.config
3cabal.sandbox.config
4shell.nix
4shell.nix
5.stack-work
5.stack-work
6−tags
.travis.yml+4−4
@@ -5,17 +5,17 @@ notifications:
5 email: false
5 email: false
6
6
7env:
7env:
8+ - GHCVER=7.6.2 CABALVER=1.16
8 - GHCVER=7.6.3 CABALVER=1.16
9 - GHCVER=7.6.3 CABALVER=1.16
9 - GHCVER=7.8.2 CABALVER=1.18
10 - GHCVER=7.8.2 CABALVER=1.18
10 - GHCVER=7.8.3 CABALVER=1.18
11 - GHCVER=7.8.3 CABALVER=1.18
12+ - GHCVER=7.10.1 CABALVER=1.22
11 - GHCVER=7.10.2 CABALVER=1.22
13 - GHCVER=7.10.2 CABALVER=1.22
12− - GHCVER=8.0.1 CABALVER=1.22
13− - GHCVER=head CABALVER=1.22
14+ - GHCVER=head CABALVER=1.20
14
15
15matrix:
16matrix:
16 allow_failures:
17 allow_failures:
17− - env: GHCVER=8.0.1 CABALVER=1.22
18− - env: GHCVER=head CABALVER=1.22
18+ - env: GHCVER=head CABALVER=1.20
19
19
20before_install:
20before_install:
21 - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
21 - travis_retry sudo add-apt-repository -y ppa:hvr/ghc
README.md−40
@@ -8,38 +8,6 @@ the [Mandrill](http://mandrillapp.com) transactional email service.
8
8
9# Changelog
9# Changelog
10
10
11−## Version 0.5.3.5
12−
13−* Replaced dependency on lens with microlens (Courtesy of @tom-bop)
14−
15−## Version 0.5.3.3
16−
17−* Relaxed upper bound on Aeson (see: fpco/stackage/issues/3337)
18−
19−## Version 0.5.3.2
20−
21−* Relaxed upper bound on Aeson (see: fpco/stackage/issues/2449)
22−
23−## Version 0.5.3.1
24−
25−* Relaxed upper bound on Aeson (see: fpco/stackage/issues/2177 )
26−
27−## Version 0.5.3.0
28−
29−* Added support for webhooks (thanks to @mwotton).
30−
31−## Version 0.5.2.3
32−
33−* Added support for aeson-1.0.0.0 by relaxing its upper bound.
34−
35−## Version 0.5.2.2
36−
37−* Added support for QuickCheck-2.9 by relaxing its upper bound.
38−
39−## Version 0.5.2.1
40−
41−* Added `Functor`, `Foldable` and `Traversable` instances to `MandrillResponse` (Courtesy of @dredozubov)
42−
43## Version 0.5.2.0
11## Version 0.5.2.0
44
12
45* Added inbound calls (Courtesy of @mwotton)
13* Added inbound calls (Courtesy of @mwotton)
@@ -105,17 +73,9 @@ main = do
105 + ~~ping.json~~ (as **doesn't return valid json!**)
73 + ~~ping.json~~ (as **doesn't return valid json!**)
106 + ping2.json
74 + ping2.json
107 + senders.json
75 + senders.json
108−
109 - [Messages call](https://mandrillapp.com/api/docs/messages.JSON.html)
76 - [Messages call](https://mandrillapp.com/api/docs/messages.JSON.html)
110 + send.json
77 + send.json
111
78
112− - [Senders call](https://mandrillapp.com/api/docs/senders.JSON.html)
113− + verify-domain.json
114−
115− - [Inbound call](https://mandrillapp.com/api/docs/inbound.JSON.html)
116− + add-route.json
117− + add-domain.json
118−
119# Testing online API
79# Testing online API
120
80
121To test the online API, first build the package with tests enabled:
81To test the online API, first build the package with tests enabled:
mandrill-nightly.yml+7−7
@@ -1,10 +1,10 @@
1−flags:
1+flags: {}
2− semigroups:
3− bytestring-builder: false
4packages:
2packages:
5- '.'
3- '.'
4+- location:
5+ git: git@github.com:bos/aeson.git
6+ commit: 674eee5972864f9a32e27e9a827693edef0ad737
6extra-deps:
7extra-deps:
7− - aeson-1.3.0.0
8+ - aeson-0.11.0.0
8− - text-1.2.3.0
9+ - fail-4.9.0.0
9− - semigroups-0.18.2
10−resolver: lts-9.1
10+resolver: lts-5.2
mandrill.cabal+4−6
@@ -1,5 +1,5 @@
1name: mandrill
1name: mandrill
2−version: 0.5.3.5
2+version: 0.5.2.0
3synopsis: Library for interfacing with the Mandrill JSON API
3synopsis: Library for interfacing with the Mandrill JSON API
4description: Pure Haskell client for the Mandrill JSON API
4description: Pure Haskell client for the Mandrill JSON API
5license: MIT
5license: MIT
@@ -26,8 +26,6 @@ library
26 Network.API.Mandrill.Messages
26 Network.API.Mandrill.Messages
27 Network.API.Mandrill.Messages.Types
27 Network.API.Mandrill.Messages.Types
28 Network.API.Mandrill.Inbound
28 Network.API.Mandrill.Inbound
29− Network.API.Mandrill.Webhooks
30− Network.API.Mandrill.Senders
31 other-modules:
29 other-modules:
32 Network.API.Mandrill.Utils
30 Network.API.Mandrill.Utils
33 Network.API.Mandrill.HTTP
31 Network.API.Mandrill.HTTP
@@ -41,10 +39,10 @@ library
41 , http-types >= 0.8.0
39 , http-types >= 0.8.0
42 , http-client >= 0.3.0
40 , http-client >= 0.3.0
43 , http-client-tls >= 0.2.0.0
41 , http-client-tls >= 0.2.0.0
44− , aeson >= 0.7.0.3 && < 1.5.0.0
42+ , aeson >= 0.7.0.3 && < 0.12.0.0
45− , microlens-th >= 0.4.0.0
43+ , lens >= 4.0
46 , blaze-html >= 0.5.0.0
44 , blaze-html >= 0.5.0.0
47− , QuickCheck >= 2.6 && < 3.0
45+ , QuickCheck >= 2.6 && < 2.9
48 , mtl < 3.0
46 , mtl < 3.0
49 , time
47 , time
50 , email-validate >= 1.0.0
48 , email-validate >= 1.0.0
src/Network/API/Mandrill.hs+6−7
@@ -20,6 +20,7 @@ module Network.API.Mandrill (
20 -- $exampleusage
20 -- $exampleusage
21 ) where
21 ) where
22
22
23+import Control.Lens
23import Control.Monad.Reader
24import Control.Monad.Reader
24import qualified Data.Aeson as JSON
25import qualified Data.Aeson as JSON
25import qualified Data.HashMap.Strict as H
26import qualified Data.HashMap.Strict as H
@@ -106,7 +107,7 @@ newHtmlMessage :: EmailAddress
106 -- ^ The HTML body
107 -- ^ The HTML body
107 -> MandrillMessage
108 -> MandrillMessage
108newHtmlMessage f t subj html = let body = mkMandrillHtml html in
109newHtmlMessage f t subj html = let body = mkMandrillHtml html in
109− (emptyMessage f t) { _mmsg_html = body, _mmsg_subject = subj }
110+ ((mmsg_html .~ body) . (mmsg_subject .~ subj)) $ (emptyMessage f t)
110
111
111--------------------------------------------------------------------------------
112--------------------------------------------------------------------------------
112-- | Create a new template message (no HTML).
113-- | Create a new template message (no HTML).
@@ -117,7 +118,7 @@ newTemplateMessage :: EmailAddress
117 -> T.Text
118 -> T.Text
118 -- ^ Subject
119 -- ^ Subject
119 -> MandrillMessage
120 -> MandrillMessage
120−newTemplateMessage f t subj = (emptyMessage f t) { _mmsg_subject = subj }
121+newTemplateMessage f t subj = (mmsg_subject .~ subj) $ (emptyMessage f t)
121
122
122--------------------------------------------------------------------------------
123--------------------------------------------------------------------------------
123-- | Create a new textual message. By default Mandrill doesn't require you
124-- | Create a new textual message. By default Mandrill doesn't require you
@@ -133,11 +134,9 @@ newTextMessage :: EmailAddress
133 -- ^ The body, as normal text.
134 -- ^ The body, as normal text.
134 -> MandrillMessage
135 -> MandrillMessage
135newTextMessage f t subj txt = let body = unsafeMkMandrillHtml txt in
136newTextMessage f t subj txt = let body = unsafeMkMandrillHtml txt in
136− (emptyMessage f t) {
137+ ((mmsg_html .~ body) .
137− _mmsg_html = body
138− , _mmsg_text = Just txt
138+ (mmsg_text .~ Just txt) .
139− , _mmsg_subject = subj
139+ (mmsg_subject .~ subj)) (emptyMessage f t)
140− }
141
140
142
141
143--------------------------------------------------------------------------------
142--------------------------------------------------------------------------------
src/Network/API/Mandrill/Inbound.hs+1−1
@@ -1,11 +1,11 @@
1{-# LANGUAGE TemplateHaskell #-}
1{-# LANGUAGE TemplateHaskell #-}
2module Network.API.Mandrill.Inbound where
2module Network.API.Mandrill.Inbound where
3+import Control.Lens
3import Data.Aeson (FromJSON, ToJSON, parseJSON,
4import Data.Aeson (FromJSON, ToJSON, parseJSON,
4 toJSON)
5 toJSON)
5import Data.Aeson.TH (defaultOptions, deriveJSON)
6import Data.Aeson.TH (defaultOptions, deriveJSON)
6import Data.Aeson.Types (fieldLabelModifier)
7import Data.Aeson.Types (fieldLabelModifier)
7import Data.Text (Text)
8import Data.Text (Text)
8−import Lens.Micro.TH (makeLenses)
9import Network.API.Mandrill.HTTP (toMandrillResponse)
9import Network.API.Mandrill.HTTP (toMandrillResponse)
10import Network.API.Mandrill.Settings
10import Network.API.Mandrill.Settings
11import Network.API.Mandrill.Types
11import Network.API.Mandrill.Types
src/Network/API/Mandrill/Messages/Types.hs+1−1
@@ -5,12 +5,12 @@ module Network.API.Mandrill.Messages.Types where
5import Data.Char
5import Data.Char
6import Data.Time
6import Data.Time
7import qualified Data.Text as T
7import qualified Data.Text as T
8+import Control.Lens
8import Control.Monad
9import Control.Monad
9import Data.Monoid
10import Data.Monoid
10import Data.Aeson
11import Data.Aeson
11import Data.Aeson.Types
12import Data.Aeson.Types
12import Data.Aeson.TH
13import Data.Aeson.TH
13−import Lens.Micro.TH (makeLenses)
14
14
15import Network.API.Mandrill.Types
15import Network.API.Mandrill.Types
16
16
src/Network/API/Mandrill/Senders.hsdeleted−45
@@ -1,45 +0,0 @@
1−{-# LANGUAGE TemplateHaskell #-}
2−module Network.API.Mandrill.Senders where
3−import Data.Aeson (FromJSON, ToJSON, parseJSON,
4− toJSON)
5−import Data.Aeson.TH (defaultOptions, deriveJSON)
6−import Data.Aeson.Types (Value (..), fieldLabelModifier)
7−import Data.Text (Text)
8−import Data.Text.Encoding (decodeUtf8, encodeUtf8)
9−import Lens.Micro.TH (makeLenses)
10−import Network.API.Mandrill.HTTP (toMandrillResponse)
11−import Network.API.Mandrill.Settings
12−import Network.API.Mandrill.Types
13−import Network.HTTP.Client (Manager)
14−import qualified Text.Email.Validate as TEV
15−
16−data VerifyDomainRq =
17− VerifyDomainRq
18− { _vdrq_key :: MandrillKey
19− , _vdrq_domain :: Text
20− , _vdrq_mailbox :: Text
21− } deriving Show
22−
23−makeLenses ''VerifyDomainRq
24−deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''VerifyDomainRq
25−
26−data VerifyDomainResponse =
27− VerifyDomainResponse
28− { _vdres_status :: Text
29− , _vdres_domain :: Text
30− , _vdres_email :: MandrillEmail
31− } deriving Show
32−
33−makeLenses ''VerifyDomainResponse
34−deriveJSON defaultOptions { fieldLabelModifier = drop 7 } ''VerifyDomainResponse
35−
36−
37−verifyDomain :: MandrillKey
38− -- ^ The API key
39− -> TEV.EmailAddress
40− -- ^ Email address to use for verification
41− -> Maybe Manager
42− -> IO (MandrillResponse VerifyDomainResponse)
43−verifyDomain k email =
44− toMandrillResponse VerifyDomain
45− (VerifyDomainRq k (decodeUtf8 $ TEV.domainPart email) (decodeUtf8 $ TEV.localPart email))
src/Network/API/Mandrill/Settings.hs−3
@@ -19,8 +19,6 @@ data MandrillCalls =
19 -- Inbound API
19 -- Inbound API
20 | RoutesAdd
20 | RoutesAdd
21 | DomainsAdd
21 | DomainsAdd
22− -- Senders API
23− | VerifyDomain
24
22
25 deriving Show
23 deriving Show
26
24
@@ -37,4 +35,3 @@ instance MandrillEndpoint MandrillCalls where
37 toUrl MessagesSearch = "messages/search.json"
35 toUrl MessagesSearch = "messages/search.json"
38 toUrl DomainsAdd = "inbound/add-domain.json"
36 toUrl DomainsAdd = "inbound/add-domain.json"
39 toUrl RoutesAdd = "inbound/add-route.json"
37 toUrl RoutesAdd = "inbound/add-route.json"
40− toUrl VerifyDomain = "senders/verify-domain.json"
src/Network/API/Mandrill/Types.hs+4−17
@@ -1,7 +1,4 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2−{-# LANGUAGE DeriveFoldable #-}
3−{-# LANGUAGE DeriveFunctor #-}
4−{-# LANGUAGE DeriveTraversable #-}
5{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
6{-# LANGUAGE RankNTypes #-}
3{-# LANGUAGE RankNTypes #-}
7{-# LANGUAGE ScopedTypeVariables #-}
4{-# LANGUAGE ScopedTypeVariables #-}
@@ -9,11 +6,9 @@
9module Network.API.Mandrill.Types where
6module Network.API.Mandrill.Types where
10
7
11import Control.Applicative
8import Control.Applicative
12−import Control.Monad (mzero)
13import Data.Char
9import Data.Char
14import Data.Maybe
10import Data.Maybe
15import Data.Time
11import Data.Time
16−import Lens.Micro.TH (makeLenses)
17import Network.API.Mandrill.Utils
12import Network.API.Mandrill.Utils
18import Test.QuickCheck
13import Test.QuickCheck
19import Text.Email.Validate
14import Text.Email.Validate
@@ -22,15 +17,12 @@ import Data.Time.Format (TimeLocale, defaultTimeLocale)
22#else
17#else
23import System.Locale (TimeLocale, defaultTimeLocale)
18import System.Locale (TimeLocale, defaultTimeLocale)
24#endif
19#endif
20+import Control.Lens
25import Data.Aeson
21import Data.Aeson
26import Data.Aeson.TH
22import Data.Aeson.TH
27import Data.Aeson.Types
23import Data.Aeson.Types
28import qualified Data.ByteString as B
24import qualified Data.ByteString as B
29import qualified Data.ByteString.Base64 as Base64
25import qualified Data.ByteString.Base64 as Base64
30−#if !MIN_VERSION_base(4,8,0)
31−import Data.Foldable
32−import Data.Traversable
33−#endif
34import qualified Data.HashMap.Strict as H
26import qualified Data.HashMap.Strict as H
35import Data.Monoid
27import Data.Monoid
36import qualified Data.Text as T
28import qualified Data.Text as T
@@ -38,7 +30,7 @@ import qualified Data.Text.Encoding as TL
38import qualified Data.Text.Lazy as TL
30import qualified Data.Text.Lazy as TL
39import qualified Text.Blaze.Html as Blaze
31import qualified Text.Blaze.Html as Blaze
40import qualified Text.Blaze.Html.Renderer.Text as Blaze
32import qualified Text.Blaze.Html.Renderer.Text as Blaze
41−import qualified Text.Email.Validate as TEV
33+
42
34
43timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
35timeParse :: ParseTime t => TimeLocale -> String -> String -> Maybe t
44#if MIN_VERSION_time(1,5,0)
36#if MIN_VERSION_time(1,5,0)
@@ -53,7 +45,7 @@ data MandrillError = MandrillError {
53 , _merr_code :: !Int
45 , _merr_code :: !Int
54 , _merr_name :: !T.Text
46 , _merr_name :: !T.Text
55 , _merr_message :: !T.Text
47 , _merr_message :: !T.Text
56− } deriving (Show, Eq)
48+ } deriving Show
57
49
58makeLenses ''MandrillError
50makeLenses ''MandrillError
59deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
51deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''MandrillError
@@ -91,7 +83,7 @@ deriveJSON defaultOptions {
91-- which can be either a success or a failure.
83-- which can be either a success or a failure.
92data MandrillResponse k =
84data MandrillResponse k =
93 MandrillSuccess k
85 MandrillSuccess k
94− | MandrillFailure MandrillError deriving (Show, Eq, Functor, Foldable, Traversable)
86+ | MandrillFailure MandrillError deriving Show
95
87
96instance FromJSON k => FromJSON (MandrillResponse k) where
88instance FromJSON k => FromJSON (MandrillResponse k) where
97 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
89 parseJSON v = case (parseMaybe parseJSON v) :: Maybe k of
@@ -158,11 +150,6 @@ unsafeMkMandrillHtml = MandrillHtml . Blaze.preEscapedToHtml
158mkMandrillHtml :: Blaze.Html -> MandrillHtml
150mkMandrillHtml :: Blaze.Html -> MandrillHtml
159mkMandrillHtml = MandrillHtml
151mkMandrillHtml = MandrillHtml
160
152
161−#if MIN_VERSION_base(4,11,0)
162−instance Semigroup MandrillHtml where
163− MandrillHtml m1 <> MandrillHtml m2 = MandrillHtml (m1 <> m2)
164−#endif
165−
166instance Monoid MandrillHtml where
153instance Monoid MandrillHtml where
167 mempty = MandrillHtml mempty
154 mempty = MandrillHtml mempty
168 mappend (MandrillHtml m1) (MandrillHtml m2) = MandrillHtml (m1 <> m2)
155 mappend (MandrillHtml m1) (MandrillHtml m2) = MandrillHtml (m1 <> m2)
src/Network/API/Mandrill/Users/Types.hs+1−1
@@ -5,12 +5,12 @@ module Network.API.Mandrill.Users.Types where
5import Data.Char
5import Data.Char
6import Data.Time
6import Data.Time
7import qualified Data.Text as T
7import qualified Data.Text as T
8+import Control.Lens
8import Control.Monad
9import Control.Monad
9import Data.Monoid
10import Data.Monoid
10import Data.Aeson
11import Data.Aeson
11import Data.Aeson.Types
12import Data.Aeson.Types
12import Data.Aeson.TH
13import Data.Aeson.TH
13−import Lens.Micro.TH (makeLenses)
14
14
15import Network.API.Mandrill.Types
15import Network.API.Mandrill.Types
16
16
src/Network/API/Mandrill/Webhooks.hsdeleted−70
@@ -1,70 +0,0 @@
1−{-# LANGUAGE OverloadedStrings #-}
2−{-# LANGUAGE TemplateHaskell #-}
3−module Network.API.Mandrill.Webhooks where
4−import Control.Applicative (pure)
5−import Control.Monad (mzero)
6−import Data.Aeson (FromJSON, ToJSON, parseJSON,
7− toJSON)
8−import Data.Aeson (Value (String))
9−import Data.Aeson.TH (defaultOptions, deriveJSON)
10−import Data.Aeson.Types (fieldLabelModifier)
11−import Data.Set (Set)
12−import Data.Text (Text)
13−import qualified Data.Text as T
14−import Lens.Micro.TH (makeLenses)
15−import Network.API.Mandrill.HTTP (toMandrillResponse)
16−import Network.API.Mandrill.Settings
17−import Network.API.Mandrill.Types
18−import Network.HTTP.Client (Manager)
19−
20−data EventHook
21− = EventSent
22− | EventDeferred
23− | EventHardBounced
24− | EventSoftBounced
25− | EventOpened
26− | EventClicked
27− | EventMarkedAsSpam
28− | EventUnsubscribed
29− | EventRejected
30− deriving (Ord,Eq)
31−
32−instance Show EventHook where
33− show e = case e of
34− EventSent -> "send"
35− EventDeferred -> "deferral"
36− EventSoftBounced -> "soft_bounce"
37− EventHardBounced -> "hard_bounce"
38− EventOpened -> "open"
39− EventClicked -> "click"
40− EventMarkedAsSpam -> "spam"
41− EventUnsubscribed -> "unsub"
42− EventRejected -> "reject"
43−instance FromJSON EventHook where
44− parseJSON (String s) =
45− case s of
46− "send" -> pure EventSent
47− "deferral" -> pure EventDeferred
48− "soft_bounce" -> pure EventSoftBounced
49− "hard_bounce" -> pure EventHardBounced
50− "open" -> pure EventOpened
51− "click" -> pure EventClicked
52− "spam" -> pure EventMarkedAsSpam
53− "reject" -> pure EventRejected
54− "unsub" -> pure EventUnsubscribed
55− x -> fail ("can't parse " ++ show x)
56−
57−
58−instance ToJSON EventHook where
59− toJSON e = String (T.pack $ show e)
60−
61−data WebhookAddRq =
62− WebhookAddRq
63− { _warq_key :: MandrillKey
64− , _warq_url :: Text
65− , _warq_description :: Text
66− , _warq_events :: Set EventHook
67− } deriving Show
68−
69−makeLenses ''WebhookAddRq
70−deriveJSON defaultOptions { fieldLabelModifier = drop 6 } ''WebhookAddRq
stack.yaml+1−1
@@ -2,4 +2,4 @@ flags: {}
2packages:
2packages:
3- '.'
3- '.'
4extra-deps: []
4extra-deps: []
5−resolver: lts-11.13
5+resolver: lts-5.2
test/Main.hs−2
@@ -44,7 +44,5 @@ main = do
44 , testCase "messages/send.json API response parsing" testMessagesResponseRejected
44 , testCase "messages/send.json API response parsing" testMessagesResponseRejected
45 , testCase "inbound/add-route.json API response parsing" testRouteAdd
45 , testCase "inbound/add-route.json API response parsing" testRouteAdd
46 , testCase "inbound/add-domain.json API response parsing" testDomainAdd
46 , testCase "inbound/add-domain.json API response parsing" testDomainAdd
47− , testCase "senders/verify-domain.json API response parsing" testVerifyDomain
48− , testCase "webhooks/add.json API response parsing" testWebhookAdd
49 ]
47 ]
50 ]
48 ]
test/RawData.hs−27
@@ -228,30 +228,3 @@ routeAdd= [r|
228 "url": "http://example.com/webhook-url"
228 "url": "http://example.com/webhook-url"
229}
229}
230|]
230|]
231−
232−domainVerify = [r|
233−{
234− "status": "example status",
235− "domain": "example domain",
236− "email": "email@domain.com"
237−}
238−|]
239−
240−webhookAdd = [r|
241−{
242− "key": "example key",
243− "url": "http://example/webhook-url",
244− "description": "My Example Webhook",
245− "events": [
246− "send",
247− "deferral",
248− "hard_bounce",
249− "soft_bounce",
250− "open",
251− "click",
252− "spam",
253− "unsub",
254− "reject"
255− ]
256−}
257−|]
test/Tests.hs−19
@@ -6,10 +6,8 @@ import qualified Data.ByteString.Char8 as C8
6import Data.Either
6import Data.Either
7import Network.API.Mandrill.Inbound
7import Network.API.Mandrill.Inbound
8import Network.API.Mandrill.Messages.Types
8import Network.API.Mandrill.Messages.Types
9−import Network.API.Mandrill.Senders
10import Network.API.Mandrill.Types
9import Network.API.Mandrill.Types
11import Network.API.Mandrill.Users.Types
10import Network.API.Mandrill.Users.Types
12−import Network.API.Mandrill.Webhooks
13import RawData
11import RawData
14import Test.Tasty.HUnit
12import Test.Tasty.HUnit
15
13
@@ -69,20 +67,3 @@ testRouteAdd =
69 where
67 where
70 parsePayload :: Either String RouteAddResponse
68 parsePayload :: Either String RouteAddResponse
71 parsePayload = eitherDecodeStrict . C8.pack $ routeAdd
69 parsePayload = eitherDecodeStrict . C8.pack $ routeAdd
72−
73−testVerifyDomain :: Assertion
74−testVerifyDomain =
75− assertBool ("senders/verify-domain.json" ++ show parsePayload)
76− (isRight parsePayload)
77− where
78− parsePayload :: Either String VerifyDomainResponse
79− parsePayload = eitherDecodeStrict . C8.pack $ domainVerify
80−
81−
82−testWebhookAdd :: Assertion
83−testWebhookAdd =
84− assertBool ("webhooks/add.json (request): parsing failed" ++ show parsePayload)
85− (isRight parsePayload)
86− where
87− parsePayload :: Either String WebhookAddRq
88− parsePayload = eitherDecodeStrict . C8.pack $ webhookAdd