wgif 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,207 +0,0 @@
1
- require 'spec_helper'
2
- require 'wgif/cli'
3
-
4
- describe WGif::CLI do
5
- let(:cli) { described_class.new }
6
-
7
- it 'parses a URL from command line args' do
8
- args = cli.parse_args ["http://example.com"]
9
- args[:url].should eq("http://example.com")
10
- end
11
-
12
- it 'starts at 0s by default' do
13
- args = cli.parse_args ["http://example.com"]
14
- args[:trim_from].should eq("00:00:00")
15
- end
16
-
17
- it 'trims clips to 1s by default' do
18
- args = cli.parse_args ["http://example.com"]
19
- args[:duration].should eq(1)
20
- end
21
-
22
- it 'parses the short frame count option' do
23
- options = cli.parse_options ["-f", "40"]
24
- options[:frames].should eq(40)
25
- end
26
-
27
- it 'parses the long frame count option' do
28
- options = cli.parse_options ["--frames", "40"]
29
- options[:frames].should eq(40)
30
- end
31
-
32
- it 'parses the short start time option' do
33
- options = cli.parse_options ["-s", "00:00:05"]
34
- options[:trim_from].should eq("00:00:05")
35
- end
36
-
37
- it 'parses the long start time option' do
38
- options = cli.parse_options ["--start", "00:00:05"]
39
- options[:trim_from].should eq("00:00:05")
40
- end
41
-
42
- it 'parses the short duration option' do
43
- options = cli.parse_options ["-d", "1.43"]
44
- options[:duration].should eq(1.43)
45
- end
46
-
47
- it 'parses the long duration option' do
48
- options = cli.parse_options ["--duration", "5.3"]
49
- options[:duration].should eq(5.3)
50
- end
51
-
52
- it 'parses the short dimensions option' do
53
- options = cli.parse_options ["-w", "400"]
54
- expect(options[:dimensions]).to eq("400")
55
- end
56
-
57
- it 'parses the long dimensions option' do
58
- options = cli.parse_options ["--width", "300"]
59
- expect(options[:dimensions]).to eq("300")
60
- end
61
-
62
- it 'parses the short upload option' do
63
- options = cli.parse_options ["-u"]
64
- expect(options[:upload]).to eq(true)
65
- end
66
-
67
- it 'parses the long upload option' do
68
- options = cli.parse_options ["--upload"]
69
- expect(options[:upload]).to eq(true)
70
- end
71
-
72
- it 'handles args in wacky order' do
73
- args = cli.parse_args([
74
- "-d",
75
- "1.5",
76
- "http://example.com",
77
- "--frames",
78
- "60",
79
- "my-great-gif.gif",
80
- "-s",
81
- "00:00:05"])
82
-
83
- expect(args).to eq(url: "http://example.com",
84
- trim_from: "00:00:05",
85
- duration: 1.5,
86
- frames: 60,
87
- output: "my-great-gif.gif",
88
- dimensions: "480")
89
- end
90
-
91
- context 'validating args' do
92
-
93
- it 'checks for a missing output file' do
94
- args = cli.parse_args([
95
- "http://example.com",
96
- ])
97
- expect{ cli.validate_args args }.to raise_error(WGif::MissingOutputFileException)
98
- end
99
-
100
- it 'checks for an invalid URL' do
101
- args = cli.parse_args([
102
- "crazy nonsense",
103
- "output.gif"
104
- ])
105
- expect{ cli.validate_args args }.to raise_error(WGif::InvalidUrlException)
106
- end
107
-
108
- it 'checks for an invalid timestamp' do
109
- args = cli.parse_args([
110
- "http://lol.wut",
111
- "output.gif",
112
- "-s",
113
- "rofl"
114
- ])
115
- expect{ cli.validate_args args }.to raise_error(WGif::InvalidTimestampException)
116
- end
117
-
118
- it 'returns true when args are OK' do
119
- args = cli.parse_args([
120
- "https://crazynonsense.info",
121
- "output.gif"
122
- ])
123
- expect{ cli.validate_args args }.not_to raise_error
124
- end
125
- end
126
-
127
- context 'error handling' do
128
-
129
- before do
130
- @mock_stdout = StringIO.new
131
- @real_stdout, $stdout = $stdout, @mock_stdout
132
- end
133
-
134
- after do
135
- $stdout = @real_stdout
136
- end
137
-
138
- def expect_help_with_message(out, message)
139
- expect(out).to include(message)
140
- expect(out).to include('Usage: wgif [YouTube URL] [output file] [options]')
141
- cli.parser.summarize.each do |help_info|
142
- expect(out).to include(help_info)
143
- end
144
- expect(out).to include('Example:')
145
- end
146
-
147
- it 'catches invalid URLs' do
148
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::InvalidUrlException)
149
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
150
- expect_help_with_message(@mock_stdout.string, 'That looks like an invalid URL. Check the syntax.')
151
- end
152
-
153
- it 'catches invalid timestamps' do
154
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::InvalidTimestampException)
155
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
156
- expect_help_with_message(@mock_stdout.string, 'That looks like an invalid timestamp. Check the syntax.')
157
- end
158
-
159
- it 'catches missing output args' do
160
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::MissingOutputFileException)
161
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
162
- expect_help_with_message(@mock_stdout.string, 'Please specify an output file.')
163
- end
164
-
165
- it 'catches missing videos' do
166
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::VideoNotFoundException)
167
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
168
- expect_help_with_message(@mock_stdout.string, "WGif can't find a valid YouTube video at that URL.")
169
- end
170
-
171
- it 'catches encoding exceptions' do
172
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::ClipEncodingException)
173
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
174
- expect_help_with_message(@mock_stdout.string, "WGif encountered an error transcoding the video.")
175
- end
176
-
177
- it 'catches upload errors' do
178
- OptionParser.any_instance.stub(:parse!).and_raise(WGif::ImgurException, "Imgur error")
179
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
180
- expect_help_with_message(@mock_stdout.string, "Imgur error")
181
- end
182
-
183
- it 'raises SystemExit when thrown' do
184
- OptionParser.any_instance.stub(:parse!).and_raise(SystemExit)
185
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
186
- end
187
-
188
- it 'Prints the backtrace for all other exceptions' do
189
- exception = Exception.new 'crazy error'
190
- OptionParser.any_instance.stub(:parse!).and_raise(exception)
191
- expect{ cli.make_gif([]) }.to raise_error(SystemExit)
192
- expect_help_with_message(@mock_stdout.string, 'Something went wrong creating your GIF. The details:')
193
- expect(@mock_stdout.string).to include('Please open an issue')
194
- expect(@mock_stdout.string).to include("#{exception}")
195
- expect(@mock_stdout.string).to include(exception.backtrace.join("\n"))
196
- end
197
-
198
- it 'prints help information' do
199
- expect{ cli.make_gif(['-h']) }.to raise_error(SystemExit)
200
- cli.parser.summarize.each do |help_info|
201
- expect(@mock_stdout.string).to include(help_info)
202
- end
203
- end
204
-
205
- end
206
-
207
- end
@@ -1,44 +0,0 @@
1
- require 'json'
2
- require 'spec_helper'
3
- require 'typhoeus'
4
- require 'wgif/uploader'
5
-
6
- describe WGif::Uploader do
7
- let(:api_key) { 'api-key' }
8
- let(:uploader) { WGif::Uploader.new(api_key) }
9
- let(:success) { Typhoeus::Response.new(
10
- response_code: 200,
11
- return_code: :ok,
12
- body: {data: {link: 'foo'}}.to_json)
13
- }
14
-
15
- let(:failure) { Typhoeus::Response.new(
16
- response_code: 400,
17
- return_code: :error,
18
- body: {data: {error: 'You should be ashamed of yourself.'}}.to_json )
19
- }
20
- let(:tempfile) { Tempfile.new('whatever') }
21
- let(:request_params) { {body: {image: tempfile},
22
- headers: {Authorization: "Client-ID #{api_key}"}} }
23
-
24
- it 'sends an authorized POST request to Imgur with image file data' do
25
- File.stub(:open).and_yield(tempfile)
26
- expect(Typhoeus).to receive(:post).
27
- with('https://api.imgur.com/3/image', request_params).and_return(success)
28
- uploader.upload(tempfile.path)
29
- end
30
-
31
- it 'raises an exception if request is not successful' do
32
- Typhoeus.stub(/http/).and_return(failure)
33
- expect{ uploader.upload(tempfile.path) }.
34
- to raise_error(WGif::ImgurException, 'You should be ashamed of yourself.')
35
- end
36
-
37
- it 'returns the url when successful' do
38
- File.stub(:open).and_yield(tempfile)
39
- expect(Typhoeus).to receive(:post).
40
- with('https://api.imgur.com/3/image', request_params).and_return(success)
41
- expect(uploader.upload(tempfile.path)).to eq("foo")
42
- end
43
-
44
- end