Skip to content

Commit

Permalink
Update tests
Browse files Browse the repository at this point in the history
  • Loading branch information
NickNeck committed Jan 19, 2025
1 parent f665dcb commit 2415ec4
Show file tree
Hide file tree
Showing 2 changed files with 146 additions and 96 deletions.
239 changes: 143 additions & 96 deletions test/recode/manifest_test.exs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
defmodule Recode.ManifestTest do
use ExUnit.Case, async: false
use RecodeCase, async: false

import ExUnit.CaptureIO

Expand All @@ -9,150 +9,197 @@ defmodule Recode.ManifestTest do
@manifest_file "recode.issues"

setup do
File.rm(manifest())
:ok
[project: TestProject.new()]
end

@moduletag :tmp_dir

describe "read/1" do
test "returns manifest" do
File.write!(manifest(), """
config_file
file1
file2
""")

assert {timestamp, config_file, files} = Manifest.read(manifest: true, force: false)
assert timestamp > 0
assert config_file == "config_file"
assert files == ["file1", "file2"]

now = System.system_time(:second)
assert_in_delta timestamp, now, 3
test "returns manifest", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())

File.write!(manifest(), """
config_file
file1
file2
""")

assert {timestamp, config_file, files} = Manifest.read(manifest: true, force: false)
assert timestamp > 0
assert config_file == "config_file"
assert files == ["file1", "file2"]

now = System.system_time(:second)
assert_in_delta timestamp, now, 3
end
end

test "returns manifest without files" do
File.write!(manifest(), "config_file")
test "returns manifest without files", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write!(manifest(), "config_file")

assert {timestamp, config_file, files} = Manifest.read(manifest: true, force: false)
assert timestamp > 0
assert config_file == "config_file"
assert Enum.empty?(files)
assert {timestamp, config_file, files} = Manifest.read(manifest: true, force: false)
assert timestamp > 0
assert config_file == "config_file"
assert Enum.empty?(files)
end
end

test "returns nil if manifest: false" do
File.write!(manifest(), "config_file")
test "returns nil if manifest: false", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write!(manifest(), "config_file")

assert Manifest.read(manifest: false, force: false) == nil
assert Manifest.read(manifest: false, force: false) == nil
end
end

test "returns nil if force: true" do
File.write!(manifest(), "config_file")
test "returns nil if force: true", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write!(manifest(), "config_file")

assert Manifest.read(manifest: true, force: true) == nil
assert Manifest.read(manifest: true, force: true) == nil
end
end

test "returns nil if no manifest exists" do
File.rm(manifest())

assert Manifest.read(manifest: true, force: false) == nil
test "returns nil if no manifest exists", context do
in_tmp context do
assert Manifest.read(manifest: true, force: false) == nil
end
end

test "returns nil and prints error for an invalid manifest" do
File.write!(manifest(), "")
test "returns nil and prints error for an invalid manifest", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write!(manifest(), "")

output =
capture_io(:stderr, fn ->
assert Manifest.read(manifest: true, force: false) == nil
end)
capture_io(:stdio, fn ->
output =
capture_io(:stderr, fn ->
assert Manifest.read(manifest: true, force: false) == nil
end)

assert output =~ "Failed to read manifest: invalid content"
assert output =~ "Failed to read manifest: invalid content"
end)
end
end

test "returns nil and prints error for an unreadable file" do
File.write!(manifest(), "config")
File.chmod!(manifest(), 0o333)
test "returns nil and prints error for an unreadable file", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write!(manifest(), "config")
File.chmod!(manifest(), 0o333)

output =
capture_io(:stderr, fn ->
assert Manifest.read(manifest: true, force: false) == nil
end)
capture_io(:stdio, fn ->
output =
capture_io(:stderr, fn ->
assert Manifest.read(manifest: true, force: false) == nil
end)

assert output =~ "Failed to read manifest:"
assert output =~ "Failed to read manifest:"
end)
end
end
end

describe "write/2" do
test "writes manifest" do
project = Rewrite.new()
test "writes manifest", context do
in_tmp context do
project = Rewrite.new()

assert Manifest.write(project, manifest: true) == :ok
assert File.read!(manifest()) == ".recode.exs"
assert Manifest.write(project, manifest: true) == :ok
assert File.read!(manifest()) == ".recode.exs"
end
end

test "write manifest for config" do
project = Rewrite.new()
test "write manifest for config", context do
in_tmp context do
project = Rewrite.new()

assert Manifest.write(
project,
manifest: true,
cli_opts: [config_file: "config.exs"]
) ==
:ok

assert Manifest.write(project, manifest: true, cli_opts: [config_file: "config.exs"]) == :ok
assert File.read!(manifest()) == "config.exs"
assert File.read!(manifest()) == "config.exs"
end
end

test "does not write manifest" do
project = Rewrite.new()
test "does not write manifest", context do
in_tmp context do
project = Rewrite.new()

assert Manifest.write(project, manifest: false) == :ok
refute File.exists?(manifest())
assert Manifest.write(project, manifest: false) == :ok
refute File.exists?(manifest())
end
end

test "writes no file list in manifest" do
{:ok, project} =
Rewrite.from_sources([
Rewrite.Source.from_string("", path: "foo.ex")
])
test "writes no file list in manifest", context do
in_tmp context do
{:ok, project} =
Rewrite.from_sources([
Rewrite.Source.from_string("", path: "foo.ex")
])

assert Manifest.write(project, manifest: true) == :ok
assert File.read!(manifest()) == ".recode.exs"
assert Manifest.write(project, manifest: true) == :ok
assert File.read!(manifest()) == ".recode.exs"
end
end

test "writes file list for sources with issue" do
opts = [manifest: true]
test "writes file list for sources with issue", context do
in_tmp context do
opts = [manifest: true]

{:ok, project} =
Rewrite.from_sources([
"" |> Source.from_string(path: "foo.ex") |> Source.add_issue("foo"),
"" |> Source.from_string(path: "bar.ex") |> Source.update(:content, "bar"),
Source.from_string("", path: "baz.ex")
])
{:ok, project} =
Rewrite.from_sources([
"" |> Source.from_string(path: "foo.ex") |> Source.add_issue("foo"),
"" |> Source.from_string(path: "bar.ex") |> Source.update(:content, "bar"),
Source.from_string("", path: "baz.ex")
])

assert Manifest.write(project, opts) == :ok
assert File.read!(manifest()) == ".recode.exs\nfoo.ex"
assert Manifest.write(project, opts) == :ok
assert File.read!(manifest()) == ".recode.exs\nfoo.ex"
end
end

test "writes file list for sources with issue or updates" do
opts = [manifest: true, dry: true]
test "writes file list for sources with issue or updates", context do
in_tmp context do
opts = [manifest: true, dry: true]

{:ok, project} =
Rewrite.from_sources([
"" |> Source.from_string(path: "foo.ex") |> Source.add_issue("foo"),
"" |> Source.from_string(path: "bar.ex") |> Source.update(:content, "bar"),
Source.from_string("", path: "baz.ex")
])
{:ok, project} =
Rewrite.from_sources([
"" |> Source.from_string(path: "foo.ex") |> Source.add_issue("foo"),
"" |> Source.from_string(path: "bar.ex") |> Source.update(:content, "bar"),
Source.from_string("", path: "baz.ex")
])

assert Manifest.write(project, opts) == :ok
assert File.read!(manifest()) == ".recode.exs\nfoo.ex\nbar.ex"
assert Manifest.write(project, opts) == :ok
assert File.read!(manifest()) == ".recode.exs\nfoo.ex\nbar.ex"
end
end

test "prints error if file cannot be written" do
File.write(manifest(), "")
File.chmod!(manifest(), 0o444)
test "prints error if file cannot be written", context do
in_tmp context do
File.mkdir_p(Mix.Project.manifest_path())
File.write(manifest(), "")
File.chmod!(manifest(), 0o444)

project = Rewrite.new()
project = Rewrite.new()

output =
capture_io(:stderr, fn ->
assert Manifest.write(project, manifest: true) == :ok
end)
capture_io(:stdio, fn ->
output =
capture_io(:stderr, fn ->
assert Manifest.write(project, manifest: true) == :ok
end)

assert output =~ "Failed to write manifest: permission denied"
assert output =~ "Failed to write manifest: permission denied"
end)
end
end
end

Expand Down
3 changes: 3 additions & 0 deletions test/support/recode_case.ex
Original file line number Diff line number Diff line change
Expand Up @@ -134,11 +134,14 @@ defmodule RecodeCase do
quote do
tmp_dir = Map.fetch!(unquote(context), :tmp_dir)
fixture = Map.get(unquote(context), :fixture)
project = Map.get(unquote(context), :project)

if fixture, do: "test/fixtures" |> Path.join(fixture) |> File.cp_r!(tmp_dir)

File.cd!(tmp_dir, fn ->
if project, do: Mix.Project.push(project)
unquote(block)
if project, do: Mix.Project.pop()
end)
end
end
Expand Down

0 comments on commit 2415ec4

Please sign in to comment.