summaryrefslogtreecommitdiff
path: root/test/lib/dslkeywords/directory_test.rb
blob: 71046f8a9f98e67713797b86442fef225391925f (plain)
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
require 'minitest/autorun'
require 'fileutils'

require_relative '../../../lib/dsl'

class RCMDirectoryTest < Minitest::Test
  DIR_PATH = './.directory_test.rcmtmp'.freeze

  # Minitest.after_run do
  #   FileUtils.rm_r(DIR_PATH) if File.directory?(DIR_PATH)
  # end

  def test_create_directory
    configure_from_scratch do
      directory DIR_PATH do
        is present
      end
    end
    assert File.directory?(DIR_PATH)
  end

  def test_delete_directory
    configure_from_scratch do
      directory create do
        path DIR_PATH
        is present
      end
      directory delete do
        path DIR_PATH
        is absent
      end
    end
    refute File.directory?(DIR_PATH)
  end

  def test_purge_directory
    configure_from_scratch do
      touch create do
        path "#{DIR_PATH}/subdir/a_file.txt"
        manage directory
      end
      directory purge do
        path DIR_PATH
        is purged
        without backup
      end
    end
    refute File.directory?(DIR_PATH)
  end

  # TODO: Unit test
  def test_copy_directory_recursively
    expected_files = {}

    configure_from_scratch do
      2.times do |i|
        file "file_#{i + 10}_dest" do
          path "#{DIR_PATH}/dest_dir/file_#{i + 10}.txt"
          manage directory
          expected_files["file_#{i + 10}.txt"] = "file_#{i + 10}_dest"
          "file_#{i + 10}_dest"
        end
        file "file_#{i}_dest" do
          path "#{DIR_PATH}/dest_dir/file_#{i}.txt"
          manage directory
          expected_files["file_#{i}.txt"] = "file_#{i}_dest"
          "file_#{i}_dest"
        end
        file "file_#{i}_sub_dest" do
          path "#{DIR_PATH}/dest_dir/sub/file_#{i}.txt"
          expected_files["sub/file_#{i}.txt"] = "sub_file_#{i}_dest"
          manage directory
          "sub_file_#{i}_dest"
        end
      end

      4.times do |i|
        file "file_#{i}_source" do
          path "#{DIR_PATH}/source_dir/file_#{i}.txt"
          manage directory
          expected_files["file_#{i}.txt"] = "file_#{i}_source"
          "file_#{i}_source"
        end
        file "file_#{i}_sub_source" do
          path "#{DIR_PATH}/source_dir/sub/file_#{i}.txt"
          manage directory
          expected_files["sub/file_#{i}.txt"] = "sub_file_#{i}_source"
          "sub_file_#{i}_source"
        end
      end

      directory "#{DIR_PATH}/dest_dir" do
        recursively
        without backup
        "#{DIR_PATH}/source_dir"
      end
    end

    expected_files.each do |file_path, content|
      assert File.file?("#{DIR_PATH}/dest_dir/#{file_path}")
      assert_equal content, File.read("#{DIR_PATH}/dest_dir/#{file_path}")
    end

    actual_files = (Dir["#{DIR_PATH}/dest_dir/*"] + Dir["#{DIR_PATH}/dest_dir/*/*"]).select { File.file?(_1) }
    actual_files.each do |file_path|
      key = file_path.sub("#{DIR_PATH}/dest_dir/", '')
      assert expected_files.key?(key)
      assert_equal File.read(file_path), expected_files[key]
    end
  end
end