aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/dispatch/uploaded_file_test.rb
blob: 03e5274541cf9dc6dabcd7f5f35164529130c796 (plain) (blame)
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
# frozen_string_literal: true

require "abstract_unit"
require "tempfile"
require "stringio"

module ActionDispatch
  class UploadedFileTest < ActiveSupport::TestCase
    def test_constructor_with_argument_error
      assert_raises(ArgumentError) do
        Http::UploadedFile.new({})
      end
    end

    def test_original_filename
      uf = Http::UploadedFile.new(filename: "foo", tempfile: Tempfile.new)
      assert_equal "foo", uf.original_filename
    end

    def test_filename_is_different_object
      file_str = "foo"
      uf = Http::UploadedFile.new(filename: file_str, tempfile: Tempfile.new)
      assert_not_equal file_str.object_id, uf.original_filename.object_id
    end

    def test_filename_should_be_in_utf_8
      uf = Http::UploadedFile.new(filename: "foo", tempfile: Tempfile.new)
      assert_equal "UTF-8", uf.original_filename.encoding.to_s
    end

    def test_filename_should_always_be_in_utf_8
      uf = Http::UploadedFile.new(filename: "foo".encode(Encoding::SHIFT_JIS),
                                  tempfile: Tempfile.new)
      assert_equal "UTF-8", uf.original_filename.encoding.to_s
    end

    def test_content_type
      uf = Http::UploadedFile.new(type: "foo", tempfile: Tempfile.new)
      assert_equal "foo", uf.content_type
    end

    def test_headers
      uf = Http::UploadedFile.new(head: "foo", tempfile: Tempfile.new)
      assert_equal "foo", uf.headers
    end

    def test_tempfile
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal tf, uf.tempfile
    end

    def test_to_io_returns_file
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal tf.to_io, uf.to_io
    end

    def test_delegates_path_to_tempfile
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal tf.path, uf.path
    end

    def test_delegates_open_to_tempfile
      tf = Tempfile.new
      tf.close
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal tf, uf.open
      assert_not tf.closed?
    end

    def test_delegates_close_to_tempfile
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      uf.close
      assert tf.closed?
    end

    def test_close_accepts_parameter
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      uf.close(true)
      assert tf.closed?
      assert_nil tf.path
    end

    def test_delegates_read_to_tempfile
      tf = Tempfile.new
      tf << "thunderhorse"
      tf.rewind
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal "thunderhorse", uf.read
    end

    def test_delegates_read_to_tempfile_with_params
      tf = Tempfile.new
      tf << "thunderhorse"
      tf.rewind
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal "thunder", uf.read(7)
      assert_equal "horse",   uf.read(5, String.new)
    end

    def test_delegate_eof_to_tempfile
      tf = Tempfile.new
      tf << "thunderhorse"
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal true, uf.eof?
      tf.rewind
      assert_equal false, uf.eof?
    end

    def test_delegate_to_path_to_tempfile
      tf = Tempfile.new
      uf = Http::UploadedFile.new(tempfile: tf)
      assert_equal tf.to_path, uf.to_path
    end

    def test_io_copy_stream
      tf = Tempfile.new
      tf << "thunderhorse"
      tf.rewind
      uf = Http::UploadedFile.new(tempfile: tf)
      result = StringIO.new
      IO.copy_stream(uf, result)
      assert_equal "thunderhorse", result.string
    end
  end
end