Skip to content

Commit

Permalink
refactor: mutualize server test helpers.
Browse files Browse the repository at this point in the history
  • Loading branch information
n1k0 committed Sep 26, 2024
1 parent 43760a2 commit a3a0768
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 51 deletions.
25 changes: 3 additions & 22 deletions tests/Server/RouteTest.elm
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,12 @@ module Server.RouteTest exposing (..)

import Data.Country as Country
import Data.Food.Fixtures as Fixtures
import Data.Food.Process as FoodProcess
import Data.Food.Query as FoodQuery
import Data.Impact.Definition as Definition
import Data.Object.Process as ObjectProcess
import Data.Split as Split
import Data.Textile.Material as Material
import Data.Textile.Material.Origin as Origin
import Data.Textile.Material.Spinning as Spinning
import Data.Textile.Process as TextileProcess
import Data.Textile.Query as Query exposing (Query, tShirtCotonFrance)
import Data.Textile.Step.Label as Label
import Data.Unit as Unit
Expand All @@ -20,7 +17,7 @@ import Json.Encode as Encode
import Server.Route as Route
import Static.Db as StaticDb
import Test exposing (..)
import TestUtils exposing (asTest, suiteWithDb)
import TestUtils exposing (asTest, createServerRequest, suiteWithDb)


sampleQuery : Query
Expand Down Expand Up @@ -428,24 +425,8 @@ textileEndpoints db =


testEndpoint : StaticDb.Db -> String -> Encode.Value -> String -> Maybe Route.Route
testEndpoint dbs method body url =
Route.endpoint dbs
{ method = method
, url = url
, body = body
, processes =
{ foodProcesses =
Encode.list FoodProcess.encode dbs.food.processes
|> Encode.encode 0
, objectProcesses =
Encode.list ObjectProcess.encode dbs.object.processes
|> Encode.encode 0
, textileProcesses =
Encode.list TextileProcess.encode dbs.textile.processes
|> Encode.encode 0
}
, jsResponseHandler = Encode.null
}
testEndpoint dbs method body =
createServerRequest dbs method body >> Route.endpoint dbs


extractQuery : Route.Route -> Maybe Query
Expand Down
35 changes: 6 additions & 29 deletions tests/Server/ServerTest.elm
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
module Server.ServerTest exposing (..)

import Data.Food.Process as FoodProcess
import Data.Food.Query as FoodQuery
import Data.Object.Process as ObjectProcess
import Data.Textile.Process as TextileProcess
import Expect
import Json.Encode as Encode
import Server
import Server.Request exposing (Request)
import Static.Db as StaticDb
import Test exposing (..)
import TestUtils exposing (asTest, suiteWithDb)
import TestUtils exposing (asTest, createServerRequest, suiteWithDb)


suite : Test
Expand All @@ -28,57 +23,39 @@ suite =
]
, describe "handleRequest"
[ "/invalid"
|> request dbs "GET" Encode.null
|> createServerRequest dbs "GET" Encode.null
|> Server.handleRequest dbs
|> Tuple.first
|> Expect.equal 404
|> asTest "should catch invalid endpoints"

-- GET queries
, "/food?ingredients[]=invalid"
|> request dbs "GET" Encode.null
|> createServerRequest dbs "GET" Encode.null
|> Server.handleRequest dbs
|> Tuple.first
|> Expect.equal 400
|> asTest "should reject an invalid GET query"
, "/food?ingredients[]=egg-indoor-code3;120"
|> request dbs "GET" Encode.null
|> createServerRequest dbs "GET" Encode.null
|> Server.handleRequest dbs
|> Tuple.first
|> Expect.equal 200
|> asTest "should accept a valid GET query"

-- POST queries
, "/food"
|> request dbs "POST" Encode.null
|> createServerRequest dbs "POST" Encode.null
|> Server.handleRequest dbs
|> Tuple.first
|> Expect.equal 400
|> asTest "should reject an invalid POST query"
, "/food"
|> request dbs "POST" (FoodQuery.encode FoodQuery.empty)
|> createServerRequest dbs "POST" (FoodQuery.encode FoodQuery.empty)
|> Server.handleRequest dbs
|> Tuple.first
|> Expect.equal 200
|> asTest "should accept a valid POST query"
]
]
)


request : StaticDb.Db -> String -> Encode.Value -> String -> Request
request dbs method body url =
let
encode encoder =
Encode.list encoder >> Encode.encode 0
in
{ method = method
, url = url
, body = body
, processes =
{ foodProcesses = dbs.food.processes |> encode FoodProcess.encode
, objectProcesses = dbs.object.processes |> encode ObjectProcess.encode
, textileProcesses = dbs.textile.processes |> encode TextileProcess.encode
}
, jsResponseHandler = Encode.null
}
24 changes: 24 additions & 0 deletions tests/TestUtils.elm
Original file line number Diff line number Diff line change
@@ -1,13 +1,19 @@
module TestUtils exposing
( asTest
, createServerRequest
, expectImpactsEqual
, suiteWithDb
)

import Data.Food.Process as FoodProcess
import Data.Impact as Impact exposing (Impacts)
import Data.Impact.Definition as Definition exposing (Trigrams)
import Data.Object.Process as ObjectProcess
import Data.Textile.Process as TextileProcess
import Data.Unit as Unit
import Expect exposing (Expectation)
import Json.Encode as Encode
import Server.Request exposing (Request)
import Static.Db as StaticDb exposing (Db)
import Static.Json as StaticJson
import Test exposing (..)
Expand Down Expand Up @@ -41,3 +47,21 @@ expectImpactsEqual impacts subject =
|> (\expectations ->
Expect.all expectations subject
)


createServerRequest : StaticDb.Db -> String -> Encode.Value -> String -> Request
createServerRequest dbs method body url =
let
encode encoder =
Encode.list encoder >> Encode.encode 0
in
{ body = body
, jsResponseHandler = Encode.null
, method = method
, processes =
{ foodProcesses = dbs.food.processes |> encode FoodProcess.encode
, objectProcesses = dbs.object.processes |> encode ObjectProcess.encode
, textileProcesses = dbs.textile.processes |> encode TextileProcess.encode
}
, url = url
}

0 comments on commit a3a0768

Please sign in to comment.