@@ -8,7 +8,7 @@ import Data.Codec ((<~<))
8
8
import Data.Codec.Argonaut.Common as JA
9
9
import Data.Codec.Argonaut.Migration as JAM
10
10
import Data.Either (Either (..))
11
- import Data.Maybe (Maybe (..))
11
+ import Data.Maybe (Maybe (..), fromMaybe , maybe )
12
12
import Data.String.Gen (genAsciiString )
13
13
import Data.StrMap as SM
14
14
import Test.QuickCheck (Result (..), QC , quickCheck , (===))
@@ -23,6 +23,15 @@ main = do
23
23
log " Checking addDefaultField preserves an existing value if it's already present"
24
24
quickCheck propDefaultFieldPreservesOriginal
25
25
26
+ log " Checking updateField updates an existing value if it's already present"
27
+ quickCheck propUpdateFieldAltersOriginal
28
+
29
+ log " Checking addDefaultOrUpdateField adds a field if it is missing"
30
+ quickCheck propAddDefaultOrUpdateField
31
+
32
+ log " Checking addDefaultOrUpdateField updates an existing value if it's already present"
33
+ quickCheck propAddDefaultOrUpdateFieldAltersOriginal
34
+
26
35
log " Checking renameField renames a field"
27
36
quickCheck propDefaultFieldPreservesOriginal
28
37
@@ -43,6 +52,32 @@ propDefaultFieldPreservesOriginal = do
43
52
pure $ testMigrationCodec { key: missingKey, expectedValue, input }
44
53
$ JA .jobject <~< JAM .addDefaultField missingKey unexpectedValue
45
54
55
+ propUpdateFieldAltersOriginal ∷ Gen Result
56
+ propUpdateFieldAltersOriginal = do
57
+ let expectedValue = J .fromString " it's here"
58
+ let unexpectedValue = J .fromString " it shouldn't be here"
59
+ updateKey ← genAsciiString
60
+ input ← SM .insert updateKey unexpectedValue <$> genJObject
61
+ pure $ testMigrationCodec { key: updateKey, expectedValue, input }
62
+ $ JA .jobject <~< JAM .updateField updateKey (const expectedValue)
63
+
64
+ propAddDefaultOrUpdateField ∷ Gen Result
65
+ propAddDefaultOrUpdateField = do
66
+ let expectedValue = J .fromString " it's here"
67
+ missingKey ← genAsciiString
68
+ input ← SM .delete missingKey <$> genJObject
69
+ pure $ testMigrationCodec { key: missingKey, expectedValue, input }
70
+ $ JA .jobject <~< JAM .addDefaultOrUpdateField missingKey (fromMaybe expectedValue)
71
+
72
+ propAddDefaultOrUpdateFieldAltersOriginal ∷ Gen Result
73
+ propAddDefaultOrUpdateFieldAltersOriginal = do
74
+ let expectedValue = J .fromString " it's here"
75
+ let unexpectedValue = J .fromString " it shouldn't be here"
76
+ updateKey ← genAsciiString
77
+ input ← SM .insert updateKey unexpectedValue <$> genJObject
78
+ pure $ testMigrationCodec { key: updateKey, expectedValue, input }
79
+ $ JA .jobject <~< JAM .addDefaultOrUpdateField updateKey (maybe unexpectedValue (const expectedValue))
80
+
46
81
propRenameField ∷ Gen Result
47
82
propRenameField = do
48
83
let expectedValue = J .fromString " it's here"
0 commit comments