Skip to content

Commit 8b8edc2

Browse files
committed
fix issue: createItem not serializing Nothings correctly
1 parent dc514a0 commit 8b8edc2

File tree

3 files changed

+36
-8
lines changed

3 files changed

+36
-8
lines changed

rollbar-client/rollbar-client.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,5 @@ test-suite spec
9999
, text
100100
, unordered-containers
101101
, yaml
102+
, bytestring
102103
default-language: Haskell2010

rollbar-client/src/Rollbar/Client/Item.hs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ instance ToJSON Item where
9797
let dataFields =
9898
[ "environment" .= itemEnvironment
9999
, "body" .= itemBody
100-
, "level" .= itemLevel
101-
, "platform" .= itemPlatform
102-
, "language" .= itemLanguage
103-
, "framework" .= itemFramework
104-
, "request" .= itemRequest
105-
, "server" .= itemServer
106100
, "notifier" .= itemNotifier
107101
] ++ catMaybes
108-
[ ("custom" .=) <$> custom
102+
[ ("level" .=) <$> itemLevel
103+
, ("platform" .=) <$> itemPlatform
104+
, ("language" .=) <$> itemLanguage
105+
, ("framework" .=) <$> itemFramework
106+
, ("request" .=) <$> itemRequest
107+
, ("server" .=) <$> itemServer
108+
, ("custom" .=) <$> custom
109109
, ("fingerprint" .=) <$> fingerprint
110110
, ("title" .=) <$> title
111111
, ("uuid" .=) <$> uuid

rollbar-client/test/Rollbar/ClientSpec.hs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import qualified Data.Aeson.KeyMap as KM
1111

1212
import Control.Monad.Reader
1313
import Data.Aeson
14-
import Data.Text
14+
import Data.Text as T
1515
import Data.Yaml.Config
1616
import Rollbar.Client
1717
import Test.Hspec
18+
import Data.Text.Encoding
19+
import Data.ByteString as DB
1820

1921
data Package = Package
2022
{ packageName :: Text
@@ -143,3 +145,28 @@ spec = do
143145
reportDeploy deploy
144146

145147
deployId `shouldSatisfy` (> 0)
148+
149+
describe "ToJSON Item" $ do
150+
context "when serializing to JSON" $ do
151+
let item = Item
152+
{ itemEnvironment = Environment "test"
153+
, itemBody = Body { bodyPayload = PayloadMessage (Message "Test" mempty) }
154+
, itemLevel = Just LevelInfo
155+
, itemPlatform = Just "haskell"
156+
, itemLanguage = Just "Haskell"
157+
, itemFramework = Just "GHC"
158+
, itemRequest = Nothing
159+
, itemServer = Nothing
160+
, custom = Just mempty
161+
, title = Nothing
162+
, uuid = Just "12345"
163+
, fingerprint = Nothing
164+
, itemNotifier = Notifier "rollbar-client" "1.1.0"
165+
}
166+
jsonItem = decodeUtf8 $ toStrict $ encode item
167+
168+
it "omits fields if they are Nothing values" $
169+
T.unpack jsonItem `shouldNotContain` "\"server\""
170+
171+
it "includes fields if they are Just values" $
172+
T.unpack jsonItem `shouldContain` "\"platform\":\"haskell\""

0 commit comments

Comments
 (0)