mirror of
https://github.com/jfmengels/elm-review.git
synced 2024-11-29 10:02:37 +03:00
252 lines
8.3 KiB
Elm
252 lines
8.3 KiB
Elm
module NoDebug.TodoOrToStringTest exposing (all)
|
|
|
|
import Elm.Project
|
|
import Json.Decode as Decode
|
|
import NoDebug.TodoOrToString exposing (rule)
|
|
import Review.Project
|
|
import Review.Test
|
|
import Test exposing (Test, describe, test)
|
|
|
|
|
|
all : Test
|
|
all =
|
|
describe "NoDebug.TodoOrToString" tests
|
|
|
|
|
|
todoMessage : String
|
|
todoMessage =
|
|
"Remove the use of `Debug.todo` before shipping to production"
|
|
|
|
|
|
todoDetails : List String
|
|
todoDetails =
|
|
[ "`Debug.todo` can be useful when developing, but is not meant to be shipped to production or published in a package. I suggest removing its use before committing and attempting to push to production."
|
|
]
|
|
|
|
|
|
toStringMessage : String
|
|
toStringMessage =
|
|
"Remove the use of `Debug.toString` before shipping to production"
|
|
|
|
|
|
toStringDetails : List String
|
|
toStringDetails =
|
|
[ "`Debug.toString` can be useful when developing, but is not meant to be shipped to production or published in a package. I suggest removing its use before committing and attempting to push to production."
|
|
]
|
|
|
|
|
|
tests : List Test
|
|
tests =
|
|
[ test "should not report normal function calls" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
a = foo n
|
|
b = bar.foo n
|
|
c = debug
|
|
c = toString
|
|
c = List.toString
|
|
d = debug.todo n
|
|
e = debug.toString n
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should not report Debug.log calls" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
a = Debug.log n
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should report Debug.todo use" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
a = Debug.todo"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = todoMessage
|
|
, details = todoDetails
|
|
, under = "Debug.todo"
|
|
}
|
|
]
|
|
, test "should report Debug.toString use" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
a = Debug.toString"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = toStringMessage
|
|
, details = toStringDetails
|
|
, under = "Debug.toString"
|
|
}
|
|
]
|
|
, test "should not report calls from a module containing Debug but that is not Debug" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
a = Foo.Debug.todo 1
|
|
b = Debug.Foo.todo 1
|
|
a = Foo.Debug.toString 1
|
|
b = Debug.Foo.toString 1
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should not report the import of the Debug module" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should report the use of `todo` when `todo` has been explicitly imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (todo)
|
|
a = todo ""
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = todoMessage
|
|
, details = todoDetails
|
|
, under = "todo"
|
|
}
|
|
|> Review.Test.atExactly { start = { row = 3, column = 5 }, end = { row = 3, column = 9 } }
|
|
]
|
|
, test "should report the use of `todo` when `todo` has been implicitly imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (..)
|
|
a = todo "" 1
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = todoMessage
|
|
, details = todoDetails
|
|
, under = "todo"
|
|
}
|
|
]
|
|
, test "should not report the use of `todo` when it has not been imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (log)
|
|
a = todo "" 1
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should report the use of `toString` when `toString` has been explicitly imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (toString)
|
|
a = toString ""
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = toStringMessage
|
|
, details = toStringDetails
|
|
, under = "toString"
|
|
}
|
|
|> Review.Test.atExactly { start = { row = 3, column = 5 }, end = { row = 3, column = 13 } }
|
|
]
|
|
, test "should report the use of `toString` when `toString` has been implicitly imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (..)
|
|
a = toString "" 1
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = toStringMessage
|
|
, details = toStringDetails
|
|
, under = "toString"
|
|
}
|
|
]
|
|
, test "should not report the use of `toString` when it has not been imported" <|
|
|
\() ->
|
|
"""module A exposing (..)
|
|
import Debug exposing (log)
|
|
a = toString "" 1
|
|
"""
|
|
|> Review.Test.run rule
|
|
|> Review.Test.expectNoErrors
|
|
, test "should not report the use of `toString` or `todo` in files outside the source directories (TODO only with flag)" <|
|
|
\() ->
|
|
let
|
|
project : Review.Project.Project
|
|
project =
|
|
Review.Project.addModule { path = "tests/FooTest.elm", source = """module A exposing (..)
|
|
a = Debug.todo Debug.toString""" } applicationProject
|
|
in
|
|
Review.Test.runOnModulesWithProjectData project rule []
|
|
|> Review.Test.expectNoErrors
|
|
, test "should report the use of `toString` or `todo` in files inside the source directories (TODO only with flag)" <|
|
|
\() ->
|
|
let
|
|
project : Review.Project.Project
|
|
project =
|
|
Review.Project.addModule { path = "src/Foo.elm", source = """module A exposing (..)
|
|
a = Debug.todo Debug.toString""" } applicationProject
|
|
in
|
|
Review.Test.runOnModulesWithProjectData project rule []
|
|
|> Review.Test.expectErrors
|
|
[ Review.Test.error
|
|
{ message = todoMessage
|
|
, details = todoDetails
|
|
, under = "Debug.todo"
|
|
}
|
|
, Review.Test.error
|
|
{ message = toStringMessage
|
|
, details = toStringDetails
|
|
, under = "Debug.toString"
|
|
}
|
|
]
|
|
]
|
|
|
|
|
|
applicationProject : Review.Project.Project
|
|
applicationProject =
|
|
Review.Project.new
|
|
|> withDebugTodoElmJson Debug.todo rawApplicationElmJson
|
|
|
|
|
|
rawApplicationElmJson : String
|
|
rawApplicationElmJson =
|
|
"""
|
|
{
|
|
"type": "package",
|
|
"name": "author/dependency",
|
|
"summary": "Summary",
|
|
"license": "MIT",
|
|
"version": "1.0.0",
|
|
"exposed-modules": [
|
|
"Foo"
|
|
],
|
|
"elm-version": "0.19.0 <= v < 0.20.0",
|
|
"dependencies": {
|
|
"elm/core": "1.0.0 <= v < 2.0.0"
|
|
},
|
|
"test-dependencies": {}
|
|
}
|
|
"""
|
|
|
|
|
|
withDebugTodoElmJson : (String -> Never) -> String -> Review.Project.Project -> Review.Project.Project
|
|
withDebugTodoElmJson debugTodo rawElmJson project =
|
|
case Decode.decodeString Elm.Project.decoder rawElmJson of
|
|
Ok elmJsonProject ->
|
|
Review.Project.addElmJson
|
|
{ path = "elm.json"
|
|
, raw = rawElmJson
|
|
, project = elmJsonProject
|
|
}
|
|
project
|
|
|
|
Err _ ->
|
|
let
|
|
_ =
|
|
debugTodo "Invalid elm.json supplied to test"
|
|
in
|
|
withDebugTodoElmJson debugTodo rawElmJson project
|