elm-review/tests/NoExposingEverythingTest.elm
2021-01-19 21:45:35 +01:00

136 lines
5.9 KiB
Elm

module NoExposingEverythingTest exposing (all)
import NoExposingEverything exposing (rule)
import Review.Test
import Test exposing (Test, describe, test)
all : Test
all =
describe "NoExposingEverything"
[ test "should not report anything when a module exposes a limited set of things" <|
\() ->
"""
module A exposing (B(..), C, d)
type B = B
d = 1
"""
|> Review.Test.run rule
|> Review.Test.expectNoErrors
, test "should offer a fix listing all variables" <|
\() ->
"""
module A exposing (..)
foo = 1
bar = 2
"""
|> Review.Test.run rule
|> Review.Test.expectErrors
[ Review.Test.error
{ message = "Module exposes everything implicitly \"(..)\""
, details =
[ "Modules should have hidden implementation details with an explicit API so that the module is used in a proper and controlled way. The users of this module should not have to know about what is inside a module it is using, and they shouldn't need to access it's internal details. Therefore, the API should be explicitly defined and ideally as small as possible."
]
, under = "(..)"
}
|> Review.Test.whenFixed
"""
module A exposing (foo, bar)
foo = 1
bar = 2
"""
]
, test "should offer a fix listing all types" <|
\() ->
"""
module A exposing (..)
type Foo = Foo
"""
|> Review.Test.run rule
|> Review.Test.expectErrors
[ Review.Test.error
{ message = "Module exposes everything implicitly \"(..)\""
, details =
[ "Modules should have hidden implementation details with an explicit API so that the module is used in a proper and controlled way. The users of this module should not have to know about what is inside a module it is using, and they shouldn't need to access it's internal details. Therefore, the API should be explicitly defined and ideally as small as possible."
]
, under = "(..)"
}
|> Review.Test.whenFixed
"""
module A exposing (Foo(..))
type Foo = Foo
"""
]
, test "should offer a fix listing all type aliases" <|
\() ->
"""
module A exposing (..)
type alias Foo = String
"""
|> Review.Test.run rule
|> Review.Test.expectErrors
[ Review.Test.error
{ message = "Module exposes everything implicitly \"(..)\""
, details =
[ "Modules should have hidden implementation details with an explicit API so that the module is used in a proper and controlled way. The users of this module should not have to know about what is inside a module it is using, and they shouldn't need to access it's internal details. Therefore, the API should be explicitly defined and ideally as small as possible."
]
, under = "(..)"
}
|> Review.Test.whenFixed
"""
module A exposing (Foo)
type alias Foo = String
"""
]
, test "should offer a fix listing all ports" <|
\() ->
"""
port module A exposing (..)
port foo : String
"""
|> Review.Test.run rule
|> Review.Test.expectErrors
[ Review.Test.error
{ message = "Module exposes everything implicitly \"(..)\""
, details =
[ "Modules should have hidden implementation details with an explicit API so that the module is used in a proper and controlled way. The users of this module should not have to know about what is inside a module it is using, and they shouldn't need to access it's internal details. Therefore, the API should be explicitly defined and ideally as small as possible."
]
, under = "(..)"
}
|> Review.Test.whenFixed
"""
port module A exposing (foo)
port foo : String
"""
]
, test "should offer a fix listing all infixes" <|
\() ->
"""
module List exposing (..)
import Elm.Kernel.List
infix right 5 (::) = cons
cons : a -> List a -> List a
cons =
Elm.Kernel.List.cons
"""
|> Review.Test.run rule
|> Review.Test.expectErrors
[ Review.Test.error
{ message = "Module exposes everything implicitly \"(..)\""
, details =
[ "Modules should have hidden implementation details with an explicit API so that the module is used in a proper and controlled way. The users of this module should not have to know about what is inside a module it is using, and they shouldn't need to access it's internal details. Therefore, the API should be explicitly defined and ideally as small as possible."
]
, under = "(..)"
}
|> Review.Test.whenFixed
"""
module List exposing ((::), cons)
import Elm.Kernel.List
infix right 5 (::) = cons
cons : a -> List a -> List a
cons =
Elm.Kernel.List.cons
"""
]
]