1{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
2module Hpack.DefaultsSpec (spec) where
3
4import           Helper
5import           System.Directory
6
7import           Hpack.Syntax.Defaults
8import           Hpack.Defaults
9
10spec :: Spec
11spec = do
12  describe "ensure" $ do
13    it "fails when local file does not exist" $ do
14      cwd <- getCurrentDirectory
15      let expected = Left $ "Invalid value for \"defaults\"! File " ++ (cwd </> "foo") ++ " does not exist!"
16      ensure undefined cwd (DefaultsLocal $ Local "foo") `shouldReturn` expected
17
18  describe "ensureFile" $ do
19    let
20      file = "foo"
21      url = "https://raw.githubusercontent.com/sol/hpack/master/Setup.lhs"
22
23    it "downloads file if missing" $ do
24      pending
25      expected <- readFile "Setup.lhs"
26      inTempDirectory $ do
27        Found <- ensureFile file url
28        readFile file `shouldReturn` expected
29
30    context "with existing file" $ do
31      it "does nothing" $ do
32        let expected = "contents of existing file"
33        inTempDirectory $ do
34          writeFile file expected
35          Found <- ensureFile file url
36          readFile file `shouldReturn` expected
37
38    context "with 404" $ do
39      let
40        url = "https://raw.githubusercontent.com/sol/hpack/master/Setup.foo"
41
42      it "does not create any files" $ do
43        pending
44        inTempDirectory $ do
45          NotFound <- ensureFile file url
46          doesFileExist file `shouldReturn` False
47