Add part9

This commit is contained in:
Richard Feldman
2018-05-05 08:49:24 -04:00
parent edbbcacb7c
commit f89b1aa197
576 changed files with 79135 additions and 0 deletions

View File

@@ -0,0 +1,104 @@
module RoutingTests exposing (..)
import Data.Article as Article exposing (Slug)
import Data.User as User exposing (Username)
import Expect exposing (Expectation)
import Json.Decode exposing (decodeString)
import Navigation exposing (Location)
import Route exposing (Route(..))
import Test exposing (..)
-- TODO need to add lots more tests!
fromLocation : Test
fromLocation =
describe "Route.fromLocation"
[ testLocation "" Root
, testLocation "#login" Login
, testLocation "#logout" Logout
, testLocation "#settings" Settings
, testLocation "#profile/foo" (Profile (usernameFromStr "foo"))
, testLocation "#register" Register
, testLocation "#article/foo" (Article (slugFromStr "foo"))
, testLocation "#editor" NewArticle
, testLocation "#editor/foo" (EditArticle (slugFromStr "foo"))
]
-- HELPERS --
testLocation : String -> Route -> Test
testLocation hash route =
test ("Parsing hash: \"" ++ hash ++ "\"") <|
\() ->
makeHashLocation hash
|> Route.fromLocation
|> Expect.equal (Just route)
makeHashLocation : String -> Location
makeHashLocation hash =
{ hash = hash
, href = ""
, host = ""
, hostname = ""
, protocol = ""
, origin = ""
, port_ = ""
, pathname = ""
, search = ""
, username = ""
, password = ""
}
-- CONSTRUCTING UNEXPOSED VALUES --
-- By decoding values that are not intended to be exposed directly - and crashing
-- if they cannot be decoded, since crashing is harmless in tests - we can let
-- our internal modules continue to expose only the intended ways of
-- constructing those, while still being able to test them.
usernameFromStr : String -> Username
usernameFromStr str =
case decodeString User.usernameDecoder ("\"" ++ str ++ "\"") of
Ok username ->
username
Err err ->
Debug.crash ("Error decoding Username from \"" ++ str ++ "\": " ++ err)
slugFromStr : String -> Slug
slugFromStr str =
let
json =
"""
{ "description": null
, "slug": \"""" ++ str ++ """"
, "title": ""
, "tagList": []
, "createdAt": "2012-04-23T18:25:43.511Z"
, "updatedAt": "2012-04-23T18:25:43.511Z"
, "favorited": false
, "favoritesCount": 1
, "author":
{ "username": ""
, "bio": null
, "image": null
, "following": false
}
}
"""
in
case decodeString Article.decoder json of
Ok article ->
article.slug
Err err ->
Debug.crash ("Error decoding Slug from \"" ++ str ++ "\": " ++ err)