aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--server/src/Thermoprint/Server/Queue.hs4
-rw-r--r--server/test/Spec.hs1
-rw-r--r--server/test/Thermoprint/Server/QueueSpec.hs34
-rw-r--r--server/thermoprint-server.cabal11
-rw-r--r--server/thermoprint-server.nix10
5 files changed, 55 insertions, 5 deletions
diff --git a/server/src/Thermoprint/Server/Queue.hs b/server/src/Thermoprint/Server/Queue.hs
index d5ab42b..52e973d 100644
--- a/server/src/Thermoprint/Server/Queue.hs
+++ b/server/src/Thermoprint/Server/Queue.hs
@@ -52,7 +52,7 @@ data Queue = Queue
52 , current :: Maybe QueueEntry 52 , current :: Maybe QueueEntry
53 , history :: Seq (QueueEntry, Maybe PrintingError) -- ^ Completed jobs, closest first 53 , history :: Seq (QueueEntry, Maybe PrintingError) -- ^ Completed jobs, closest first
54 } 54 }
55 deriving (Typeable, Generic, NFData) 55 deriving (Typeable, Generic, NFData, Show)
56 56
57class HasQueue a where 57class HasQueue a where
58 extractQueue :: a -> TVar Queue 58 extractQueue :: a -> TVar Queue
@@ -71,7 +71,7 @@ data QueueEntry = QueueEntry
71 { jobId :: JobId 71 { jobId :: JobId
72 , created :: UTCTime 72 , created :: UTCTime
73 } 73 }
74 deriving (Typeable, Generic, NFData, Eq, Ord) 74 deriving (Typeable, Generic, NFData, Eq, Ord, Show)
75 75
76data QueueItem = Pending Int QueueEntry | Current QueueEntry | History Int QueueEntry (Maybe PrintingError) 76data QueueItem = Pending Int QueueEntry | Current QueueEntry | History Int QueueEntry (Maybe PrintingError)
77 77
diff --git a/server/test/Spec.hs b/server/test/Spec.hs
new file mode 100644
index 0000000..a824f8c
--- /dev/null
+++ b/server/test/Spec.hs
@@ -0,0 +1 @@
{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/server/test/Thermoprint/Server/QueueSpec.hs b/server/test/Thermoprint/Server/QueueSpec.hs
new file mode 100644
index 0000000..fd45e1b
--- /dev/null
+++ b/server/test/Thermoprint/Server/QueueSpec.hs
@@ -0,0 +1,34 @@
1{-# LANGUAGE TypeSynonymInstances, FlexibleInstances, StandaloneDeriving #-}
2
3module Thermoprint.Server.QueueSpec (spec) where
4
5import Test.Hspec
6import Test.Hspec.QuickCheck (prop)
7
8import Thermoprint.Server.Queue
9import Thermoprint.Server.Database
10import Thermoprint.API hiding (JobId)
11
12import Test.QuickCheck.Arbitrary
13import Test.QuickCheck.Gen
14import Test.QuickCheck.Modifiers
15
16deriving instance (Eq PrintingError)
17deriving instance (Eq Queue)
18
19instance Arbitrary Queue where
20 arbitrary = Queue <$> arbitrary <*> arbitrary <*> arbitrary
21
22instance Arbitrary QueueEntry where
23 arbitrary = QueueEntry <$> arbitrary <*> arbitrary
24
25instance Arbitrary PrintingError where
26 arbitrary = oneof [ return UnknownError
27 ]
28
29instance Arbitrary JobId where
30 arbitrary = castId . getNonNegative <$> (arbitrary :: Gen (NonNegative Integer))
31
32spec :: Spec
33spec = do
34 prop "prop_zipper" $ \queue -> queue == toZipper (fromZipper queue)
diff --git a/server/thermoprint-server.cabal b/server/thermoprint-server.cabal
index 5e1b0b2..5783f06 100644
--- a/server/thermoprint-server.cabal
+++ b/server/thermoprint-server.cabal
@@ -52,6 +52,17 @@ library
52 hs-source-dirs: src 52 hs-source-dirs: src
53 default-language: Haskell2010 53 default-language: Haskell2010
54 54
55Test-Suite tests
56 type: exitcode-stdio-1.0
57 hs-source-dirs: test
58 main-is: Spec.hs
59 build-depends: base >=4.8.1 && <5
60 , thermoprint-server -any
61 , thermoprint-spec -any
62 , hspec >=2.2.1 && <3
63 , QuickCheck >=2.8.1 && <3
64 , quickcheck-instances >=0.3.11 && <4
65
55executable thermoprint-server 66executable thermoprint-server
56 main-is: Main.hs 67 main-is: Main.hs
57 build-depends: base >=4.8 && <5 68 build-depends: base >=4.8 && <5
diff --git a/server/thermoprint-server.nix b/server/thermoprint-server.nix
index 41f7198..a33e6db 100644
--- a/server/thermoprint-server.nix
+++ b/server/thermoprint-server.nix
@@ -1,8 +1,9 @@
1{ mkDerivation, base, conduit, containers, data-default-class 1{ mkDerivation, base, conduit, containers, data-default-class
2, deepseq, dyre, either, exceptions, extended-reals, mmorph 2, deepseq, dyre, either, exceptions, extended-reals, hspec, mmorph
3, monad-control, monad-logger, mtl, persistent, persistent-sqlite 3, monad-control, monad-logger, mtl, persistent, persistent-sqlite
4, persistent-template, resourcet, servant-server, stdenv, stm, text 4, persistent-template, QuickCheck, quickcheck-instances, resourcet
5, thermoprint-spec, time, transformers, wai, warp 5, servant-server, stdenv, stm, text, thermoprint-spec, time
6, transformers, wai, warp
6}: 7}:
7mkDerivation { 8mkDerivation {
8 pname = "thermoprint-server"; 9 pname = "thermoprint-server";
@@ -19,6 +20,9 @@ mkDerivation {
19 executableHaskellDepends = [ 20 executableHaskellDepends = [
20 base monad-logger mtl persistent-sqlite resourcet 21 base monad-logger mtl persistent-sqlite resourcet
21 ]; 22 ];
23 testHaskellDepends = [
24 base hspec QuickCheck quickcheck-instances
25 ];
22 homepage = "http://dirty-haskell.org/tags/thermoprint.html"; 26 homepage = "http://dirty-haskell.org/tags/thermoprint.html";
23 description = "Server for thermoprint-spec"; 27 description = "Server for thermoprint-spec";
24 license = stdenv.lib.licenses.publicDomain; 28 license = stdenv.lib.licenses.publicDomain;