Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
purescript-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
148
Issues
148
List
Board
Labels
Milestones
Merge Requests
2
Merge Requests
2
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gargantext
purescript-gargantext
Commits
5693afde
Verified
Commit
5693afde
authored
Jul 23, 2025
by
Przemyslaw Kaminski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[BREAKING, phylo] one more breaking TimeUnit JSON modification
Also, added tests to make sure (de)serialization is correct
parent
daf1e561
Pipeline
#7772
passed with stages
in 26 minutes and 39 seconds
Changes
5
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
97 additions
and
56 deletions
+97
-56
spago.lock
spago.lock
+1
-0
spago.yaml
spago.yaml
+1
-0
API.purs
src/Gargantext/Components/PhyloExplorer/API.purs
+28
-44
Spec.purs
test/Test/Gargantext/Data/Spec.purs
+8
-12
Spec.purs
test/Test/Gargantext/JSON/Spec.purs
+59
-0
No files found.
spago.lock
View file @
5693afde
...
...
@@ -414,6 +414,7 @@
},
"test": {
"dependencies": [
"quickcheck",
"spec",
"spec-discovery",
"spec-quickcheck"
...
...
spago.yaml
View file @
5693afde
...
...
@@ -161,6 +161,7 @@ package:
test
:
main
:
Test.Main
dependencies
:
-
quickcheck
-
spec
-
spec-discovery
-
spec-quickcheck
src/Gargantext/Components/PhyloExplorer/API.purs
View file @
5693afde
...
...
@@ -21,6 +21,7 @@ import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..))
import Data.Newtype (class Newtype)
import Data.Show.Generic (genericShow)
import Foreign as Foreign
import Gargantext.AsyncTasks as GAT
import Gargantext.Components.PhyloExplorer.JSON (PhyloJSON)
import Gargantext.Components.PhyloExplorer.Types (PhyloSet, parseToPhyloSet)
...
...
@@ -103,54 +104,36 @@ instance Show TimeUnit where
show = genericShow
instance JSON.ReadForeign TimeUnit where
readImpl = JSONG.untaggedSumRep
readImpl f = do
{ tag, time_unit_criteria: tuc } <-
JSON.readImpl f
:: Foreign.F
{ tag :: String
, time_unit_criteria :: TimeUnitCriteria
}
case tag of
"Epoch" -> pure $ Epoch tuc
"Year" -> pure $ Year tuc
"Month" -> pure $ Month tuc
"Day" -> pure $ Day tuc
"Hour" -> pure $ Hour tuc
"Minute" -> pure $ Minute tuc
"Second" -> pure $ Second tuc
_ ->
Foreign.fail $ Foreign.ForeignError $ "deserialization for tag '" <> tag <> "' not implemented"
instance JSON.WriteForeign TimeUnit where
writeImpl = case _ of
Epoch
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseEpoch) o
Year
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseYear) o
Month
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseMonth) o
Week
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseWeek) o
Day
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseDay) o
Hour
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseHour) o
Minute
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseMinute) o
Second
(TimeUnitCriteria o) -> (JSON.writeImpl <<< parseSecond) o
Epoch
tuc -> (JSON.writeImpl <<< mkRecord "Epoch") tuc
Year
tuc -> (JSON.writeImpl <<< mkRecord "Year") tuc
Month
tuc -> (JSON.writeImpl <<< mkRecord "Month") tuc
Week
tuc -> (JSON.writeImpl <<< mkRecord "Week") tuc
Day
tuc -> (JSON.writeImpl <<< mkRecord "Day") tuc
Hour
tuc -> (JSON.writeImpl <<< mkRecord "Hour") tuc
Minute
tuc -> (JSON.writeImpl <<< mkRecord "Minute") tuc
Second
tuc -> (JSON.writeImpl <<< mkRecord "Second") tuc
where
-- TODO It would be nice to refactor these functions, however it's
-- not that trivial, because we would have to combine `Symbol`s at
-- the type level25
parseEpoch =
Record.insert
(Proxy :: Proxy "tag")
"Epoch"
parseYear =
Record.insert
(Proxy :: Proxy "tag")
"Year"
parseMonth =
Record.insert
(Proxy :: Proxy "tag")
"Month"
parseWeek =
Record.insert
(Proxy :: Proxy "tag")
"Week"
parseDay =
Record.insert
(Proxy :: Proxy "tag")
"Day"
parseHour =
Record.insert
(Proxy :: Proxy "tag")
"Hour"
parseMinute =
Record.insert
(Proxy :: Proxy "tag")
"Minute"
parseSecond =
Record.insert
(Proxy :: Proxy "tag")
"Second"
mkRecord name tuc = { "tag": name, "time_unit_criteria": tuc }
data ReflexiveTimeUnit
= Epoch_
...
...
@@ -193,6 +176,7 @@ instance Show TimeUnitCriteria where
show = genericShow
derive newtype instance JSON.ReadForeign TimeUnitCriteria
derive newtype instance JSON.WriteForeign TimeUnitCriteria
data Clique
= FIS
...
...
test/Test/Gargantext/Data/Spec.purs
View file @
5693afde
module Test.Gargantext.Data.Spec where
import Prelude
import Data.Array (index)
import Data.Foldable (all)
import Data.Maybe (Maybe(..), isJust)
import Data.String (drop, stripPrefix, Pattern(..))
import Data.Tuple (Tuple(..))
import Test.Spec (Spec, describe, it)
import Test.Spec.Assertions (shouldEqual)
import Test.Spec.QuickCheck (quickCheck')
import Gargantext.Data.Array as GDA
spec :: Spec Unit
spec =
describe "G.D.Array" do
it "swap works" do
GDA.swap 1 0 [0, 1, 2] `shouldEqual` [1, 0, 2]
GDA.swap 1 2 [0, 1, 2] `shouldEqual` [0, 2, 1]
it "slidingWindow works" do
GDA.slidingWindow [1, 2, 3, 4, 5] 2 `shouldEqual` [[1, 2], [2, 3], [3, 4], [4, 5]]
describe "G.Data" do
describe "Array" $ do
it "swap works" do
GDA.swap 1 0 [0, 1, 2] `shouldEqual` [1, 0, 2]
GDA.swap 1 2 [0, 1, 2] `shouldEqual` [0, 2, 1]
it "slidingWindow works" do
GDA.slidingWindow [1, 2, 3, 4, 5] 2 `shouldEqual` [[1, 2], [2, 3], [3, 4], [4, 5]]
test/Test/Gargantext/JSON/Spec.purs
0 → 100644
View file @
5693afde
module Test.Gargantext.JSON.Spec where
import Prelude
import Data.Array.NonEmpty as NEA
import Data.Generic.Rep (class Generic)
import Data.Maybe (Maybe(..), fromJust)
import Partial.Unsafe (unsafePartial)
import Simple.JSON as JSON
import Test.QuickCheck.Arbitrary (class Arbitrary, arbitrary)
import Test.QuickCheck.Gen (oneOf)
import Test.Spec (Spec, describe, it)
import Test.Spec.QuickCheck (quickCheck')
import Gargantext.Components.PhyloExplorer.API (TimeUnitCriteria(..), TimeUnit(..))
spec :: Spec Unit
spec =
describe "G.JSON" do
describe "Phylo" $ do
it "TimeUnitCriteria (de)serialization works" do
quickCheck' 100 $
\(ATimeUnitCriteria tuc) ->
JSON.readJSON_ (JSON.writeJSON tuc) == Just tuc
-- newtype wrappers so we don't declare Arbitrary in code
newtype ATimeUnitCriteria = ATimeUnitCriteria TimeUnitCriteria
derive instance Generic ATimeUnitCriteria _
derive instance Eq ATimeUnitCriteria
instance Arbitrary ATimeUnitCriteria where
arbitrary = do
period <- arbitrary
step <- arbitrary
matchingFrame <- arbitrary
pure $ ATimeUnitCriteria $ TimeUnitCriteria { period, step, matchingFrame }
unATimeUnitCriteria :: ATimeUnitCriteria -> TimeUnitCriteria
unATimeUnitCriteria (ATimeUnitCriteria tuc) = tuc
newtype ATimeUnit = ATimeUnit TimeUnit
derive instance Generic ATimeUnit _
derive instance Eq ATimeUnit
instance Arbitrary ATimeUnit where
arbitrary = do
oneOf $ unsafePartial fromJust $
NEA.fromArray [
(ATimeUnit <<< Epoch <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Year <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Month <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Week <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Day <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Hour <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Minute <<< unATimeUnitCriteria) <$> arbitrary
, (ATimeUnit <<< Second <<< unATimeUnitCriteria) <$> arbitrary
]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment