File: test_static_file.rb

package info (click to toggle)
jekyll 3.1.6%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 3,820 kB
  • ctags: 997
  • sloc: ruby: 10,045; sh: 145; xml: 59; makefile: 28
file content (132 lines) | stat: -rw-r--r-- 4,454 bytes parent folder | download
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
require 'helper'

class TestStaticFile < JekyllUnitTest
  def make_dummy_file(filename)
    File.write(source_dir(filename), "some content")
  end

  def modify_dummy_file(filename)
    offset = "some content".size
    File.write(source_dir(filename), "more content", offset)
  end

  def remove_dummy_file(filename)
    File.delete(source_dir(filename))
  end

  def setup_static_file(base, dir, name)
    StaticFile.new(@site, base, dir, name)
  end

  def setup_static_file_with_collection(base, dir, name, label, metadata)
    site = fixture_site('collections' => {label => metadata})
    StaticFile.new(site, base, dir, name, site.collections[label])
  end

  def setup_static_file_with_defaults(base, dir, name, defaults)
    site = fixture_site('defaults' => defaults)
    StaticFile.new(site, base, dir, name)
  end

  context "A StaticFile" do
    setup do
      clear_dest
      @old_pwd = Dir.pwd
      Dir.chdir source_dir
      @site = fixture_site
      @filename = "static_file.txt"
      make_dummy_file(@filename)
      @static_file = setup_static_file(nil, nil, @filename)
    end

    teardown do
      remove_dummy_file(@filename) if File.exist?(source_dir(@filename))
      Dir.chdir @old_pwd
    end

    should "have a source file path" do
      static_file = setup_static_file("root", "dir", @filename)
      assert_equal "root/dir/#{@filename}", static_file.path
    end

    should "ignore a nil base or dir" do
      assert_equal "dir/#{@filename}", setup_static_file(nil, "dir", @filename).path
      assert_equal "base/#{@filename}", setup_static_file("base", nil, @filename).path
    end

    should "have a destination relative directory without a collection" do
      static_file = setup_static_file("root", "dir/subdir", "file.html")
      assert_equal nil, static_file.type
      assert_equal "dir/subdir/file.html", static_file.url
      assert_equal "dir/subdir", static_file.destination_rel_dir
    end

    should "have a destination relative directory with a collection" do
      static_file = setup_static_file_with_collection(
        "root", "_foo/dir/subdir", "file.html", "foo", {"output" => true})
      assert_equal :foo, static_file.type
      assert_equal "/foo/dir/subdir/file.html", static_file.url
      assert_equal "/foo/dir/subdir", static_file.destination_rel_dir
    end

    should "use its collection's permalink template for the destination relative directory" do
      static_file = setup_static_file_with_collection(
        "root", "_foo/dir/subdir", "file.html", "foo",
        {"output" => true, "permalink" => "/:path/"})
      assert_equal :foo, static_file.type
      assert_equal "/dir/subdir/file.html", static_file.url
      assert_equal "/dir/subdir", static_file.destination_rel_dir
    end

    should "be writable by default" do
      static_file = setup_static_file("root", "dir/subdir", "file.html")
      assert(static_file.write?,
        "static_file.write? should return true by default")
    end

    should "use the _config.yml defaults to determine writability" do
      defaults = [{
        "scope" => {"path" => "private"},
        "values" => {"published" => false}
      }]
      static_file = setup_static_file_with_defaults(
        "root", "private/dir/subdir", "file.html", defaults)
      assert(!static_file.write?,
        "static_file.write? should return false when _config.yml sets " +
        "`published: false`")
    end

    should "know its last modification time" do
      assert_equal Time.new.to_i, @static_file.mtime
    end

    should "known if the source path is modified, when it is" do
      sleep 1
      modify_dummy_file(@filename)
      assert @static_file.modified?
    end

    should "known if the source path is modified, when its not" do
      @static_file.write(dest_dir)
      sleep 1 # wait, else the times are still the same
      assert !@static_file.modified?
    end

    should "known whether to write the file to the filesystem" do
      assert @static_file.write?, "always true, with current implementation"
    end

    should "be able to write itself to the desitination direcotry" do
      assert @static_file.write(dest_dir)
    end

    should "be able to convert to liquid" do
      expected = {
          "extname"       => ".txt",
          "modified_time" => @static_file.modified_time,
          "path"          => "/static_file.txt",
      }
      assert_equal expected, @static_file.to_liquid
    end
  end
end