1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
defmodule Hex.Netrc.ParserTest do
use HexTest.Case, async: false
alias Hex.Netrc.Parser
test "parse/1 fails on non-existent file" do
in_tmp(fn ->
assert {:error, :enoent} = Parser.parse(".netrc")
end)
end
test "parse/1 fails on unreadable file" do
in_tmp(fn ->
File.write!(".netrc", "")
File.chmod!(".netrc", 0o000)
assert {:error, :eacces} = Parser.parse(".netrc")
end)
end
test "parse/1 fails on empty file" do
in_tmp(fn ->
File.write!(".netrc", "")
assert {:error, :parse} = Parser.parse(".netrc")
end)
end
test "parse/1 succeeds on simple file" do
in_tmp(fn ->
data = """
machine foo.example.com
login john
password bar
"""
parsed = %{
"foo.example.com" => %{
username: "john",
password: "bar"
}
}
File.write!(".netrc", data)
assert {:ok, ^parsed} = Parser.parse(".netrc")
end)
end
test "parse/1 succeeds on file with multiple records" do
in_tmp(fn ->
data = """
machine foo.example.com
login john
password bar
machine bar.example.com
login yoyo
password dyne
"""
parsed = %{
"foo.example.com" => %{
username: "john",
password: "bar"
},
"bar.example.com" => %{
username: "yoyo",
password: "dyne"
}
}
File.write!(".netrc", data)
assert {:ok, ^parsed} = Parser.parse(".netrc")
end)
end
test "parse/1 ignores excessive whitespace" do
in_tmp(fn ->
data = "\n\n\t\nmachine foo.example.com\n\n login\t\tjohn\npassword\t\tbar\n\n"
parsed = %{
"foo.example.com" => %{
username: "john",
password: "bar"
}
}
File.write!(".netrc", data)
assert {:ok, ^parsed} = Parser.parse(".netrc")
end)
end
test "parse/1 missing machine line is a parse error" do
in_tmp(fn ->
data = """
login foo
password bar
"""
File.write!(".netrc", data)
assert {:error, :parse} = Parser.parse(".netrc")
end)
end
test "parse/1 missing login line is a parse error" do
in_tmp(fn ->
data = """
machine foo.example.com
password bar
"""
File.write!(".netrc", data)
assert {:error, :parse} = Parser.parse(".netrc")
end)
end
test "parse/1 missing password line is a parse error" do
in_tmp(fn ->
data = """
machine foo.example.com
login foo
"""
File.write!(".netrc", data)
assert {:error, :parse} = Parser.parse(".netrc")
end)
end
test "parse/1 username can be overridden" do
in_tmp(fn ->
data = """
machine foo.example.com
login foo
login foo2
password bar
"""
parsed = %{
"foo.example.com" => %{
username: "foo2",
password: "bar"
}
}
File.write!(".netrc", data)
assert {:ok, ^parsed} = Parser.parse(".netrc")
end)
end
end
|