Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
haskell-gargantext
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
159
Issues
159
List
Board
Labels
Milestones
Merge Requests
9
Merge Requests
9
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
haskell-gargantext
Commits
6f91bebf
Commit
6f91bebf
authored
Oct 10, 2024
by
Alexandre Delanoë
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev-websockets-node-update' into dev
parents
163304df
a48fe0c8
Changes
33
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
164 additions
and
133 deletions
+164
-133
README.md
README.md
+5
-1
Main.hs
bin/gargantext-central-exchange/Main.hs
+2
-2
Invitations.hs
bin/gargantext-cli/CLI/Invitations.hs
+1
-1
gargantext.cabal
gargantext.cabal
+9
-9
EnvTypes.hs
src/Gargantext/API/Admin/EnvTypes.hs
+4
-4
Settings.hs
src/Gargantext/API/Admin/Settings.hs
+2
-2
New.hs
src/Gargantext/API/Node/New.hs
+1
-1
Share.hs
src/Gargantext/API/Node/Share.hs
+1
-1
Prelude.hs
src/Gargantext/API/Prelude.hs
+1
-1
Named.hs
src/Gargantext/API/Routes/Named.hs
+1
-1
Named.hs
src/Gargantext/API/Server/Named.hs
+1
-1
Notifications.hs
src/Gargantext/Core/Notifications.hs
+2
-2
CentralExchange.hs
src/Gargantext/Core/Notifications/CentralExchange.hs
+3
-3
Types.hs
src/Gargantext/Core/Notifications/CentralExchange/Types.hs
+2
-2
Dispatcher.hs
src/Gargantext/Core/Notifications/Dispatcher.hs
+4
-4
Subscriptions.hs
...Gargantext/Core/Notifications/Dispatcher/Subscriptions.hs
+3
-3
Types.hs
src/Gargantext/Core/Notifications/Dispatcher/Types.hs
+10
-4
WebSocket.hs
src/Gargantext/Core/Notifications/Dispatcher/WebSocket.hs
+5
-5
Nanomsg.hs
src/Gargantext/Core/Notifications/Nanomsg.hs
+2
-2
Env.hs
src/Gargantext/Core/Worker/Env.hs
+2
-2
Delete.hs
src/Gargantext/Database/Action/Delete.hs
+1
-1
Flow.hs
src/Gargantext/Database/Action/Flow.hs
+1
-1
Share.hs
src/Gargantext/Database/Action/Share.hs
+19
-9
Prelude.hs
src/Gargantext/Database/Prelude.hs
+1
-1
Update.hs
src/Gargantext/Database/Query/Table/Node/Update.hs
+1
-1
API.hs
test/Test/API.hs
+4
-3
Notifications.hs
test/Test/API/Notifications.hs
+27
-28
Setup.hs
test/Test/API/Setup.hs
+12
-2
AsyncUpdates.hs
test/Test/Core/AsyncUpdates.hs
+4
-4
Instances.hs
test/Test/Instances.hs
+2
-2
Jobs.hs
test/Test/Utils/Jobs.hs
+22
-21
Main.hs
test/drivers/hspec/Main.hs
+6
-6
Main.hs
test/drivers/tasty/Main.hs
+3
-3
No files found.
README.md
View file @
6f91bebf
...
...
@@ -233,10 +233,14 @@ Or, from "outside":
$
nix-shell
--run
"cabal v2-test --test-show-details=streaming"
```
If you want to run particular tests, use:
If you want to run particular tests, use
(for Tasty)
:
```
shell
cabal v2-test garg-test-tasty
--test-show-details
=
streaming
--test-option
=
--pattern
=
'/job status update and tracking/
```
or (for Hspec):
```
shell
cabal v2-test garg-test-hspec
--test-show-details
=
streaming
--test-option
=
--match
=
'/Dispatcher, Central Exchange, WebSockets/'
```
### CI
...
...
bin/gargantext-central-exchange/Main.hs
View file @
6f91bebf
...
...
@@ -17,8 +17,8 @@ import Control.Concurrent (threadDelay)
import
Control.Monad
(
join
,
mapM_
)
import
Data.ByteString.Char8
qualified
as
C
import
Data.Text
qualified
as
T
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange
(
gServer
)
import
Gargantext.Core.
AsyncUpdate
s.Constants
(
ceBind
,
ceConnect
)
import
Gargantext.Core.
Notification
s.CentralExchange
(
gServer
)
import
Gargantext.Core.
Notification
s.Constants
(
ceBind
,
ceConnect
)
import
Gargantext.Prelude
import
Nanomsg
import
Options.Applicative
...
...
bin/gargantext-cli/CLI/Invitations.hs
View file @
6f91bebf
...
...
@@ -21,7 +21,7 @@ import Gargantext.API.Errors.Types
import
Gargantext.API.Node
()
-- instances only
import
Gargantext.API.Node.Share
qualified
as
Share
import
Gargantext.API.Node.Share.Types
qualified
as
Share
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.NLP
(
HasNLPServer
)
import
Gargantext.Core.Types
import
Gargantext.Core.Types.Individu
(
User
(
..
))
...
...
gargantext.cabal
View file @
6f91bebf
...
...
@@ -164,14 +164,6 @@ library
Gargantext.API.Types
Gargantext.API.Viz.Types
Gargantext.Core
Gargantext.Core.AsyncUpdates
Gargantext.Core.AsyncUpdates.CentralExchange
Gargantext.Core.AsyncUpdates.CentralExchange.Types
Gargantext.Core.AsyncUpdates.Dispatcher
Gargantext.Core.AsyncUpdates.Dispatcher.Subscriptions
Gargantext.Core.AsyncUpdates.Dispatcher.Types
Gargantext.Core.AsyncUpdates.Dispatcher.WebSocket
Gargantext.Core.AsyncUpdates.Nanomsg
Gargantext.Core.Config
Gargantext.Core.Config.Ini.Ini
Gargantext.Core.Config.Ini.Mail
...
...
@@ -187,6 +179,14 @@ library
Gargantext.Core.NodeStory
Gargantext.Core.NodeStory.DB
Gargantext.Core.NodeStory.Types
Gargantext.Core.Notifications
Gargantext.Core.Notifications.CentralExchange
Gargantext.Core.Notifications.CentralExchange.Types
Gargantext.Core.Notifications.Dispatcher
Gargantext.Core.Notifications.Dispatcher.Subscriptions
Gargantext.Core.Notifications.Dispatcher.Types
Gargantext.Core.Notifications.Dispatcher.WebSocket
Gargantext.Core.Notifications.Nanomsg
Gargantext.Core.Text
Gargantext.Core.Text.Context
Gargantext.Core.Text.Corpus.API
...
...
@@ -797,12 +797,12 @@ test-suite garg-test-tasty
other-modules:
CLI.Phylo.Common
Paths_gargantext
Test.Core.AsyncUpdates
Test.API.Private.Share
Test.API.Authentication
Test.API.Routes
Test.API.Setup
Test.API.UpdateList
Test.Core.Notifications
Test.Core.Similarity
Test.Core.Text
Test.Core.Text.Corpus.Query
...
...
src/Gargantext/API/Admin/EnvTypes.hs
View file @
6f91bebf
...
...
@@ -40,10 +40,10 @@ import Gargantext.API.Admin.Orchestrator.Types
import
Gargantext.API.Errors.Types
import
Gargantext.API.Job
import
Gargantext.API.Prelude
(
GargM
,
IsGargServer
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher
(
Dispatcher
)
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
(
HasDispatcher
(
..
))
import
Gargantext.Core.
Notification
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
Notification
s.Dispatcher
(
Dispatcher
)
import
Gargantext.Core.
Notification
s.Dispatcher.Types
(
HasDispatcher
(
..
))
import
Gargantext.Core.Config
(
GargConfig
(
..
),
gc_mail_config
,
gc_nlp_config
,
HasJWTSettings
(
..
),
HasConfig
(
..
))
import
Gargantext.Core.Mail.Types
(
HasMail
,
mailSettings
)
import
Gargantext.Core.NLP
(
HasNLPServer
(
..
),
nlpServerMap
)
...
...
src/Gargantext/API/Admin/Settings.hs
View file @
6f91bebf
...
...
@@ -28,8 +28,8 @@ import Database.PostgreSQL.Simple (Connection, connect, close, ConnectInfo)
import
Gargantext.API.Admin.EnvTypes
import
Gargantext.API.Errors.Types
import
Gargantext.API.Prelude
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher
qualified
as
D
import
Gargantext.Core.
Notification
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
Notification
s.Dispatcher
qualified
as
D
import
Gargantext.Core.Config
(
GargConfig
(
..
),
gc_jobs
,
gc_frontend_config
,
hasConfig
)
import
Gargantext.Core.Config.Types
(
PortNumber
,
SettingsFile
(
..
),
fc_appPort
,
jc_js_job_timeout
,
jc_js_id_timeout
,
jwtSettings
)
import
Gargantext.Core.Config.Utils
(
readConfig
)
...
...
src/Gargantext/API/Node/New.hs
View file @
6f91bebf
...
...
@@ -27,7 +27,7 @@ import Gargantext.API.Errors.Types
import
Gargantext.API.Node.New.Types
import
Gargantext.API.Prelude
import
Gargantext.API.Routes.Named.Node
qualified
as
Named
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CE
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CE
import
Gargantext.Database.Action.Flow.Types
import
Gargantext.Database.Action.Node
import
Gargantext.Database.Admin.Types.Node
...
...
src/Gargantext/API/Node/Share.hs
View file @
6f91bebf
...
...
@@ -20,7 +20,7 @@ import Data.Text qualified as Text
import
Gargantext.API.Node.Share.Types
import
Gargantext.API.Prelude
import
Gargantext.API.Routes.Named.Share
qualified
as
Named
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
(
HasCentralExchangeNotification
)
import
Gargantext.Core.
Notification
s.CentralExchange.Types
(
HasCentralExchangeNotification
)
import
Gargantext.Core.NLP
(
HasNLPServer
)
import
Gargantext.Core.Types.Individu
(
User
(
..
),
arbitraryUsername
)
import
Gargantext.Database.Action.Share
(
ShareNodeWith
(
..
))
...
...
src/Gargantext/API/Prelude.hs
View file @
6f91bebf
...
...
@@ -25,7 +25,7 @@ import Data.Aeson.Types
import
Gargantext.API.Admin.Auth.Types
(
AuthenticationError
)
import
Gargantext.API.Admin.Orchestrator.Types
import
Gargantext.API.Errors.Class
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
(
HasCentralExchangeNotification
)
import
Gargantext.Core.
Notification
s.CentralExchange.Types
(
HasCentralExchangeNotification
)
import
Gargantext.Core.Config
(
HasConfig
)
import
Gargantext.Core.Mail.Types
(
HasMail
)
import
Gargantext.Core.NLP
(
HasNLPServer
)
...
...
src/Gargantext/API/Routes/Named.hs
View file @
6f91bebf
...
...
@@ -27,7 +27,7 @@ import Gargantext.API.GraphQL
import
Gargantext.API.Routes.Named.Private
import
Gargantext.API.Routes.Named.Public
import
Gargantext.API.Routes.Types
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.WebSocket
qualified
as
Dispatcher
import
Gargantext.Core.
Notification
s.Dispatcher.WebSocket
qualified
as
Dispatcher
import
Servant.API
((
:>
),
(
:-
),
JSON
,
ReqBody
,
Post
,
Get
,
QueryParam
)
import
Servant.API.Description
(
Summary
)
import
Servant.API.NamedRoutes
...
...
src/Gargantext/API/Server/Named.hs
View file @
6f91bebf
...
...
@@ -22,7 +22,7 @@ import Gargantext.API.Routes.Named
import
Gargantext.API.Server.Named.Public
(
serverPublicGargAPI
)
import
Gargantext.API.Swagger
(
swaggerDoc
)
import
Gargantext.API.ThrowAll
(
serverPrivateGargAPI
)
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.WebSocket
qualified
as
Dispatcher
import
Gargantext.Core.
Notification
s.Dispatcher.WebSocket
qualified
as
Dispatcher
import
Gargantext.Core.Config
(
gc_frontend_config
,
hasConfig
)
import
Gargantext.Core.Config.Types
(
fc_url_backend_api
)
import
Gargantext.Prelude
hiding
(
Handler
,
catch
)
...
...
src/Gargantext/Core/
AsyncUpdate
s.hs
→
src/Gargantext/Core/
Notification
s.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s
Module : Gargantext.Core.
Notification
s
Description : Asynchronous updates to the frontend
Copyright : (c) CNRS, 2024-Present
License : AGPL + CECILL v3
...
...
@@ -10,7 +10,7 @@ Portability : POSIX
{-# OPTIONS_GHC -Wno-deprecations #-}
-- FIXME(cgenie) undefined remains in code
module
Gargantext.Core.
AsyncUpdate
s
module
Gargantext.Core.
Notification
s
where
import
Gargantext.Core.Types
(
NodeId
,
UserId
)
...
...
src/Gargantext/Core/
AsyncUpdate
s/CentralExchange.hs
→
src/Gargantext/Core/
Notification
s/CentralExchange.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.CentralExchange
Module : Gargantext.Core.
Notification
s.CentralExchange
Description : Central exchange (asynchronous notifications)
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -14,7 +14,7 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
-}
module
Gargantext.Core.
AsyncUpdate
s.CentralExchange
(
module
Gargantext.Core.
Notification
s.CentralExchange
(
gServer
,
notify
)
where
...
...
@@ -25,8 +25,8 @@ import Data.Aeson qualified as Aeson
import
Data.ByteString.Lazy
qualified
as
BSL
import
Data.Text
qualified
as
T
import
Data.Text.Encoding
qualified
as
TE
import
Gargantext.Core.AsyncUpdates.CentralExchange.Types
import
Gargantext.Core.Config.Types
(
NotificationsConfig
(
..
))
import
Gargantext.Core.Notifications.CentralExchange.Types
import
Gargantext.Prelude
import
Gargantext.System.Logging
(
LogLevel
(
..
),
withLogger
,
logMsg
)
import
Nanomsg
(
Pull
(
..
),
Push
(
..
),
bind
,
connect
,
recv
,
send
,
withSocket
)
...
...
src/Gargantext/Core/
AsyncUpdate
s/CentralExchange/Types.hs
→
src/Gargantext/Core/
Notification
s/CentralExchange/Types.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
Module : Gargantext.Core.
Notification
s.CentralExchange.Types
Description : Types for asynchronous notifications (central exchange)
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -13,7 +13,7 @@ Docs:
https://dev.sub.gargantext.org/#/share/Notes/187918
-}
module
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
where
module
Gargantext.Core.
Notification
s.CentralExchange.Types
where
import
Codec.Binary.UTF8.String
qualified
as
CBUTF8
import
Data.Aeson
((
.:
),
(
.=
),
object
,
withObject
)
...
...
src/Gargantext/Core/
AsyncUpdate
s/Dispatcher.hs
→
src/Gargantext/Core/
Notification
s/Dispatcher.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.Dispatcher
Module : Gargantext.Core.
Notification
s.Dispatcher
Description : Dispatcher (handles websocket connections, accepts message from central exchange)
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -16,7 +16,7 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
{-# LANGUAGE TypeOperators #-}
module
Gargantext.Core.
AsyncUpdate
s.Dispatcher
(
module
Gargantext.Core.
Notification
s.Dispatcher
(
Dispatcher
-- opaque
,
newDispatcher
,
terminateDispatcher
...
...
@@ -32,9 +32,9 @@ import Data.Aeson qualified as Aeson
import
Data.ByteString.Lazy
qualified
as
BSL
import
Data.Text
qualified
as
T
import
DeferredFolds.UnfoldlM
qualified
as
UnfoldlM
import
Gargantext.Core.AsyncUpdates.CentralExchange.Types
qualified
as
CETypes
import
Gargantext.Core.AsyncUpdates.Dispatcher.Types
import
Gargantext.Core.Config.Types
(
NotificationsConfig
(
..
))
import
Gargantext.Core.Notifications.CentralExchange.Types
qualified
as
CETypes
import
Gargantext.Core.Notifications.Dispatcher.Types
import
Gargantext.Prelude
import
Gargantext.System.Logging
(
LogLevel
(
DEBUG
),
withLogger
,
logMsg
)
import
Nanomsg
(
Pull
(
..
),
bind
,
recv
,
withSocket
)
...
...
src/Gargantext/Core/
AsyncUpdate
s/Dispatcher/Subscriptions.hs
→
src/Gargantext/Core/
Notification
s/Dispatcher/Subscriptions.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.Dispatcher.Subscriptions
Module : Gargantext.Core.
Notification
s.Dispatcher.Subscriptions
Description : Dispatcher (manage websocket subscriptions)
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -15,10 +15,10 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
-}
module
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Subscriptions
where
module
Gargantext.Core.
Notification
s.Dispatcher.Subscriptions
where
import
DeferredFolds.UnfoldlM
qualified
as
UnfoldlM
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
import
Gargantext.Core.
Notification
s.Dispatcher.Types
import
Gargantext.Prelude
import
StmContainers.Set
as
SSet
...
...
src/Gargantext/Core/
AsyncUpdate
s/Dispatcher/Types.hs
→
src/Gargantext/Core/
Notification
s/Dispatcher/Types.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
Module : Gargantext.Core.
Notification
s.Dispatcher.Types
Description : Dispatcher (handles websocket connections, accepts message from central exchange)
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -16,7 +16,7 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
{-# OPTIONS_GHC -fno-warn-unused-matches -fno-warn-unused-imports #-}
module
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
where
module
Gargantext.Core.
Notification
s.Dispatcher.Types
where
import
Codec.Binary.UTF8.String
qualified
as
CBUTF8
import
Control.Concurrent.Async
qualified
as
Async
...
...
@@ -32,7 +32,7 @@ import Data.UUID.V4 as UUID
import
Gargantext.API.Admin.Auth.Types
(
AuthenticatedUser
(
_auth_user_id
))
import
Gargantext.API.Admin.Orchestrator.Types
(
JobLog
)
import
Gargantext.API.Prelude
(
IsGargServer
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CETypes
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CETypes
import
Gargantext.Core.Types
(
NodeId
,
UserId
)
import
Gargantext.Prelude
import
GHC.Conc
(
TVar
,
newTVarIO
,
readTVar
,
writeTVar
)
...
...
@@ -215,4 +215,10 @@ instance ToJSON Notification where
,
"message"
.=
toJSON
message
])
]
-- We don't need to decode notifications, this is for tests only
instance
FromJSON
Notification
where
parseJSON
=
Aeson
.
withObject
"Notification"
$
\
o
->
do
n
<-
o
.:
"notification"
topic
<-
n
.:
"topic"
message
<-
n
.:
"message"
pure
$
Notification
topic
message
src/Gargantext/Core/
AsyncUpdate
s/Dispatcher/WebSocket.hs
→
src/Gargantext/Core/
Notification
s/Dispatcher/WebSocket.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.Dispatcher.WebSocket
Module : Gargantext.Core.
Notification
s.Dispatcher.WebSocket
Description : Dispatcher websocket server
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -16,7 +16,7 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
{-# LANGUAGE TypeOperators #-}
module
Gargantext.Core.
AsyncUpdate
s.Dispatcher.WebSocket
where
module
Gargantext.Core.
Notification
s.Dispatcher.WebSocket
where
import
Control.Concurrent.Async
qualified
as
Async
import
Control.Lens
(
view
)
...
...
@@ -24,9 +24,9 @@ import Data.Aeson qualified as Aeson
import
Data.UUID.V4
as
UUID
import
Gargantext.API.Admin.Auth.Types
(
AuthenticatedUser
(
_auth_user_id
))
import
Gargantext.API.Prelude
(
IsGargServer
)
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Subscriptions
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher
(
Dispatcher
,
dispatcherSubscriptions
)
import
Gargantext.Core.
Notification
s.Dispatcher.Subscriptions
import
Gargantext.Core.
Notification
s.Dispatcher.Types
import
Gargantext.Core.
Notification
s.Dispatcher
(
Dispatcher
,
dispatcherSubscriptions
)
import
Gargantext.Core.Config
(
HasJWTSettings
(
jwtSettings
))
import
Gargantext.Prelude
import
Gargantext.System.Logging
(
LogLevel
(
DEBUG
),
logMsg
,
withLogger
)
...
...
src/Gargantext/Core/
AsyncUpdate
s/Nanomsg.hs
→
src/Gargantext/Core/
Notification
s/Nanomsg.hs
View file @
6f91bebf
{-|
Module : Gargantext.Core.
AsyncUpdate
s.Nanomsg
Module : Gargantext.Core.
Notification
s.Nanomsg
Description : Nanomsg utils
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -14,7 +14,7 @@ https://dev.sub.gargantext.org/#/share/Notes/187918
-}
module
Gargantext.Core.
AsyncUpdate
s.Nanomsg
where
module
Gargantext.Core.
Notification
s.Nanomsg
where
import
Gargantext.Prelude
import
Nanomsg
...
...
src/Gargantext/Core/Worker/Env.hs
View file @
6f91bebf
...
...
@@ -27,8 +27,8 @@ import Gargantext.API.Admin.Orchestrator.Types (JobLog, noJobLog)
import
Gargantext.API.Admin.Settings
(
devSettings
,
newPool
)
import
Gargantext.API.Admin.Types
(
HasSettings
(
..
),
Settings
(
..
))
import
Gargantext.API.Prelude
(
GargM
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
Notification
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.Config
(
GargConfig
(
..
),
HasConfig
(
..
))
import
Gargantext.Core.Config.Mail
qualified
as
Mail
import
Gargantext.Core.Config.Utils
(
readConfig
)
...
...
src/Gargantext/Database/Action/Delete.hs
View file @
6f91bebf
...
...
@@ -20,7 +20,7 @@ module Gargantext.Database.Action.Delete
import
Control.Lens
(
view
)
import
Data.Text
(
unpack
)
import
Gargantext.Core
(
HasDBid
(
..
))
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
(
ce_notify
,
CEMessage
(
..
))
import
Gargantext.Core.
Notification
s.CentralExchange.Types
(
ce_notify
,
CEMessage
(
..
))
import
Gargantext.Core.Types.Individu
(
User
(
..
))
import
Gargantext.Database.Action.Share
(
delFolderTeam
)
import
Gargantext.Database.Action.User
(
getUserId
)
...
...
src/Gargantext/Database/Action/Flow.hs
View file @
6f91bebf
...
...
@@ -65,7 +65,7 @@ import Data.Text qualified as T
import
EPO.API.Client.Types
qualified
as
EPO
import
Gargantext.API.Ngrams.Tools
(
getTermsWith
)
import
Gargantext.Core
(
Lang
(
..
),
NLPServerConfig
,
withDefaultLanguage
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
(
HasCentralExchangeNotification
(
ce_notify
),
CEMessage
(
..
))
import
Gargantext.Core.
Notification
s.CentralExchange.Types
(
HasCentralExchangeNotification
(
ce_notify
),
CEMessage
(
..
))
import
Gargantext.Core.Config
(
GargConfig
(
..
),
hasConfig
)
import
Gargantext.Core.Config.Types
(
APIsConfig
(
..
))
import
Gargantext.Core.Ext.IMTUser
(
readFile_Annuaire
)
...
...
src/Gargantext/Database/Action/Share.hs
View file @
6f91bebf
...
...
@@ -18,6 +18,7 @@ module Gargantext.Database.Action.Share
import
Control.Arrow
(
returnA
)
import
Control.Lens
(
view
)
import
Gargantext.Core.Notifications.CentralExchange.Types
qualified
as
CE
import
Gargantext.Core.Types.Individu
(
User
(
..
))
import
Gargantext.Database
import
Gargantext.Database.Action.User
(
getUserId
)
...
...
@@ -104,10 +105,14 @@ shareNodeWith (ShareNodeWith_User NodeFolderShared u) n = do
then
errorWith
"[G.D.A.S.shareNodeWith] Can share to others only"
else
do
folderSharedId
<-
getFolderId
u
NodeFolderShared
insertDB
([
NodeNode
{
_nn_node1_id
=
folderSharedId
ret
<-
insertDB
([
NodeNode
{
_nn_node1_id
=
folderSharedId
,
_nn_node2_id
=
n
,
_nn_score
=
Nothing
,
_nn_category
=
Nothing
}]
::
[
NodeNode
])
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
folderSharedId
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
n
return
ret
shareNodeWith
(
ShareNodeWith_Node
NodeFolderPublic
nId
)
n
=
do
nodeToCheck
<-
getNode
n
...
...
@@ -117,10 +122,15 @@ shareNodeWith (ShareNodeWith_Node NodeFolderPublic nId) n = do
else
do
folderToCheck
<-
getNode
nId
if
hasNodeType
folderToCheck
NodeFolderPublic
then
insertDB
([
NodeNode
{
_nn_node1_id
=
nId
then
do
ret
<-
insertDB
([
NodeNode
{
_nn_node1_id
=
nId
,
_nn_node2_id
=
n
,
_nn_score
=
Nothing
,
_nn_category
=
Nothing
}]
::
[
NodeNode
])
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
nId
void
$
CE
.
ce_notify
$
CE
.
UpdateTreeFirstLevel
n
return
ret
else
errorWith
"[G.D.A.S.shareNodeWith] Can share NodeWith NodeFolderPublic only"
shareNodeWith
_
_
=
errorWith
"[G.D.A.S.shareNodeWith] Not implemented for this NodeType"
...
...
src/Gargantext/Database/Prelude.hs
View file @
6f91bebf
...
...
@@ -28,7 +28,7 @@ import Database.PostgreSQL.Simple qualified as PGS
import
Database.PostgreSQL.Simple.FromField
(
Conversion
,
ResultError
(
ConversionFailed
),
fromField
,
returnError
)
import
Database.PostgreSQL.Simple.Internal
(
Field
)
import
Database.PostgreSQL.Simple.Types
(
Query
(
..
))
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.Config
(
HasConfig
(
..
))
import
Gargantext.Core.Mail.Types
(
HasMail
)
import
Gargantext.Core.NLP
(
HasNLPServer
)
...
...
src/Gargantext/Database/Query/Table/Node/Update.hs
View file @
6f91bebf
...
...
@@ -14,7 +14,7 @@ module Gargantext.Database.Query.Table.Node.Update (Update(..), update)
import
Data.Text
qualified
as
DT
import
Database.PostgreSQL.Simple
(
Only
(
Only
)
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CE
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CE
import
Gargantext.Core.Types
(
Name
)
import
Gargantext.Database.Admin.Types.Node
(
NodeId
,
ParentId
)
import
Gargantext.Database.Query.Table.Node
(
getParentId
)
...
...
test/Test/API.hs
View file @
6f91bebf
module
Test.API
where
import
Gargantext.Core.Notifications.Dispatcher
qualified
as
D
import
Gargantext.Core.Config.Types
(
NotificationsConfig
)
import
Prelude
import
Test.Hspec
...
...
@@ -11,8 +12,8 @@ import qualified Test.API.Notifications as Notifications
import
qualified
Test.API.Private
as
Private
import
qualified
Test.API.UpdateList
as
UpdateList
tests
::
NotificationsConfig
->
Spec
tests
_nc
=
describe
"API"
$
do
tests
::
NotificationsConfig
->
D
.
Dispatcher
->
Spec
tests
nc
dispatcher
=
describe
"API"
$
do
Auth
.
tests
Private
.
tests
GraphQL
.
tests
...
...
@@ -20,4 +21,4 @@ tests _nc = describe "API" $ do
UpdateList
.
tests
-- | TODO This would work if I managed to get forking dispatcher &
-- exchange listeners properly
-- Notifications.tests nc
Notifications
.
tests
nc
dispatcher
test/Test/API/Notifications.hs
View file @
6f91bebf
...
...
@@ -17,61 +17,60 @@ module Test.API.Notifications (
)
where
import
Control.Concurrent
(
forkIO
,
killThread
,
threadDelay
)
import
Control.Concurrent.STM.T
Var
qualified
as
TVar
import
Control.Concurrent.STM.T
Chan
import
Control.Monad.STM
(
atomically
)
import
Data.Aeson
qualified
as
Aeson
import
Gargantext.Core.AsyncUpdates.CentralExchange
qualified
as
CE
import
Gargantext.Core.AsyncUpdates.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.AsyncUpdates.Dispatcher.Types
qualified
as
DT
import
Data.Maybe
(
isJust
)
import
Gargantext.Core.Notifications.CentralExchange
qualified
as
CE
import
Gargantext.Core.Notifications.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.Notifications.Dispatcher
qualified
as
D
import
Gargantext.Core.Notifications.Dispatcher.Types
qualified
as
DT
import
Gargantext.Core.Config.Types
(
NotificationsConfig
(
..
))
import
Network.WebSockets.Client
qualified
as
WS
import
Network.WebSockets.Connection
qualified
as
WS
import
Prelude
import
Test.API.Setup
(
withTestDBAnd
Port
)
-- , setupEnvironment, createAliceAndBob)
import
Test.API.Setup
(
withTestDBAnd
Notifications
)
-- , setupEnvironment, createAliceAndBob)
import
Test.Hspec
import
Test.Instances
()
tests
::
NotificationsConfig
->
Spec
tests
nc
=
sequential
$
aroundAll
withTestDBAndPort
$
do
tests
::
NotificationsConfig
->
D
.
Dispatcher
->
Spec
tests
nc
dispatcher
=
sequential
$
aroundAll
(
withTestDBAndNotifications
dispatcher
)
$
do
describe
"Dispatcher, Central Exchange, WebSockets"
$
do
it
"simple WS notification works"
$
\
((
_testEnv
,
port
),
_
)
->
do
tvar
<-
TVar
.
newTVarIO
Nothing
let
topic
=
DT
.
UpdateTree
0
tchan
<-
newTChanIO
::
IO
(
TChan
(
Maybe
DT
.
Notification
))
-- setup a websocket connection
let
wsConnect
=
do
putStrLn
$
"Creating WS client (port "
<>
show
port
<>
")"
WS
.
runClient
"127.0.0.1"
port
"/ws"
$
\
conn
->
do
WS
.
sendTextData
conn
$
Aeson
.
encode
(
DT
.
WSSubscribe
$
DT
.
UpdateTree
0
)
-- We wait a bit before the server settles
threadDelay
(
100
*
millisecond
)
WS
.
sendTextData
conn
$
Aeson
.
encode
(
DT
.
WSSubscribe
topic
)
d
<-
WS
.
receiveData
conn
putStrLn
(
"received: "
<>
show
d
)
atomically
$
TVar
.
writeTVar
tvar
(
Aeson
.
decode
d
)
putStrLn
"After WS client"
let
dec
=
Aeson
.
decode
d
::
Maybe
DT
.
Notification
atomically
$
writeTChan
tchan
dec
-- atomically $ TVar.writeTVar tvar (Aeson.decode d)
putStrLn
"[WSClient] after"
-- wait a bit to settle
putStrLn
"settling a bit initially"
threadDelay
(
500
*
millisecond
)
threadDelay
(
100
*
millisecond
)
putStrLn
"forking wsConnection"
wsConnection
<-
forkIO
$
wsConnect
-- wait a bit to connect
threadDelay
(
500
*
millisecond
)
putStrLn
"settling a bit for connection"
threadDelay
(
100
*
millisecond
)
threadDelay
(
500
*
millisecond
)
let
msg
=
CET
.
UpdateTreeFirstLevel
0
putStrLn
"Notifying CE"
CE
.
notify
nc
msg
CE
.
notify
nc
$
CET
.
UpdateTreeFirstLevel
0
threadDelay
(
500
*
millisecond
)
putStrLn
"Reading tvar with timeout"
d
<-
TVar
.
readTVarIO
tvar
putStrLn
"Killing wsConnection thread"
-- d <- TVar.readTVarIO tvar
md
<-
atomically
$
readTChan
tchan
killThread
wsConnection
putStrLn
"Checking d"
d
`
shouldBe
`
(
Just
msg
)
md
`
shouldSatisfy
`
isJust
let
(
Just
(
DT
.
Notification
topic'
message'
))
=
md
topic'
`
shouldBe
`
topic
message'
`
shouldBe
`
DT
.
MEmpty
millisecond
::
Int
...
...
test/Test/API/Setup.hs
View file @
6f91bebf
...
...
@@ -15,6 +15,7 @@ import Gargantext.API.Admin.EnvTypes (Mode(Mock), Env (..))
import
Gargantext.API.Admin.Settings
import
Gargantext.API.Errors.Types
import
Gargantext.API.Prelude
import
Gargantext.Core.Notifications.Dispatcher
qualified
as
D
import
Gargantext.Core.Config
(
_gc_secrets
,
gc_frontend_config
,
gc_jobs
,
hasConfig
)
import
Gargantext.Core.Config.Types
(
SettingsFile
(
..
),
jc_js_job_timeout
,
jc_js_id_timeout
,
fc_appPort
,
jwtSettings
)
import
Gargantext.Core.Config.Utils
(
readConfig
)
...
...
@@ -84,8 +85,8 @@ newTestEnv testEnv logger port = do
,
_env_jobs
=
jobs_env
,
_env_self_url
=
self_url_env
,
_env_config
=
config_env
,
_env_central_exchange
=
Prelude
.
error
"central exchange not needed, but forced somewhere (check StrictData)"
,
_env_dispatcher
=
Prelude
.
error
"dispatcher not needed, but forced somewhere (check StrictData)"
,
_env_central_exchange
=
Prelude
.
error
"
[Test.API.Setup.Env]
central exchange not needed, but forced somewhere (check StrictData)"
,
_env_dispatcher
=
Prelude
.
error
"
[Test.API.Setup.Env]
dispatcher not needed, but forced somewhere (check StrictData)"
-- , _env_central_exchange = central_exchange
-- , _env_dispatcher = dispatcher
,
_env_jwt_settings
...
...
@@ -124,6 +125,15 @@ withTestDBAndPort action =
let
stgs
=
Warp
.
defaultSettings
{
settingsOnExceptionResponse
=
showDebugExceptions
}
Warp
.
testWithApplicationSettings
stgs
(
pure
app
)
$
\
port
->
action
((
testEnv
,
port
),
app
)
withTestDBAndNotifications
::
D
.
Dispatcher
->
(((
TestEnv
,
Warp
.
Port
),
Application
)
->
IO
()
)
->
IO
()
withTestDBAndNotifications
dispatcher
action
=
do
withTestDB
$
\
testEnv
->
do
app
<-
withLoggerHoisted
Mock
$
\
ioLogger
->
do
env
<-
newTestEnv
testEnv
ioLogger
8080
makeApp
$
env
{
_env_dispatcher
=
dispatcher
}
let
stgs
=
Warp
.
defaultSettings
{
settingsOnExceptionResponse
=
showDebugExceptions
}
Warp
.
testWithApplicationSettings
stgs
(
pure
app
)
$
\
port
->
action
((
testEnv
,
port
),
app
)
-- | Starts the backend server /and/ the microservices proxy, the former at
-- a random port, the latter at a predictable port.
withBackendServerAndProxy
::
(((
TestEnv
,
Warp
.
Port
,
Warp
.
Port
))
->
IO
()
)
->
IO
()
...
...
test/Test/Core/AsyncUpdates.hs
View file @
6f91bebf
{-|
Module : Core.
AsyncUpdate
s
Module : Core.
Notification
s
Description :
Copyright : (c) CNRS, 2017-Present
License : AGPL + CECILL v3
...
...
@@ -9,14 +9,14 @@ Portability : POSIX
-}
module
Test.Core.
AsyncUpdate
s
module
Test.Core.
Notification
s
(
test
,
qcTests
)
where
import
Data.Aeson
qualified
as
A
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
import
Gargantext.Core.
Notification
s.CentralExchange.Types
import
Gargantext.Core.
Notification
s.Dispatcher.Types
import
Gargantext.Prelude
import
Test.Hspec
import
Test.Instances
()
...
...
test/Test/Instances.hs
View file @
6f91bebf
...
...
@@ -26,8 +26,8 @@ import Gargantext.API.Errors.Types qualified as Errors
import
Gargantext.API.Ngrams.Types
qualified
as
Ngrams
import
Gargantext.API.Node.Corpus.New
(
ApiInfo
(
..
))
import
Gargantext.API.Node.Types
(
RenameNode
(
..
),
WithQuery
(
..
))
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
qualified
as
DET
import
Gargantext.Core.
Notification
s.CentralExchange.Types
qualified
as
CET
import
Gargantext.Core.
Notification
s.Dispatcher.Types
qualified
as
DET
import
Gargantext.Core.NodeStory.Types
qualified
as
NS
import
Gargantext.Core.Text.Ngrams
(
NgramsType
(
..
))
import
Gargantext.Core.Types.Main
(
ListType
(
CandidateTerm
,
StopTerm
,
MapTerm
))
...
...
test/Test/Utils/Jobs.hs
View file @
6f91bebf
...
...
@@ -272,36 +272,37 @@ newTestEnv = do
k
<-
genSecret
let
settings
=
defaultJobSettings
1
k
myEnv
<-
newJobEnv
settings
defaultPrios
testTlsManager
let
fmt_error
v
=
Prelude
.
error
$
"[Test.Utils.Jobs.Env] "
<>
v
<>
" not needed, but forced somewhere (check StrictData)"
let
_gc_notifications_config
=
NotificationsConfig
{
_nc_central_exchange_bind
=
Prelude
.
error
"nc_central_exchange_bind not needed, but forced somewhere (check StrictData)
"
NotificationsConfig
{
_nc_central_exchange_bind
=
fmt_error
"nc_central_exchange_bind
"
,
_nc_central_exchange_connect
=
"tcp://localhost:15510"
,
_nc_dispatcher_bind
=
Prelude
.
error
"nc_dispatcher_bind not needed, but forced somewhere (check StrictData)
"
,
_nc_dispatcher_connect
=
Prelude
.
error
"nc_dispatcher_connect not needed, but forced somewhere (check StrictData)
"
}
,
_nc_dispatcher_bind
=
fmt_error
"nc_dispatcher_bind
"
,
_nc_dispatcher_connect
=
fmt_error
"nc_dispatcher_connect
"
}
let
_env_config
=
GargConfig
{
_gc_datafilepath
=
Prelude
.
error
"gc_datafilepath not needed, but forced somewhere (check StrictData)
"
,
_gc_frontend_config
=
Prelude
.
error
"gc_frontend_config not needed, but forced somewhere (check StrictData)
"
,
_gc_mail_config
=
Prelude
.
error
"gc_mail_config not needed, but forced somewhere (check StrictData)
"
,
_gc_database_config
=
Prelude
.
error
"gc_database_config not needed, but forced somewhere (check StrictData)
"
,
_gc_nlp_config
=
Prelude
.
error
"gc_nlp_config not needed, but forced somewhere (check StrictData)
"
GargConfig
{
_gc_datafilepath
=
fmt_error
"gc_datafilepath
"
,
_gc_frontend_config
=
fmt_error
"gc_frontend_config
"
,
_gc_mail_config
=
fmt_error
"gc_mail_config
"
,
_gc_database_config
=
fmt_error
"gc_database_config
"
,
_gc_nlp_config
=
fmt_error
"gc_nlp_config
"
,
_gc_notifications_config
,
_gc_frames
=
Prelude
.
error
"gc_frames not needed, but forced somewhere (check StrictData)
"
,
_gc_jobs
=
Prelude
.
error
"gc_jobs not needed, but forced somewhere (check StrictData)
"
,
_gc_secrets
=
Prelude
.
error
"gc_secrets not needed, but forced somewhere (check StrictData)
"
,
_gc_apis
=
Prelude
.
error
"gc_apis not needed, but forced somewhere (check StrictData)
"
,
_gc_log_level
=
Prelude
.
error
"gc_log_level not needed, but forced somewhere (check StrictData)
"
,
_gc_frames
=
fmt_error
"gc_frames not needed
"
,
_gc_jobs
=
fmt_error
"gc_jobs not needed
"
,
_gc_secrets
=
fmt_error
"gc_secrets
"
,
_gc_apis
=
fmt_error
"gc_apis
"
,
_gc_log_level
=
fmt_error
"gc_log_level
"
}
pure
$
Env
{
_env_logger
=
Prelude
.
error
"env_logger not needed, but forced somewhere (check StrictData)
"
,
_env_pool
=
Prelude
.
error
"env_pool not needed, but forced somewhere (check StrictData)
"
,
_env_nodeStory
=
Prelude
.
error
"env_nodeStory not needed, but forced somewhere (check StrictData)
"
{
_env_logger
=
fmt_error
"env_logger
"
,
_env_pool
=
fmt_error
"env_pool
"
,
_env_nodeStory
=
fmt_error
"env_nodeStory
"
,
_env_manager
=
testTlsManager
,
_env_self_url
=
Prelude
.
error
"self_url not needed, but forced somewhere (check StrictData)
"
,
_env_scrapers
=
Prelude
.
error
"scrapers not needed, but forced somewhere (check StrictData)
"
,
_env_self_url
=
fmt_error
"self_url
"
,
_env_scrapers
=
fmt_error
"scrapers
"
,
_env_jobs
=
myEnv
,
_env_config
,
_env_central_exchange
=
Prelude
.
error
"central exchange not needed, but forced somewhere (check StrictData)
"
,
_env_dispatcher
=
Prelude
.
error
"dispatcher not needed, but forced somewhere (check StrictData)
"
,
_env_jwt_settings
=
Prelude
.
error
"jwt_settings not needed, but forced somewherer (check StrictData)
"
,
_env_central_exchange
=
fmt_error
"central exchange
"
,
_env_dispatcher
=
fmt_error
"dispatcher
"
,
_env_jwt_settings
=
fmt_error
"jwt_settings
"
}
testFetchJobStatus
::
IO
()
...
...
test/drivers/hspec/Main.hs
View file @
6f91bebf
...
...
@@ -6,9 +6,9 @@ import Gargantext.Prelude hiding (isInfixOf)
import
Control.Monad
import
Data.Text
(
isInfixOf
)
import
Gargantext.Core.
AsyncUpdate
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher
qualified
as
D
import
Gargantext.Core.
AsyncUpdate
s.Dispatcher.Types
qualified
as
DT
import
Gargantext.Core.
Notification
s.CentralExchange
qualified
as
CE
import
Gargantext.Core.
Notification
s.Dispatcher
qualified
as
D
import
Gargantext.Core.
Notification
s.Dispatcher.Types
qualified
as
DT
import
Gargantext.Core.Config.Types
(
NotificationsConfig
(
..
))
import
Shelly
hiding
(
FilePath
)
import
System.IO
...
...
@@ -16,8 +16,8 @@ import System.Process
import
Test.Hspec
import
qualified
Data.Text
as
T
import
qualified
Test.API
as
API
import
qualified
Test.Server.ReverseProxy
as
ReverseProxy
import
qualified
Test.Database.Operations
as
DB
import
qualified
Test.Server.ReverseProxy
as
ReverseProxy
startCoreNLPServer
::
IO
ProcessHandle
...
...
@@ -82,9 +82,9 @@ main = do
hSetBuffering
stdout
NoBuffering
-- TODO Ideally remove start/stop notifications and use
-- Test/API/Setup to initialize this in env
withNotifications
$
\
(
nc
,
_
,
_
)
->
do
withNotifications
$
\
(
nc
,
_
ce
,
dispatcher
)
->
do
bracket
startCoreNLPServer
stopCoreNLPServer
$
\
_
->
hspec
$
do
API
.
tests
nc
API
.
tests
nc
dispatcher
ReverseProxy
.
tests
DB
.
tests
DB
.
nodeStoryTests
...
...
test/drivers/tasty/Main.hs
View file @
6f91bebf
...
...
@@ -26,7 +26,7 @@ import qualified Test.Parsers.Date as PD
import
qualified
Test.Utils.Crypto
as
Crypto
import
qualified
Test.Utils.Jobs
as
Jobs
import
qualified
Test.Core.Similarity
as
Similarity
import
qualified
Test.Core.
AsyncUpdates
as
AsyncUpdate
s
import
qualified
Test.Core.
Notifications
as
Notification
s
import
Test.Tasty
import
Test.Tasty.Hspec
...
...
@@ -40,7 +40,7 @@ main = do
nlpSpec
<-
testSpec
"NLP"
NLP
.
test
jobsSpec
<-
testSpec
"Jobs"
Jobs
.
test
similaritySpec
<-
testSpec
"Similarity"
Similarity
.
test
asyncUpdatesSpec
<-
testSpec
"
AsyncUpdates"
AsyncUpdate
s
.
test
asyncUpdatesSpec
<-
testSpec
"
Notifications"
Notification
s
.
test
defaultMain
$
testGroup
"Gargantext"
[
utilSpec
...
...
@@ -58,5 +58,5 @@ main = do
,
Phylo
.
tests
,
testGroup
"Stemming"
[
Lancaster
.
tests
]
,
asyncUpdatesSpec
,
AsyncUpdate
s
.
qcTests
,
Notification
s
.
qcTests
]
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