vzaar_api 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.rspec +4 -0
- data/.tool-versions +1 -0
- data/.travis.yml +3 -0
- data/Changelog +50 -0
- data/Gemfile +3 -0
- data/Guardfile +25 -0
- data/README.md +55 -0
- data/Rakefile +26 -0
- data/examples/README.md +33 -0
- data/examples/api_envs.yml.example +31 -0
- data/examples/category/create_update_delete_spec.rb +100 -0
- data/examples/category/list_spec.rb +38 -0
- data/examples/category/list_subtree_spec.rb +40 -0
- data/examples/category/lookup_spec.rb +35 -0
- data/examples/encoding_preset/list_spec.rb +38 -0
- data/examples/encoding_preset/lookup_spec.rb +35 -0
- data/examples/ingest_recipe/create_update_delete_spec.rb +70 -0
- data/examples/ingest_recipe/list_spec.rb +38 -0
- data/examples/ingest_recipe/lookup_spec.rb +35 -0
- data/examples/playlist/create_update_delete_spec.rb +97 -0
- data/examples/playlist/list_spec.rb +37 -0
- data/examples/playlist/lookup_spec.rb +34 -0
- data/examples/rate_limit_spec.rb +18 -0
- data/examples/spec_helper.rb +17 -0
- data/examples/support/helpers.rb +16 -0
- data/examples/support/videos/medium.mp4 +0 -0
- data/examples/support/videos/small.mp4 +0 -0
- data/examples/video/create_update_delete_spec.rb +73 -0
- data/lib/vzaar_api/abstract.rb +9 -0
- data/lib/vzaar_api/category.rb +39 -0
- data/lib/vzaar_api/encoding_preset.rb +19 -0
- data/lib/vzaar_api/ingest_recipe.rb +35 -0
- data/lib/vzaar_api/legacy_rendition.rb +11 -0
- data/lib/vzaar_api/lib/active_object.rb +92 -0
- data/lib/vzaar_api/lib/api.rb +54 -0
- data/lib/vzaar_api/lib/api_response.rb +61 -0
- data/lib/vzaar_api/lib/has_attributes.rb +49 -0
- data/lib/vzaar_api/lib/has_collection_builder.rb +17 -0
- data/lib/vzaar_api/lib/has_resource_url.rb +24 -0
- data/lib/vzaar_api/lib/paged_resource.rb +80 -0
- data/lib/vzaar_api/lib/will_paginate.rb +22 -0
- data/lib/vzaar_api/link_upload.rb +14 -0
- data/lib/vzaar_api/playlist.rb +29 -0
- data/lib/vzaar_api/rendition.rb +16 -0
- data/lib/vzaar_api/signature/abstract.rb +40 -0
- data/lib/vzaar_api/signature/factory.rb +39 -0
- data/lib/vzaar_api/signature/multipart.rb +23 -0
- data/lib/vzaar_api/signature/single.rb +17 -0
- data/lib/vzaar_api/strategy/video/create.rb +46 -0
- data/lib/vzaar_api/upload/s3.rb +90 -0
- data/lib/vzaar_api/upload/virtual_file.rb +14 -0
- data/lib/vzaar_api/version.rb +4 -0
- data/lib/vzaar_api/video.rb +38 -0
- data/lib/vzaar_api.rb +60 -0
- data/spec/fixtures/vcr_cassettes/categories/each_item.yml +363 -0
- data/spec/fixtures/vcr_cassettes/categories/find.yml +61 -0
- data/spec/fixtures/vcr_cassettes/categories/find_404.yml +49 -0
- data/spec/fixtures/vcr_cassettes/categories/paginate_first.yml +61 -0
- data/spec/fixtures/vcr_cassettes/categories/paginate_last.yml +119 -0
- data/spec/fixtures/vcr_cassettes/categories/paginate_next.yml +120 -0
- data/spec/fixtures/vcr_cassettes/categories/paginate_previous.yml +120 -0
- data/spec/fixtures/vcr_cassettes/categories/subtree.yml +127 -0
- data/spec/fixtures/vcr_cassettes/categories/subtree_paginate_first.yml +123 -0
- data/spec/fixtures/vcr_cassettes/categories/subtree_paginate_last.yml +185 -0
- data/spec/fixtures/vcr_cassettes/categories/subtree_paginate_next.yml +184 -0
- data/spec/fixtures/vcr_cassettes/categories/subtree_paginate_previous.yml +184 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/each_item.yml +299 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/find.yml +62 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/find_404.yml +51 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/paginate_first.yml +62 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/paginate_last.yml +121 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/paginate_next.yml +121 -0
- data/spec/fixtures/vcr_cassettes/encoding_presets/paginate_previous.yml +121 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/create_200.yml +63 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/create_422.yml +52 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/delete_204.yml +166 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/delete_422.yml +112 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/each_item.yml +182 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/find.yml +62 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/find_404.yml +51 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/paginate_first.yml +62 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/paginate_last.yml +122 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/paginate_next.yml +121 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/paginate_previous.yml +122 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/update_200.yml +242 -0
- data/spec/fixtures/vcr_cassettes/ingest_recipes/update_422.yml +113 -0
- data/spec/fixtures/vcr_cassettes/playlists/each_item.yml +607 -0
- data/spec/fixtures/vcr_cassettes/playlists/find.yml +66 -0
- data/spec/fixtures/vcr_cassettes/playlists/find_404.yml +51 -0
- data/spec/fixtures/vcr_cassettes/playlists/paginate_first.yml +74 -0
- data/spec/fixtures/vcr_cassettes/playlists/paginate_last.yml +146 -0
- data/spec/fixtures/vcr_cassettes/playlists/paginate_next.yml +145 -0
- data/spec/fixtures/vcr_cassettes/playlists/paginate_previous.yml +145 -0
- data/spec/fixtures/vcr_cassettes/signature/multipart_201.yml +62 -0
- data/spec/fixtures/vcr_cassettes/signature/multipart_422.yml +52 -0
- data/spec/fixtures/vcr_cassettes/signature/single_201.yml +62 -0
- data/spec/fixtures/vcr_cassettes/signature/single_422.yml +51 -0
- data/spec/fixtures/vcr_cassettes/upload/multipart_201.yml +279868 -0
- data/spec/fixtures/vcr_cassettes/upload/multipart_403.yml +116578 -0
- data/spec/fixtures/vcr_cassettes/upload/single_201.yml +23388 -0
- data/spec/fixtures/vcr_cassettes/upload/single_403.yml +23374 -0
- data/spec/fixtures/vcr_cassettes/videos/create/error.yml +51 -0
- data/spec/fixtures/vcr_cassettes/videos/create/guid_201.yml +65 -0
- data/spec/fixtures/vcr_cassettes/videos/create/guid_error.yml +52 -0
- data/spec/fixtures/vcr_cassettes/videos/create/link_201.yml +65 -0
- data/spec/fixtures/vcr_cassettes/videos/create/link_error.yml +51 -0
- data/spec/fixtures/vcr_cassettes/videos/create/path_201.yml +23509 -0
- data/spec/fixtures/vcr_cassettes/videos/delete_204.yml +168 -0
- data/spec/fixtures/vcr_cassettes/videos/find.yml +66 -0
- data/spec/fixtures/vcr_cassettes/videos/find_404.yml +51 -0
- data/spec/fixtures/vcr_cassettes/videos/paginate_first.yml +71 -0
- data/spec/fixtures/vcr_cassettes/videos/paginate_last.yml +137 -0
- data/spec/fixtures/vcr_cassettes/videos/paginate_next.yml +139 -0
- data/spec/fixtures/vcr_cassettes/videos/paginate_previous.yml +139 -0
- data/spec/spec_helper.rb +103 -0
- data/spec/support/files/video-1.0MB.mp4 +0 -0
- data/spec/support/files/video-12.0MB.mp4 +0 -0
- data/spec/support/files/video-4.9MB.mp4 +0 -0
- data/spec/support/files/video-5.0MB.mp4 +0 -0
- data/spec/support/helpers.rb +16 -0
- data/spec/vzaar_api/category_spec.rb +141 -0
- data/spec/vzaar_api/encoding_preset_spec.rb +92 -0
- data/spec/vzaar_api/ingest_recipe_spec.rb +197 -0
- data/spec/vzaar_api/lib/api_spec.rb +28 -0
- data/spec/vzaar_api/playlist_spec.rb +97 -0
- data/spec/vzaar_api/rendition_spec.rb +55 -0
- data/spec/vzaar_api/signature/factory_spec.rb +68 -0
- data/spec/vzaar_api/signature/multipart_spec.rb +81 -0
- data/spec/vzaar_api/signature/single_spec.rb +72 -0
- data/spec/vzaar_api/upload/s3_spec.rb +112 -0
- data/spec/vzaar_api/video_spec.rb +248 -0
- data/spec/vzaar_api/vzaar_api_spec.rb +18 -0
- data/spec/vzaar_api_helper.rb +19 -0
- data/vzaar.png +0 -0
- data/vzaar_api.gemspec +35 -0
- metadata +413 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: a66c41aa22b7ac34c00d55f887bd51e67f477326
|
|
4
|
+
data.tar.gz: aabba334cffe595e17690a893a0eabc8a5a0dc3f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 8d39461adbe0756c34809fb76ca493fb1686d74ab3f4910c2cbfdb1340fc38255b5647f4d91c1cb10cdcd956e82146003f307659ec59ca7c4df97b1ad5d09c15
|
|
7
|
+
data.tar.gz: 4159a4a63fa90ef7f28306bd045fe6dda90828ee137bc2eaa7265cb158dc0e33870d5dc3b5245d273f2378dc39076a148f1732b28966945be56ec8fb37e4af71
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.tool-versions
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
ruby 2.3.0
|
data/.travis.yml
ADDED
data/Changelog
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
[2.0.0] 2017-07-13 Alan Oliver <alan@vzaar.com>
|
|
2
|
+
|
|
3
|
+
* Version 2.0.0 of the gem released, this gem version contains BREAKING
|
|
4
|
+
CHANGES.
|
|
5
|
+
* This gem uses version 2 of the vzaar API, providing a simpler, cleaner way
|
|
6
|
+
to interact with vzaar.
|
|
7
|
+
* The Gem has been fully rewritten to conform to the new API.
|
|
8
|
+
* You can see documentation of the new API at our new developer hub at
|
|
9
|
+
https://developer.vzaar.com/docs
|
|
10
|
+
|
|
11
|
+
[1.6.2] 2016-05-19 EJ <ed@vzaar.com>
|
|
12
|
+
|
|
13
|
+
* add metadata to signature API call and S3 uploads
|
|
14
|
+
|
|
15
|
+
[1.6.1] 2016-04-21 EJ <ed@vzaar.com>
|
|
16
|
+
|
|
17
|
+
* escape ampersands in filename when sending signature request
|
|
18
|
+
|
|
19
|
+
[1.6.0] 2016-03-03 EJ <ed@vzaar.com>
|
|
20
|
+
|
|
21
|
+
* support for chunked uploads
|
|
22
|
+
|
|
23
|
+
[1.5.3] 2015-07-07 Raz Itzhakian <raz.itzhakian@fiverr.com>
|
|
24
|
+
|
|
25
|
+
* timeout option added for API calls
|
|
26
|
+
|
|
27
|
+
[1.5.2] 2015-03-30 JC <jozef@vzaar.com>
|
|
28
|
+
|
|
29
|
+
* call CGI.escape against link_upload/url and video/seo_url params
|
|
30
|
+
|
|
31
|
+
[1.5.1] 2015-03-27 JC <jozef@vzaar.com>
|
|
32
|
+
|
|
33
|
+
* escaping special chars from xml added
|
|
34
|
+
|
|
35
|
+
2015-02-19 JC <jozef@vzaar.com>
|
|
36
|
+
|
|
37
|
+
* renditions added to Vzaar::Resource::Video
|
|
38
|
+
|
|
39
|
+
2015-02-16 JC <jozef@vzaar.com>
|
|
40
|
+
|
|
41
|
+
* private and seo_url params added to api#edit_video
|
|
42
|
+
* API specs improved for edit_video/json
|
|
43
|
+
|
|
44
|
+
2015-01-21 JC <jozef@vzaar.com>
|
|
45
|
+
|
|
46
|
+
* API specs added for edit/delete http verbs
|
|
47
|
+
|
|
48
|
+
2015-01-14 JC <jozef@vzaar.com>
|
|
49
|
+
|
|
50
|
+
* changelog added
|
data/Gemfile
ADDED
data/Guardfile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
guard :rspec, cmd: "bundle exec rspec", all_on_start: true do
|
|
2
|
+
require "guard/rspec/dsl"
|
|
3
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
|
4
|
+
clearing :on
|
|
5
|
+
|
|
6
|
+
# Feel free to open issues for suggestions and improvements
|
|
7
|
+
|
|
8
|
+
# RSpec files
|
|
9
|
+
rspec = dsl.rspec
|
|
10
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
|
11
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
|
12
|
+
watch(rspec.spec_files)
|
|
13
|
+
|
|
14
|
+
# Ruby files
|
|
15
|
+
ruby = dsl.ruby
|
|
16
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
|
17
|
+
|
|
18
|
+
watch(%r{^spec/.+_spec\.rb$})
|
|
19
|
+
watch(%r{^lib/vzaar_api.rb$}) { "spec" }
|
|
20
|
+
watch(%r{^lib/vzaar_api/(.+)\.rb$}) { "spec" }
|
|
21
|
+
watch(%r{^spec/support/(.+)\.rb$}) { 'spec' }
|
|
22
|
+
|
|
23
|
+
watch('spec/vzaar_api_helper.rb') { "spec" }
|
|
24
|
+
watch('spec/spec_helper.rb') { "spec" }
|
|
25
|
+
end
|
data/README.md
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# vzaar API
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
By [vzaar](http://vzaar.com)
|
|
6
|
+
|
|
7
|
+
[](http://travis-ci.org/vzaar/vzaar-api-ruby) [](https://codeclimate.com/github/vzaar/vzaar-api-ruby)
|
|
8
|
+
|
|
9
|
+
vzaar's Ruby client for interacting with version 2 of the [vzaar API](https://vzaar.readme.io/docs).
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
Ruby 2.2+
|
|
14
|
+
|
|
15
|
+
## Installation
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
gem install vzaar --version
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Backwards compatability
|
|
23
|
+
|
|
24
|
+
Versions 1 and 2 of the vzaar API are incompatable with each other. The same applies to the API SDKs. Some functionality available in the version 1 SDK has been deprecated in version 2 and will not be implemented. The version 2 API also has a different authentication mechanism so your existing API key will not work with version 2 SDKs.
|
|
25
|
+
|
|
26
|
+
To ease migration to the version 2 SDK, it is possible to use both versions without any conflicts.
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Vzaar # <= this is version 1
|
|
30
|
+
VzaarApi # <= this is version 2
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Usage
|
|
34
|
+
|
|
35
|
+
Configure your API credentials:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
VzaarApi.auth_token = '<your-auth-token>'
|
|
39
|
+
VzaarApi.client_id = '<your-client-id>'
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Usage instructions and examples are available on [vzaar's documentation site](https://vzaar.readme.io).
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Contributing
|
|
46
|
+
|
|
47
|
+
1. Fork it
|
|
48
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
49
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
50
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
51
|
+
5. Create new Pull Request
|
|
52
|
+
|
|
53
|
+
## License
|
|
54
|
+
|
|
55
|
+
Released under the [MIT License](http://www.opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# uncomment these lines when this library is gemified
|
|
2
|
+
# require 'bundler/gem_tasks'
|
|
3
|
+
# Bundler::GemHelper.install_tasks
|
|
4
|
+
|
|
5
|
+
desc "Run all specs"
|
|
6
|
+
task :default do
|
|
7
|
+
exec 'rspec spec'
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
namespace :spec do
|
|
11
|
+
namespace :api do
|
|
12
|
+
|
|
13
|
+
task :dev do
|
|
14
|
+
exec 'API_ENV=development bundle exec rspec examples'
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
task :qa do
|
|
18
|
+
exec 'API_ENV=qa bundle exec rspec examples'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
task :prod do
|
|
22
|
+
exec 'API_ENV=production bundle exec rspec examples'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
data/examples/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Integration specs
|
|
2
|
+
|
|
3
|
+
## Setup
|
|
4
|
+
|
|
5
|
+
Copy the `api_envs.yml.example` file into the root of this repository.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
cp examples/api_envs.yml.example api_envs.yml
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Then edit your new file with the relevant information for the envionment you wish to target.
|
|
12
|
+
You will need the following to be setup in the relevant account:
|
|
13
|
+
|
|
14
|
+
1. Your category should have at least 3 sub-categories.
|
|
15
|
+
2. Ensure your account has access to the following encoding presets: `2, 3, 4, 5, 6`
|
|
16
|
+
3. You need at least 2 ingest recipes.
|
|
17
|
+
|
|
18
|
+
## Running the examples
|
|
19
|
+
|
|
20
|
+
From the root of this repository:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
# development
|
|
24
|
+
rake spec:api:dev
|
|
25
|
+
|
|
26
|
+
# prodcution
|
|
27
|
+
rake spec:api:prod
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Verifying the results
|
|
31
|
+
|
|
32
|
+
The `Video` examples will upload and process multiple videos. You should always check
|
|
33
|
+
that these videos actually encode as expected.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
development:
|
|
2
|
+
hostname: app.vzaar.localhost
|
|
3
|
+
vd_hostname: view.vzaar.localhost
|
|
4
|
+
category_id:
|
|
5
|
+
encoding_preset_id:
|
|
6
|
+
ingest_recipe:
|
|
7
|
+
default:
|
|
8
|
+
other:
|
|
9
|
+
|
|
10
|
+
account_owner:
|
|
11
|
+
auth_token:
|
|
12
|
+
client_id:
|
|
13
|
+
|
|
14
|
+
intruder:
|
|
15
|
+
auth_token: some-secret
|
|
16
|
+
client_id: naughty
|
|
17
|
+
|
|
18
|
+
production:
|
|
19
|
+
category_id:
|
|
20
|
+
encoding_preset_id:
|
|
21
|
+
ingest_recipe:
|
|
22
|
+
default:
|
|
23
|
+
other:
|
|
24
|
+
|
|
25
|
+
account_owner:
|
|
26
|
+
auth_token:
|
|
27
|
+
client_id:
|
|
28
|
+
|
|
29
|
+
intruder:
|
|
30
|
+
auth_token: some-secret
|
|
31
|
+
client_id: naughty
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Category: Create / Update / Delete' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { Category }
|
|
7
|
+
|
|
8
|
+
context 'when user is authenticated' do
|
|
9
|
+
before { setup_for :account_owner }
|
|
10
|
+
|
|
11
|
+
let(:attrs) { { name: 'new SDK category' } }
|
|
12
|
+
|
|
13
|
+
it 'creates, updates and deletes a resource' do
|
|
14
|
+
# name is required
|
|
15
|
+
expect{described_class.create}.to raise_error(
|
|
16
|
+
Error, "Invalid parameters: name is missing"
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# create new category tree
|
|
20
|
+
category = described_class.create attrs
|
|
21
|
+
expect(category.name).to eq 'new SDK category'
|
|
22
|
+
expect(category.parent_id).to be_nil
|
|
23
|
+
expect(category.depth).to eq 0
|
|
24
|
+
|
|
25
|
+
subcategory = described_class.create attrs.merge(parent_id: category.id)
|
|
26
|
+
expect(subcategory.name).to eq 'new SDK category'
|
|
27
|
+
expect(subcategory.parent_id).to eq category.id
|
|
28
|
+
expect(subcategory.depth).to eq 1
|
|
29
|
+
|
|
30
|
+
subsubcategory = described_class.create attrs.merge(parent_id: subcategory.id)
|
|
31
|
+
expect(subsubcategory.name).to eq 'new SDK category'
|
|
32
|
+
expect(subsubcategory.parent_id).to eq subcategory.id
|
|
33
|
+
expect(subsubcategory.depth).to eq 2
|
|
34
|
+
|
|
35
|
+
expect(described_class.find(category.id).tree_children_count).to eq 2
|
|
36
|
+
expect(described_class.find(category.id).node_children_count).to eq 1
|
|
37
|
+
expect(described_class.find(subcategory.id).node_children_count).to eq 1
|
|
38
|
+
|
|
39
|
+
# can't create subcategories deeper than account will allow
|
|
40
|
+
expect{
|
|
41
|
+
described_class.create(attrs.merge(parent_id: subsubcategory.id))
|
|
42
|
+
}.to raise_error(
|
|
43
|
+
Error, 'Invalid parameters: Validation failed: Category depth must not exceed 3'
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# perform update
|
|
47
|
+
name = "updated at: #{Time.now.utc}"
|
|
48
|
+
category.name = name
|
|
49
|
+
category.save
|
|
50
|
+
expect(category.name).to eq name
|
|
51
|
+
|
|
52
|
+
# move category and children to top level
|
|
53
|
+
subcategory.move_to_root = true
|
|
54
|
+
subcategory.save
|
|
55
|
+
expect(subcategory.parent_id).to be_nil
|
|
56
|
+
expect(subcategory.depth).to eq 0
|
|
57
|
+
expect(described_class.find(subsubcategory.id).depth).to eq 1
|
|
58
|
+
expect(described_class.find(category.id).node_children_count).to eq 0
|
|
59
|
+
|
|
60
|
+
expect(described_class.find(category.id).tree_children_count).to eq 0
|
|
61
|
+
expect(described_class.find(category.id).node_children_count).to eq 0
|
|
62
|
+
expect(described_class.find(subcategory.id).node_children_count).to eq 1
|
|
63
|
+
|
|
64
|
+
# move category and children to a new parent
|
|
65
|
+
subcategory.parent_id = category.id
|
|
66
|
+
subcategory.save
|
|
67
|
+
expect(subcategory.parent_id).to eq category.id
|
|
68
|
+
expect(subcategory.depth).to eq 1
|
|
69
|
+
expect(subsubcategory.depth).to eq 2
|
|
70
|
+
|
|
71
|
+
expect(described_class.find(category.id).tree_children_count).to eq 2
|
|
72
|
+
expect(described_class.find(category.id).node_children_count).to eq 1
|
|
73
|
+
expect(described_class.find(subcategory.id).node_children_count).to eq 1
|
|
74
|
+
|
|
75
|
+
# can't move if it will exceed category depth limit
|
|
76
|
+
new_cat = described_class.create(attrs)
|
|
77
|
+
new_cat.parent_id = subsubcategory.id
|
|
78
|
+
expect{new_cat.save}.to raise_error(
|
|
79
|
+
Error, 'Invalid parameters: Category depth must not exceed 3'
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
# delete categories
|
|
83
|
+
subsubcategory.delete
|
|
84
|
+
expect{ described_class.find(subsubcategory.id) }.to raise_error(
|
|
85
|
+
Error, 'Not found: Resource cannot be found')
|
|
86
|
+
|
|
87
|
+
# deleting parent deletes children
|
|
88
|
+
category.delete
|
|
89
|
+
expect{ described_class.find(category.id) }.to raise_error(
|
|
90
|
+
Error, 'Not found: Resource cannot be found')
|
|
91
|
+
|
|
92
|
+
expect{ described_class.find(subcategory.id) }.to raise_error(
|
|
93
|
+
Error, 'Not found: Resource cannot be found')
|
|
94
|
+
|
|
95
|
+
new_cat.delete # keep things tidy
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Category: List' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { Category }
|
|
7
|
+
|
|
8
|
+
context 'when user is authenticated' do
|
|
9
|
+
before { setup_for :account_owner }
|
|
10
|
+
|
|
11
|
+
describe '#each_item' do
|
|
12
|
+
it 'retrieves the resource list' do
|
|
13
|
+
ids = described_class.each_item.map(&:id)
|
|
14
|
+
expect(ids).not_to be_empty
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#paginate' do
|
|
19
|
+
let(:pager) { described_class.paginate(page: 2, per_page: 1) }
|
|
20
|
+
specify { expect(pager.first.count).to eq 1 }
|
|
21
|
+
specify { expect(pager.next.count).to eq 1 }
|
|
22
|
+
specify { expect(pager.previous.count).to eq 1 }
|
|
23
|
+
specify { expect(pager.last.count).to eq 1 }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'when user is not authenticated' do
|
|
28
|
+
before { setup_for :intruder }
|
|
29
|
+
|
|
30
|
+
it 'raises an error' do
|
|
31
|
+
pager = described_class.paginate
|
|
32
|
+
expect{ pager.first }.to raise_error(
|
|
33
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Category: List' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { Category }
|
|
7
|
+
|
|
8
|
+
let(:category) { described_class.find(id) }
|
|
9
|
+
let(:id) { api_envs['category_id'] }
|
|
10
|
+
|
|
11
|
+
context 'when user is authenticated' do
|
|
12
|
+
before { setup_for :account_owner }
|
|
13
|
+
|
|
14
|
+
describe '#each_item' do
|
|
15
|
+
it 'retrieves the resource list' do
|
|
16
|
+
ids = category.subtree.each_item.map(&:id)
|
|
17
|
+
expect(ids).not_to be_empty
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#paginate' do
|
|
22
|
+
let(:pager) { category.subtree(page: 2, per_page: 1) }
|
|
23
|
+
specify { expect(pager.first.count).to eq 1 }
|
|
24
|
+
specify { expect(pager.next.count).to eq 1 }
|
|
25
|
+
specify { expect(pager.previous.count).to eq 1 }
|
|
26
|
+
specify { expect(pager.last.count).to eq 1 }
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'when user is not authenticated' do
|
|
31
|
+
before { setup_for :intruder }
|
|
32
|
+
|
|
33
|
+
it 'raises an error' do
|
|
34
|
+
expect{ category.subtree }.to raise_error(
|
|
35
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Category: Lookup' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { Category }
|
|
7
|
+
let(:id) { api_envs['category_id'] }
|
|
8
|
+
|
|
9
|
+
context 'when user is authenticated' do
|
|
10
|
+
before { setup_for :account_owner }
|
|
11
|
+
|
|
12
|
+
context 'and resource can be found' do
|
|
13
|
+
subject { described_class.find(id) }
|
|
14
|
+
specify { expect(subject.id).to eq id }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context 'and resource cannot be found' do
|
|
18
|
+
it 'raises an error' do
|
|
19
|
+
expect{ described_class.find(-1) }.to raise_error(
|
|
20
|
+
Error, 'Not found: Resource cannot be found')
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when user is not authenticated' do
|
|
26
|
+
before { setup_for :intruder }
|
|
27
|
+
|
|
28
|
+
it 'raises an error' do
|
|
29
|
+
expect{ described_class.find(id) }.to raise_error(
|
|
30
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Encoding preset: List' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { EncodingPreset }
|
|
7
|
+
|
|
8
|
+
context 'when user is authenticated' do
|
|
9
|
+
before { setup_for :account_owner }
|
|
10
|
+
|
|
11
|
+
describe '#each_item' do
|
|
12
|
+
it 'retrieves the resource list' do
|
|
13
|
+
ids = described_class.each_item.map(&:id)
|
|
14
|
+
expect(ids).not_to be_empty
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#paginate' do
|
|
19
|
+
let(:pager) { described_class.paginate(page: 2, per_page: 1) }
|
|
20
|
+
specify { expect(pager.first.count).to eq 1 }
|
|
21
|
+
specify { expect(pager.next.count).to eq 1 }
|
|
22
|
+
specify { expect(pager.previous.count).to eq 1 }
|
|
23
|
+
specify { expect(pager.last.count).to eq 1 }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'when user is not authenticated' do
|
|
28
|
+
before { setup_for :intruder }
|
|
29
|
+
|
|
30
|
+
it 'raises an error' do
|
|
31
|
+
pager = described_class.paginate
|
|
32
|
+
expect{ pager.first }.to raise_error(
|
|
33
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Encoding preset: Lookup' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { EncodingPreset }
|
|
7
|
+
let(:id) { api_envs['encoding_preset_id'] }
|
|
8
|
+
|
|
9
|
+
context 'when user is authenticated' do
|
|
10
|
+
before { setup_for :account_owner }
|
|
11
|
+
|
|
12
|
+
context 'and resource can be found' do
|
|
13
|
+
subject { described_class.find(id) }
|
|
14
|
+
specify { expect(subject.id).to eq id }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
context 'and resource cannot be found' do
|
|
18
|
+
it 'raises an error' do
|
|
19
|
+
expect{ described_class.find(-1) }.to raise_error(
|
|
20
|
+
Error, 'Not found: Resource cannot be found')
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context 'when user is not authenticated' do
|
|
26
|
+
before { setup_for :intruder }
|
|
27
|
+
|
|
28
|
+
it 'raises an error' do
|
|
29
|
+
expect{ described_class.find(id) }.to raise_error(
|
|
30
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Ingest recipe: Create / Update / Delete' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { IngestRecipe }
|
|
7
|
+
let(:id) { api_envs['ingest_recipe']['default'] }
|
|
8
|
+
let(:other_id) { api_envs['ingest_recipe']['other'] }
|
|
9
|
+
|
|
10
|
+
context 'when user is authenticated' do
|
|
11
|
+
before { setup_for :account_owner }
|
|
12
|
+
|
|
13
|
+
let(:attrs) do
|
|
14
|
+
{
|
|
15
|
+
name: 'new SDK recipe',
|
|
16
|
+
description: 'created by the SDK tests',
|
|
17
|
+
default: true,
|
|
18
|
+
frame_grab_time: 5.5,
|
|
19
|
+
multipass: false,
|
|
20
|
+
generate_animated_thumb: true,
|
|
21
|
+
generate_sprite: true,
|
|
22
|
+
use_watermark: true,
|
|
23
|
+
send_to_youtube: true,
|
|
24
|
+
encoding_preset_ids: [2, 3, 4]
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'creates, updates and deletes a resource' do
|
|
29
|
+
# create new recipe
|
|
30
|
+
recipe = described_class.create attrs
|
|
31
|
+
expect(recipe.name).to eq 'new SDK recipe'
|
|
32
|
+
expect(recipe.default).to eq true
|
|
33
|
+
expect(recipe.encoding_presets.map(&:id)).to match_array [2, 3, 4]
|
|
34
|
+
|
|
35
|
+
# ensure previous default has changed
|
|
36
|
+
expect(described_class.find(id).default).to eq false
|
|
37
|
+
|
|
38
|
+
# perform update
|
|
39
|
+
name = "updated at: #{Time.now.utc}"
|
|
40
|
+
recipe.name = name
|
|
41
|
+
recipe.encoding_preset_ids = [4, 5, 6]
|
|
42
|
+
recipe.save
|
|
43
|
+
expect(recipe.name).to eq name
|
|
44
|
+
expect(recipe.encoding_presets.map(&:id)).to match_array [4, 5, 6]
|
|
45
|
+
|
|
46
|
+
# ensure you cannot unset current default
|
|
47
|
+
recipe.default = false
|
|
48
|
+
expect { recipe.save }.to raise_error(
|
|
49
|
+
Error, 'Invalid parameters: You cannot unflag your default ingest recipe')
|
|
50
|
+
|
|
51
|
+
# restore previous default
|
|
52
|
+
default = described_class.find(id)
|
|
53
|
+
expect(recipe.default).to eq false
|
|
54
|
+
default.default = true
|
|
55
|
+
default.save
|
|
56
|
+
expect(default.default).to eq true
|
|
57
|
+
|
|
58
|
+
# reload original recipe
|
|
59
|
+
recipe = described_class.find(recipe.id)
|
|
60
|
+
expect(recipe.default).to eq false
|
|
61
|
+
|
|
62
|
+
# delete recipe
|
|
63
|
+
recipe.delete
|
|
64
|
+
expect{ described_class.find(recipe.id) }.to raise_error(
|
|
65
|
+
Error, 'Not found: Resource cannot be found')
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative './../spec_helper'
|
|
2
|
+
|
|
3
|
+
module VzaarApi
|
|
4
|
+
describe 'Ingest recipe: List' do
|
|
5
|
+
|
|
6
|
+
let(:described_class) { IngestRecipe }
|
|
7
|
+
|
|
8
|
+
context 'when user is authenticated' do
|
|
9
|
+
before { setup_for :account_owner }
|
|
10
|
+
|
|
11
|
+
describe '#each_item' do
|
|
12
|
+
it 'retrieves the resource list' do
|
|
13
|
+
ids = described_class.each_item.map(&:id)
|
|
14
|
+
expect(ids).not_to be_empty
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe '#paginate' do
|
|
19
|
+
let(:pager) { described_class.paginate(page: 2, per_page: 1) }
|
|
20
|
+
specify { expect(pager.first.count).to eq 1 }
|
|
21
|
+
specify { expect(pager.next.count).to eq 1 }
|
|
22
|
+
specify { expect(pager.previous.count).to eq 1 }
|
|
23
|
+
specify { expect(pager.last.count).to eq 1 }
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'when user is not authenticated' do
|
|
28
|
+
before { setup_for :intruder }
|
|
29
|
+
|
|
30
|
+
it 'raises an error' do
|
|
31
|
+
pager = described_class.paginate
|
|
32
|
+
expect{ pager.first }.to raise_error(
|
|
33
|
+
Error, 'Authentication failed: Invalid credentials')
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|