Add custom HTTP configurations (#88)

This commit is contained in:
Connor Prussin
2018-02-08 21:46:45 -08:00
committed by GitHub
parent a488d21108
commit 7c606aec49
5 changed files with 103 additions and 45 deletions

View File

@@ -3,8 +3,13 @@ module Test.HTTPure.ServerSpec where
import Prelude
import Control.Monad.Eff.Class as EffClass
import Data.Maybe as Maybe
import Data.Options ((:=))
import Data.String as String
import Data.StrMap as StrMap
import Node.Encoding as Encoding
import Node.HTTP.Secure as HTTPS
import Node.FS.Sync as FSSync
import Test.Spec as Spec
import Test.Spec.Assertions.Aff as AffAssertions
@@ -26,21 +31,50 @@ serveSpec = Spec.describe "serve" do
out ?= "/test"
serve'Spec :: TestHelpers.Test
serve'Spec = Spec.describe "serve" do
serve'Spec = Spec.describe "serve'" do
Spec.it "boots a server with the given options" do
EffClass.liftEff $ Server.serve' options mockRouter $ pure unit
out <- TestHelpers.get 7902 StrMap.empty "/test"
out ?= "/test"
where
options = { hostname: "localhost", port: 7902, backlog: Maybe.Nothing }
serveSecureSpec :: TestHelpers.Test
serveSecureSpec = Spec.describe "serveSecure" do
Spec.describe "with valid key and cert files" do
Spec.it "boots a server on the given port" do
EffClass.liftEff $ Server.serve' 7902 cert key mockRouter $ pure unit
out <- TestHelpers.get' 7902 StrMap.empty "/test"
EffClass.liftEff $ Server.serveSecure 7903 cert key mockRouter $ pure unit
out <- TestHelpers.get' 7903 StrMap.empty "/test"
out ?= "/test"
Spec.describe "with invalid key and cert files" do
Spec.it "throws" do
AffAssertions.expectError do
EffClass.liftEff $ Server.serve' 7903 "" "" mockRouter $ pure unit
EffClass.liftEff $ Server.serveSecure 7904 "" "" mockRouter $ pure unit
where
cert = "./test/Mocks/Certificate.cer"
key = "./test/Mocks/Key.key"
serveSecure'Spec :: TestHelpers.Test
serveSecure'Spec = Spec.describe "serveSecure'" do
Spec.describe "with valid key and cert files" do
Spec.it "boots a server on the given port" do
sslOpts <- EffClass.liftEff $ sslOptions
EffClass.liftEff $
Server.serveSecure' sslOpts (options 7905) mockRouter $ pure unit
out <- TestHelpers.get' 7905 StrMap.empty "/test"
out ?= "/test"
where
options port = { hostname: "localhost", port, backlog: Maybe.Nothing }
sslOptions = do
cert <- FSSync.readTextFile Encoding.UTF8 "./test/Mocks/Certificate.cer"
key <- FSSync.readTextFile Encoding.UTF8 "./test/Mocks/Key.key"
pure $
HTTPS.key := HTTPS.keyString key <>
HTTPS.cert := HTTPS.certString cert
serverSpec :: TestHelpers.Test
serverSpec = Spec.describe "Server" do
serveSpec
serve'Spec
serveSecureSpec
serveSecure'Spec