generated from tpl/purs
Make tests pass
This commit is contained in:
parent
111790af84
commit
3e074d1c0c
16
README.md
16
README.md
@ -14,21 +14,25 @@ This guide is a literate Purescript file which is extracted into testing module
|
|||||||
Let's start with imports.
|
Let's start with imports.
|
||||||
|
|
||||||
```purescript
|
```purescript
|
||||||
module Test.Example where
|
module Test.README where
|
||||||
|
|
||||||
import Prelude
|
import Prelude
|
||||||
|
|
||||||
import Database.PostgreSQL (defaultPoolConfiguration, command, execute, newPool, query, Query(Query), withConnection, withTransaction)
|
import Database.PostgreSQL (defaultPoolConfiguration, command, execute, newPool, PG, query, Query(Query), withConnection, withTransaction)
|
||||||
import Database.PostgreSQL.Row (Row0(Row0), Row3(Row3))
|
import Database.PostgreSQL.Row (Row0(Row0), Row3(Row3))
|
||||||
import Data.Decimal as Decimal
|
import Data.Decimal as Decimal
|
||||||
import Data.Maybe (Maybe(..))
|
import Data.Maybe (Maybe(..))
|
||||||
import Data.Tuple.Nested ((/\))
|
import Data.Tuple.Nested ((/\))
|
||||||
import Effect.Aff (Aff)
|
|
||||||
import Effect.Class (liftEffect)
|
import Effect.Class (liftEffect)
|
||||||
import Test.Assert (assert)
|
import Test.Assert (assert)
|
||||||
```
|
```
|
||||||
|
|
||||||
The whole API for interaction with postgres is performed asynchronously in `Aff`.
|
The whole API for interaction with postgres is performed asynchronously in `Aff`. To be honest
|
||||||
|
it is `type PG a = ExceptT PGError Aff a` so you can easily catch database related errors in
|
||||||
|
a sane (read typed) manner. The only function which is done in plain `Effect` is `newPool`.
|
||||||
|
|
||||||
|
Don't be scarred you can turn `PG a` into `Aff (Either PGError a)` just running single function
|
||||||
|
`runExceptT`.
|
||||||
|
|
||||||
We assume here that postgres is running on a standard local port
|
We assume here that postgres is running on a standard local port
|
||||||
with `ident` authentication so configuration can be nearly empty (`defaultPoolConfiguration`).
|
with `ident` authentication so configuration can be nearly empty (`defaultPoolConfiguration`).
|
||||||
@ -38,10 +42,10 @@ is run by our test suite and we want to exit after execution quickly ;-)
|
|||||||
|
|
||||||
|
|
||||||
```purescript
|
```purescript
|
||||||
run ∷ Aff Unit
|
run ∷ PG Unit
|
||||||
run = do
|
run = do
|
||||||
|
|
||||||
pool <- newPool ((defaultPoolConfiguration "purspg") { idleTimeoutMillis = Just 1000 })
|
pool <- liftEffect $ newPool ((defaultPoolConfiguration "purspg") { idleTimeoutMillis = Just 1000 })
|
||||||
withConnection pool \conn -> do
|
withConnection pool \conn -> do
|
||||||
```
|
```
|
||||||
|
|
||||||
|
11
package.json
11
package.json
@ -1,18 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "purescript-postgresql-client",
|
"name": "purescript-postgresql-client",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"bower-dependency-tree": "^0.1.2",
|
|
||||||
"decimal.js": "^10.0.0",
|
"decimal.js": "^10.0.0",
|
||||||
"g": "^2.0.1",
|
"pg": "^6.1.2"
|
||||||
"global": "^4.3.2",
|
|
||||||
"pg": "^6.1.2",
|
|
||||||
"pulp": "^12.3.0"
|
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"literate-purescript": "^0.1.2"
|
"paluh-litps": "^0.1.4",
|
||||||
|
"pulp": "^12.3.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"pretest": "litps compile --file README.md; mv README.purs test/Example.purs",
|
"pretest": "paluh-litps compile --file README.md; mv README.purs test/README.purs",
|
||||||
"test": "pulp test"
|
"test": "pulp test"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ import Foreign.Object (Object, fromFoldable)
|
|||||||
import Math ((%))
|
import Math ((%))
|
||||||
import Partial.Unsafe (unsafePartial)
|
import Partial.Unsafe (unsafePartial)
|
||||||
import Test.Assert (assert)
|
import Test.Assert (assert)
|
||||||
import Test.Example (run) as Example
|
import Test.README (run) as README
|
||||||
import Test.Unit (TestSuite, suite)
|
import Test.Unit (TestSuite, suite)
|
||||||
import Test.Unit as Test.Unit
|
import Test.Unit as Test.Unit
|
||||||
import Test.Unit.Assert (equal)
|
import Test.Unit.Assert (equal)
|
||||||
@ -83,10 +83,10 @@ main ∷ Effect Unit
|
|||||||
main = do
|
main = do
|
||||||
void $ launchAff do
|
void $ launchAff do
|
||||||
-- Running guide from README
|
-- Running guide from README
|
||||||
-- Example.run
|
void $ runExceptT $ README.run
|
||||||
|
|
||||||
-- Actual test suite
|
-- Actual test suite
|
||||||
pool <- newPool config
|
pool <- liftEffect $ newPool config
|
||||||
checkPGErrors $ withConnection pool \conn -> do
|
checkPGErrors $ withConnection pool \conn -> do
|
||||||
execute conn (Query """
|
execute conn (Query """
|
||||||
CREATE TEMPORARY TABLE foods (
|
CREATE TEMPORARY TABLE foods (
|
||||||
@ -312,13 +312,13 @@ main = do
|
|||||||
let doNothing _ = pure unit
|
let doNothing _ = pure unit
|
||||||
|
|
||||||
Test.Unit.test "connection refused" do
|
Test.Unit.test "connection refused" do
|
||||||
testPool <- newPool cannotConnectConfig
|
testPool <- liftEffect $ newPool cannotConnectConfig
|
||||||
runExceptT (withConnection testPool doNothing) >>= case _ of
|
runExceptT (withConnection testPool doNothing) >>= case _ of
|
||||||
Left (ConnectionError cause) -> equal cause "ECONNREFUSED"
|
Left (ConnectionError cause) -> equal cause "ECONNREFUSED"
|
||||||
_ -> Test.Unit.failure "foo"
|
_ -> Test.Unit.failure "foo"
|
||||||
|
|
||||||
Test.Unit.test "no such database" do
|
Test.Unit.test "no such database" do
|
||||||
testPool <- newPool noSuchDatabaseConfig
|
testPool <- liftEffect $ newPool noSuchDatabaseConfig
|
||||||
runExceptT (withConnection testPool doNothing) >>= case _ of
|
runExceptT (withConnection testPool doNothing) >>= case _ of
|
||||||
Left (ProgrammingError { code, message }) -> equal code "3D000"
|
Left (ProgrammingError { code, message }) -> equal code "3D000"
|
||||||
_ -> Test.Unit.failure "PostgreSQL error was expected"
|
_ -> Test.Unit.failure "PostgreSQL error was expected"
|
||||||
|
Loading…
Reference in New Issue
Block a user