Add part10

This commit is contained in:
Richard Feldman
2018-04-28 16:53:54 -04:00
parent 345368cbcc
commit d4718c64b4
578 changed files with 97351 additions and 1 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)